@tricoteuses/assemblee 1.1.9 → 1.1.10

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 (129) hide show
  1. package/LICENSE.md +5 -1
  2. package/README.md +69 -178
  3. package/lib/bugs/acteur-00010/plugin.test.js +1 -1
  4. package/lib/bugs/agenda-00002/plugin.test.js +1 -1
  5. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -1
  6. package/lib/bugs/agenda-00002.js +3 -3
  7. package/lib/bugs/agenda-00002.mjs +2 -2
  8. package/lib/bugs/agenda-00008/plugin.test.js +1 -1
  9. package/lib/bugs/agenda-00011/plugin.test.js +1 -1
  10. package/lib/bugs/agenda-00011/plugin.test.mjs +1 -1
  11. package/lib/bugs/agenda-00011.js +1 -1
  12. package/lib/bugs/agenda-00011.mjs +1 -1
  13. package/lib/bugs.js +1 -1
  14. package/lib/bugs.mjs +1 -1
  15. package/lib/cleaners/acteurs.js +1 -1
  16. package/lib/cleaners/acteurs.mjs +1 -1
  17. package/lib/cleaners/amendements.js +1 -1
  18. package/lib/cleaners/amendements.mjs +1 -1
  19. package/lib/cleaners/debats.d.ts +1 -0
  20. package/lib/cleaners/debats.js +12 -0
  21. package/lib/cleaners/debats.mjs +5 -0
  22. package/lib/cleaners/index.d.ts +2 -0
  23. package/lib/cleaners/index.js +15 -1
  24. package/lib/cleaners/index.mjs +3 -1
  25. package/lib/cleaners/questions.d.ts +1 -0
  26. package/lib/cleaners/questions.js +12 -0
  27. package/lib/cleaners/questions.mjs +5 -0
  28. package/lib/cleaners/reunions.js +1 -1
  29. package/lib/cleaners/reunions.mjs +1 -1
  30. package/lib/cleaners/xml.js +12 -6
  31. package/lib/cleaners/xml.mjs +12 -6
  32. package/lib/datasets.d.ts +5 -1
  33. package/lib/datasets.js +62 -4
  34. package/lib/datasets.mjs +62 -4
  35. package/lib/dates.js +1 -1
  36. package/lib/dates.mjs +1 -1
  37. package/lib/dossiers_legislatifs.js +1 -1
  38. package/lib/dossiers_legislatifs.mjs +1 -1
  39. package/lib/file_systems.js +4 -4
  40. package/lib/file_systems.mjs +2 -2
  41. package/lib/git.js +1 -1
  42. package/lib/git.mjs +1 -1
  43. package/lib/loaders.d.ts +21 -0
  44. package/lib/loaders.js +608 -202
  45. package/lib/loaders.mjs +200 -3
  46. package/lib/organes.js +1 -1
  47. package/lib/organes.mjs +1 -1
  48. package/lib/parsers/documents.js +1 -1
  49. package/lib/parsers/documents.mjs +1 -1
  50. package/lib/parsers/recherche_amendements.js +3 -2
  51. package/lib/parsers/recherche_amendements.mjs +1 -1
  52. package/lib/raw_types/acteurs_et_organes.js +1 -1
  53. package/lib/raw_types/acteurs_et_organes.mjs +1 -1
  54. package/lib/raw_types/agendas.js +1 -1
  55. package/lib/raw_types/agendas.mjs +1 -1
  56. package/lib/raw_types/amendements.d.ts +2 -0
  57. package/lib/raw_types/amendements.js +5 -3
  58. package/lib/raw_types/amendements.mjs +5 -3
  59. package/lib/raw_types/debats.d.ts +190 -0
  60. package/lib/raw_types/debats.js +816 -0
  61. package/lib/raw_types/debats.mjs +758 -0
  62. package/lib/raw_types/dossiers_legislatifs.js +11 -2
  63. package/lib/raw_types/dossiers_legislatifs.mjs +1 -1
  64. package/lib/raw_types/questions.d.ts +129 -0
  65. package/lib/raw_types/questions.js +497 -0
  66. package/lib/raw_types/questions.mjs +439 -0
  67. package/lib/raw_types/scrutins.js +1 -1
  68. package/lib/raw_types/scrutins.mjs +1 -1
  69. package/lib/scripts/bugs_helper.js +1 -1
  70. package/lib/scripts/bugs_helper.mjs +1 -1
  71. package/lib/scripts/clean_reorganized_data.js +174 -24
  72. package/lib/scripts/clean_reorganized_data.mjs +127 -13
  73. package/lib/scripts/diff_amendements.js +1 -1
  74. package/lib/scripts/diff_amendements.mjs +1 -1
  75. package/lib/scripts/document_dossiers_legislatifs.js +1 -1
  76. package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
  77. package/lib/scripts/get_today_reunions.js +1 -1
  78. package/lib/scripts/get_today_reunions.mjs +1 -1
  79. package/lib/scripts/merge_scrutins.js +1 -1
  80. package/lib/scripts/merge_scrutins.mjs +1 -1
  81. package/lib/scripts/parse_textes_lois.js +4 -3
  82. package/lib/scripts/parse_textes_lois.mjs +1 -1
  83. package/lib/scripts/raw_types_from_amendements.js +1 -1
  84. package/lib/scripts/raw_types_from_amendements.mjs +1 -1
  85. package/lib/scripts/reorganize_data.js +189 -7
  86. package/lib/scripts/reorganize_data.mjs +136 -8
  87. package/lib/scripts/retrieve_deputes_photos.js +7 -1
  88. package/lib/scripts/retrieve_deputes_photos.mjs +7 -1
  89. package/lib/scripts/retrieve_documents.js +1 -1
  90. package/lib/scripts/retrieve_documents.mjs +1 -1
  91. package/lib/scripts/retrieve_open_data.js +105 -37
  92. package/lib/scripts/retrieve_open_data.mjs +34 -2
  93. package/lib/scripts/retrieve_pending_amendments.js +7 -1
  94. package/lib/scripts/retrieve_pending_amendments.mjs +7 -1
  95. package/lib/scripts/retrieve_senateurs_photos.js +10 -2
  96. package/lib/scripts/retrieve_senateurs_photos.mjs +7 -1
  97. package/lib/scripts/retrieve_textes_lois.js +1 -1
  98. package/lib/scripts/retrieve_textes_lois.mjs +1 -1
  99. package/lib/scripts/test_load.js +1 -1
  100. package/lib/scripts/test_load.mjs +1 -1
  101. package/lib/scripts/test_load_big_files.js +1 -1
  102. package/lib/scripts/test_load_big_files.mjs +1 -1
  103. package/lib/scripts/validate_json.js +1 -1
  104. package/lib/scripts/validate_json.mjs +1 -1
  105. package/lib/strings.js +1 -1
  106. package/lib/strings.mjs +1 -1
  107. package/lib/types/acteurs_et_organes.js +1 -1
  108. package/lib/types/acteurs_et_organes.mjs +1 -1
  109. package/lib/types/agendas.js +1 -1
  110. package/lib/types/agendas.mjs +1 -1
  111. package/lib/types/amendements.d.ts +1 -0
  112. package/lib/types/amendements.js +3 -2
  113. package/lib/types/amendements.mjs +3 -2
  114. package/lib/types/debats.d.ts +184 -0
  115. package/lib/types/debats.js +805 -0
  116. package/lib/types/debats.mjs +747 -0
  117. package/lib/types/dossiers_legislatifs.js +11 -2
  118. package/lib/types/dossiers_legislatifs.mjs +1 -1
  119. package/lib/types/questions.d.ts +122 -0
  120. package/lib/types/questions.js +482 -0
  121. package/lib/types/questions.mjs +424 -0
  122. package/lib/types/scrutins.js +1 -1
  123. package/lib/types/scrutins.mjs +1 -1
  124. package/lib/urls.js +1 -1
  125. package/lib/urls.mjs +1 -1
  126. package/package.json +14 -6
  127. package/lib/scripts/clean_data.d.ts +0 -1
  128. package/lib/scripts/clean_data.js +0 -309
  129. package/lib/scripts/clean_data.mjs +0 -171
@@ -0,0 +1,424 @@
1
+ // To parse this data:
2
+ //
3
+ // import { Convert, Questions } from "./file";
4
+ //
5
+ // const questions = Convert.toQuestions(json);
6
+ //
7
+ // These functions will throw an error if the JSON doesn't
8
+ // match the expected interface, even if the JSON is valid.
9
+
10
+ export let QuestionXsiType = /*#__PURE__*/function (QuestionXsiType) {
11
+ QuestionXsiType["QuestionEcrite"] = "QuestionEcrite_Type";
12
+ QuestionXsiType["QuestionGouvernement"] = "QuestionGouvernement_Type";
13
+ QuestionXsiType["QuestionOrale"] = "QuestionOrale_Type";
14
+ return QuestionXsiType;
15
+ }({});
16
+ export let CodeCloture = /*#__PURE__*/function (CodeCloture) {
17
+ CodeCloture["Au"] = "AU";
18
+ CodeCloture["Fm"] = "FM";
19
+ CodeCloture["RepPub"] = "REP_PUB";
20
+ return CodeCloture;
21
+ }({});
22
+ export let TypeJo = /*#__PURE__*/function (TypeJo) {
23
+ TypeJo["JoQuestion"] = "JO_QUESTION";
24
+ TypeJo["JoLoiDecret"] = "JO_LOI_DECRET";
25
+ TypeJo["JoDebate"] = "JO_DEBAT";
26
+ return TypeJo;
27
+ }({});
28
+ export let LibelleCloture = /*#__PURE__*/function (LibelleCloture) {
29
+ LibelleCloture["FinDeMandat"] = "Fin de mandat";
30
+ LibelleCloture["Retrait\xC0LInitiativeDeLAuteur"] = "Retrait \xE0 l'initiative de l'auteur";
31
+ LibelleCloture["R\xE9ponsePubli\xE9e"] = "R\xE9ponse publi\xE9e";
32
+ return LibelleCloture;
33
+ }({});
34
+ export let Type = /*#__PURE__*/function (Type) {
35
+ Type["Qe"] = "QE";
36
+ Type["Qg"] = "QG";
37
+ Type["Qosd"] = "QOSD";
38
+ return Type;
39
+ }({});
40
+
41
+ // Converts JSON strings to/from your types
42
+ // and asserts the results of JSON.parse at runtime
43
+ export class Convert {
44
+ static toQuestions(json) {
45
+ return cast(JSON.parse(json), r("Questions"));
46
+ }
47
+ static questionsToJson(value) {
48
+ return JSON.stringify(uncast(value, r("Questions")), null, 2);
49
+ }
50
+ static toQuestion(json) {
51
+ return cast(JSON.parse(json), r("Question"));
52
+ }
53
+ static questionToJson(value) {
54
+ return JSON.stringify(uncast(value, r("Question")), null, 2);
55
+ }
56
+ }
57
+ function invalidValue(typ, val, key = "") {
58
+ if (key) {
59
+ throw Error(`Invalid value for key "${key}". Expected type ${JSON.stringify(typ)} but got ${JSON.stringify(val)}`);
60
+ }
61
+ throw Error(`Invalid value ${JSON.stringify(val)} for type ${JSON.stringify(typ)}`);
62
+ }
63
+ function jsonToJSProps(typ) {
64
+ if (typ.jsonToJS === undefined) {
65
+ const map = {};
66
+ typ.props.forEach(p => map[p.json] = {
67
+ key: p.js,
68
+ typ: p.typ
69
+ });
70
+ typ.jsonToJS = map;
71
+ }
72
+ return typ.jsonToJS;
73
+ }
74
+ function jsToJSONProps(typ) {
75
+ if (typ.jsToJSON === undefined) {
76
+ const map = {};
77
+ typ.props.forEach(p => map[p.js] = {
78
+ key: p.json,
79
+ typ: p.typ
80
+ });
81
+ typ.jsToJSON = map;
82
+ }
83
+ return typ.jsToJSON;
84
+ }
85
+ function transform(val, typ, getProps, key = "") {
86
+ function transformPrimitive(typ, val) {
87
+ if (typeof typ === typeof val) return val;
88
+ return invalidValue(typ, val, key);
89
+ }
90
+ function transformUnion(typs, val) {
91
+ // val must validate against one typ in typs
92
+ const l = typs.length;
93
+ for (let i = 0; i < l; i++) {
94
+ const typ = typs[i];
95
+ try {
96
+ return transform(val, typ, getProps);
97
+ } catch (_) {}
98
+ }
99
+ return invalidValue(typs, val);
100
+ }
101
+ function transformEnum(cases, val) {
102
+ if (cases.indexOf(val) !== -1) return val;
103
+ return invalidValue(cases, val);
104
+ }
105
+ function transformArray(typ, val) {
106
+ // val must be an array with no invalid elements
107
+ if (!Array.isArray(val)) return invalidValue("array", val);
108
+ return val.map(el => transform(el, typ, getProps));
109
+ }
110
+ function transformDate(val) {
111
+ if (val === null) {
112
+ return null;
113
+ }
114
+ const d = new Date(val);
115
+ if (isNaN(d.valueOf())) {
116
+ return invalidValue("Date", val);
117
+ }
118
+ return d;
119
+ }
120
+ function transformObject(props, additional, val) {
121
+ if (val === null || typeof val !== "object" || Array.isArray(val)) {
122
+ return invalidValue("object", val);
123
+ }
124
+ const result = {};
125
+ Object.getOwnPropertyNames(props).forEach(key => {
126
+ const prop = props[key];
127
+ const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
128
+ result[prop.key] = transform(v, prop.typ, getProps, prop.key);
129
+ });
130
+ Object.getOwnPropertyNames(val).forEach(key => {
131
+ if (!Object.prototype.hasOwnProperty.call(props, key)) {
132
+ result[key] = transform(val[key], additional, getProps, key);
133
+ }
134
+ });
135
+ return result;
136
+ }
137
+ if (typ === "any") return val;
138
+ if (typ === null) {
139
+ if (val === null) return val;
140
+ return invalidValue(typ, val);
141
+ }
142
+ if (typ === false) return invalidValue(typ, val);
143
+ while (typeof typ === "object" && typ.ref !== undefined) {
144
+ typ = typeMap[typ.ref];
145
+ }
146
+ if (Array.isArray(typ)) return transformEnum(typ, val);
147
+ if (typeof typ === "object") {
148
+ return typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val) : typ.hasOwnProperty("arrayItems") ? transformArray(typ.arrayItems, val) : typ.hasOwnProperty("props") ? transformObject(getProps(typ), typ.additional, val) : invalidValue(typ, val);
149
+ }
150
+ // Numbers can be parsed by Date but shouldn't be.
151
+ if (typ === Date && typeof val !== "number") return transformDate(val);
152
+ return transformPrimitive(typ, val);
153
+ }
154
+ function cast(val, typ) {
155
+ return transform(val, typ, jsonToJSProps);
156
+ }
157
+ function uncast(val, typ) {
158
+ return transform(val, typ, jsToJSONProps);
159
+ }
160
+ function a(typ) {
161
+ return {
162
+ arrayItems: typ
163
+ };
164
+ }
165
+ function u(...typs) {
166
+ return {
167
+ unionMembers: typs
168
+ };
169
+ }
170
+ function o(props, additional) {
171
+ return {
172
+ props,
173
+ additional
174
+ };
175
+ }
176
+
177
+ // function m(additional: any) {
178
+ // return { props: [], additional };
179
+ // }
180
+
181
+ function r(name) {
182
+ return {
183
+ ref: name
184
+ };
185
+ }
186
+ const typeMap = {
187
+ Questions: o([{
188
+ json: "questions",
189
+ js: "questions",
190
+ typ: a(r("Question"))
191
+ }], false),
192
+ Question: o([{
193
+ json: "schemaVersion",
194
+ js: "schemaVersion",
195
+ typ: u(undefined, "")
196
+ }, {
197
+ json: "@xsi:type",
198
+ js: "@xsi:type",
199
+ typ: r("QuestionXsiType")
200
+ }, {
201
+ json: "uid",
202
+ js: "uid",
203
+ typ: ""
204
+ }, {
205
+ json: "identifiant",
206
+ js: "identifiant",
207
+ typ: r("Identifiant")
208
+ }, {
209
+ json: "type",
210
+ js: "type",
211
+ typ: r("Type")
212
+ }, {
213
+ json: "indexationAN",
214
+ js: "indexationAN",
215
+ typ: r("IndexationAn")
216
+ }, {
217
+ json: "auteur",
218
+ js: "auteur",
219
+ typ: r("Auteur")
220
+ }, {
221
+ json: "minInt",
222
+ js: "minInt",
223
+ typ: r("MinInt")
224
+ }, {
225
+ json: "minAttribs",
226
+ js: "minAttribs",
227
+ typ: r("MinAttribs")
228
+ }, {
229
+ json: "textesQuestion",
230
+ js: "textesQuestion",
231
+ typ: u(r("TextesQuestion"), null, undefined)
232
+ }, {
233
+ json: "textesReponse",
234
+ js: "textesReponse",
235
+ typ: u(r("TextesReponse"), null, undefined)
236
+ }, {
237
+ json: "cloture",
238
+ js: "cloture",
239
+ typ: u(r("Cloture"), null, undefined)
240
+ }, {
241
+ json: "signalement",
242
+ js: "signalement",
243
+ typ: u(r("Signalement"), null, undefined)
244
+ }, {
245
+ json: "renouvellements",
246
+ js: "renouvellements",
247
+ typ: u(r("Renouvellements"), null, undefined)
248
+ }], false),
249
+ Auteur: o([{
250
+ json: "identite",
251
+ js: "identite",
252
+ typ: r("Identite")
253
+ }, {
254
+ json: "groupe",
255
+ js: "groupe",
256
+ typ: r("Groupe")
257
+ }], false),
258
+ Groupe: o([{
259
+ json: "organeRef",
260
+ js: "organeRef",
261
+ typ: ""
262
+ }, {
263
+ json: "abrege",
264
+ js: "abrege",
265
+ typ: ""
266
+ }, {
267
+ json: "developpe",
268
+ js: "developpe",
269
+ typ: ""
270
+ }], false),
271
+ Identite: o([{
272
+ json: "acteurRef",
273
+ js: "acteurRef",
274
+ typ: ""
275
+ }, {
276
+ json: "mandatRef",
277
+ js: "mandatRef",
278
+ typ: ""
279
+ }], false),
280
+ Cloture: o([{
281
+ json: "codeCloture",
282
+ js: "codeCloture",
283
+ typ: r("CodeCloture")
284
+ }, {
285
+ json: "libelleCloture",
286
+ js: "libelleCloture",
287
+ typ: r("LibelleCloture")
288
+ }, {
289
+ json: "dateCloture",
290
+ js: "dateCloture",
291
+ typ: ""
292
+ }, {
293
+ json: "infoJO",
294
+ js: "infoJO",
295
+ typ: u(r("InfoJo"), null)
296
+ }], false),
297
+ Identifiant: o([{
298
+ json: "numero",
299
+ js: "numero",
300
+ typ: ""
301
+ }, {
302
+ json: "regime",
303
+ js: "regime",
304
+ typ: ""
305
+ }, {
306
+ json: "legislature",
307
+ js: "legislature",
308
+ typ: ""
309
+ }], false),
310
+ IndexationAn: o([{
311
+ json: "rubrique",
312
+ js: "rubrique",
313
+ typ: u("", null)
314
+ }, {
315
+ json: "teteAnalyse",
316
+ js: "teteAnalyse",
317
+ typ: null
318
+ }, {
319
+ json: "analyses",
320
+ js: "analyses",
321
+ typ: r("Analyse")
322
+ }], false),
323
+ Analyse: o([{
324
+ json: "analyse",
325
+ js: "analyse",
326
+ typ: u("", null)
327
+ }], false),
328
+ MinAttribs: o([{
329
+ json: "minAttrib",
330
+ js: "minAttrib",
331
+ typ: u(a(r("MinAttribElement")), r("MinAttribElement"))
332
+ }], false),
333
+ MinAttribElement: o([{
334
+ json: "infoJO",
335
+ js: "infoJO",
336
+ typ: r("InfoJo")
337
+ }, {
338
+ json: "denomination",
339
+ js: "denomination",
340
+ typ: r("MinInt")
341
+ }], false),
342
+ MinInt: o([{
343
+ json: "abrege",
344
+ js: "abrege",
345
+ typ: ""
346
+ }, {
347
+ json: "developpe",
348
+ js: "developpe",
349
+ typ: ""
350
+ }], false),
351
+ InfoJo: o([{
352
+ json: "typeJO",
353
+ js: "typeJO",
354
+ typ: r("TypeJo")
355
+ }, {
356
+ json: "dateJO",
357
+ js: "dateJO",
358
+ typ: ""
359
+ }, {
360
+ json: "pageJO",
361
+ js: "pageJO",
362
+ typ: u("", null)
363
+ }, {
364
+ json: "numJO",
365
+ js: "numJO",
366
+ typ: u("", null)
367
+ }, {
368
+ json: "urlLegifrance",
369
+ js: "urlLegifrance",
370
+ typ: u("", null)
371
+ }, {
372
+ json: "referenceNOR",
373
+ js: "referenceNOR",
374
+ typ: u("", null)
375
+ }], false),
376
+ TextesQuestion: o([{
377
+ json: "texteQuestion",
378
+ js: "texteQuestion",
379
+ typ: u(a(r("Texte")), r("Texte"))
380
+ }], false),
381
+ Texte: o([{
382
+ json: "infoJO",
383
+ js: "infoJO",
384
+ typ: r("InfoJo")
385
+ }, {
386
+ json: "texte",
387
+ js: "texte",
388
+ typ: u("", null)
389
+ }, {
390
+ json: "erratum",
391
+ js: "erratum",
392
+ typ: u(undefined, "")
393
+ }], false),
394
+ TextesReponse: o([{
395
+ json: "texteReponse",
396
+ js: "texteReponse",
397
+ typ: u(a(r("Texte")), r("Texte"))
398
+ }], false),
399
+ Signalement: o([{
400
+ json: "infoJO",
401
+ js: "infoJO",
402
+ typ: r("InfoJo")
403
+ }, {
404
+ json: "dateDepotSignal",
405
+ js: "dateDepotSignal",
406
+ typ: ""
407
+ }], false),
408
+ Renouvellements: o([{
409
+ json: "renouvellement",
410
+ js: "renouvellement",
411
+ typ: u(a(r("Renouvellement")), r("Renouvellement"))
412
+ }], false),
413
+ Renouvellement: o([{
414
+ json: "infoJO",
415
+ js: "infoJO",
416
+ typ: r("InfoJo")
417
+ }], false),
418
+ QuestionXsiType: ["QuestionEcrite_Type", "QuestionGouvernement_Type", "QuestionOrale_Type"],
419
+ CodeCloture: ["AU", "FM", "REP_PUB"],
420
+ TypeJo: ["JO_QUESTION", "JO_LOI_DECRET", "JO_DEBAT"],
421
+ LibelleCloture: ["Fin de mandat", "Retrait à l'initiative de l'auteur", "Réponse publiée"],
422
+ Type: ["QE", "QG", "QOSD"]
423
+ };
424
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJRdWVzdGlvblhzaVR5cGUiLCJDb2RlQ2xvdHVyZSIsIlR5cGVKbyIsIkxpYmVsbGVDbG90dXJlIiwiVHlwZSIsIkNvbnZlcnQiLCJ0b1F1ZXN0aW9ucyIsImpzb24iLCJjYXN0IiwiSlNPTiIsInBhcnNlIiwiciIsInF1ZXN0aW9uc1RvSnNvbiIsInZhbHVlIiwic3RyaW5naWZ5IiwidW5jYXN0IiwidG9RdWVzdGlvbiIsInF1ZXN0aW9uVG9Kc29uIiwiaW52YWxpZFZhbHVlIiwidHlwIiwidmFsIiwia2V5IiwiRXJyb3IiLCJqc29uVG9KU1Byb3BzIiwianNvblRvSlMiLCJ1bmRlZmluZWQiLCJtYXAiLCJwcm9wcyIsImZvckVhY2giLCJwIiwianMiLCJqc1RvSlNPTlByb3BzIiwianNUb0pTT04iLCJ0cmFuc2Zvcm0iLCJnZXRQcm9wcyIsInRyYW5zZm9ybVByaW1pdGl2ZSIsInRyYW5zZm9ybVVuaW9uIiwidHlwcyIsImwiLCJsZW5ndGgiLCJpIiwiXyIsInRyYW5zZm9ybUVudW0iLCJjYXNlcyIsImluZGV4T2YiLCJ0cmFuc2Zvcm1BcnJheSIsIkFycmF5IiwiaXNBcnJheSIsImVsIiwidHJhbnNmb3JtRGF0ZSIsImQiLCJEYXRlIiwiaXNOYU4iLCJ2YWx1ZU9mIiwidHJhbnNmb3JtT2JqZWN0IiwiYWRkaXRpb25hbCIsInJlc3VsdCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm9wIiwidiIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInJlZiIsInR5cGVNYXAiLCJ1bmlvbk1lbWJlcnMiLCJhcnJheUl0ZW1zIiwiYSIsInUiLCJvIiwibmFtZSIsIlF1ZXN0aW9ucyIsIlF1ZXN0aW9uIiwiQXV0ZXVyIiwiR3JvdXBlIiwiSWRlbnRpdGUiLCJDbG90dXJlIiwiSWRlbnRpZmlhbnQiLCJJbmRleGF0aW9uQW4iLCJBbmFseXNlIiwiTWluQXR0cmlicyIsIk1pbkF0dHJpYkVsZW1lbnQiLCJNaW5JbnQiLCJJbmZvSm8iLCJUZXh0ZXNRdWVzdGlvbiIsIlRleHRlIiwiVGV4dGVzUmVwb25zZSIsIlNpZ25hbGVtZW50IiwiUmVub3V2ZWxsZW1lbnRzIiwiUmVub3V2ZWxsZW1lbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcXVlc3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRvIHBhcnNlIHRoaXMgZGF0YTpcbi8vXG4vLyAgIGltcG9ydCB7IENvbnZlcnQsIFF1ZXN0aW9ucyB9IGZyb20gXCIuL2ZpbGVcIjtcbi8vXG4vLyAgIGNvbnN0IHF1ZXN0aW9ucyA9IENvbnZlcnQudG9RdWVzdGlvbnMoanNvbik7XG4vL1xuLy8gVGhlc2UgZnVuY3Rpb25zIHdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIEpTT04gZG9lc24ndFxuLy8gbWF0Y2ggdGhlIGV4cGVjdGVkIGludGVyZmFjZSwgZXZlbiBpZiB0aGUgSlNPTiBpcyB2YWxpZC5cblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbnMge1xuICBxdWVzdGlvbnM6IFF1ZXN0aW9uW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbiB7XG4gIHNjaGVtYVZlcnNpb24/OiBzdHJpbmdcbiAgXCJAeHNpOnR5cGVcIjogUXVlc3Rpb25Yc2lUeXBlXG4gIHVpZDogc3RyaW5nXG4gIGlkZW50aWZpYW50OiBJZGVudGlmaWFudFxuICB0eXBlOiBUeXBlXG4gIGluZGV4YXRpb25BTjogSW5kZXhhdGlvbkFuXG4gIGF1dGV1cjogQXV0ZXVyXG4gIG1pbkludDogTWluSW50XG4gIG1pbkF0dHJpYnM6IE1pbkF0dHJpYnNcbiAgdGV4dGVzUXVlc3Rpb24/OiBUZXh0ZXNRdWVzdGlvbiB8IG51bGxcbiAgdGV4dGVzUmVwb25zZT86IFRleHRlc1JlcG9uc2UgfCBudWxsXG4gIGNsb3R1cmU/OiBDbG90dXJlIHwgbnVsbFxuICBzaWduYWxlbWVudD86IFNpZ25hbGVtZW50IHwgbnVsbFxuICByZW5vdXZlbGxlbWVudHM/OiBSZW5vdXZlbGxlbWVudHMgfCBudWxsXG59XG5cbmV4cG9ydCBlbnVtIFF1ZXN0aW9uWHNpVHlwZSB7XG4gIFF1ZXN0aW9uRWNyaXRlID0gXCJRdWVzdGlvbkVjcml0ZV9UeXBlXCIsXG4gIFF1ZXN0aW9uR291dmVybmVtZW50ID0gXCJRdWVzdGlvbkdvdXZlcm5lbWVudF9UeXBlXCIsXG4gIFF1ZXN0aW9uT3JhbGUgPSBcIlF1ZXN0aW9uT3JhbGVfVHlwZVwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGV1ciB7XG4gIGlkZW50aXRlOiBJZGVudGl0ZVxuICBncm91cGU6IEdyb3VwZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwZSB7XG4gIG9yZ2FuZVJlZjogc3RyaW5nXG4gIGFicmVnZTogc3RyaW5nXG4gIGRldmVsb3BwZTogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdGUge1xuICBhY3RldXJSZWY6IHN0cmluZ1xuICBtYW5kYXRSZWY6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3R1cmUge1xuICBjb2RlQ2xvdHVyZTogQ29kZUNsb3R1cmVcbiAgbGliZWxsZUNsb3R1cmU6IExpYmVsbGVDbG90dXJlXG4gIGRhdGVDbG90dXJlOiBzdHJpbmdcbiAgaW5mb0pPOiBJbmZvSm8gfCBudWxsXG59XG5cbmV4cG9ydCBlbnVtIENvZGVDbG90dXJlIHtcbiAgQXUgPSBcIkFVXCIsXG4gIEZtID0gXCJGTVwiLFxuICBSZXBQdWIgPSBcIlJFUF9QVUJcIixcbn1cblxuZXhwb3J0IGVudW0gVHlwZUpvIHtcbiAgSm9RdWVzdGlvbiA9IFwiSk9fUVVFU1RJT05cIixcbiAgSm9Mb2lEZWNyZXQgPSBcIkpPX0xPSV9ERUNSRVRcIixcbiAgSm9EZWJhdGUgPSBcIkpPX0RFQkFUXCIsXG59XG5cbmV4cG9ydCBlbnVtIExpYmVsbGVDbG90dXJlIHtcbiAgRmluRGVNYW5kYXQgPSBcIkZpbiBkZSBtYW5kYXRcIixcbiAgUmV0cmFpdMOATEluaXRpYXRpdmVEZUxBdXRldXIgPSBcIlJldHJhaXQgw6AgbCdpbml0aWF0aXZlIGRlIGwnYXV0ZXVyXCIsXG4gIFLDqXBvbnNlUHVibGnDqWUgPSBcIlLDqXBvbnNlIHB1Ymxpw6llXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpZmlhbnQge1xuICBudW1lcm86IHN0cmluZ1xuICByZWdpbWU6IHN0cmluZ1xuICBsZWdpc2xhdHVyZTogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhhdGlvbkFuIHtcbiAgcnVicmlxdWU6IHN0cmluZyB8IG51bGxcbiAgdGV0ZUFuYWx5c2U6IG51bGxcbiAgYW5hbHlzZXM6IEFuYWx5c2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXNlIHtcbiAgYW5hbHlzZTogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1pbkF0dHJpYnMge1xuICBtaW5BdHRyaWI6IE1pbkF0dHJpYkVsZW1lbnRbXSB8IE1pbkF0dHJpYkVsZW1lbnRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNaW5BdHRyaWJFbGVtZW50IHtcbiAgaW5mb0pPOiBJbmZvSm9cbiAgZGVub21pbmF0aW9uOiBNaW5JbnRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNaW5JbnQge1xuICBhYnJlZ2U6IHN0cmluZ1xuICBkZXZlbG9wcGU6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRlc1F1ZXN0aW9uIHtcbiAgdGV4dGVRdWVzdGlvbjogVGV4dGVbXSB8IFRleHRlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dGUge1xuICBpbmZvSk86IEluZm9Kb1xuICB0ZXh0ZTogc3RyaW5nIHwgbnVsbFxuICBlcnJhdHVtPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5mb0pvIHtcbiAgdHlwZUpPOiBUeXBlSm9cbiAgZGF0ZUpPOiBzdHJpbmdcbiAgcGFnZUpPOiBzdHJpbmcgfCBudWxsXG4gIG51bUpPOiBzdHJpbmcgfCBudWxsXG4gIHVybExlZ2lmcmFuY2U6IHN0cmluZyB8IG51bGxcbiAgcmVmZXJlbmNlTk9SOiBzdHJpbmcgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dGVzUmVwb25zZSB7XG4gIHRleHRlUmVwb25zZTogVGV4dGVbXSB8IFRleHRlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsZW1lbnQge1xuICBkYXRlRGVwb3RTaWduYWw6IHN0cmluZ1xuICBpbmZvSk86IEluZm9Kb1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbm91dmVsbGVtZW50cyB7XG4gIHJlbm91dmVsbGVtZW50OiBSZW5vdXZlbGxlbWVudFtdIHwgUmVub3V2ZWxsZW1lbnRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5vdXZlbGxlbWVudCB7XG4gIGluZm9KTzogSW5mb0pvXG59XG5cbmV4cG9ydCBlbnVtIFR5cGUge1xuICBRZSA9IFwiUUVcIixcbiAgUWcgPSBcIlFHXCIsXG4gIFFvc2QgPSBcIlFPU0RcIixcbn1cblxuLy8gQ29udmVydHMgSlNPTiBzdHJpbmdzIHRvL2Zyb20geW91ciB0eXBlc1xuLy8gYW5kIGFzc2VydHMgdGhlIHJlc3VsdHMgb2YgSlNPTi5wYXJzZSBhdCBydW50aW1lXG5leHBvcnQgY2xhc3MgQ29udmVydCB7XG4gIHB1YmxpYyBzdGF0aWMgdG9RdWVzdGlvbnMoanNvbjogc3RyaW5nKTogUXVlc3Rpb25zIHtcbiAgICByZXR1cm4gY2FzdChKU09OLnBhcnNlKGpzb24pLCByKFwiUXVlc3Rpb25zXCIpKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBxdWVzdGlvbnNUb0pzb24odmFsdWU6IFF1ZXN0aW9ucyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHVuY2FzdCh2YWx1ZSwgcihcIlF1ZXN0aW9uc1wiKSksIG51bGwsIDIpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvUXVlc3Rpb24oanNvbjogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiBjYXN0KEpTT04ucGFyc2UoanNvbiksIHIoXCJRdWVzdGlvblwiKSlcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcXVlc3Rpb25Ub0pzb24odmFsdWU6IFF1ZXN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodW5jYXN0KHZhbHVlLCByKFwiUXVlc3Rpb25cIikpLCBudWxsLCAyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGludmFsaWRWYWx1ZSh0eXA6IGFueSwgdmFsOiBhbnksIGtleTogYW55ID0gXCJcIik6IG5ldmVyIHtcbiAgaWYgKGtleSkge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYEludmFsaWQgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiLiBFeHBlY3RlZCB0eXBlICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHR5cCxcbiAgICAgICl9IGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWwpfWAsXG4gICAgKVxuICB9XG4gIHRocm93IEVycm9yKFxuICAgIGBJbnZhbGlkIHZhbHVlICR7SlNPTi5zdHJpbmdpZnkodmFsKX0gZm9yIHR5cGUgJHtKU09OLnN0cmluZ2lmeSh0eXApfWAsXG4gIClcbn1cblxuZnVuY3Rpb24ganNvblRvSlNQcm9wcyh0eXA6IGFueSk6IGFueSB7XG4gIGlmICh0eXAuanNvblRvSlMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG1hcDogYW55ID0ge31cbiAgICB0eXAucHJvcHMuZm9yRWFjaCgocDogYW55KSA9PiAobWFwW3AuanNvbl0gPSB7IGtleTogcC5qcywgdHlwOiBwLnR5cCB9KSlcbiAgICB0eXAuanNvblRvSlMgPSBtYXBcbiAgfVxuICByZXR1cm4gdHlwLmpzb25Ub0pTXG59XG5cbmZ1bmN0aW9uIGpzVG9KU09OUHJvcHModHlwOiBhbnkpOiBhbnkge1xuICBpZiAodHlwLmpzVG9KU09OID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBtYXA6IGFueSA9IHt9XG4gICAgdHlwLnByb3BzLmZvckVhY2goKHA6IGFueSkgPT4gKG1hcFtwLmpzXSA9IHsga2V5OiBwLmpzb24sIHR5cDogcC50eXAgfSkpXG4gICAgdHlwLmpzVG9KU09OID0gbWFwXG4gIH1cbiAgcmV0dXJuIHR5cC5qc1RvSlNPTlxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm0odmFsOiBhbnksIHR5cDogYW55LCBnZXRQcm9wczogYW55LCBrZXk6IGFueSA9IFwiXCIpOiBhbnkge1xuICBmdW5jdGlvbiB0cmFuc2Zvcm1QcmltaXRpdmUodHlwOiBzdHJpbmcsIHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIHR5cCA9PT0gdHlwZW9mIHZhbCkgcmV0dXJuIHZhbFxuICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwsIGtleSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVVuaW9uKHR5cHM6IGFueVtdLCB2YWw6IGFueSk6IGFueSB7XG4gICAgLy8gdmFsIG11c3QgdmFsaWRhdGUgYWdhaW5zdCBvbmUgdHlwIGluIHR5cHNcbiAgICBjb25zdCBsID0gdHlwcy5sZW5ndGhcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgdHlwID0gdHlwc1tpXVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybSh2YWwsIHR5cCwgZ2V0UHJvcHMpXG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH1cbiAgICByZXR1cm4gaW52YWxpZFZhbHVlKHR5cHMsIHZhbClcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybUVudW0oY2FzZXM6IHN0cmluZ1tdLCB2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKGNhc2VzLmluZGV4T2YodmFsKSAhPT0gLTEpIHJldHVybiB2YWxcbiAgICByZXR1cm4gaW52YWxpZFZhbHVlKGNhc2VzLCB2YWwpXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1BcnJheSh0eXA6IGFueSwgdmFsOiBhbnkpOiBhbnkge1xuICAgIC8vIHZhbCBtdXN0IGJlIGFuIGFycmF5IHdpdGggbm8gaW52YWxpZCBlbGVtZW50c1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gaW52YWxpZFZhbHVlKFwiYXJyYXlcIiwgdmFsKVxuICAgIHJldHVybiB2YWwubWFwKChlbCkgPT4gdHJhbnNmb3JtKGVsLCB0eXAsIGdldFByb3BzKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybURhdGUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWwpXG4gICAgaWYgKGlzTmFOKGQudmFsdWVPZigpKSkge1xuICAgICAgcmV0dXJuIGludmFsaWRWYWx1ZShcIkRhdGVcIiwgdmFsKVxuICAgIH1cbiAgICByZXR1cm4gZFxuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtT2JqZWN0KFxuICAgIHByb3BzOiB7IFtrOiBzdHJpbmddOiBhbnkgfSxcbiAgICBhZGRpdGlvbmFsOiBhbnksXG4gICAgdmFsOiBhbnksXG4gICk6IGFueSB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgcmV0dXJuIGludmFsaWRWYWx1ZShcIm9iamVjdFwiLCB2YWwpXG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge31cbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm9wcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0gcHJvcHNba2V5XVxuICAgICAgY29uc3QgdiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWwsIGtleSlcbiAgICAgICAgPyB2YWxba2V5XVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmVzdWx0W3Byb3Aua2V5XSA9IHRyYW5zZm9ybSh2LCBwcm9wLnR5cCwgZ2V0UHJvcHMsIHByb3Aua2V5KVxuICAgIH0pXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdHJhbnNmb3JtKHZhbFtrZXldLCBhZGRpdGlvbmFsLCBnZXRQcm9wcywga2V5KVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaWYgKHR5cCA9PT0gXCJhbnlcIikgcmV0dXJuIHZhbFxuICBpZiAodHlwID09PSBudWxsKSB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCkgcmV0dXJuIHZhbFxuICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwpXG4gIH1cbiAgaWYgKHR5cCA9PT0gZmFsc2UpIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwpXG4gIHdoaWxlICh0eXBlb2YgdHlwID09PSBcIm9iamVjdFwiICYmIHR5cC5yZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIHR5cCA9IHR5cGVNYXBbdHlwLnJlZl1cbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0eXApKSByZXR1cm4gdHJhbnNmb3JtRW51bSh0eXAsIHZhbClcbiAgaWYgKHR5cGVvZiB0eXAgPT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gdHlwLmhhc093blByb3BlcnR5KFwidW5pb25NZW1iZXJzXCIpXG4gICAgICA/IHRyYW5zZm9ybVVuaW9uKHR5cC51bmlvbk1lbWJlcnMsIHZhbClcbiAgICAgIDogdHlwLmhhc093blByb3BlcnR5KFwiYXJyYXlJdGVtc1wiKVxuICAgICAgPyB0cmFuc2Zvcm1BcnJheSh0eXAuYXJyYXlJdGVtcywgdmFsKVxuICAgICAgOiB0eXAuaGFzT3duUHJvcGVydHkoXCJwcm9wc1wiKVxuICAgICAgPyB0cmFuc2Zvcm1PYmplY3QoZ2V0UHJvcHModHlwKSwgdHlwLmFkZGl0aW9uYWwsIHZhbClcbiAgICAgIDogaW52YWxpZFZhbHVlKHR5cCwgdmFsKVxuICB9XG4gIC8vIE51bWJlcnMgY2FuIGJlIHBhcnNlZCBieSBEYXRlIGJ1dCBzaG91bGRuJ3QgYmUuXG4gIGlmICh0eXAgPT09IERhdGUgJiYgdHlwZW9mIHZhbCAhPT0gXCJudW1iZXJcIikgcmV0dXJuIHRyYW5zZm9ybURhdGUodmFsKVxuICByZXR1cm4gdHJhbnNmb3JtUHJpbWl0aXZlKHR5cCwgdmFsKVxufVxuXG5mdW5jdGlvbiBjYXN0PFQ+KHZhbDogYW55LCB0eXA6IGFueSk6IFQge1xuICByZXR1cm4gdHJhbnNmb3JtKHZhbCwgdHlwLCBqc29uVG9KU1Byb3BzKVxufVxuXG5mdW5jdGlvbiB1bmNhc3Q8VD4odmFsOiBULCB0eXA6IGFueSk6IGFueSB7XG4gIHJldHVybiB0cmFuc2Zvcm0odmFsLCB0eXAsIGpzVG9KU09OUHJvcHMpXG59XG5cbmZ1bmN0aW9uIGEodHlwOiBhbnkpIHtcbiAgcmV0dXJuIHsgYXJyYXlJdGVtczogdHlwIH1cbn1cblxuZnVuY3Rpb24gdSguLi50eXBzOiBhbnlbXSkge1xuICByZXR1cm4geyB1bmlvbk1lbWJlcnM6IHR5cHMgfVxufVxuXG5mdW5jdGlvbiBvKHByb3BzOiBhbnlbXSwgYWRkaXRpb25hbDogYW55KSB7XG4gIHJldHVybiB7IHByb3BzLCBhZGRpdGlvbmFsIH1cbn1cblxuLy8gZnVuY3Rpb24gbShhZGRpdGlvbmFsOiBhbnkpIHtcbi8vICAgICByZXR1cm4geyBwcm9wczogW10sIGFkZGl0aW9uYWwgfTtcbi8vIH1cblxuZnVuY3Rpb24gcihuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHsgcmVmOiBuYW1lIH1cbn1cblxuY29uc3QgdHlwZU1hcDogYW55ID0ge1xuICBRdWVzdGlvbnM6IG8oXG4gICAgW3sganNvbjogXCJxdWVzdGlvbnNcIiwganM6IFwicXVlc3Rpb25zXCIsIHR5cDogYShyKFwiUXVlc3Rpb25cIikpIH1dLFxuICAgIGZhbHNlLFxuICApLFxuICBRdWVzdGlvbjogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwic2NoZW1hVmVyc2lvblwiLCBqczogXCJzY2hlbWFWZXJzaW9uXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwiQHhzaTp0eXBlXCIsIGpzOiBcIkB4c2k6dHlwZVwiLCB0eXA6IHIoXCJRdWVzdGlvblhzaVR5cGVcIikgfSxcbiAgICAgIHsganNvbjogXCJ1aWRcIiwganM6IFwidWlkXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImlkZW50aWZpYW50XCIsIGpzOiBcImlkZW50aWZpYW50XCIsIHR5cDogcihcIklkZW50aWZpYW50XCIpIH0sXG4gICAgICB7IGpzb246IFwidHlwZVwiLCBqczogXCJ0eXBlXCIsIHR5cDogcihcIlR5cGVcIikgfSxcbiAgICAgIHsganNvbjogXCJpbmRleGF0aW9uQU5cIiwganM6IFwiaW5kZXhhdGlvbkFOXCIsIHR5cDogcihcIkluZGV4YXRpb25BblwiKSB9LFxuICAgICAgeyBqc29uOiBcImF1dGV1clwiLCBqczogXCJhdXRldXJcIiwgdHlwOiByKFwiQXV0ZXVyXCIpIH0sXG4gICAgICB7IGpzb246IFwibWluSW50XCIsIGpzOiBcIm1pbkludFwiLCB0eXA6IHIoXCJNaW5JbnRcIikgfSxcbiAgICAgIHsganNvbjogXCJtaW5BdHRyaWJzXCIsIGpzOiBcIm1pbkF0dHJpYnNcIiwgdHlwOiByKFwiTWluQXR0cmlic1wiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInRleHRlc1F1ZXN0aW9uXCIsXG4gICAgICAgIGpzOiBcInRleHRlc1F1ZXN0aW9uXCIsXG4gICAgICAgIHR5cDogdShyKFwiVGV4dGVzUXVlc3Rpb25cIiksIG51bGwsIHVuZGVmaW5lZCksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInRleHRlc1JlcG9uc2VcIixcbiAgICAgICAganM6IFwidGV4dGVzUmVwb25zZVwiLFxuICAgICAgICB0eXA6IHUocihcIlRleHRlc1JlcG9uc2VcIiksIG51bGwsIHVuZGVmaW5lZCksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcImNsb3R1cmVcIiwganM6IFwiY2xvdHVyZVwiLCB0eXA6IHUocihcIkNsb3R1cmVcIiksIG51bGwsIHVuZGVmaW5lZCkgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJzaWduYWxlbWVudFwiLFxuICAgICAgICBqczogXCJzaWduYWxlbWVudFwiLFxuICAgICAgICB0eXA6IHUocihcIlNpZ25hbGVtZW50XCIpLCBudWxsLCB1bmRlZmluZWQpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJyZW5vdXZlbGxlbWVudHNcIixcbiAgICAgICAganM6IFwicmVub3V2ZWxsZW1lbnRzXCIsXG4gICAgICAgIHR5cDogdShyKFwiUmVub3V2ZWxsZW1lbnRzXCIpLCBudWxsLCB1bmRlZmluZWQpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBBdXRldXI6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImlkZW50aXRlXCIsIGpzOiBcImlkZW50aXRlXCIsIHR5cDogcihcIklkZW50aXRlXCIpIH0sXG4gICAgICB7IGpzb246IFwiZ3JvdXBlXCIsIGpzOiBcImdyb3VwZVwiLCB0eXA6IHIoXCJHcm91cGVcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBHcm91cGU6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcIm9yZ2FuZVJlZlwiLCBqczogXCJvcmdhbmVSZWZcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiYWJyZWdlXCIsIGpzOiBcImFicmVnZVwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJkZXZlbG9wcGVcIiwganM6IFwiZGV2ZWxvcHBlXCIsIHR5cDogXCJcIiB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIElkZW50aXRlOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJhY3RldXJSZWZcIiwganM6IFwiYWN0ZXVyUmVmXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcIm1hbmRhdFJlZlwiLCBqczogXCJtYW5kYXRSZWZcIiwgdHlwOiBcIlwiIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgQ2xvdHVyZTogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwiY29kZUNsb3R1cmVcIiwganM6IFwiY29kZUNsb3R1cmVcIiwgdHlwOiByKFwiQ29kZUNsb3R1cmVcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJsaWJlbGxlQ2xvdHVyZVwiLFxuICAgICAgICBqczogXCJsaWJlbGxlQ2xvdHVyZVwiLFxuICAgICAgICB0eXA6IHIoXCJMaWJlbGxlQ2xvdHVyZVwiKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwiZGF0ZUNsb3R1cmVcIiwganM6IFwiZGF0ZUNsb3R1cmVcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiaW5mb0pPXCIsIGpzOiBcImluZm9KT1wiLCB0eXA6IHUocihcIkluZm9Kb1wiKSwgbnVsbCkgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBJZGVudGlmaWFudDogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwibnVtZXJvXCIsIGpzOiBcIm51bWVyb1wiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJyZWdpbWVcIiwganM6IFwicmVnaW1lXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImxlZ2lzbGF0dXJlXCIsIGpzOiBcImxlZ2lzbGF0dXJlXCIsIHR5cDogXCJcIiB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIEluZGV4YXRpb25BbjogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwicnVicmlxdWVcIiwganM6IFwicnVicmlxdWVcIiwgdHlwOiB1KFwiXCIsIG51bGwpIH0sXG4gICAgICB7IGpzb246IFwidGV0ZUFuYWx5c2VcIiwganM6IFwidGV0ZUFuYWx5c2VcIiwgdHlwOiBudWxsIH0sXG4gICAgICB7IGpzb246IFwiYW5hbHlzZXNcIiwganM6IFwiYW5hbHlzZXNcIiwgdHlwOiByKFwiQW5hbHlzZVwiKSB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIEFuYWx5c2U6IG8oW3sganNvbjogXCJhbmFseXNlXCIsIGpzOiBcImFuYWx5c2VcIiwgdHlwOiB1KFwiXCIsIG51bGwpIH1dLCBmYWxzZSksXG4gIE1pbkF0dHJpYnM6IG8oXG4gICAgW1xuICAgICAge1xuICAgICAgICBqc29uOiBcIm1pbkF0dHJpYlwiLFxuICAgICAgICBqczogXCJtaW5BdHRyaWJcIixcbiAgICAgICAgdHlwOiB1KGEocihcIk1pbkF0dHJpYkVsZW1lbnRcIikpLCByKFwiTWluQXR0cmliRWxlbWVudFwiKSksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIE1pbkF0dHJpYkVsZW1lbnQ6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImluZm9KT1wiLCBqczogXCJpbmZvSk9cIiwgdHlwOiByKFwiSW5mb0pvXCIpIH0sXG4gICAgICB7IGpzb246IFwiZGVub21pbmF0aW9uXCIsIGpzOiBcImRlbm9taW5hdGlvblwiLCB0eXA6IHIoXCJNaW5JbnRcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBNaW5JbnQ6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImFicmVnZVwiLCBqczogXCJhYnJlZ2VcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiZGV2ZWxvcHBlXCIsIGpzOiBcImRldmVsb3BwZVwiLCB0eXA6IFwiXCIgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBJbmZvSm86IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcInR5cGVKT1wiLCBqczogXCJ0eXBlSk9cIiwgdHlwOiByKFwiVHlwZUpvXCIpIH0sXG4gICAgICB7IGpzb246IFwiZGF0ZUpPXCIsIGpzOiBcImRhdGVKT1wiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJwYWdlSk9cIiwganM6IFwicGFnZUpPXCIsIHR5cDogdShcIlwiLCBudWxsKSB9LFxuICAgICAgeyBqc29uOiBcIm51bUpPXCIsIGpzOiBcIm51bUpPXCIsIHR5cDogdShcIlwiLCBudWxsKSB9LFxuICAgICAgeyBqc29uOiBcInVybExlZ2lmcmFuY2VcIiwganM6IFwidXJsTGVnaWZyYW5jZVwiLCB0eXA6IHUoXCJcIiwgbnVsbCkgfSxcbiAgICAgIHsganNvbjogXCJyZWZlcmVuY2VOT1JcIiwganM6IFwicmVmZXJlbmNlTk9SXCIsIHR5cDogdShcIlwiLCBudWxsKSB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFRleHRlc1F1ZXN0aW9uOiBvKFxuICAgIFtcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJ0ZXh0ZVF1ZXN0aW9uXCIsXG4gICAgICAgIGpzOiBcInRleHRlUXVlc3Rpb25cIixcbiAgICAgICAgdHlwOiB1KGEocihcIlRleHRlXCIpKSwgcihcIlRleHRlXCIpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgVGV4dGU6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImluZm9KT1wiLCBqczogXCJpbmZvSk9cIiwgdHlwOiByKFwiSW5mb0pvXCIpIH0sXG4gICAgICB7IGpzb246IFwidGV4dGVcIiwganM6IFwidGV4dGVcIiwgdHlwOiB1KFwiXCIsIG51bGwpIH0sXG4gICAgICB7IGpzb246IFwiZXJyYXR1bVwiLCBqczogXCJlcnJhdHVtXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgVGV4dGVzUmVwb25zZTogbyhcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGpzb246IFwidGV4dGVSZXBvbnNlXCIsXG4gICAgICAgIGpzOiBcInRleHRlUmVwb25zZVwiLFxuICAgICAgICB0eXA6IHUoYShyKFwiVGV4dGVcIikpLCByKFwiVGV4dGVcIikpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBTaWduYWxlbWVudDogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwiaW5mb0pPXCIsIGpzOiBcImluZm9KT1wiLCB0eXA6IHIoXCJJbmZvSm9cIikgfSxcbiAgICAgIHsganNvbjogXCJkYXRlRGVwb3RTaWduYWxcIiwganM6IFwiZGF0ZURlcG90U2lnbmFsXCIsIHR5cDogXCJcIiB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFJlbm91dmVsbGVtZW50czogbyhcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGpzb246IFwicmVub3V2ZWxsZW1lbnRcIixcbiAgICAgICAganM6IFwicmVub3V2ZWxsZW1lbnRcIixcbiAgICAgICAgdHlwOiB1KGEocihcIlJlbm91dmVsbGVtZW50XCIpKSwgcihcIlJlbm91dmVsbGVtZW50XCIpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgUmVub3V2ZWxsZW1lbnQ6IG8oXG4gICAgW3sganNvbjogXCJpbmZvSk9cIiwganM6IFwiaW5mb0pPXCIsIHR5cDogcihcIkluZm9Kb1wiKSB9XSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgUXVlc3Rpb25Yc2lUeXBlOiBbXG4gICAgXCJRdWVzdGlvbkVjcml0ZV9UeXBlXCIsXG4gICAgXCJRdWVzdGlvbkdvdXZlcm5lbWVudF9UeXBlXCIsXG4gICAgXCJRdWVzdGlvbk9yYWxlX1R5cGVcIixcbiAgXSxcbiAgQ29kZUNsb3R1cmU6IFtcIkFVXCIsIFwiRk1cIiwgXCJSRVBfUFVCXCJdLFxuICBUeXBlSm86IFtcIkpPX1FVRVNUSU9OXCIsIFwiSk9fTE9JX0RFQ1JFVFwiLCBcIkpPX0RFQkFUXCJdLFxuICBMaWJlbGxlQ2xvdHVyZTogW1xuICAgIFwiRmluIGRlIG1hbmRhdFwiLFxuICAgIFwiUmV0cmFpdCDDoCBsJ2luaXRpYXRpdmUgZGUgbCdhdXRldXJcIixcbiAgICBcIlLDqXBvbnNlIHB1Ymxpw6llXCIsXG4gIF0sXG4gIFR5cGU6IFtcIlFFXCIsIFwiUUdcIiwgXCJRT1NEXCJdLFxufVxuIl0sIm1hcHBpbmdzIjoiQUFB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