@tricoteuses/assemblee 1.7.0 → 1.7.2

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 (127) hide show
  1. package/README.md +9 -27
  2. package/lib/bugs/acteur-00010/plugin.test.js +4 -4
  3. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  4. package/lib/bugs/acteur-00010.js +15 -16
  5. package/lib/bugs/acteur-00010.mjs +1 -1
  6. package/lib/bugs/agenda-00002/plugin.test.js +4 -4
  7. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -1
  8. package/lib/bugs/agenda-00002.js +27 -28
  9. package/lib/bugs/agenda-00002.mjs +3 -3
  10. package/lib/bugs/agenda-00008/plugin.test.js +4 -4
  11. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  12. package/lib/bugs/agenda-00008.js +15 -16
  13. package/lib/bugs/agenda-00008.mjs +1 -1
  14. package/lib/bugs/agenda-00011/plugin.test.js +5 -5
  15. package/lib/bugs/agenda-00011/plugin.test.mjs +1 -1
  16. package/lib/bugs/agenda-00011.js +21 -22
  17. package/lib/bugs/agenda-00011.mjs +3 -3
  18. package/lib/bugs.js +17 -19
  19. package/lib/bugs.mjs +3 -3
  20. package/lib/cleaners/actes_legislatifs.js +5 -5
  21. package/lib/cleaners/acteurs.js +5 -5
  22. package/lib/cleaners/acteurs.mjs +1 -1
  23. package/lib/cleaners/amendements.js +5 -5
  24. package/lib/cleaners/documents.js +5 -5
  25. package/lib/cleaners/dossiers_legislatifs.js +5 -5
  26. package/lib/cleaners/organes.js +2 -2
  27. package/lib/cleaners/reunions.js +5 -5
  28. package/lib/cleaners/scrutins.js +8 -8
  29. package/lib/cleaners/xml.js +8 -8
  30. package/lib/cleaners/xml.mjs +1 -1
  31. package/lib/datasets.d.ts +2 -2
  32. package/lib/datasets.js +53 -132
  33. package/lib/datasets.mjs +40 -118
  34. package/lib/dates.js +1 -2
  35. package/lib/dossiers_legislatifs.js +8 -8
  36. package/lib/file_systems.js +18 -16
  37. package/lib/file_systems.mjs +6 -5
  38. package/lib/git.d.ts +1 -0
  39. package/lib/git.js +21 -5
  40. package/lib/git.mjs +16 -1
  41. package/lib/inserters.js +3 -3
  42. package/lib/loaders.d.ts +14 -40
  43. package/lib/loaders.js +580 -1086
  44. package/lib/loaders.mjs +110 -353
  45. package/lib/parsers/documents.js +10 -10
  46. package/lib/parsers/documents.mjs +1 -1
  47. package/lib/parsers/recherche_amendements.js +17 -15
  48. package/lib/parsers/recherche_amendements.mjs +1 -1
  49. package/lib/raw_types/acteurs_et_organes.js +9 -9
  50. package/lib/raw_types/acteurs_et_organes.mjs +1 -1
  51. package/lib/raw_types/agendas.js +9 -9
  52. package/lib/raw_types/agendas.mjs +1 -1
  53. package/lib/raw_types/amendements.js +9 -9
  54. package/lib/raw_types/amendements.mjs +1 -1
  55. package/lib/raw_types/debats.d.ts +26 -78
  56. package/lib/raw_types/debats.js +49 -242
  57. package/lib/raw_types/debats.mjs +41 -234
  58. package/lib/raw_types/dossiers_legislatifs.js +9 -9
  59. package/lib/raw_types/dossiers_legislatifs.mjs +1 -1
  60. package/lib/raw_types/questions.js +9 -9
  61. package/lib/raw_types/questions.mjs +1 -1
  62. package/lib/raw_types/scrutins.js +9 -9
  63. package/lib/raw_types/scrutins.mjs +1 -1
  64. package/lib/scripts/bugs_helper.js +17 -18
  65. package/lib/scripts/bugs_helper.mjs +3 -3
  66. package/lib/scripts/clean_reorganized_data.js +183 -561
  67. package/lib/scripts/clean_reorganized_data.mjs +111 -410
  68. package/lib/scripts/diff_amendements.js +11 -24
  69. package/lib/scripts/diff_amendements.mjs +3 -17
  70. package/lib/scripts/document_dossiers_legislatifs.js +24 -27
  71. package/lib/scripts/document_dossiers_legislatifs.mjs +3 -3
  72. package/lib/scripts/get_today_reunions.js +5 -8
  73. package/lib/scripts/get_today_reunions.mjs +3 -7
  74. package/lib/scripts/merge_scrutins.js +11 -24
  75. package/lib/scripts/merge_scrutins.mjs +3 -17
  76. package/lib/scripts/parse_textes_lois.js +8 -38
  77. package/lib/scripts/parse_textes_lois.mjs +3 -33
  78. package/lib/scripts/raw_types_from_amendements.js +14 -27
  79. package/lib/scripts/raw_types_from_amendements.mjs +3 -17
  80. package/lib/scripts/reorganize_data.js +204 -456
  81. package/lib/scripts/reorganize_data.mjs +68 -260
  82. package/lib/scripts/retrieve_deputes_photos.d.ts +3 -1
  83. package/lib/scripts/retrieve_deputes_photos.js +146 -172
  84. package/lib/scripts/retrieve_deputes_photos.mjs +74 -98
  85. package/lib/scripts/retrieve_documents.js +207 -156
  86. package/lib/scripts/retrieve_documents.mjs +116 -128
  87. package/lib/scripts/retrieve_open_data.js +272 -249
  88. package/lib/scripts/retrieve_open_data.mjs +109 -123
  89. package/lib/scripts/retrieve_pending_amendments.js +16 -67
  90. package/lib/scripts/retrieve_pending_amendments.mjs +4 -55
  91. package/lib/scripts/retrieve_senateurs_photos.js +20 -77
  92. package/lib/scripts/retrieve_senateurs_photos.mjs +5 -61
  93. package/lib/scripts/retrieve_textes_lois.js +18 -46
  94. package/lib/scripts/retrieve_textes_lois.mjs +3 -33
  95. package/lib/scripts/shared/cli_helpers.d.ts +66 -0
  96. package/lib/scripts/shared/cli_helpers.js +90 -0
  97. package/lib/scripts/shared/cli_helpers.mjs +72 -0
  98. package/lib/scripts/test_iter_load.d.ts +1 -0
  99. package/lib/scripts/test_iter_load.js +154 -0
  100. package/lib/scripts/test_iter_load.mjs +71 -0
  101. package/lib/scripts/test_load.js +4 -15
  102. package/lib/scripts/test_load.mjs +3 -14
  103. package/lib/scripts/test_load_big_files.js +4 -15
  104. package/lib/scripts/test_load_big_files.mjs +3 -14
  105. package/lib/scripts/validate_json.js +15 -16
  106. package/lib/scripts/validate_json.mjs +3 -3
  107. package/lib/types/acteurs_et_organes.js +9 -9
  108. package/lib/types/acteurs_et_organes.mjs +1 -1
  109. package/lib/types/agendas.js +9 -9
  110. package/lib/types/agendas.mjs +1 -1
  111. package/lib/types/amendements.js +9 -9
  112. package/lib/types/amendements.mjs +1 -1
  113. package/lib/types/debats.d.ts +27 -79
  114. package/lib/types/debats.js +48 -241
  115. package/lib/types/debats.mjs +40 -233
  116. package/lib/types/dossiers_legislatifs.js +9 -9
  117. package/lib/types/dossiers_legislatifs.mjs +1 -1
  118. package/lib/types/legislatures.d.ts +4 -4
  119. package/lib/types/legislatures.js +5 -5
  120. package/lib/types/legislatures.mjs +5 -5
  121. package/lib/types/questions.js +9 -9
  122. package/lib/types/questions.mjs +1 -1
  123. package/lib/types/scrutins.js +9 -9
  124. package/lib/types/scrutins.mjs +1 -1
  125. package/lib/urls.js +2 -2
  126. package/lib/urls.mjs +1 -1
  127. package/package.json +9 -7
package/lib/loaders.mjs CHANGED
@@ -19,384 +19,143 @@ const documentUidRegex = /^((?<documentType>ACIN|ALCN|AVCE|AVIS|DECL|ETDI|LETT|M
19
19
  const dossierUidRegex = /^DL(R\d+)(L\d+)N(\d+)$/;
20
20
  const reunionUidRegex = /^RU(AN|CG|SN)(R\d+)(L\d+)([AS]\d{4})(IDC|IDFL?|IDS)(\d+)$/;
21
21
  const scrutinUidRegex = /^VT(AN|CG)(R\d+)(L\d+)V(\d+)$/;
22
- export function* iterLoadAssembleeActeurs(dataDir, legislature, {
22
+ const compteRenduUidRegex = /^CRS(AN|CG)(R\d+)(L\d+)(S\d+)(O|E)(\d+)(N\d+)$/;
23
+ const questionUidRegex = /^QAN(R\d+)(L\d+)Q(E|G|OSD)(\d+)$/;
24
+ function* iterLoadAssembleeItems(dataDir, legislature, datasets, convertToItem, subfolderName, fileExtension = "json", {
23
25
  noValidation = false,
24
26
  log = false
25
27
  } = {}) {
26
- const acteursUid = new Set();
27
- for (const dataset of datasets.acteursEtOrganes) {
28
+ const itemUid = new Set();
29
+ for (const dataset of datasets) {
28
30
  if (dataset.ignoreForWeb) {
29
31
  continue;
30
32
  }
31
- if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
33
+ if (legislature !== undefined && legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
32
34
  continue;
33
35
  }
34
- const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
35
- for (const acteurSplitPath of walkDir(datasetDir, ["acteurs"])) {
36
- const acteurFilename = acteurSplitPath[acteurSplitPath.length - 1];
37
- if (!acteurFilename.endsWith(".json")) {
36
+ let fileExtensionRegex = new RegExp(`\\.${fileExtension}$`);
37
+ const datasetDir = path.join(dataDir, dataset.filename.replace(fileExtensionRegex, "_nettoye"));
38
+ for (const itemSplitPath of walkDir(datasetDir, subfolderName)) {
39
+ const itemFilename = itemSplitPath[itemSplitPath.length - 1];
40
+ if (!itemFilename.endsWith(".json")) {
38
41
  continue;
39
42
  }
40
- const acteurFilePath = path.join(datasetDir, ...acteurSplitPath);
43
+ const itemFilePath = path.join(datasetDir, ...itemSplitPath);
41
44
  if (log) {
42
- console.log(`Loading file: ${acteurFilePath}…`);
45
+ console.log(`Loading file: ${itemFilePath}…`);
43
46
  }
44
- const acteurJson = fs.readFileSync(acteurFilePath, {
47
+ const itemJson = fs.readFileSync(itemFilePath, {
45
48
  encoding: "utf8"
46
49
  });
47
- let acteur;
48
- if (noValidation) {
49
- acteur = JSON.parse(acteurJson);
50
- } else {
51
- acteur = ActeursEtOrganesConvert.toActeur(acteurJson);
52
- }
53
- // Keep the first existing "acteur", because the first wrapper is the most complete.
54
- if (acteursUid.has(acteur.uid)) {
50
+ let item = noValidation ? JSON.parse(itemJson) : convertToItem(itemJson);
51
+ if (itemUid.has(item.uid)) {
55
52
  continue;
56
53
  }
57
- acteursUid.add(acteur.uid);
54
+ itemUid.add(item.uid);
58
55
  yield {
59
- acteur,
56
+ item: item,
60
57
  datasetLegislature: dataset.legislature
61
58
  };
62
59
  }
63
60
  }
64
61
  }
65
- export function* iterLoadAssembleeAmendements(dataDir, legislature, {
66
- noValidation = false,
67
- log = false
68
- } = {}) {
69
- const amendementsUid = new Set();
70
- for (const dataset of datasets.amendements) {
71
- if (dataset.ignoreForWeb) {
72
- continue;
73
- }
74
- if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
75
- continue;
76
- }
77
- const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
78
- for (const amendementSplitPath of walkDir(datasetDir)) {
79
- const amendementFilename = amendementSplitPath[amendementSplitPath.length - 1];
80
- if (!amendementFilename.endsWith(".json")) {
81
- continue;
82
- }
83
- const amendementFilePath = path.join(datasetDir, ...amendementSplitPath);
84
- if (log) {
85
- console.log(`Loading file: ${amendementFilePath}…`);
86
- }
87
- const amendementJson = fs.readFileSync(amendementFilePath, {
88
- encoding: "utf8"
89
- });
90
- let amendement;
91
- if (noValidation) {
92
- amendement = JSON.parse(amendementJson);
93
- } else {
94
- amendement = AmendementsConvert.toAmendement(amendementJson);
95
- }
96
- if (amendementsUid.has(amendement.uid)) {
97
- continue;
98
- }
99
- amendementsUid.add(amendement.uid);
100
- yield {
101
- amendement,
102
- datasetLegislature: dataset.legislature
103
- };
104
- }
62
+ export function* iterLoadAssembleeActeurs(dataDir, legislature, options = {}) {
63
+ for (const {
64
+ item: acteur,
65
+ datasetLegislature
66
+ } of iterLoadAssembleeItems(dataDir, legislature, datasets.acteursEtOrganes, ActeursEtOrganesConvert.toActeur, ["acteurs"], "json", options)) {
67
+ yield {
68
+ acteur,
69
+ datasetLegislature
70
+ };
105
71
  }
106
72
  }
107
- export function* iterLoadAssembleeDocuments(dataDir, legislature, {
108
- noValidation = false,
109
- log = false
110
- } = {}) {
111
- const documentsUid = new Set();
112
- for (const dataset of datasets.dossiersLegislatifs) {
113
- if (dataset.ignoreForWeb) {
114
- continue;
115
- }
116
- if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
117
- continue;
118
- }
119
- const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
120
- for (const documentSplitPath of walkDir(datasetDir, ["documents"])) {
121
- const documentFilename = documentSplitPath[documentSplitPath.length - 1];
122
- if (!documentFilename.endsWith(".json")) {
123
- continue;
124
- }
125
- const documentFilePath = path.join(datasetDir, ...documentSplitPath);
126
- if (log) {
127
- console.log(`Loading file: ${documentFilePath}…`);
128
- }
129
- const documentJson = fs.readFileSync(documentFilePath, {
130
- encoding: "utf8"
131
- });
132
- let document;
133
- if (noValidation) {
134
- document = JSON.parse(documentJson);
135
- } else {
136
- document = DossiersLegislatifsConvert.toDocument(documentJson);
137
- }
138
- if (documentsUid.has(document.uid)) {
139
- continue;
140
- }
141
- documentsUid.add(document.uid);
142
- yield {
143
- document,
144
- datasetLegislature: dataset.legislature
145
- };
146
- }
73
+ export function* iterLoadAssembleeOrganes(dataDir, legislature, options = {}) {
74
+ for (const {
75
+ item: organe,
76
+ datasetLegislature
77
+ } of iterLoadAssembleeItems(dataDir, legislature, datasets.acteursEtOrganes, ActeursEtOrganesConvert.toOrgane, ["organes"], "json", options)) {
78
+ yield {
79
+ organe,
80
+ datasetLegislature
81
+ };
147
82
  }
148
83
  }
149
- export function* iterLoadAssembleeDossiersParlementaires(dataDir, legislature, {
150
- noValidation = false,
151
- log = false
152
- } = {}) {
153
- const dossiersParlementairesUid = new Set();
154
- for (const dataset of datasets.dossiersLegislatifs) {
155
- if (dataset.ignoreForWeb) {
156
- continue;
157
- }
158
- if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
159
- continue;
160
- }
161
- const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
162
- for (const dossierParlementaireSplitPath of walkDir(datasetDir, ["dossiers"])) {
163
- const dossierParlementaireFilename = dossierParlementaireSplitPath[dossierParlementaireSplitPath.length - 1];
164
- if (!dossierParlementaireFilename.endsWith(".json")) {
165
- continue;
166
- }
167
- const dossierParlementaireFilePath = path.join(datasetDir, ...dossierParlementaireSplitPath);
168
- if (log) {
169
- console.log(`Loading file: ${dossierParlementaireFilePath}…`);
170
- }
171
- const dossierParlementaireJson = fs.readFileSync(dossierParlementaireFilePath, {
172
- encoding: "utf8"
173
- });
174
- let dossierParlementaire;
175
- if (noValidation) {
176
- dossierParlementaire = JSON.parse(dossierParlementaireJson);
177
- } else {
178
- dossierParlementaire = DossiersLegislatifsConvert.toDossierParlementaire(dossierParlementaireJson);
179
- }
180
- if (dossiersParlementairesUid.has(dossierParlementaire.uid)) {
181
- continue;
182
- }
183
- dossiersParlementairesUid.add(dossierParlementaire.uid);
184
- yield {
185
- dossierParlementaire,
186
- datasetLegislature: dataset.legislature
187
- };
188
- }
84
+ export function* iterLoadAssembleeAmendements(dataDir, legislature, options = {}) {
85
+ for (const {
86
+ item: amendement,
87
+ datasetLegislature
88
+ } of iterLoadAssembleeItems(dataDir, legislature, datasets.amendements, AmendementsConvert.toAmendement, [], "json", options)) {
89
+ yield {
90
+ amendement,
91
+ datasetLegislature
92
+ };
189
93
  }
190
94
  }
191
- export function* iterLoadAssembleeOrganes(dataDir, legislature, {
192
- noValidation = false,
193
- log = false
194
- } = {}) {
195
- const organesUid = new Set();
196
- for (const dataset of datasets.acteursEtOrganes) {
197
- if (dataset.ignoreForWeb) {
198
- continue;
199
- }
200
- if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
201
- continue;
202
- }
203
- const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
204
- for (const organeSplitPath of walkDir(datasetDir, ["organes"])) {
205
- const organeFilename = organeSplitPath[organeSplitPath.length - 1];
206
- if (!organeFilename.endsWith(".json")) {
207
- continue;
208
- }
209
- const organeFilePath = path.join(datasetDir, ...organeSplitPath);
210
- if (log) {
211
- console.log(`Loading file: ${organeFilePath}…`);
212
- }
213
- const organeJson = fs.readFileSync(organeFilePath, {
214
- encoding: "utf8"
215
- });
216
- let organe;
217
- if (noValidation) {
218
- organe = JSON.parse(organeJson);
219
- } else {
220
- organe = ActeursEtOrganesConvert.toOrgane(organeJson);
221
- }
222
- // Keep the first existing "organe", because the first wrapper is the most complete.
223
- if (organesUid.has(organe.uid)) {
224
- continue;
225
- }
226
- organesUid.add(organe.uid);
227
- yield {
228
- organe,
229
- datasetLegislature: dataset.legislature
230
- };
231
- }
95
+ export function* iterLoadAssembleeDocuments(dataDir, legislature, options = {}) {
96
+ for (const {
97
+ item: document,
98
+ datasetLegislature
99
+ } of iterLoadAssembleeItems(dataDir, legislature, datasets.dossiersLegislatifs, DossiersLegislatifsConvert.toDocument, ["documents"], "json", options)) {
100
+ yield {
101
+ document,
102
+ datasetLegislature
103
+ };
232
104
  }
233
105
  }
234
- export function* iterLoadAssembleeReunions(dataDir, legislature, {
235
- noValidation = false,
236
- log = false
237
- } = {}) {
238
- const reunionsUid = new Set();
239
- for (const dataset of datasets.agendas) {
240
- if (dataset.ignoreForWeb) {
241
- continue;
242
- }
243
- if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
244
- continue;
245
- }
246
- const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
247
- for (const reunionSplitPath of walkDir(datasetDir)) {
248
- const reunionFilename = reunionSplitPath[reunionSplitPath.length - 1];
249
- if (!reunionFilename.endsWith(".json")) {
250
- continue;
251
- }
252
- const reunionFilePath = path.join(datasetDir, ...reunionSplitPath);
253
- if (log) {
254
- console.log(`Loading file: ${reunionFilePath}…`);
255
- }
256
- const reunionJson = fs.readFileSync(reunionFilePath, {
257
- encoding: "utf8"
258
- });
259
- let reunion;
260
- if (noValidation) {
261
- reunion = JSON.parse(reunionJson);
262
- } else {
263
- reunion = AgendasConvert.toReunion(reunionJson);
264
- }
265
- if (reunionsUid.has(reunion.uid)) {
266
- continue;
267
- }
268
- reunionsUid.add(reunion.uid);
269
- yield {
270
- reunion,
271
- datasetLegislature: dataset.legislature
272
- };
273
- }
106
+ export function* iterLoadAssembleeDossiersParlementaires(dataDir, legislature, options = {}) {
107
+ for (const {
108
+ item: dossierParlementaire,
109
+ datasetLegislature
110
+ } of iterLoadAssembleeItems(dataDir, legislature, datasets.dossiersLegislatifs, DossiersLegislatifsConvert.toDossierParlementaire, ["dossiers"], "json", options)) {
111
+ yield {
112
+ dossierParlementaire,
113
+ datasetLegislature
114
+ };
274
115
  }
275
116
  }
276
- export function* iterLoadAssembleeScrutins(dataDir, legislature, {
277
- noValidation = false,
278
- log = false
279
- } = {}) {
280
- const scrutinsUid = new Set();
281
- for (const dataset of datasets.scrutins) {
282
- if (dataset.ignoreForWeb) {
283
- continue;
284
- }
285
- if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
286
- continue;
287
- }
288
- const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
289
- for (const scrutinSplitPath of walkDir(datasetDir)) {
290
- const scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
291
- if (!scrutinFilename.endsWith(".json")) {
292
- continue;
293
- }
294
- const scrutinFilePath = path.join(datasetDir, ...scrutinSplitPath);
295
- if (log) {
296
- console.log(`Loading file: ${scrutinFilePath}…`);
297
- }
298
- const scrutinJson = fs.readFileSync(scrutinFilePath, {
299
- encoding: "utf8"
300
- });
301
- let scrutin;
302
- if (noValidation) {
303
- scrutin = JSON.parse(scrutinJson);
304
- } else {
305
- scrutin = ScrutinsConvert.toScrutin(scrutinJson);
306
- }
307
- if (scrutinsUid.has(scrutin.uid)) {
308
- continue;
309
- }
310
- scrutinsUid.add(scrutin.uid);
311
- yield {
312
- scrutin,
313
- datasetLegislature: dataset.legislature
314
- };
315
- }
117
+ export function* iterLoadAssembleeReunions(dataDir, legislature, options = {}) {
118
+ for (const {
119
+ item: reunion,
120
+ datasetLegislature
121
+ } of iterLoadAssembleeItems(dataDir, legislature, datasets.agendas, AgendasConvert.toReunion, [], "json", options)) {
122
+ yield {
123
+ reunion,
124
+ datasetLegislature
125
+ };
316
126
  }
317
127
  }
318
- export function* iterLoadAssembleeQuestions(dataDir, legislature, {
319
- noValidation = false,
320
- log = false
321
- } = {}) {
322
- const questionsUid = new Set();
323
- for (const dataset of datasets.questions) {
324
- if (dataset.ignoreForWeb) {
325
- continue;
326
- }
327
- if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
328
- continue;
329
- }
330
- const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
331
- for (const questionSplitPath of walkDir(datasetDir)) {
332
- const questionFilename = questionSplitPath[questionSplitPath.length - 1];
333
- if (!questionFilename.endsWith(".json")) {
334
- continue;
335
- }
336
- const questionFilePath = path.join(datasetDir, ...questionSplitPath);
337
- if (log) {
338
- console.log(`Loading file: ${questionFilePath}…`);
339
- }
340
- const questionJson = fs.readFileSync(questionFilePath, {
341
- encoding: "utf8"
342
- });
343
- let question;
344
- if (noValidation) {
345
- question = JSON.parse(questionJson);
346
- } else {
347
- question = QuestionsConvert.toQuestion(questionJson);
348
- }
349
- if (questionsUid.has(question.uid)) {
350
- continue;
351
- }
352
- questionsUid.add(question.uid);
353
- yield {
354
- question,
355
- datasetLegislature: dataset.legislature
356
- };
357
- }
128
+ export function* iterLoadAssembleeScrutins(dataDir, legislature, options = {}) {
129
+ for (const {
130
+ item: scrutin,
131
+ datasetLegislature
132
+ } of iterLoadAssembleeItems(dataDir, legislature, datasets.scrutins, ScrutinsConvert.toScrutin, [], "json", options)) {
133
+ yield {
134
+ scrutin,
135
+ datasetLegislature
136
+ };
358
137
  }
359
138
  }
360
- export function* iterLoadAssembleeComptesRendus(dataDir, legislature, {
361
- noValidation = false,
362
- log = false
363
- } = {}) {
364
- const comptesRendusUid = new Set();
365
- for (const dataset of datasets.comptesRendusSeances) {
366
- if (dataset.ignoreForWeb) {
367
- continue;
368
- }
369
- if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
370
- continue;
371
- }
372
- const datasetDir = path.join(dataDir, dataset.filename.replace(/\.xml$/, "_nettoye"));
373
- for (const compteRenduSplitPath of walkDir(datasetDir)) {
374
- const compteRenduFilename = compteRenduSplitPath[compteRenduSplitPath.length - 1];
375
- if (!compteRenduFilename.endsWith(".json")) {
376
- continue;
377
- }
378
- const compteRenduFilePath = path.join(datasetDir, ...compteRenduSplitPath);
379
- if (log) {
380
- console.log(`Loading file: ${compteRenduFilePath}…`);
381
- }
382
- const compteRenduJson = fs.readFileSync(compteRenduFilePath, {
383
- encoding: "utf8"
384
- });
385
- let compteRendu;
386
- if (noValidation) {
387
- compteRendu = JSON.parse(compteRenduJson);
388
- } else {
389
- compteRendu = ComptesRendusConvert.toCompteRendu(compteRenduJson);
390
- }
391
- if (comptesRendusUid.has(compteRendu.uid)) {
392
- continue;
393
- }
394
- comptesRendusUid.add(compteRendu.uid);
395
- yield {
396
- compteRendu,
397
- datasetLegislature: dataset.legislature
398
- };
399
- }
139
+ export function* iterLoadAssembleeQuestions(dataDir, legislature, options = {}) {
140
+ for (const {
141
+ item: question,
142
+ datasetLegislature
143
+ } of iterLoadAssembleeItems(dataDir, legislature, datasets.questions, QuestionsConvert.toQuestion, [], "json", options)) {
144
+ yield {
145
+ question,
146
+ datasetLegislature
147
+ };
148
+ }
149
+ }
150
+ export function* iterLoadAssembleeComptesRendus(dataDir, legislature, options = {}) {
151
+ for (const {
152
+ item: compteRendu,
153
+ datasetLegislature
154
+ } of iterLoadAssembleeItems(dataDir, legislature, datasets.comptesRendusSeances, ComptesRendusConvert.toCompteRendu, [], "xml", options)) {
155
+ yield {
156
+ compteRendu,
157
+ datasetLegislature
158
+ };
400
159
  }
401
160
  }
402
161
 
@@ -1075,15 +834,7 @@ export function pathFromDocumentUid(documentsDir, uid) {
1075
834
  return path.join(numeroMilliersDir, uid);
1076
835
  }
1077
836
  export function pathFromDossierParlementaireUid(dossiersDir, uid) {
1078
- const match = dossierUidRegex.exec(uid);
1079
- assert.notStrictEqual(match, null, `Unexpected structure for dossier parlementaire UID: ${uid}`);
1080
- const republiqueDir = path.join(dossiersDir, match[1]);
1081
- const legislatureDir = path.join(republiqueDir, match[2]);
1082
- let numero = "000000" + match[3];
1083
- numero = numero.substring(numero.length - 6);
1084
- const numeroMilliersDir = path.join(legislatureDir, numero.substring(0, 3));
1085
- fs.ensureDirSync(numeroMilliersDir);
1086
- return path.join(numeroMilliersDir, uid);
837
+ return pathFromUid(dossiersDir, uid, dossierUidRegex);
1087
838
  }
1088
839
  export function pathFromReunionUid(reunionsDir, uid) {
1089
840
  const match = reunionUidRegex.exec(uid);
@@ -1112,9 +863,15 @@ export function pathFromScrutinUid(scrutinsDir, uid) {
1112
863
  fs.ensureDirSync(numeroMilliersDir);
1113
864
  return path.join(numeroMilliersDir, uid);
1114
865
  }
866
+ export function pathFromQuestionUid(dataDir, uid) {
867
+ return pathFromUid(dataDir, uid, questionUidRegex);
868
+ }
869
+ export function pathFromCompteRenduUid(dataDir, uid) {
870
+ return pathFromUid(dataDir, uid, compteRenduUidRegex);
871
+ }
1115
872
 
1116
873
  // Get standard path for object with uid : republique > legislature > group objects by thousands
1117
- export function pathFromUid(dataDir, uid, dataRegexp) {
874
+ function pathFromUid(dataDir, uid, dataRegexp) {
1118
875
  const match = dataRegexp.exec(uid);
1119
876
  assert.notStrictEqual(match, null, `Unexpected structure for object with UID: ${uid}`);
1120
877
  const republiqueDir = path.join(dataDir, match[1]);
@@ -1125,4 +882,4 @@ export function pathFromUid(dataDir, uid, dataRegexp) {
1125
882
  fs.ensureDirSync(numeroMilliersDir);
1126
883
  return path.join(numeroMilliersDir, uid);
1127
884
  }
1128
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzIiwiZGF0YURpciIsImxlZ2lzbGF0dXJlIiwibm9WYWxpZGF0aW9uIiwibG9nIiwiYWN0ZXVyc1VpZCIsIlNldCIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwiSlNPTiIsInBhcnNlIiwidG9BY3RldXIiLCJoYXMiLCJ1aWQiLCJhZGQiLCJkYXRhc2V0TGVnaXNsYXR1cmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHNVaWQiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnQiLCJ0b0FtZW5kZW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsImRvY3VtZW50c1VpZCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJ0b0RvY3VtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMiLCJvcmdhbmVzVWlkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsIml0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMiLCJyZXVuaW9uc1VpZCIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyIsInNjcnV0aW5zVWlkIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwidG9TY3J1dGluIiwiaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMiLCJxdWVzdGlvbnNVaWQiLCJxdWVzdGlvbnMiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbkZpbGVQYXRoIiwicXVlc3Rpb25Kc29uIiwicXVlc3Rpb24iLCJ0b1F1ZXN0aW9uIiwiaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzIiwiY29tcHRlc1JlbmR1c1VpZCIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlUmVuZHVTcGxpdFBhdGgiLCJjb21wdGVSZW5kdUZpbGVuYW1lIiwiY29tcHRlUmVuZHVGaWxlUGF0aCIsImNvbXB0ZVJlbmR1SnNvbiIsImNvbXB0ZVJlbmR1IiwidG9Db21wdGVSZW5kdSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJ1bmRlZmluZWQiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludE9kaiIsInBvaW50c09kaiIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llclNwbGl0UGF0aCIsImRvc3NpZXJGaWxlbmFtZSIsImRvc3NpZXJGaWxlUGF0aCIsImRvc3NpZXJKc29uIiwiZG9zc2llciIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiU2VpemUiLCJleGlzdHNTeW5jIiwianNvbiIsIk9iamVjdCIsImFzc2lnbiIsInNjcnV0aW5CeVVpZCIsIlNjcnV0aW5zIiwicXVlc3Rpb25CeVVpZCIsIlF1ZXN0aW9ucyIsImNvbXB0ZVJlbmR1QnlVaWQiLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1UGF0aCIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwidG9RdWVzdGlvbnMiLCJjb21wdGVzUmVuZHVzIiwidG9Db21wdGVzUmVuZHVzIiwibG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZSIsImZvcm1hdHMiLCJkb2N1bWVudHNEaXIiLCJkb2N1bWVudERpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJpbmRleFBhdGgiLCJwYXRoRXhpc3RzU3luYyIsImluZGV4IiwicmVhZEpzb25TeW5jIiwiZm9ybWF0IiwidXJsIiwibG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMiLCJsb2FkQXNzZW1ibGVlUGhvdG9zU2VuYXRldXJzIiwibWF0Y2giLCJub3RTdHJpY3RFcXVhbCIsImdyb3VwcyIsImRvY3VtZW50VHlwZSIsImRvY3VtZW50VHlwZTIiLCJjaGFtYnJlRGlyIiwiY2hhbWJyZSIsImNoYW1icmUyIiwicmVwdWJsaXF1ZURpciIsInJlcHVibGlxdWUiLCJyZXB1YmxpcXVlMiIsImxlZ2lzbGF0dXJlRGlyIiwibGVnaXNsYXR1cmUyIiwiZXRhdCIsImVuc3VyZURpclN5bmMiLCJldGF0RGlyIiwibnVtZXJvIiwibnVtZXJvMiIsInN1YnN0cmluZyIsIm51bWVyb01pbGxpZXJzRGlyIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsImRvc3NpZXJzRGlyIiwiZXhlYyIsInBhdGhGcm9tUmV1bmlvblVpZCIsInJldW5pb25zRGlyIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tVWlkIiwiZGF0YVJlZ2V4cCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RmlsZXNJbmRleCB9IGZyb20gXCIuL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c0NvbnZlcnQsIENvbXB0ZVJlbmR1IH0gZnJvbSBcIi4vdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7IERvY3VtZW50VXJsRm9ybWF0IH0gZnJvbSBcIi4vdXJsc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxuICByZWFkb25seSBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH1cbiAgcmVhZG9ubHkgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9XG59XG5cbmNvbnN0IGRvY3VtZW50VWlkUmVnZXggPVxuICAvXigoPzxkb2N1bWVudFR5cGU+QUNJTnxBTENOfEFWQ0V8QVZJU3xERUNMfEVUREl8TEVUVHxNRVNTfE1JT058UElPTnxQTlJFfFBSSkx8UkFQUHxSSU5GfFJJT04pKD88Y2hhbWJyZT5BTnxDR3xTTikoPzxyZXB1YmxpcXVlPlJcXGQrKVtMU10oPzxsZWdpc2xhdHVyZT5cXGQrKSg/PGV0YXQ+QnxCVEF8QlRDfFRBUCkoPzxudW1lcm8+XFxkKykoLS4qKT8pfCgoPzxkb2N1bWVudFR5cGUyPk1JT04pKD88Y2hhbWJyZTI+QU58U04pKD88cmVwdWJsaXF1ZTI+UlxcZCspW0xTXSg/PGxlZ2lzbGF0dXJlMj5cXGQrKS1OKD88bnVtZXJvMj5cXGQrKSkkL1xuY29uc3QgZG9zc2llclVpZFJlZ2V4ID0gL15ETChSXFxkKykoTFxcZCspTihcXGQrKSQvXG5jb25zdCByZXVuaW9uVWlkUmVnZXggPVxuICAvXlJVKEFOfENHfFNOKShSXFxkKykoTFxcZCspKFtBU11cXGR7NH0pKElEQ3xJREZMP3xJRFMpKFxcZCspJC9cbmNvbnN0IHNjcnV0aW5VaWRSZWdleCA9IC9eVlQoQU58Q0cpKFJcXGQrKShMXFxkKylWKFxcZCspJC9cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUFjdGV1cnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IG5vVmFsaWRhdGlvbiA9IGZhbHNlLCBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgYWN0ZXVyOiBBY3RldXI7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFjdGV1cnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGxldCBhY3RldXI6IEFjdGV1clxuICAgICAgaWYgKG5vVmFsaWRhdGlvbikge1xuICAgICAgICBhY3RldXIgPSBKU09OLnBhcnNlKGFjdGV1ckpzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgfVxuICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgIGlmIChhY3RldXJzVWlkLmhhcyhhY3RldXIudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgYWN0ZXVyc1VpZC5hZGQoYWN0ZXVyLnVpZClcbiAgICAgIHlpZWxkIHsgYWN0ZXVyLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlQW1lbmRlbWVudHMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IG5vVmFsaWRhdGlvbiA9IGZhbHNlLCBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgYW1lbmRlbWVudDogQW1lbmRlbWVudDsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgYW1lbmRlbWVudHNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YW1lbmRlbWVudEZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgbGV0IGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnRcbiAgICAgIGlmIChub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgYW1lbmRlbWVudCA9IEpTT04ucGFyc2UoYW1lbmRlbWVudEpzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbWVuZGVtZW50ID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgIH1cbiAgICAgIGlmIChhbWVuZGVtZW50c1VpZC5oYXMoYW1lbmRlbWVudC51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhbWVuZGVtZW50c1VpZC5hZGQoYW1lbmRlbWVudC51aWQpXG4gICAgICB5aWVsZCB7IGFtZW5kZW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVEb2N1bWVudHMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IG5vVmFsaWRhdGlvbiA9IGZhbHNlLCBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgZG9jdW1lbnQ6IERvY3VtZW50OyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBkb2N1bWVudHNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb2N1bWVudFNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb2N1bWVudEZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBsZXQgZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgICBpZiAobm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIGRvY3VtZW50ID0gSlNPTi5wYXJzZShkb2N1bWVudEpzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50c1VpZC5oYXMoZG9jdW1lbnQudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgZG9jdW1lbnRzVWlkLmFkZChkb2N1bWVudC51aWQpXG4gICAgICB5aWVsZCB7IGRvY3VtZW50LCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlRG9zc2llcnNQYXJsZW1lbnRhaXJlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbm9WYWxpZGF0aW9uID0gZmFsc2UsIGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAge1xuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmVcbiAgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGRvc3NpZXJzUGFybGVtZW50YWlyZXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1xuICAgICAgXCJkb3NzaWVyc1wiLFxuICAgIF0pKSB7XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhc2V0RGlyLFxuICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSxcbiAgICAgIClcblxuICAgICAgbGV0IGRvc3NpZXJQYXJsZW1lbnRhaXJlOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgaWYgKG5vVmFsaWRhdGlvbikge1xuICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSA9IEpTT04ucGFyc2UoZG9zc2llclBhcmxlbWVudGFpcmVKc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUpzb24sXG4gICAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZC5oYXMoZG9zc2llclBhcmxlbWVudGFpcmUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZC5hZGQoZG9zc2llclBhcmxlbWVudGFpcmUudWlkKVxuICAgICAgeWllbGQgeyBkb3NzaWVyUGFybGVtZW50YWlyZSwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IG5vVmFsaWRhdGlvbiA9IGZhbHNlLCBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgb3JnYW5lOiBPcmdhbmU7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IG9yZ2FuZXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3Qgb3JnYW5lRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ub3JnYW5lU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke29yZ2FuZUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGxldCBvcmdhbmU6IE9yZ2FuZVxuICAgICAgaWYgKG5vVmFsaWRhdGlvbikge1xuICAgICAgICBvcmdhbmUgPSBKU09OLnBhcnNlKG9yZ2FuZUpzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgfVxuICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgIGlmIChvcmdhbmVzVWlkLmhhcyhvcmdhbmUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgb3JnYW5lc1VpZC5hZGQob3JnYW5lLnVpZClcbiAgICAgIHlpZWxkIHsgb3JnYW5lLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IG5vVmFsaWRhdGlvbiA9IGZhbHNlLCBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgcmV1bmlvbjogUmV1bmlvbjsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgcmV1bmlvbnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyZXVuaW9uRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGxldCByZXVuaW9uOiBSZXVuaW9uXG4gICAgICBpZiAobm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldW5pb24gPSBKU09OLnBhcnNlKHJldW5pb25Kc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV1bmlvbiA9IEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uSnNvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHJldW5pb25zVWlkLmhhcyhyZXVuaW9uLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHJldW5pb25zVWlkLmFkZChyZXVuaW9uLnVpZClcbiAgICAgIHlpZWxkIHsgcmV1bmlvbiwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZVNjcnV0aW5zKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBub1ZhbGlkYXRpb24gPSBmYWxzZSwgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IHNjcnV0aW46IFNjcnV0aW47IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IHNjcnV0aW5zVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3Qgc2NydXRpbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzY3J1dGluRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcblxuICAgICAgbGV0IHNjcnV0aW46IFNjcnV0aW5cbiAgICAgIGlmIChub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgc2NydXRpbiA9IEpTT04ucGFyc2Uoc2NydXRpbkpzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHNjcnV0aW5zVWlkLmhhcyhzY3J1dGluLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHNjcnV0aW5zVWlkLmFkZChzY3J1dGluLnVpZClcbiAgICAgIHlpZWxkIHsgc2NydXRpbiwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZVF1ZXN0aW9ucyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbm9WYWxpZGF0aW9uID0gZmFsc2UsIGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBxdWVzdGlvbjogUXVlc3Rpb247IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IHF1ZXN0aW9uc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID0gcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghcXVlc3Rpb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBxdWVzdGlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnF1ZXN0aW9uU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3F1ZXN0aW9uRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcblxuICAgICAgbGV0IHF1ZXN0aW9uOiBRdWVzdGlvblxuICAgICAgaWYgKG5vVmFsaWRhdGlvbikge1xuICAgICAgICBxdWVzdGlvbiA9IEpTT04ucGFyc2UocXVlc3Rpb25Kc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlc3Rpb24gPSBRdWVzdGlvbnNDb252ZXJ0LnRvUXVlc3Rpb24ocXVlc3Rpb25Kc29uKVxuICAgICAgfVxuXG4gICAgICBpZiAocXVlc3Rpb25zVWlkLmhhcyhxdWVzdGlvbi51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBxdWVzdGlvbnNVaWQuYWRkKHF1ZXN0aW9uLnVpZClcbiAgICAgIHlpZWxkIHsgcXVlc3Rpb24sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBub1ZhbGlkYXRpb24gPSBmYWxzZSwgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGNvbXB0ZVJlbmR1OiBDb21wdGVSZW5kdTsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgY29tcHRlc1JlbmR1c1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLnhtbCQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlbmFtZSA9XG4gICAgICAgIGNvbXB0ZVJlbmR1U3BsaXRQYXRoW2NvbXB0ZVJlbmR1U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWNvbXB0ZVJlbmR1RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5jb21wdGVSZW5kdVNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtjb21wdGVSZW5kdUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBjb21wdGVSZW5kdUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjb21wdGVSZW5kdUZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGxldCBjb21wdGVSZW5kdTogQ29tcHRlUmVuZHVcbiAgICAgIGlmIChub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgY29tcHRlUmVuZHUgPSBKU09OLnBhcnNlKGNvbXB0ZVJlbmR1SnNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXB0ZVJlbmR1ID0gQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVSZW5kdShjb21wdGVSZW5kdUpzb24pXG4gICAgICB9XG4gICAgICBpZiAoY29tcHRlc1JlbmR1c1VpZC5oYXMoY29tcHRlUmVuZHUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29tcHRlc1JlbmR1c1VpZC5hZGQoY29tcHRlUmVuZHUudWlkKVxuICAgICAgeWllbGQgeyBjb21wdGVSZW5kdSwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IFVzZSBpdGVyTG9hZC4uLiBpdGVyYXRvcnMgaW5zdGVhZC5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YShcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hY3RldXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1ckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke29yZ2FuZUZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnJldW5pb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYW1lbmRlbWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YW1lbmRlbWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvY3VtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb2N1bWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcXVlc3Rpb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBRdWVzdGlvbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID0gcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucXVlc3Rpb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3F1ZXN0aW9uRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVzdGlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhxdWVzdGlvbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBxdWVzdGlvbiA9IFF1ZXN0aW9uc0NvbnZlcnQudG9RdWVzdGlvbihxdWVzdGlvbkpzb24pXG4gICAgICAgIGlmIChxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9IHF1ZXN0aW9uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjb21wdGVSZW5kdUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IENvbXB0ZVJlbmR1IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlbmFtZSA9IGNvbXB0ZVJlbmR1UGF0aFtjb21wdGVSZW5kdVBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFjb21wdGVSZW5kdUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uY29tcHRlUmVuZHVQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtjb21wdGVSZW5kdUZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY29tcHRlUmVuZHVGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHUgPSBDb21wdGVzUmVuZHVzQ29udmVydC50b0NvbXB0ZVJlbmR1KGNvbXB0ZVJlbmR1SnNvbilcbiAgICAgICAgaWYgKGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID0gY29tcHRlUmVuZHVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICAgIHF1ZXN0aW9uQnlVaWQsXG4gICAgY29tcHRlUmVuZHVCeVVpZCxcbiAgfVxufVxuXG4vLy8gTG9hZCBkYXRhIGZyb20gYmlnIG1vbm9seXRpYyBmaWxlcy5cbi8vLyBEZXByZWNhdGVkOiBBc3NlbWJsw6llIG5hdGlvbmFsZSBvcGVuIGRhdGEgbm8gbW9yZSB1c2VzIG1vbm9seXRpYyBmaWxlcy5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBhY3RldXJzRXRPcmdhbmVzLmFjdGV1cnMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBhY3RldXJzRXRPcmdhbmVzLm9yZ2FuZXMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFnZW5kYXMgPSBBZ2VuZGFzQ29udmVydC50b0FnZW5kYXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBhZ2VuZGFzLnJldW5pb25zKSB7XG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYW1lbmRlbWVudHMgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50cyhqc29uKVxuICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2YgYW1lbmRlbWVudHMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnMgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoanNvbilcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXIgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzKSB7XG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAgY29uc3QgcGhvdG9CeVVpZCA9IHt9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IHNjcnV0aW5zID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbnMoanNvbilcbiAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBzY3J1dGlucy5zY3J1dGlucykge1xuICAgICAgICBpZiAoc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9IHNjcnV0aW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHF1ZXN0aW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUXVlc3Rpb24gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUXVlc3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnF1ZXN0aW9ucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IHF1ZXN0aW9ucyA9IFF1ZXN0aW9uc0NvbnZlcnQudG9RdWVzdGlvbnMoanNvbilcbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2YgcXVlc3Rpb25zLnF1ZXN0aW9ucykge1xuICAgICAgICBpZiAocXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPSBxdWVzdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Db21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGNvbXB0ZXNSZW5kdXMgPSBDb21wdGVzUmVuZHVzQ29udmVydC50b0NvbXB0ZXNSZW5kdXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHUgb2YgY29tcHRlc1JlbmR1cy5jb21wdGVzUmVuZHVzKSB7XG4gICAgICAgIGlmIChjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9IGNvbXB0ZVJlbmR1XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgICBxdWVzdGlvbkJ5VWlkLFxuICAgIGNvbXB0ZVJlbmR1QnlVaWQsXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkIGluZm9zIG9mIGEgZG9jdW1lbnQgb3IgYSBkaXZpc2lvbiBvZiBhIGRvY3VtZW50IGZyb20gZmlsZSBzeXN0ZW1cbiAqXG4gKiBAcGFyYW0gZGF0YURpclxuICogQHBhcmFtIHVpZCBVSUQgb2YgYSBkb2N1bWVudCBvciBhIGRpdmlzaW9uXG4gKiBAcGFyYW0gZm9ybWF0cyByZXF1ZXN0ZWQgZm9ybWF0cyBvZiB0aGUgZG9jdW1lbnQgaW4gZGVjcmVhc2luZyBwcmVmZXJlbmNlIG9yZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRG9jdW1lbnRGaWxlKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuICBmb3JtYXRzOiBEb2N1bWVudFVybEZvcm1hdFtdLFxuKTpcbiAgfCB7XG4gICAgICBmb3JtYXQ6IERvY3VtZW50VXJsRm9ybWF0XG4gICAgICBwYXRoOiBzdHJpbmdcbiAgICAgIHVybDogc3RyaW5nXG4gICAgfVxuICB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBcIkRvY3VtZW50c1wiKVxuICBjb25zdCBkb2N1bWVudERpciA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCB1aWQpXG4gIGNvbnN0IGluZGV4UGF0aCA9IHBhdGguam9pbihkb2N1bWVudERpciwgXCJpbmRleC5qc29uXCIpXG4gIGlmICghZnMucGF0aEV4aXN0c1N5bmMoaW5kZXhQYXRoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICBjb25zdCBpbmRleCA9IGZzLnJlYWRKc29uU3luYyhpbmRleFBhdGgpIGFzIERvY3VtZW50RmlsZXNJbmRleFxuICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmb3JtYXRzKSB7XG4gICAgZm9yIChjb25zdCB7IGZpbGVuYW1lLCB1cmwgfSBvZiBpbmRleFtmb3JtYXRdID8/IFtdKSB7XG4gICAgICBpZiAoZmlsZW5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZm9ybWF0LCBwYXRoOiBwYXRoLmpvaW4oZG9jdW1lbnREaXIsIGZpbGVuYW1lKSwgdXJsIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSB7XG4gIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICB9YCxcbiAgICBcImRlcHV0ZXMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSB7XG4gIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHVpZC5tYXRjaChkb2N1bWVudFVpZFJlZ2V4KVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvY3VtZW50IFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBncm91cHMgPSBtYXRjaCEuZ3JvdXBzIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgY29uc3QgZG9jdW1lbnRUeXBlID0gcGF0aC5qb2luKFxuICAgIGRvY3VtZW50c0RpcixcbiAgICBncm91cHMuZG9jdW1lbnRUeXBlID8/IGdyb3Vwcy5kb2N1bWVudFR5cGUyLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oZG9jdW1lbnRUeXBlLCBncm91cHMuY2hhbWJyZSA/PyBncm91cHMuY2hhbWJyZTIpXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oXG4gICAgY2hhbWJyZURpcixcbiAgICBncm91cHMucmVwdWJsaXF1ZSA/PyBncm91cHMucmVwdWJsaXF1ZTIsXG4gIClcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4oXG4gICAgcmVwdWJsaXF1ZURpcixcbiAgICBncm91cHMubGVnaXNsYXR1cmUgPz8gZ3JvdXBzLmxlZ2lzbGF0dXJlMixcbiAgKVxuICBjb25zdCBldGF0ID0gZ3JvdXBzLmV0YXRcbiAgaWYgKGV0YXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGZzLmVuc3VyZURpclN5bmMobGVnaXNsYXR1cmVEaXIpXG4gICAgcmV0dXJuIHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgdWlkKVxuICB9XG4gIGNvbnN0IGV0YXREaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIGV0YXQpXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgKGdyb3Vwcy5udW1lcm8gPz8gZ3JvdXBzLm51bWVybzIpXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHJpbmcobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGV0YXREaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb3NzaWVyVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9zc2llciBwYXJsZW1lbnRhaXJlIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGRvc3NpZXJzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gcmV1bmlvblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHJldW5pb24gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4ocmV1bmlvbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbMl0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3Qgc2Vzc2lvbkRpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBpZERpciA9IHBhdGguam9pbihzZXNzaW9uRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHJpbmcobnVtZXJvLmxlbmd0aCAtIDkpXG4gIGNvbnN0IG51bWVyb01pbGxpb25zRGlyID0gcGF0aC5qb2luKGlkRGlyLCBudW1lcm8uc3Vic3RyaW5nKDAsIDMpKVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihudW1lcm9NaWxsaW9uc0RpciwgbnVtZXJvLnN1YnN0cmluZygzLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBzY3J1dGluVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3Igc2NydXRpbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihzY3J1dGluc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVs0XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG4vLyBHZXQgc3RhbmRhcmQgcGF0aCBmb3Igb2JqZWN0IHdpdGggdWlkIDogcmVwdWJsaXF1ZSA+IGxlZ2lzbGF0dXJlID4gZ3JvdXAgb2JqZWN0cyBieSB0aG91c2FuZHNcbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVVpZChcbiAgZGF0YURpcjogc3RyaW5nLFxuICB1aWQ6IHN0cmluZyxcbiAgZGF0YVJlZ2V4cDogUmVnRXhwLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkYXRhUmVnZXhwLmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIG9iamVjdCB3aXRoIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBRWRDLGVBQWU7QUFBQSxTQUNmQyxRQUFRLEVBQUVELGVBQWU7QUFBQSxTQUV6QkUsT0FBTztBQUFBLFNBQ1BBLE9BQU87QUFBQSxTQUdkQyxPQUFPLElBQUlDLHVCQUF1QjtBQUFBLFNBSTNCRCxPQUFPLElBQUlFLGNBQWM7QUFBQSxTQUNiRixPQUFPLElBQUlHLGtCQUFrQjtBQUFBLFNBRWhESCxPQUFPLElBQUlJLDBCQUEwQjtBQUFBLFNBSTlCQyxXQUFXO0FBQUEsU0FDWEwsT0FBTyxJQUFJTSxlQUFlO0FBQUEsU0FDMUJOLE9BQU8sSUFBSU8sZ0JBQWdCO0FBQUEsU0FDM0JQLE9BQU8sSUFBSVEsb0JBQW9CO0FBd0J4QyxNQUFNQyxnQkFBZ0IsR0FDcEIsaVRBQWlUO0FBQ25ULE1BQU1DLGVBQWUsR0FBRyx3QkFBd0I7QUFDaEQsTUFBTUMsZUFBZSxHQUNuQiwyREFBMkQ7QUFDN0QsTUFBTUMsZUFBZSxHQUFHLCtCQUErQjtBQUV2RCxPQUFPLFVBQVVDLHdCQUF3QkEsQ0FDdkNDLE9BQWUsRUFDZkMsV0FBd0IsRUFDeEI7RUFBRUMsWUFBWSxHQUFHLEtBQUs7RUFBRUMsR0FBRyxHQUFHO0FBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUsxQztFQUNBLE1BQU1DLFVBQVUsR0FBRyxJQUFJQyxHQUFHLENBQVMsQ0FBQztFQUNwQyxLQUFLLE1BQU1DLE9BQU8sSUFBSXRCLFFBQVEsQ0FBQ3VCLGdCQUFnQixFQUFF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
885
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwiY29tcHRlUmVuZHVVaWRSZWdleCIsInF1ZXN0aW9uVWlkUmVnZXgiLCJpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zIiwiZGF0YURpciIsImxlZ2lzbGF0dXJlIiwiY29udmVydFRvSXRlbSIsInN1YmZvbGRlck5hbWUiLCJmaWxlRXh0ZW5zaW9uIiwibm9WYWxpZGF0aW9uIiwibG9nIiwiaXRlbVVpZCIsIlNldCIsImRhdGFzZXQiLCJpZ25vcmVGb3JXZWIiLCJ1bmRlZmluZWQiLCJBbGwiLCJmaWxlRXh0ZW5zaW9uUmVnZXgiLCJSZWdFeHAiLCJkYXRhc2V0RGlyIiwiam9pbiIsImZpbGVuYW1lIiwicmVwbGFjZSIsIml0ZW1TcGxpdFBhdGgiLCJpdGVtRmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsIml0ZW1GaWxlUGF0aCIsImNvbnNvbGUiLCJpdGVtSnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiaXRlbSIsIkpTT04iLCJwYXJzZSIsImhhcyIsInVpZCIsImFkZCIsImRhdGFzZXRMZWdpc2xhdHVyZSIsIml0ZXJMb2FkQXNzZW1ibGVlQWN0ZXVycyIsIm9wdGlvbnMiLCJhY3RldXIiLCJhY3RldXJzRXRPcmdhbmVzIiwidG9BY3RldXIiLCJpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMiLCJvcmdhbmUiLCJ0b09yZ2FuZSIsIml0ZXJMb2FkQXNzZW1ibGVlQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50IiwiYW1lbmRlbWVudHMiLCJ0b0FtZW5kZW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsImRvY3VtZW50IiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsInRvRG9jdW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJpdGVyTG9hZEFzc2VtYmxlZVJldW5pb25zIiwicmV1bmlvbiIsImFnZW5kYXMiLCJ0b1JldW5pb24iLCJpdGVyTG9hZEFzc2VtYmxlZVNjcnV0aW5zIiwic2NydXRpbiIsInNjcnV0aW5zIiwidG9TY3J1dGluIiwiaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMiLCJxdWVzdGlvbiIsInF1ZXN0aW9ucyIsInRvUXVlc3Rpb24iLCJpdGVyTG9hZEFzc2VtYmxlZUNvbXB0ZXNSZW5kdXMiLCJjb21wdGVSZW5kdSIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwidG9Db21wdGVSZW5kdSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImFjdGV1ckZpbGVQYXRoIiwiYWN0ZXVySnNvbiIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lRmlsZVBhdGgiLCJvcmdhbmVKc29uIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvbnNCeURheSIsInJldW5pb25zQnlEb3NzaWVyVWlkIiwiQWdlbmRhcyIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uRmlsZVBhdGgiLCJyZXVuaW9uSnNvbiIsImRheSIsInRpbWVzdGFtcERlYnV0IiwidG9JU09TdHJpbmciLCJzcGxpdCIsInJldW5pb25zQXREYXkiLCJwdXNoIiwib2RqIiwicG9pbnRPZGoiLCJwb2ludHNPZGoiLCJkb3NzaWVyTGVnaXNsYXRpZlJlZiIsImRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIiwicmV1bmlvbnNBdERvc3NpZXJVaWQiLCJhbWVuZGVtZW50QnlVaWQiLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImRvY3VtZW50QnlVaWQiLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50RmlsZVBhdGgiLCJkb2N1bWVudEpzb24iLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidGl0cmVEb3NzaWVyIiwic2VuYXRDaGVtaW4iLCJ0aXRyZUNoZW1pbiIsInBob3RvQnlVaWQiLCJQaG90b3MiLCJqc29uRmlsZVBhdGgiLCJTZWl6ZSIsImV4aXN0c1N5bmMiLCJqc29uIiwiT2JqZWN0IiwiYXNzaWduIiwic2NydXRpbkJ5VWlkIiwiU2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJxdWVzdGlvbkJ5VWlkIiwiUXVlc3Rpb25zIiwicXVlc3Rpb25TcGxpdFBhdGgiLCJxdWVzdGlvbkZpbGVuYW1lIiwicXVlc3Rpb25GaWxlUGF0aCIsInF1ZXN0aW9uSnNvbiIsImNvbXB0ZVJlbmR1QnlVaWQiLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1UGF0aCIsImNvbXB0ZVJlbmR1RmlsZW5hbWUiLCJjb21wdGVSZW5kdUZpbGVQYXRoIiwiY29tcHRlUmVuZHVKc29uIiwibG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJzIiwib3JnYW5lcyIsInRvQWdlbmRhcyIsInJldW5pb25zIiwidG9BbWVuZGVtZW50cyIsInRleHRlTGVnaXNsYXRpZiIsInRleHRlc0xlZ2lzbGF0aWZzIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlcyIsInRvU2NydXRpbnMiLCJ0b1F1ZXN0aW9ucyIsImNvbXB0ZXNSZW5kdXMiLCJ0b0NvbXB0ZXNSZW5kdXMiLCJsb2FkQXNzZW1ibGVlRG9jdW1lbnRGaWxlIiwiZm9ybWF0cyIsImRvY3VtZW50c0RpciIsImRvY3VtZW50RGlyIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsImluZGV4UGF0aCIsInBhdGhFeGlzdHNTeW5jIiwiaW5kZXgiLCJyZWFkSnNvblN5bmMiLCJmb3JtYXQiLCJ1cmwiLCJsb2FkQXNzZW1ibGVlUGhvdG9zRGVwdXRlcyIsImxvYWRBc3NlbWJsZWVQaG90b3NTZW5hdGV1cnMiLCJtYXRjaCIsIm5vdFN0cmljdEVxdWFsIiwiZ3JvdXBzIiwiZG9jdW1lbnRUeXBlIiwiZG9jdW1lbnRUeXBlMiIsImNoYW1icmVEaXIiLCJjaGFtYnJlIiwiY2hhbWJyZTIiLCJyZXB1YmxpcXVlRGlyIiwicmVwdWJsaXF1ZSIsInJlcHVibGlxdWUyIiwibGVnaXNsYXR1cmVEaXIiLCJsZWdpc2xhdHVyZTIiLCJldGF0IiwiZW5zdXJlRGlyU3luYyIsImV0YXREaXIiLCJudW1lcm8iLCJudW1lcm8yIiwic3Vic3RyaW5nIiwibnVtZXJvTWlsbGllcnNEaXIiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwiZG9zc2llcnNEaXIiLCJwYXRoRnJvbVVpZCIsInBhdGhGcm9tUmV1bmlvblVpZCIsInJldW5pb25zRGlyIiwiZXhlYyIsInNlc3Npb25EaXIiLCJpZERpciIsIm51bWVyb01pbGxpb25zRGlyIiwicGF0aEZyb21TY3J1dGluVWlkIiwic2NydXRpbnNEaXIiLCJwYXRoRnJvbVF1ZXN0aW9uVWlkIiwicGF0aEZyb21Db21wdGVSZW5kdVVpZCIsImRhdGFSZWdleHAiXSwic291cmNlcyI6WyIuLi9zcmMvbG9hZGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gTG9hZCBkYXRhIGZyb20gZmlsZXNcblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgeyBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBkYXRhc2V0cywgRW5hYmxlZERhdGFzZXRzLCBEYXRhc2V0IH0gZnJvbSBcIi4vZGF0YXNldHNcIlxuaW1wb3J0IHR5cGUgeyBEb2N1bWVudEZpbGVzSW5kZXggfSBmcm9tIFwiLi9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5leHBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG4gIFBob3RvLFxufSBmcm9tIFwiLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4vdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBRdWVzdGlvbnNDb252ZXJ0LCBRdWVzdGlvbiB9IGZyb20gXCIuL3R5cGVzL3F1ZXN0aW9uc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIENvbXB0ZXNSZW5kdXNDb252ZXJ0LCBDb21wdGVSZW5kdSB9IGZyb20gXCIuL3R5cGVzL2RlYmF0c1wiXG5pbXBvcnQgeyBEb2N1bWVudFVybEZvcm1hdCB9IGZyb20gXCIuL3VybHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICByZWFkb25seSBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9XG4gIHJlYWRvbmx5IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbiAgcmVhZG9ubHkgcXVlc3Rpb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBRdWVzdGlvbiB9XG4gIHJlYWRvbmx5IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfVxufVxuXG5jb25zdCBkb2N1bWVudFVpZFJlZ2V4ID1cbiAgL14oKD88ZG9jdW1lbnRUeXBlPkFDSU58QUxDTnxBVkNFfEFWSVN8REVDTHxFVERJfExFVFR8TUVTU3xNSU9OfFBJT058UE5SRXxQUkpMfFJBUFB8UklORnxSSU9OKSg/PGNoYW1icmU+QU58Q0d8U04pKD88cmVwdWJsaXF1ZT5SXFxkKylbTFNdKD88bGVnaXNsYXR1cmU+XFxkKykoPzxldGF0PkJ8QlRBfEJUQ3xUQVApKD88bnVtZXJvPlxcZCspKC0uKik/KXwoKD88ZG9jdW1lbnRUeXBlMj5NSU9OKSg/PGNoYW1icmUyPkFOfFNOKSg/PHJlcHVibGlxdWUyPlJcXGQrKVtMU10oPzxsZWdpc2xhdHVyZTI+XFxkKyktTig/PG51bWVybzI+XFxkKykpJC9cbmNvbnN0IGRvc3NpZXJVaWRSZWdleCA9IC9eREwoUlxcZCspKExcXGQrKU4oXFxkKykkL1xuY29uc3QgcmV1bmlvblVpZFJlZ2V4ID1cbiAgL15SVShBTnxDR3xTTikoUlxcZCspKExcXGQrKShbQVNdXFxkezR9KShJREN8SURGTD98SURTKShcXGQrKSQvXG5jb25zdCBzY3J1dGluVWlkUmVnZXggPSAvXlZUKEFOfENHKShSXFxkKykoTFxcZCspVihcXGQrKSQvXG5jb25zdCBjb21wdGVSZW5kdVVpZFJlZ2V4OiBSZWdFeHAgPVxuICAvXkNSUyhBTnxDRykoUlxcZCspKExcXGQrKShTXFxkKykoT3xFKShcXGQrKShOXFxkKykkL1xuY29uc3QgcXVlc3Rpb25VaWRSZWdleDogUmVnRXhwID0gL15RQU4oUlxcZCspKExcXGQrKVEoRXxHfE9TRCkoXFxkKykkL1xuXG50eXBlIEl0ZW1Db252ZXJ0ZXI8VD4gPSAoanNvbjogc3RyaW5nKSA9PiBUXG5cbmZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zPFQgZXh0ZW5kcyB7IHVpZDogc3RyaW5nIH0+KFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgZGF0YXNldHM6IERhdGFzZXRbXSxcbiAgY29udmVydFRvSXRlbTogSXRlbUNvbnZlcnRlcjxUPixcbiAgc3ViZm9sZGVyTmFtZTogc3RyaW5nW10sXG4gIGZpbGVFeHRlbnNpb246IHN0cmluZyA9IFwianNvblwiLFxuICB7IG5vVmFsaWRhdGlvbiA9IGZhbHNlLCBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8eyBpdGVtOiBUOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sIHZvaWQsIHVua25vd24+IHtcbiAgY29uc3QgaXRlbVVpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgbGV0IGZpbGVFeHRlbnNpb25SZWdleCA9IG5ldyBSZWdFeHAoYFxcXFwuJHtmaWxlRXh0ZW5zaW9ufSRgKVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKGZpbGVFeHRlbnNpb25SZWdleCwgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGl0ZW1TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBzdWJmb2xkZXJOYW1lKSkge1xuICAgICAgY29uc3QgaXRlbUZpbGVuYW1lID0gaXRlbVNwbGl0UGF0aFtpdGVtU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWl0ZW1GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uaXRlbVNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtpdGVtRmlsZVBhdGh94oCmYClcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXRlbUpzb24gPSBmcy5yZWFkRmlsZVN5bmMoaXRlbUZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgbGV0IGl0ZW06IFQgPSBub1ZhbGlkYXRpb25cbiAgICAgICAgPyBKU09OLnBhcnNlKGl0ZW1Kc29uKVxuICAgICAgICA6IGNvbnZlcnRUb0l0ZW0oaXRlbUpzb24pXG5cbiAgICAgIGlmIChpdGVtVWlkLmhhcyhpdGVtLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGl0ZW1VaWQuYWRkKGl0ZW0udWlkKVxuICAgICAgeWllbGQgeyBpdGVtOiBpdGVtLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlQWN0ZXVycyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBhY3RldXI6IEFjdGV1cjsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgZm9yIChjb25zdCB7XG4gICAgaXRlbTogYWN0ZXVyLFxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZSxcbiAgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zPEFjdGV1cj4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzLFxuICAgIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyLFxuICAgIFtcImFjdGV1cnNcIl0sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgYWN0ZXVyLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVPcmdhbmVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IG9yZ2FuZTogT3JnYW5lOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBvcmdhbmUsXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8T3JnYW5lPihcbiAgICBkYXRhRGlyLFxuICAgIGxlZ2lzbGF0dXJlLFxuICAgIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMsXG4gICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUsXG4gICAgW1wib3JnYW5lc1wiXSxcbiAgICBcImpzb25cIixcbiAgICBvcHRpb25zLFxuICApKSB7XG4gICAgeWllbGQgeyBvcmdhbmUsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGZvciAoY29uc3Qge1xuICAgIGl0ZW06IGFtZW5kZW1lbnQsXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8QW1lbmRlbWVudD4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5hbWVuZGVtZW50cyxcbiAgICBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50LFxuICAgIFtdLFxuICAgIFwianNvblwiLFxuICAgIG9wdGlvbnMsXG4gICkpIHtcbiAgICB5aWVsZCB7IGFtZW5kZW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBkb2N1bWVudDogRG9jdW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGZvciAoY29uc3Qge1xuICAgIGl0ZW06IGRvY3VtZW50LFxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZSxcbiAgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zPERvY3VtZW50PihcbiAgICBkYXRhRGlyLFxuICAgIGxlZ2lzbGF0dXJlLFxuICAgIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMsXG4gICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudCxcbiAgICBbXCJkb2N1bWVudHNcIl0sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgZG9jdW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvc3NpZXJzUGFybGVtZW50YWlyZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICBvcHRpb25zID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHtcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlXG4gIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmUsXG4gIH0gb2YgaXRlckxvYWRBc3NlbWJsZWVJdGVtczxEb3NzaWVyUGFybGVtZW50YWlyZT4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzLFxuICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgW1wiZG9zc2llcnNcIl0sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgZG9zc2llclBhcmxlbWVudGFpcmUsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZVJldW5pb25zKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IHJldW5pb246IFJldW5pb247IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGZvciAoY29uc3Qge1xuICAgIGl0ZW06IHJldW5pb24sXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8UmV1bmlvbj4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5hZ2VuZGFzLFxuICAgIEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbixcbiAgICBbXSxcbiAgICBcImpzb25cIixcbiAgICBvcHRpb25zLFxuICApKSB7XG4gICAgeWllbGQgeyByZXVuaW9uLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBzY3J1dGluOiBTY3J1dGluOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBzY3J1dGluLFxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZSxcbiAgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zPFNjcnV0aW4+KFxuICAgIGRhdGFEaXIsXG4gICAgbGVnaXNsYXR1cmUsXG4gICAgZGF0YXNldHMuc2NydXRpbnMsXG4gICAgU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbixcbiAgICBbXSxcbiAgICBcImpzb25cIixcbiAgICBvcHRpb25zLFxuICApKSB7XG4gICAgeWllbGQgeyBzY3J1dGluLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICBvcHRpb25zID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgcXVlc3Rpb246IFF1ZXN0aW9uOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBxdWVzdGlvbixcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmUsXG4gIH0gb2YgaXRlckxvYWRBc3NlbWJsZWVJdGVtczxRdWVzdGlvbj4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5xdWVzdGlvbnMsXG4gICAgUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uLFxuICAgIFtdLFxuICAgIFwianNvblwiLFxuICAgIG9wdGlvbnMsXG4gICkpIHtcbiAgICB5aWVsZCB7IHF1ZXN0aW9uLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGNvbXB0ZVJlbmR1OiBDb21wdGVSZW5kdTsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgZm9yIChjb25zdCB7XG4gICAgaXRlbTogY29tcHRlUmVuZHUsXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8Q29tcHRlUmVuZHU+KFxuICAgIGRhdGFEaXIsXG4gICAgbGVnaXNsYXR1cmUsXG4gICAgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMsXG4gICAgQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVSZW5kdSxcbiAgICBbXSxcbiAgICBcInhtbFwiLFxuICAgIG9wdGlvbnMsXG4gICkpIHtcbiAgICB5aWVsZCB7IGNvbXB0ZVJlbmR1LCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbi8vLyBMb2FkIGRhdGEgZnJvbSBzcGxpdCBmaWxlcy5cbi8vLyBEZXByZWNhdGVkOiBVc2UgaXRlckxvYWQuLi4gaXRlcmF0b3JzIGluc3RlYWQuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGEoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthY3RldXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXIoYWN0ZXVySnNvbilcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ub3JnYW5lU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhvcmdhbmVGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgb3JnYW5lID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUob3JnYW5lSnNvbilcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyZXVuaW9uRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uSnNvbilcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYW1lbmRlbWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb2N1bWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9jdW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvY3VtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudEpzb24pXG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9zc2llcnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlbmFtZSA9IGRvc3NpZXJTcGxpdFBhdGhbZG9zc2llclNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvc3NpZXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9zc2llclNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9zc2llckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb3NzaWVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvc3NpZXIgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llckpzb24pXG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9IHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7c2NydXRpbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzY3J1dGluRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHNjcnV0aW4gPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGluKHNjcnV0aW5Kc29uKVxuICAgICAgICBpZiAoc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9IHNjcnV0aW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHF1ZXN0aW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUXVlc3Rpb24gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUXVlc3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnF1ZXN0aW9ucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9IHF1ZXN0aW9uU3BsaXRQYXRoW3F1ZXN0aW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcXVlc3Rpb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnF1ZXN0aW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtxdWVzdGlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlc3Rpb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocXVlc3Rpb25GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBRdWVzdGlvbnNDb252ZXJ0LnRvUXVlc3Rpb24ocXVlc3Rpb25Kc29uKVxuICAgICAgICBpZiAocXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPSBxdWVzdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Db21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1RmlsZW5hbWUgPSBjb21wdGVSZW5kdVBhdGhbY29tcHRlUmVuZHVQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghY29tcHRlUmVuZHVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmNvbXB0ZVJlbmR1UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7Y29tcHRlUmVuZHVGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNvbXB0ZVJlbmR1RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1ID0gQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVSZW5kdShjb21wdGVSZW5kdUpzb24pXG4gICAgICAgIGlmIChjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9IGNvbXB0ZVJlbmR1XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgICBxdWVzdGlvbkJ5VWlkLFxuICAgIGNvbXB0ZVJlbmR1QnlVaWQsXG4gIH1cbn1cblxuLy8vIExvYWQgZGF0YSBmcm9tIGJpZyBtb25vbHl0aWMgZmlsZXMuXG4vLy8gRGVwcmVjYXRlZDogQXNzZW1ibMOpZSBuYXRpb25hbGUgb3BlbiBkYXRhIG5vIG1vcmUgdXNlcyBtb25vbHl0aWMgZmlsZXMuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lcyA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBhY3RldXIgb2YgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2YgYWN0ZXVyc0V0T3JnYW5lcy5vcmdhbmVzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhZ2VuZGFzID0gQWdlbmRhc0NvbnZlcnQudG9BZ2VuZGFzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudHMoanNvbilcbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyIG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcnNQYXJsZW1lbnRhaXJlcykge1xuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIGNvbnN0IHBob3RvQnlVaWQgPSB7fVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBzY3J1dGlucyA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW5zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygc2NydXRpbnMuc2NydXRpbnMpIHtcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBxdWVzdGlvbnMgPSBRdWVzdGlvbnNDb252ZXJ0LnRvUXVlc3Rpb25zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHF1ZXN0aW9ucy5xdWVzdGlvbnMpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID0gcXVlc3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBjb21wdGVzUmVuZHVzID0gQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVzUmVuZHVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1IG9mIGNvbXB0ZXNSZW5kdXMuY29tcHRlc1JlbmR1cykge1xuICAgICAgICBpZiAoY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPSBjb21wdGVSZW5kdVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gICAgcXVlc3Rpb25CeVVpZCxcbiAgICBjb21wdGVSZW5kdUJ5VWlkLFxuICB9XG59XG5cbi8qKlxuICogUmVhZCBpbmZvcyBvZiBhIGRvY3VtZW50IG9yIGEgZGl2aXNpb24gb2YgYSBkb2N1bWVudCBmcm9tIGZpbGUgc3lzdGVtXG4gKlxuICogQHBhcmFtIGRhdGFEaXJcbiAqIEBwYXJhbSB1aWQgVUlEIG9mIGEgZG9jdW1lbnQgb3IgYSBkaXZpc2lvblxuICogQHBhcmFtIGZvcm1hdHMgcmVxdWVzdGVkIGZvcm1hdHMgb2YgdGhlIGRvY3VtZW50IGluIGRlY3JlYXNpbmcgcHJlZmVyZW5jZSBvcmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZShcbiAgZGF0YURpcjogc3RyaW5nLFxuICB1aWQ6IHN0cmluZyxcbiAgZm9ybWF0czogRG9jdW1lbnRVcmxGb3JtYXRbXSxcbik6XG4gIHwge1xuICAgICAgZm9ybWF0OiBEb2N1bWVudFVybEZvcm1hdFxuICAgICAgcGF0aDogc3RyaW5nXG4gICAgICB1cmw6IHN0cmluZ1xuICAgIH1cbiAgfCB1bmRlZmluZWQge1xuICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgXCJEb2N1bWVudHNcIilcbiAgY29uc3QgZG9jdW1lbnREaXIgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgdWlkKVxuICBjb25zdCBpbmRleFBhdGggPSBwYXRoLmpvaW4oZG9jdW1lbnREaXIsIFwiaW5kZXguanNvblwiKVxuICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGluZGV4UGF0aCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgaW5kZXggPSBmcy5yZWFkSnNvblN5bmMoaW5kZXhQYXRoKSBhcyBEb2N1bWVudEZpbGVzSW5kZXhcbiAgZm9yIChjb25zdCBmb3JtYXQgb2YgZm9ybWF0cykge1xuICAgIGZvciAoY29uc3QgeyBmaWxlbmFtZSwgdXJsIH0gb2YgaW5kZXhbZm9ybWF0XSA/PyBbXSkge1xuICAgICAgaWYgKGZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGZvcm1hdCwgcGF0aDogcGF0aC5qb2luKGRvY3VtZW50RGlyLCBmaWxlbmFtZSksIHVybCB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVQaG90b3NEZXB1dGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0ge1xuICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICBkYXRhRGlyLFxuICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgfWAsXG4gICAgXCJkZXB1dGVzLmpzb25cIixcbiAgKVxuICBpZiAobG9nKSB7XG4gICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgfVxuICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICByZXR1cm4gSlNPTi5wYXJzZShqc29uKSBhcyB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVQaG90b3NTZW5hdGV1cnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0ge1xuICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICBkYXRhRGlyLFxuICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgKVxuICBpZiAobG9nKSB7XG4gICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgfVxuICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICByZXR1cm4gSlNPTi5wYXJzZShqc29uKSBhcyB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSB1aWQubWF0Y2goZG9jdW1lbnRVaWRSZWdleClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb2N1bWVudCBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgZ3JvdXBzID0gbWF0Y2ghLmdyb3VwcyBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIGNvbnN0IGRvY3VtZW50VHlwZSA9IHBhdGguam9pbihcbiAgICBkb2N1bWVudHNEaXIsXG4gICAgZ3JvdXBzLmRvY3VtZW50VHlwZSA/PyBncm91cHMuZG9jdW1lbnRUeXBlMixcbiAgKVxuICBjb25zdCBjaGFtYnJlRGlyID0gcGF0aC5qb2luKGRvY3VtZW50VHlwZSwgZ3JvdXBzLmNoYW1icmUgPz8gZ3JvdXBzLmNoYW1icmUyKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKFxuICAgIGNoYW1icmVEaXIsXG4gICAgZ3JvdXBzLnJlcHVibGlxdWUgPz8gZ3JvdXBzLnJlcHVibGlxdWUyLFxuICApXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKFxuICAgIHJlcHVibGlxdWVEaXIsXG4gICAgZ3JvdXBzLmxlZ2lzbGF0dXJlID8/IGdyb3Vwcy5sZWdpc2xhdHVyZTIsXG4gIClcbiAgY29uc3QgZXRhdCA9IGdyb3Vwcy5ldGF0XG4gIGlmIChldGF0ID09PSB1bmRlZmluZWQpIHtcbiAgICBmcy5lbnN1cmVEaXJTeW5jKGxlZ2lzbGF0dXJlRGlyKVxuICAgIHJldHVybiBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIHVpZClcbiAgfVxuICBjb25zdCBldGF0RGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBldGF0KVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIChncm91cHMubnVtZXJvID8/IGdyb3Vwcy5udW1lcm8yKVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihldGF0RGlyLCBudW1lcm8uc3Vic3RyaW5nKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICB1aWQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoRnJvbVVpZChkb3NzaWVyc0RpciwgdWlkLCBkb3NzaWVyVWlkUmVnZXgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHJldW5pb25VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciByZXVuaW9uIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBjaGFtYnJlRGlyID0gcGF0aC5qb2luKHJldW5pb25zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzJdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbM10pXG4gIGNvbnN0IHNlc3Npb25EaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs0XSlcbiAgY29uc3QgaWREaXIgPSBwYXRoLmpvaW4oc2Vzc2lvbkRpciwgbWF0Y2ghWzVdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDAwMDBcIiArIG1hdGNoIVs2XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA5KVxuICBjb25zdCBudW1lcm9NaWxsaW9uc0RpciA9IHBhdGguam9pbihpZERpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obnVtZXJvTWlsbGlvbnNEaXIsIG51bWVyby5zdWJzdHJpbmcoMywgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gc2NydXRpblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHNjcnV0aW4gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oc2NydXRpbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbMl0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVszXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbNF1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tUXVlc3Rpb25VaWQoZGF0YURpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoRnJvbVVpZChkYXRhRGlyLCB1aWQsIHF1ZXN0aW9uVWlkUmVnZXgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbUNvbXB0ZVJlbmR1VWlkKGRhdGFEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aEZyb21VaWQoZGF0YURpciwgdWlkLCBjb21wdGVSZW5kdVVpZFJlZ2V4KVxufVxuXG4vLyBHZXQgc3RhbmRhcmQgcGF0aCBmb3Igb2JqZWN0IHdpdGggdWlkIDogcmVwdWJsaXF1ZSA+IGxlZ2lzbGF0dXJlID4gZ3JvdXAgb2JqZWN0cyBieSB0aG91c2FuZHNcbmZ1bmN0aW9uIHBhdGhGcm9tVWlkKGRhdGFEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcsIGRhdGFSZWdleHA6IFJlZ0V4cCk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZGF0YVJlZ2V4cC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBvYmplY3Qgd2l0aCBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihkYXRhRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsT0FBT0MsRUFBRSxNQUFNLFVBQVU7QUFDekIsT0FBT0MsSUFBSSxNQUFNLE1BQU07QUFBQSxTQUVkQyxlQUFlO0FBQUEsU0FDZkMsUUFBUSxFQUFFRCxlQUFlO0FBQUEsU0FFekJFLE9BQU87QUFBQSxTQUNQQSxPQUFPO0FB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