@tricoteuses/assemblee 1.10.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -1
- package/lib/amendements-79bwpkvR.js +154 -0
- package/lib/amendements-CV3s5a0M.js +667 -0
- package/lib/cleaners/index.d.ts +9 -9
- package/lib/cleaners.js +564 -0
- package/lib/datasets.d.ts +3 -3
- package/lib/dossiers_legislatifs.d.ts +2 -2
- package/lib/index.d.ts +17 -22
- package/lib/index.js +1542 -314
- package/lib/inserters.d.ts +5 -5
- package/lib/loaders-9mHdTl9L.js +4158 -0
- package/lib/loaders.d.ts +12 -12
- package/lib/loaders.js +29 -1689
- package/lib/organes.d.ts +1 -1
- package/lib/parse-Ccs6wcUg.js +2512 -0
- package/lib/parsers/index.d.ts +2 -3
- package/lib/parsers/plf.d.ts +1 -0
- package/lib/parsers/recherche_amendements.d.ts +2 -2
- package/lib/parsers/textes_lois.d.ts +1 -23
- package/lib/parsers.js +398 -0
- package/lib/raw_types/acteurs_et_organes.d.ts +4 -2
- package/lib/raw_types/debats.d.ts +2 -2
- package/lib/raw_types/dossiers_legislatifs.d.ts +1 -1
- package/lib/schemas/acteurs_et_organes.json +1166 -0
- package/lib/schemas/agendas.json +1745 -0
- package/lib/schemas/amendements.json +2085 -0
- package/lib/schemas/debats.json +842 -0
- package/lib/schemas/dossiers_legislatifs.json +3874 -0
- package/lib/schemas/legislatures.json +17 -0
- package/lib/schemas/questions.json +704 -0
- package/lib/schemas/scrutins.json +701 -0
- package/lib/scripts/retrieve_deputes_photos.d.ts +1 -1
- package/lib/types/acteurs_et_organes.d.ts +344 -2
- package/lib/types/agendas.d.ts +236 -10
- package/lib/types/amendements.d.ts +276 -1
- package/lib/types/debats.d.ts +52 -2
- package/lib/types/dossiers_legislatifs.d.ts +403 -9
- package/lib/types/questions.d.ts +99 -2
- package/lib/types/scrutins.d.ts +101 -0
- package/lib/urls.d.ts +2 -2
- package/package.json +33 -95
- package/lib/api.js +0 -52
- package/lib/api.mjs +0 -45
- package/lib/bugs/acteur-00010/plugin.test.js +0 -90
- package/lib/bugs/acteur-00010/plugin.test.mjs +0 -33
- package/lib/bugs/acteur-00010.d.ts +0 -7
- package/lib/bugs/acteur-00010.js +0 -116
- package/lib/bugs/acteur-00010.mjs +0 -26
- package/lib/bugs/agenda-00002/plugin.test.js +0 -124
- package/lib/bugs/agenda-00002/plugin.test.mjs +0 -50
- package/lib/bugs/agenda-00002.d.ts +0 -15
- package/lib/bugs/agenda-00002.js +0 -406
- package/lib/bugs/agenda-00002.mjs +0 -172
- package/lib/bugs/agenda-00008/plugin.test.js +0 -92
- package/lib/bugs/agenda-00008/plugin.test.mjs +0 -31
- package/lib/bugs/agenda-00008.d.ts +0 -7
- package/lib/bugs/agenda-00008.js +0 -123
- package/lib/bugs/agenda-00008.mjs +0 -26
- package/lib/bugs/agenda-00011/plugin.test.d.ts +0 -1
- package/lib/bugs/agenda-00011/plugin.test.js +0 -263
- package/lib/bugs/agenda-00011/plugin.test.mjs +0 -152
- package/lib/bugs/agenda-00011.d.ts +0 -16
- package/lib/bugs/agenda-00011.js +0 -333
- package/lib/bugs/agenda-00011.mjs +0 -125
- package/lib/bugs.d.ts +0 -21
- package/lib/bugs.js +0 -452
- package/lib/bugs.mjs +0 -70
- package/lib/cleaners/actes_legislatifs.js +0 -315
- package/lib/cleaners/actes_legislatifs.mjs +0 -253
- package/lib/cleaners/acteurs.js +0 -265
- package/lib/cleaners/acteurs.mjs +0 -180
- package/lib/cleaners/amendements.js +0 -294
- package/lib/cleaners/amendements.mjs +0 -227
- package/lib/cleaners/debats.js +0 -12
- package/lib/cleaners/debats.mjs +0 -5
- package/lib/cleaners/documents.js +0 -205
- package/lib/cleaners/documents.mjs +0 -133
- package/lib/cleaners/dossiers_legislatifs.js +0 -131
- package/lib/cleaners/dossiers_legislatifs.mjs +0 -70
- package/lib/cleaners/index.js +0 -70
- package/lib/cleaners/index.mjs +0 -10
- package/lib/cleaners/organes.js +0 -65
- package/lib/cleaners/organes.mjs +0 -48
- package/lib/cleaners/questions.js +0 -12
- package/lib/cleaners/questions.mjs +0 -5
- package/lib/cleaners/reunions.js +0 -312
- package/lib/cleaners/reunions.mjs +0 -255
- package/lib/cleaners/scrutins.js +0 -340
- package/lib/cleaners/scrutins.mjs +0 -221
- package/lib/cleaners/xml.js +0 -95
- package/lib/cleaners/xml.mjs +0 -58
- package/lib/datasets.js +0 -837
- package/lib/datasets.mjs +0 -755
- package/lib/dates.js +0 -124
- package/lib/dates.mjs +0 -100
- package/lib/dossiers_legislatifs.js +0 -346
- package/lib/dossiers_legislatifs.mjs +0 -208
- package/lib/file_systems.js +0 -162
- package/lib/file_systems.mjs +0 -62
- package/lib/git.js +0 -223
- package/lib/git.mjs +0 -151
- package/lib/index.mjs +0 -17
- package/lib/inserters.js +0 -521
- package/lib/inserters.mjs +0 -337
- package/lib/loaders.mjs +0 -886
- package/lib/logger.js +0 -35
- package/lib/logger.mjs +0 -26
- package/lib/organes.js +0 -22
- package/lib/organes.mjs +0 -15
- package/lib/parsers/documents.d.ts +0 -62
- package/lib/parsers/documents.js +0 -453
- package/lib/parsers/documents.mjs +0 -370
- package/lib/parsers/index.js +0 -40
- package/lib/parsers/index.mjs +0 -4
- package/lib/parsers/recherche_amendements.js +0 -403
- package/lib/parsers/recherche_amendements.mjs +0 -167
- package/lib/parsers/textes_lois.js +0 -307
- package/lib/parsers/textes_lois.mjs +0 -264
- package/lib/raw_types/acteurs_et_organes.js +0 -1213
- package/lib/raw_types/acteurs_et_organes.mjs +0 -1146
- package/lib/raw_types/agendas.js +0 -777
- package/lib/raw_types/agendas.mjs +0 -724
- package/lib/raw_types/amendements.js +0 -1052
- package/lib/raw_types/amendements.mjs +0 -993
- package/lib/raw_types/debats.js +0 -630
- package/lib/raw_types/debats.mjs +0 -573
- package/lib/raw_types/dossiers_legislatifs.js +0 -1529
- package/lib/raw_types/dossiers_legislatifs.mjs +0 -1471
- package/lib/raw_types/questions.js +0 -469
- package/lib/raw_types/questions.mjs +0 -416
- package/lib/raw_types/scrutins.js +0 -651
- package/lib/raw_types/scrutins.mjs +0 -598
- package/lib/schemas/acteur/Acteur.json +0 -56
- package/lib/schemas/acteur/AdresseElectronique.json +0 -52
- package/lib/schemas/acteur/AdressePostale.json +0 -75
- package/lib/schemas/acteur/Civ.json +0 -14
- package/lib/schemas/acteur/Collaborateur.json +0 -29
- package/lib/schemas/acteur/EtatCivil.json +0 -51
- package/lib/schemas/acteur/Ident.json +0 -40
- package/lib/schemas/acteur/Lieu.json +0 -66
- package/lib/schemas/acteur/Mandat.json +0 -192
- package/lib/schemas/acteur/Profession.json +0 -46
- package/lib/schemas/agenda/Agenda.json +0 -318
- package/lib/schemas/agenda/CycleDeVie.json +0 -45
- package/lib/schemas/agenda/PointOdj.json +0 -82
- package/lib/schemas/amendement/Amendement.json +0 -246
- package/lib/schemas/amendement/Diff.json +0 -25
- package/lib/schemas/amendement/DispositifAmdtCredit.json +0 -85
- package/lib/schemas/amendement/Identifiant.json +0 -62
- package/lib/schemas/amendement/PointeurFragmentTexte.json +0 -127
- package/lib/schemas/amendement/Representation.json +0 -67
- package/lib/schemas/amendement/Total.json +0 -26
- package/lib/schemas/converted_from_type/acteurs_et_organes.json +0 -666
- package/lib/schemas/converted_from_type/agendas.json +0 -1100
- package/lib/schemas/converted_from_type/amendements.json +0 -3191
- package/lib/schemas/converted_from_type/debats.json +0 -682
- package/lib/schemas/converted_from_type/deputes.json +0 -26
- package/lib/schemas/converted_from_type/dossiers_legislatifs.json +0 -2918
- package/lib/schemas/converted_from_type/legislatures.json +0 -16
- package/lib/schemas/converted_from_type/questions.json +0 -328
- package/lib/schemas/converted_from_type/scrutins.json +0 -393
- package/lib/schemas/debat/Contenu.json +0 -75
- package/lib/schemas/debat/Debat.json +0 -40
- package/lib/schemas/debat/Metadonnees.json +0 -75
- package/lib/schemas/debat/Orateur.json +0 -60
- package/lib/schemas/debat/Point.json +0 -169
- package/lib/schemas/debat/Sommaire.json +0 -71
- package/lib/schemas/debat/SommaireElement.json +0 -108
- package/lib/schemas/debat/Texte.json +0 -34
- package/lib/schemas/document/CodeLibelle.json +0 -25
- package/lib/schemas/document/Document.json +0 -385
- package/lib/schemas/document/Indexation.json +0 -38
- package/lib/schemas/dossier/ActeLegislatif.json +0 -211
- package/lib/schemas/dossier/ActeLegislatifBase.json +0 -62
- package/lib/schemas/dossier/Agenda.json +0 -23
- package/lib/schemas/dossier/ConseilConstitutionnel.json +0 -35
- package/lib/schemas/dossier/Decision.json +0 -25
- package/lib/schemas/dossier/Dossier.json +0 -124
- package/lib/schemas/dossier/EtudeImpact.json +0 -29
- package/lib/schemas/dossier/EtudePlf.json +0 -105
- package/lib/schemas/dossier/Europe.json +0 -42
- package/lib/schemas/dossier/FamCodeLibelle.json +0 -25
- package/lib/schemas/dossier/InfoJO.json +0 -23
- package/lib/schemas/dossier/Initiateur.json +0 -36
- package/lib/schemas/dossier/Motion.json +0 -27
- package/lib/schemas/dossier/Promulgation.json +0 -62
- package/lib/schemas/dossier/Rapporteur.json +0 -36
- package/lib/schemas/dossier/Texte.json +0 -47
- package/lib/schemas/organe/CodeTypeOrgane.json +0 -43
- package/lib/schemas/organe/Organe.json +0 -136
- package/lib/schemas/organe/ViMoDe.json +0 -28
- package/lib/schemas/question/Auteur.json +0 -58
- package/lib/schemas/question/Cloture.json +0 -28
- package/lib/schemas/question/InfoJO.json +0 -40
- package/lib/schemas/question/MinAttribElement.json +0 -30
- package/lib/schemas/question/Question.json +0 -172
- package/lib/schemas/question/Renouvellement.json +0 -17
- package/lib/schemas/question/Signalement.json +0 -21
- package/lib/schemas/question/Texte.json +0 -24
- package/lib/schemas/scrutin/DecompteVoix.json +0 -35
- package/lib/schemas/scrutin/Dysfonctionnement.json +0 -50
- package/lib/schemas/scrutin/MiseAuPoint.json +0 -53
- package/lib/schemas/scrutin/OrganeVotant.json +0 -88
- package/lib/schemas/scrutin/Scrutin.json +0 -187
- package/lib/schemas/scrutin/Votant.json +0 -37
- package/lib/scripts/bugs_helper.d.ts +0 -13
- package/lib/scripts/bugs_helper.js +0 -595
- package/lib/scripts/bugs_helper.mjs +0 -251
- package/lib/scripts/clean_reorganized_data.js +0 -610
- package/lib/scripts/clean_reorganized_data.mjs +0 -273
- package/lib/scripts/diff_amendements.js +0 -249
- package/lib/scripts/diff_amendements.mjs +0 -202
- package/lib/scripts/document_dossiers_legislatifs.js +0 -655
- package/lib/scripts/document_dossiers_legislatifs.mjs +0 -414
- package/lib/scripts/get_today_reunions.js +0 -37
- package/lib/scripts/get_today_reunions.mjs +0 -31
- package/lib/scripts/merge_scrutins.js +0 -97
- package/lib/scripts/merge_scrutins.mjs +0 -47
- package/lib/scripts/parse_textes_lois.d.ts +0 -1
- package/lib/scripts/parse_textes_lois.js +0 -171
- package/lib/scripts/parse_textes_lois.mjs +0 -140
- package/lib/scripts/process_open_dataset.js +0 -301
- package/lib/scripts/process_open_dataset.mjs +0 -134
- package/lib/scripts/raw_types_from_amendements.js +0 -135
- package/lib/scripts/raw_types_from_amendements.mjs +0 -134
- package/lib/scripts/reorganize_data.js +0 -805
- package/lib/scripts/reorganize_data.mjs +0 -517
- package/lib/scripts/retrieve_deputes_photos.js +0 -310
- package/lib/scripts/retrieve_deputes_photos.mjs +0 -158
- package/lib/scripts/retrieve_documents.js +0 -547
- package/lib/scripts/retrieve_documents.mjs +0 -242
- package/lib/scripts/retrieve_open_data.js +0 -107
- package/lib/scripts/retrieve_open_data.mjs +0 -26
- package/lib/scripts/retrieve_pending_amendments.js +0 -206
- package/lib/scripts/retrieve_pending_amendments.mjs +0 -57
- package/lib/scripts/retrieve_senateurs_photos.js +0 -234
- package/lib/scripts/retrieve_senateurs_photos.mjs +0 -116
- package/lib/scripts/retrieve_textes_lois.d.ts +0 -1
- package/lib/scripts/retrieve_textes_lois.js +0 -240
- package/lib/scripts/retrieve_textes_lois.mjs +0 -85
- package/lib/scripts/shared/cli_helpers.js +0 -89
- package/lib/scripts/shared/cli_helpers.mjs +0 -81
- package/lib/scripts/test_iter_load.js +0 -155
- package/lib/scripts/test_iter_load.mjs +0 -72
- package/lib/scripts/test_load.js +0 -26
- package/lib/scripts/test_load.mjs +0 -16
- package/lib/scripts/test_load_big_files.js +0 -26
- package/lib/scripts/test_load_big_files.mjs +0 -16
- package/lib/scripts/validate_json.js +0 -353
- package/lib/scripts/validate_json.mjs +0 -184
- package/lib/shared_types/codes_actes.js +0 -231
- package/lib/shared_types/codes_actes.mjs +0 -224
- package/lib/strings.js +0 -16
- package/lib/strings.mjs +0 -7
- package/lib/types/acteurs_et_organes.js +0 -963
- package/lib/types/acteurs_et_organes.mjs +0 -904
- package/lib/types/agendas.js +0 -628
- package/lib/types/agendas.mjs +0 -575
- package/lib/types/amendements.js +0 -899
- package/lib/types/amendements.mjs +0 -842
- package/lib/types/debats.js +0 -619
- package/lib/types/debats.mjs +0 -562
- package/lib/types/dossiers_legislatifs.js +0 -1188
- package/lib/types/dossiers_legislatifs.mjs +0 -1130
- package/lib/types/legislatures.js +0 -17
- package/lib/types/legislatures.mjs +0 -10
- package/lib/types/questions.js +0 -454
- package/lib/types/questions.mjs +0 -401
- package/lib/types/scrutins.js +0 -556
- package/lib/types/scrutins.mjs +0 -503
- package/lib/urls.js +0 -325
- package/lib/urls.mjs +0 -258
- /package/lib/{bugs/acteur-00010/plugin.test.d.ts → scripts/add_links_to_documents.d.ts} +0 -0
- /package/lib/{bugs/agenda-00002/plugin.test.d.ts → scripts/copy-schemas.d.ts} +0 -0
- /package/lib/{bugs/agenda-00008/plugin.test.d.ts → scripts/generate-json-schemas.d.ts} +0 -0
|
@@ -1,414 +0,0 @@
|
|
|
1
|
-
var _LectureMapping;
|
|
2
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
3
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
4
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
5
|
-
import commandLineArgs from "command-line-args";
|
|
6
|
-
import commandLineUsage from "command-line-usage";
|
|
7
|
-
import assert from "assert";
|
|
8
|
-
import { load, getFiles } from "../file_systems.mjs";
|
|
9
|
-
function parseArgs(argv) {
|
|
10
|
-
const optionsDefinitions = [{
|
|
11
|
-
description: "pathname to a JSON file or a glob pattern to JSON files",
|
|
12
|
-
defaultOption: true,
|
|
13
|
-
multiple: true,
|
|
14
|
-
name: "data",
|
|
15
|
-
type: String
|
|
16
|
-
}, {
|
|
17
|
-
name: "no-sanity-checks",
|
|
18
|
-
type: Boolean,
|
|
19
|
-
description: "Do not perform sanity checks."
|
|
20
|
-
}, {
|
|
21
|
-
name: "verbose",
|
|
22
|
-
type: Boolean,
|
|
23
|
-
description: "increase verbosity"
|
|
24
|
-
}, {
|
|
25
|
-
name: "help",
|
|
26
|
-
description: "Print this usage guide."
|
|
27
|
-
}];
|
|
28
|
-
const sections = [{
|
|
29
|
-
header: "Aide à la documentation du dossier législatif",
|
|
30
|
-
content: "Génère une hiérarchie des actes législatifs"
|
|
31
|
-
}, {
|
|
32
|
-
header: "Options",
|
|
33
|
-
optionList: optionsDefinitions
|
|
34
|
-
}];
|
|
35
|
-
const options = commandLineArgs(optionsDefinitions, {
|
|
36
|
-
argv: argv
|
|
37
|
-
});
|
|
38
|
-
if (!("help" in options) && !("data" in options)) {
|
|
39
|
-
console.error("--data is mandatory");
|
|
40
|
-
options.help = true;
|
|
41
|
-
}
|
|
42
|
-
if ("help" in options) {
|
|
43
|
-
const usage = commandLineUsage(sections);
|
|
44
|
-
console.warn(usage);
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
return options;
|
|
48
|
-
}
|
|
49
|
-
function eqSet(as, bs) {
|
|
50
|
-
if (as.size !== bs.size) return false;
|
|
51
|
-
for (var a of as) if (!bs.has(a)) return false;
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
class Code2Pattern {
|
|
55
|
-
constructor(pattern, children) {
|
|
56
|
-
_defineProperty(this, "_pattern_", void 0);
|
|
57
|
-
_defineProperty(this, "_match_count_", void 0);
|
|
58
|
-
this._pattern_ = pattern;
|
|
59
|
-
this._match_count_ = 0;
|
|
60
|
-
Object.assign(this, children);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
class Code2PatternComFond extends Code2Pattern {
|
|
64
|
-
constructor() {
|
|
65
|
-
super("^/SAISIE/(/NOMIN/)*(/REUNION/)*(/RAPPORT/)*$", {});
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
class LectureMapping {
|
|
69
|
-
constructor() {
|
|
70
|
-
_defineProperty(this, "libelle", {});
|
|
71
|
-
_defineProperty(this, "codes", new Set());
|
|
72
|
-
}
|
|
73
|
-
static isLecture(acte) {
|
|
74
|
-
return acte.codeActe.match(LectureMapping.codes_lecture_regexp);
|
|
75
|
-
}
|
|
76
|
-
static getType(acte) {
|
|
77
|
-
if (acte.codeActe.match(/^AN/)) return "AN";else if (acte.codeActe.match(/^SN/)) return "SN";else throw Error(`${acte.codeActe} does not start with AN or SN`);
|
|
78
|
-
}
|
|
79
|
-
static map(codeActe) {
|
|
80
|
-
return codeActe.replace(LectureMapping.codes_lecture_regexp, `lecture$1`);
|
|
81
|
-
}
|
|
82
|
-
static getCodeActe(acte) {
|
|
83
|
-
if (!LectureMapping.isLecture(acte)) return;
|
|
84
|
-
return LectureMapping.map(acte.codeActe);
|
|
85
|
-
}
|
|
86
|
-
add(acte) {
|
|
87
|
-
this.codes.add(acte.codeActe);
|
|
88
|
-
const type = LectureMapping.getType(acte);
|
|
89
|
-
if (!(acte.libelleActe.nomCanonique in this.libelle)) this.libelle[acte.libelleActe.nomCanonique] = new Set();
|
|
90
|
-
this.libelle[acte.libelleActe.nomCanonique].add(type);
|
|
91
|
-
}
|
|
92
|
-
remap(acte, codeActe) {
|
|
93
|
-
acte.codeActe = codeActe;
|
|
94
|
-
let types = this.libelle[acte.libelleActe.nomCanonique];
|
|
95
|
-
if (!(types.has("SN") && types.has("AN"))) {
|
|
96
|
-
if (types.has("SN")) acte.libelleActe.nomCanonique += " (Sénat)";else if (types.has("AN")) acte.libelleActe.nomCanonique += " (Assemblée Nationale)";
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
mergeCodes(codes) {
|
|
100
|
-
for (const c of Array.from(this.codes)) codes.add(c);
|
|
101
|
-
}
|
|
102
|
-
printAnchors() {
|
|
103
|
-
for (const code of Array.from(this.codes)) console.log(`.. _${code}:`);
|
|
104
|
-
}
|
|
105
|
-
getCodes() {
|
|
106
|
-
return Array.from(this.codes).join(",");
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
_LectureMapping = LectureMapping;
|
|
110
|
-
_defineProperty(LectureMapping, "codes_lecture", ["AN1", "SN1", "ANNLEC", "SNNLEC", "ANLDEF", "AN2", "SN2", "SN3"]);
|
|
111
|
-
_defineProperty(LectureMapping, "codes_lecture_regexp", new RegExp("^(?:" + _LectureMapping.codes_lecture.join("|") + ")(-.*)?$"));
|
|
112
|
-
class LectureMapper {
|
|
113
|
-
constructor() {
|
|
114
|
-
_defineProperty(this, "mapping", {});
|
|
115
|
-
}
|
|
116
|
-
has(codeActe) {
|
|
117
|
-
return codeActe in this.mapping;
|
|
118
|
-
}
|
|
119
|
-
collect(acte) {
|
|
120
|
-
const codeActe = LectureMapping.getCodeActe(acte);
|
|
121
|
-
if (codeActe != undefined) {
|
|
122
|
-
let lectures = this.mapping;
|
|
123
|
-
if (!(codeActe in lectures)) lectures[codeActe] = new LectureMapping();
|
|
124
|
-
lectures[codeActe].add(acte);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
remap(acte) {
|
|
128
|
-
const codeActe = LectureMapping.getCodeActe(acte);
|
|
129
|
-
if (codeActe != undefined) this.mapping[codeActe].remap(acte, codeActe);
|
|
130
|
-
}
|
|
131
|
-
mergeCodes(codes, codeActe) {
|
|
132
|
-
this.mapping[codeActe].mergeCodes(codes);
|
|
133
|
-
}
|
|
134
|
-
printAnchors(codeActe) {
|
|
135
|
-
this.mapping[codeActe].printAnchors();
|
|
136
|
-
}
|
|
137
|
-
getCodes(codeActe) {
|
|
138
|
-
return this.mapping[codeActe].getCodes();
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
class ActesDocumentation {
|
|
142
|
-
constructor(sanityChecks, verbose = false) {
|
|
143
|
-
_defineProperty(this, "verbose", void 0);
|
|
144
|
-
_defineProperty(this, "sanityChecks", void 0);
|
|
145
|
-
_defineProperty(this, "lectureMapper", new LectureMapper());
|
|
146
|
-
_defineProperty(this, "remappedProcedures", {});
|
|
147
|
-
_defineProperty(this, "anchorsPrinted", {});
|
|
148
|
-
_defineProperty(this, "anchors", new Set());
|
|
149
|
-
_defineProperty(this, "codes", {});
|
|
150
|
-
_defineProperty(this, "procedures", null);
|
|
151
|
-
_defineProperty(this, "code2pattern", new Code2Pattern(null, {
|
|
152
|
-
"Procédure législative": new Code2Pattern("^(((/lecture/)+)|((/lecture/)+/CMP/(/lecture/)*))(/CC/)?(/PROM/)?(/AN-APPLI/)?$", {
|
|
153
|
-
lecture: new Code2Pattern("^(/DEPOT/)?(/DPTLETTRECT/)?(/ETI/)?(/AVCE/)?(/DGVT/)?(/ACIN/)?(/MOTION/)*(/PROCACC/)?(/COM/)?((/DEBATS/)+)?(/RTRINI/)?$", {
|
|
154
|
-
"lecture-COM": new Code2Pattern("^(/FOND/|/AVIS/)+$", {
|
|
155
|
-
"lecture-COM-FOND": new Code2PatternComFond(),
|
|
156
|
-
"lecture-COM-AVIS": new Code2PatternComFond()
|
|
157
|
-
}),
|
|
158
|
-
"lecture-DEBATS": new Code2Pattern("^(/SEANCE/)*((/MOTION/)?(/MOTION-VOTE/)+)?(/DEC/)?$", {})
|
|
159
|
-
}),
|
|
160
|
-
CMP: new Code2Pattern("^(/DEPOT/|/SAISIE/){1,2}(/COM/)?(/DEC/)?(/DEBATS-AN//DEBATS-SN/)?", {
|
|
161
|
-
"CMP-COM": new Code2Pattern("^(/NOMIN/)?(/RAPPORT-AN/|/RAPPORT-SN/){2}$", {}),
|
|
162
|
-
"CMP-DEBATS-AN": new Code2Pattern("^(/SEANCE/)*(/DEC/)?$", {}),
|
|
163
|
-
"CMP-DEBATS-SN": new Code2Pattern("^(/SEANCE/)*(/DEC/)?$", {})
|
|
164
|
-
}),
|
|
165
|
-
CC: new Code2Pattern("^(/SAISIE/)+(/CONCLUSION/)?$", {}),
|
|
166
|
-
PROM: new Code2Pattern("^(/PUB/)?$", {}),
|
|
167
|
-
"AN-APPLI": new Code2Pattern("^(/RAPPORT/)?$", {})
|
|
168
|
-
}),
|
|
169
|
-
"Allocution du Président de l'Assemblée nationale": new Code2Pattern("^/AN21/$", {
|
|
170
|
-
AN21: new Code2Pattern("^(/APAN/)?$", {})
|
|
171
|
-
}),
|
|
172
|
-
"Résolution Article 34-1": new Code2Pattern("^(/ANLUNI/)?$", {
|
|
173
|
-
ANLUNI: new Code2Pattern("^(/DEPOT/)?(/DEBATS/)?(/RTRINI/)?$", {
|
|
174
|
-
"ANLUNI-DEBATS": new Code2Pattern("^(/SEANCE/)+(/DEC/)?$", {})
|
|
175
|
-
})
|
|
176
|
-
}),
|
|
177
|
-
Résolution: new Code2Pattern("^(/ANLUNI/)?(/CC/)?$", {
|
|
178
|
-
ANLUNI: new Code2Pattern("^(/DEPOT/)?(/COM/)?(/DEBATS/|/RTRINI/)?$", {
|
|
179
|
-
"ANLUNI-COM": new Code2Pattern("^(/CAE/)?(/FOND/)?$", {
|
|
180
|
-
"ANLUNI-COM-FOND": new Code2PatternComFond(),
|
|
181
|
-
"ANLUNI-COM-CAE": new Code2Pattern("^(/SAISIE/)?(/NOMIN/)?(/REUNION/)?(/RAPPORT/)?(/DEC/)?$", {})
|
|
182
|
-
}),
|
|
183
|
-
"ANLUNI-DEBATS": new Code2Pattern("^(/SEANCE/)*(/DEC/)?$", {})
|
|
184
|
-
}),
|
|
185
|
-
CC: new Code2Pattern("^(/SAISIE/)?(/CONCLUSION/)?$", {})
|
|
186
|
-
}),
|
|
187
|
-
"Rapport d'information sans mission": new Code2Pattern("^(/AN20/)?(/EU/)?$", {
|
|
188
|
-
AN20: new Code2Pattern("^(/RAPPORT/)?$", {}),
|
|
189
|
-
EU: new Code2Pattern("^(/DEC/)+$", {})
|
|
190
|
-
}),
|
|
191
|
-
"Mission d'information": new Code2Pattern("^(/AN20/)?$", {
|
|
192
|
-
AN20: new Code2Pattern("^(/MISINF/)?$", {
|
|
193
|
-
"AN20-MISINF": new Code2Pattern("^(/CREA/)?(/NOMIN/)?(/RAPPORT/)?$", {})
|
|
194
|
-
})
|
|
195
|
-
}),
|
|
196
|
-
"Commission d'enquête": new Code2Pattern("^(/AN20/)?$", {
|
|
197
|
-
AN20: new Code2Pattern("^(/COMENQ/)?$", {
|
|
198
|
-
"AN20-COMENQ": new Code2Pattern("^(/CREA/)?(/NOMIN/)?(/RAPPORT/)?$", {})
|
|
199
|
-
})
|
|
200
|
-
}),
|
|
201
|
-
"Engagement de la responsabilité gouvernementale": new Code2Pattern("^/AN21/$", {
|
|
202
|
-
AN21: new Code2Pattern("^(((/MOTION/)*/DEBATS/)|(/DGVT/)){1,2}$", {
|
|
203
|
-
"AN21-DEBATS": new Code2Pattern("^(/SEANCE/)*(/MOTION-VOTE/)*$", {})
|
|
204
|
-
})
|
|
205
|
-
}),
|
|
206
|
-
"Motion référendaire": new Code2Pattern("^(/lecture/)+$", {
|
|
207
|
-
lecture: new Code2Pattern("^(/DEPOT/)?(/COM/)?(/DEBATS/)?$", {
|
|
208
|
-
"lecture-COM": new Code2Pattern("^(/FOND/)?$", {
|
|
209
|
-
"lecture-COM-FOND": new Code2Pattern("^(/SAISIE/)?(/NOMIN/)*(/RAPPORT/)*$", {})
|
|
210
|
-
}),
|
|
211
|
-
"lecture-DEBATS": new Code2Pattern("^(/DEC/)?$", {})
|
|
212
|
-
})
|
|
213
|
-
}),
|
|
214
|
-
Immunité: new Code2Pattern("^(/ANLUNI/)+$", {
|
|
215
|
-
ANLUNI: new Code2Pattern("^(/DEPOT/)?(/COM/)?(/DEBATS/)?(/RTRINI/)?$", {
|
|
216
|
-
"ANLUNI-COM": new Code2Pattern("^(/FOND/)?$", {
|
|
217
|
-
"ANLUNI-COM-FOND": new Code2Pattern("^(/SAISIE/)?(/NOMIN/)*(/RAPPORT/)*$", {})
|
|
218
|
-
}),
|
|
219
|
-
"ANLUNI-DEBATS": new Code2Pattern("^(/SEANCE/)?(/DEC/)$", {})
|
|
220
|
-
})
|
|
221
|
-
}),
|
|
222
|
-
"Responsabilité pénale du président de la république": new Code2Pattern("^/lecture/$", {
|
|
223
|
-
lecture: new Code2Pattern("^(/DEPOT/)?(/RECBUREAU/)?$", {})
|
|
224
|
-
}),
|
|
225
|
-
"Proposition de loi présentée en application de l'article 11 de la Constitution": new Code2Pattern("^/lecture/$", {
|
|
226
|
-
lecture: new Code2Pattern("^(/DEPOT/)?$", {})
|
|
227
|
-
})
|
|
228
|
-
}));
|
|
229
|
-
this.verbose = verbose;
|
|
230
|
-
this.sanityChecks = sanityChecks;
|
|
231
|
-
this.procedures = {};
|
|
232
|
-
this.code2pattern._match_count_++;
|
|
233
|
-
}
|
|
234
|
-
walkFiles(data, action) {
|
|
235
|
-
for (const file of getFiles(data)) {
|
|
236
|
-
const dossier = load(file);
|
|
237
|
-
let procedure = this.remapProcedure(dossier.procedureParlementaire.libelle);
|
|
238
|
-
if (!(procedure in this.procedures)) this.procedures[procedure] = {};
|
|
239
|
-
action(this.procedures[procedure], dossier.actesLegislatifs, this.code2pattern[procedure], null);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
collectFiles(data) {
|
|
243
|
-
this.walkFiles(data, (_actes, actesLegislatifs, _c2p, _parent) => {
|
|
244
|
-
this.collect(actesLegislatifs);
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
processFiles(data) {
|
|
248
|
-
this.walkFiles(data, (actes, actesLegislatifs, c2p, parent) => {
|
|
249
|
-
this.merge(actes, actesLegislatifs, c2p, parent);
|
|
250
|
-
});
|
|
251
|
-
if (this.sanityChecks) this.validate();
|
|
252
|
-
}
|
|
253
|
-
remapActes(actes) {
|
|
254
|
-
let results = [];
|
|
255
|
-
for (const acte of actes) {
|
|
256
|
-
this.lectureMapper.remap(acte);
|
|
257
|
-
|
|
258
|
-
// CC-SAISIE- suffix does not imply a hierarchy
|
|
259
|
-
acte.codeActe = acte.codeActe.replace(/^CC-SAISIE.*/, "CC-SAISIE");
|
|
260
|
-
results.push(acte);
|
|
261
|
-
}
|
|
262
|
-
return results;
|
|
263
|
-
}
|
|
264
|
-
collectActes(actes) {
|
|
265
|
-
let results = [];
|
|
266
|
-
for (const acte of actes) {
|
|
267
|
-
this.lectureMapper.collect(acte);
|
|
268
|
-
results.push(acte);
|
|
269
|
-
}
|
|
270
|
-
return results;
|
|
271
|
-
}
|
|
272
|
-
remapProcedure(procedure) {
|
|
273
|
-
const merge_procedures = new Map([["Proposition de loi ordinaire", "Procédure législative"], ["Projet de loi ordinaire", "Procédure législative"], ["Projet de ratification des traités et conventions", "Procédure législative"], ["Projet ou proposition de loi organique", "Procédure législative"], ["Projet ou proposition de loi constitutionnelle", "Procédure législative"], ["Projet de loi de finances de l'année", "Procédure législative"], ["Projet de loi de finances rectificative", "Procédure législative"], ["Projet de loi de financement de la sécurité sociale", "Procédure législative"]]);
|
|
274
|
-
if (merge_procedures.has(procedure)) {
|
|
275
|
-
this.remappedProcedures[procedure] = null;
|
|
276
|
-
return merge_procedures.get(procedure);
|
|
277
|
-
} else {
|
|
278
|
-
return procedure;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// return the codeActes in the same order they appear in the regexp
|
|
283
|
-
orderedCodes(codes, c2p, parent) {
|
|
284
|
-
codes = new Set(codes);
|
|
285
|
-
if (!this.sanityChecks) return codes;
|
|
286
|
-
let ordered = c2p["_pattern_"].match(new RegExp("/.*?/", "g"));
|
|
287
|
-
ordered = ordered.map(x => x.replace(new RegExp("/(.*)/"), "$1"));
|
|
288
|
-
if (parent != null) ordered = ordered.map(x => `${parent}-${x}`);
|
|
289
|
-
ordered = new Set(ordered);
|
|
290
|
-
assert(eqSet(ordered, codes), `${[...ordered]} != ${[...codes]}`);
|
|
291
|
-
return ordered;
|
|
292
|
-
}
|
|
293
|
-
validateChronology(actesLegislatifs, c2p, parent) {
|
|
294
|
-
const pattern = c2p["_pattern_"];
|
|
295
|
-
const sequence = actesLegislatifs.map(x => `/${x.codeActe}/`.replace(`/${parent}-`, "/")).join("");
|
|
296
|
-
assert(sequence.match(new RegExp(pattern)), `${pattern} does not match ${sequence}`);
|
|
297
|
-
c2p._match_count_++;
|
|
298
|
-
}
|
|
299
|
-
mergeActe(actes, acte, c2p, parent) {
|
|
300
|
-
let code = acte.codeActe;
|
|
301
|
-
let shortCode = code.replace(new RegExp(`^${parent}-`), "");
|
|
302
|
-
shortCode = shortCode.replace(/-(AN|SN)$/, "");
|
|
303
|
-
this.codes[shortCode] = null;
|
|
304
|
-
let name = acte.libelleActe.nomCanonique;
|
|
305
|
-
if (!(code in actes)) {
|
|
306
|
-
actes[code] = {
|
|
307
|
-
type: acte.xsiType,
|
|
308
|
-
name: new Set([name]),
|
|
309
|
-
shortCode: shortCode,
|
|
310
|
-
actes: {}
|
|
311
|
-
};
|
|
312
|
-
} else {
|
|
313
|
-
actes[code].name.add(name);
|
|
314
|
-
}
|
|
315
|
-
if ("actesLegislatifs" in acte) this.merge(actes[code].actes, acte.actesLegislatifs, c2p[code], code);
|
|
316
|
-
}
|
|
317
|
-
merge(actes, actesLegislatifs, c2p, parent) {
|
|
318
|
-
const l = this.remapActes(actesLegislatifs);
|
|
319
|
-
this.validateChronology(l, c2p, parent);
|
|
320
|
-
for (const acte of l) this.mergeActe(actes, acte, c2p, parent);
|
|
321
|
-
}
|
|
322
|
-
collect(actesLegislatifs) {
|
|
323
|
-
for (const acte of this.collectActes(actesLegislatifs)) if ("actesLegislatifs" in acte) this.collect(acte.actesLegislatifs);
|
|
324
|
-
}
|
|
325
|
-
validateLevel(c2p, path) {
|
|
326
|
-
assert(c2p._match_count_ > 0, `${path} is never used`);
|
|
327
|
-
for (const [key, value] of Object.entries(c2p)) {
|
|
328
|
-
if (value != null && value.constructor.name == "Code2Pattern") this.validateLevel(value, path.concat([key]));
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
validate() {
|
|
332
|
-
this.validateLevel(this.code2pattern, []);
|
|
333
|
-
}
|
|
334
|
-
printEntry(sections, entry, codes) {
|
|
335
|
-
const title = `\`${entry}\`__`;
|
|
336
|
-
console.log(title);
|
|
337
|
-
const underline = new Array(title.length + 1).join(sections[0]);
|
|
338
|
-
console.log(underline);
|
|
339
|
-
console.log(codes);
|
|
340
|
-
}
|
|
341
|
-
addAnchors(key) {
|
|
342
|
-
if (key in this.anchorsPrinted) return;
|
|
343
|
-
if (this.lectureMapper.has(key)) this.lectureMapper.mergeCodes(this.anchors, key);else this.anchors.add(key);
|
|
344
|
-
}
|
|
345
|
-
printAnchors(key) {
|
|
346
|
-
if (key in this.anchorsPrinted) return;
|
|
347
|
-
this.anchorsPrinted[key] = null;
|
|
348
|
-
if (this.lectureMapper.has(key)) this.lectureMapper.printAnchors(key);else console.log(`.. _${key}:`);
|
|
349
|
-
}
|
|
350
|
-
getCodes(key, shortCode) {
|
|
351
|
-
if (key in this.anchorsPrinted) return `cf \\*${shortCode}\\*`;
|
|
352
|
-
if (this.lectureMapper.has(key)) return this.lectureMapper.getCodes(key);else return key;
|
|
353
|
-
}
|
|
354
|
-
renameCMP(key, name) {
|
|
355
|
-
if (key.startsWith("CMP")) {
|
|
356
|
-
if (key.endsWith("-SN")) return `${name} (Sénat)`;else if (key.endsWith("-AN")) return `${name} (Assemblée Nationale)`;else return name;
|
|
357
|
-
} else return name;
|
|
358
|
-
}
|
|
359
|
-
printLevel(actes, sections, c2p, parent) {
|
|
360
|
-
const keys = this.orderedCodes(Object.keys(actes), c2p, parent);
|
|
361
|
-
for (const key of keys) {
|
|
362
|
-
const value = actes[key];
|
|
363
|
-
let name = Array.from(value.name).join(", ");
|
|
364
|
-
name = this.renameCMP(key, name);
|
|
365
|
-
const codes = this.getCodes(key, value.shortCode);
|
|
366
|
-
this.addAnchors(key);
|
|
367
|
-
this.printAnchors(key);
|
|
368
|
-
console.log("");
|
|
369
|
-
this.printEntry(sections, `${name} <${value.shortCode}TOC_>`, codes);
|
|
370
|
-
console.log("");
|
|
371
|
-
if (Object.keys(value.actes).length > 0) this.printLevel(value.actes, sections.substring(1), c2p[key], key);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
printCodes() {
|
|
375
|
-
for (const key of Object.keys(this.codes)) console.log(`.. _${key}TOC: http://`);
|
|
376
|
-
}
|
|
377
|
-
printAnchorsIndex() {
|
|
378
|
-
for (const code of Array.from(this.anchors)) console.log(`* :ref:\`${code} <${code}>\``);
|
|
379
|
-
}
|
|
380
|
-
getAggregated(procedure) {
|
|
381
|
-
if (procedure == "Procédure législative") {
|
|
382
|
-
const remapped = Object.keys(this.remappedProcedures).join(", ");
|
|
383
|
-
return ` (agrégation de ${remapped})`;
|
|
384
|
-
} else return "";
|
|
385
|
-
}
|
|
386
|
-
print() {
|
|
387
|
-
this.anchorsPrinted = {};
|
|
388
|
-
for (const [key, actes] of Object.entries(this.procedures)) {
|
|
389
|
-
const code = key.replace(/ +/g, "_");
|
|
390
|
-
this.codes[code] = null;
|
|
391
|
-
const aggregated = this.getAggregated(key);
|
|
392
|
-
const title = `\`${key} <${code}TOC_>\`__${aggregated}`;
|
|
393
|
-
console.log(title);
|
|
394
|
-
const underline = new Array(title.length + 1).join("=");
|
|
395
|
-
console.log(underline);
|
|
396
|
-
this.printLevel(actes, "-~.'", this.code2pattern[key], null);
|
|
397
|
-
}
|
|
398
|
-
this.printCodes();
|
|
399
|
-
this.printAnchorsIndex();
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
function main(argv) {
|
|
403
|
-
const options = parseArgs(argv);
|
|
404
|
-
if (options === null) return 1;
|
|
405
|
-
let doc = new ActesDocumentation(!options["no-sanity-checks"], options.verbose);
|
|
406
|
-
doc.collectFiles(options.data);
|
|
407
|
-
doc.processFiles(options.data);
|
|
408
|
-
doc.print();
|
|
409
|
-
return 0;
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
/* istanbul ignore if */
|
|
413
|
-
if (process.argv[1].endsWith("document_dossiers_legislatifs.ts")) process.exit(main(process.argv));
|
|
414
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJjb21tYW5kTGluZVVzYWdlIiwiYXNzZXJ0IiwibG9hZCIsImdldEZpbGVzIiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdE9wdGlvbiIsIm11bHRpcGxlIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb25zb2xlIiwiZXJyb3IiLCJoZWxwIiwidXNhZ2UiLCJ3YXJuIiwiZXFTZXQiLCJhcyIsImJzIiwic2l6ZSIsImEiLCJoYXMiLCJDb2RlMlBhdHRlcm4iLCJjb25zdHJ1Y3RvciIsInBhdHRlcm4iLCJjaGlsZHJlbiIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9wYXR0ZXJuXyIsIl9tYXRjaF9jb3VudF8iLCJPYmplY3QiLCJhc3NpZ24iLCJDb2RlMlBhdHRlcm5Db21Gb25kIiwiTGVjdHVyZU1hcHBpbmciLCJTZXQiLCJpc0xlY3R1cmUiLCJhY3RlIiwiY29kZUFjdGUiLCJtYXRjaCIsImNvZGVzX2xlY3R1cmVfcmVnZXhwIiwiZ2V0VHlwZSIsIkVycm9yIiwibWFwIiwicmVwbGFjZSIsImdldENvZGVBY3RlIiwiYWRkIiwiY29kZXMiLCJsaWJlbGxlQWN0ZSIsIm5vbUNhbm9uaXF1ZSIsImxpYmVsbGUiLCJyZW1hcCIsInR5cGVzIiwibWVyZ2VDb2RlcyIsImMiLCJBcnJheSIsImZyb20iLCJwcmludEFuY2hvcnMiLCJjb2RlIiwibG9nIiwiZ2V0Q29kZXMiLCJqb2luIiwiX0xlY3R1cmVNYXBwaW5nIiwiUmVnRXhwIiwiY29kZXNfbGVjdHVyZSIsIkxlY3R1cmVNYXBwZXIiLCJtYXBwaW5nIiwiY29sbGVjdCIsInVuZGVmaW5lZCIsImxlY3R1cmVzIiwiQWN0ZXNEb2N1bWVudGF0aW9uIiwic2FuaXR5Q2hlY2tzIiwidmVyYm9zZSIsImxlY3R1cmUiLCJDTVAiLCJDQyIsIlBST00iLCJBTjIxIiwiQU5MVU5JIiwiUsOpc29sdXRpb24iLCJBTjIwIiwiRVUiLCJJbW11bml0w6kiLCJwcm9jZWR1cmVzIiwiY29kZTJwYXR0ZXJuIiwid2Fsa0ZpbGVzIiwiZGF0YSIsImFjdGlvbiIsImZpbGUiLCJkb3NzaWVyIiwicHJvY2VkdXJlIiwicmVtYXBQcm9jZWR1cmUiLCJwcm9jZWR1cmVQYXJsZW1lbnRhaXJlIiwiYWN0ZXNMZWdpc2xhdGlmcyIsImNvbGxlY3RGaWxlcyIsIl9hY3RlcyIsIl9jMnAiLCJfcGFyZW50IiwicHJvY2Vzc0ZpbGVzIiwiYWN0ZXMiLCJjMnAiLCJwYXJlbnQiLCJtZXJnZSIsInZhbGlkYXRlIiwicmVtYXBBY3RlcyIsInJlc3VsdHMiLCJsZWN0dXJlTWFwcGVyIiwicHVzaCIsImNvbGxlY3RBY3RlcyIsIm1lcmdlX3Byb2NlZHVyZXMiLCJNYXAiLCJyZW1hcHBlZFByb2NlZHVyZXMiLCJnZXQiLCJvcmRlcmVkQ29kZXMiLCJvcmRlcmVkIiwieCIsInZhbGlkYXRlQ2hyb25vbG9neSIsInNlcXVlbmNlIiwibWVyZ2VBY3RlIiwic2hvcnRDb2RlIiwieHNpVHlwZSIsImwiLCJ2YWxpZGF0ZUxldmVsIiwicGF0aCIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImNvbmNhdCIsInByaW50RW50cnkiLCJlbnRyeSIsInRpdGxlIiwidW5kZXJsaW5lIiwibGVuZ3RoIiwiYWRkQW5jaG9ycyIsImFuY2hvcnNQcmludGVkIiwiYW5jaG9ycyIsInJlbmFtZUNNUCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInByaW50TGV2ZWwiLCJrZXlzIiwic3Vic3RyaW5nIiwicHJpbnRDb2RlcyIsInByaW50QW5jaG9yc0luZGV4IiwiZ2V0QWdncmVnYXRlZCIsInJlbWFwcGVkIiwicHJpbnQiLCJhZ2dyZWdhdGVkIiwibWFpbiIsImRvYyIsInByb2Nlc3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lVXNhZ2UgZnJvbSBcImNvbW1hbmQtbGluZS11c2FnZVwiXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhdGhuYW1lIHRvIGEgSlNPTiBmaWxlIG9yIGEgZ2xvYiBwYXR0ZXJuIHRvIEpTT04gZmlsZXNcIixcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiZGF0YVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJuby1zYW5pdHktY2hlY2tzXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVzY3JpcHRpb246IFwiRG8gbm90IHBlcmZvcm0gc2FuaXR5IGNoZWNrcy5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlc2NyaXB0aW9uOiBcImluY3JlYXNlIHZlcmJvc2l0eVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJoZWxwXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJQcmludCB0aGlzIHVzYWdlIGd1aWRlLlwiLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAge1xuICAgICAgaGVhZGVyOiBcIkFpZGUgw6AgbGEgZG9jdW1lbnRhdGlvbiBkdSBkb3NzaWVyIGzDqWdpc2xhdGlmXCIsXG4gICAgICBjb250ZW50OiBcIkfDqW7DqHJlIHVuZSBoacOpcmFyY2hpZSBkZXMgYWN0ZXMgbMOpZ2lzbGF0aWZzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiT3B0aW9uc1wiLFxuICAgICAgb3B0aW9uTGlzdDogb3B0aW9uc0RlZmluaXRpb25zLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMsIHtcbiAgICBhcmd2OiBhcmd2LFxuICB9KVxuICBpZiAoIShcImhlbHBcIiBpbiBvcHRpb25zKSAmJiAhKFwiZGF0YVwiIGluIG9wdGlvbnMpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIi0tZGF0YSBpcyBtYW5kYXRvcnlcIilcbiAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gIH1cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gZXFTZXQoYXM6IFNldDxzdHJpbmc+LCBiczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKGFzLnNpemUgIT09IGJzLnNpemUpIHJldHVybiBmYWxzZVxuICBmb3IgKHZhciBhIG9mIGFzKSBpZiAoIWJzLmhhcyhhKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmNsYXNzIENvZGUyUGF0dGVybiB7XG4gIF9wYXR0ZXJuXzogYW55XG4gIF9tYXRjaF9jb3VudF86IG51bWJlclxuICBjb25zdHJ1Y3RvcihwYXR0ZXJuOiBhbnksIGNoaWxkcmVuOiBhbnkpIHtcbiAgICB0aGlzLl9wYXR0ZXJuXyA9IHBhdHRlcm5cbiAgICB0aGlzLl9tYXRjaF9jb3VudF8gPSAwXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjaGlsZHJlbilcbiAgfVxufVxuXG5jbGFzcyBDb2RlMlBhdHRlcm5Db21Gb25kIGV4dGVuZHMgQ29kZTJQYXR0ZXJuIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJeL1NBSVNJRS8oL05PTUlOLykqKC9SRVVOSU9OLykqKC9SQVBQT1JULykqJFwiLCB7fSlcbiAgfVxufVxuXG5jbGFzcyBMZWN0dXJlTWFwcGluZyB7XG4gIGxpYmVsbGU6IGFueSA9IHt9XG4gIGNvZGVzOiBhbnkgPSBuZXcgU2V0KClcblxuICBzdGF0aWMgY29kZXNfbGVjdHVyZTogc3RyaW5nW10gPSBbXG4gICAgXCJBTjFcIixcbiAgICBcIlNOMVwiLFxuICAgIFwiQU5OTEVDXCIsXG4gICAgXCJTTk5MRUNcIixcbiAgICBcIkFOTERFRlwiLFxuICAgIFwiQU4yXCIsXG4gICAgXCJTTjJcIixcbiAgICBcIlNOM1wiLFxuICBdXG4gIHN0YXRpYyBjb2Rlc19sZWN0dXJlX3JlZ2V4cDogYW55ID0gbmV3IFJlZ0V4cChcbiAgICBcIl4oPzpcIiArIExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmUuam9pbihcInxcIikgKyBcIikoLS4qKT8kXCIsXG4gIClcblxuICBzdGF0aWMgaXNMZWN0dXJlKGFjdGU6IGFueSkge1xuICAgIHJldHVybiBhY3RlLmNvZGVBY3RlLm1hdGNoKExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmVfcmVnZXhwKVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGUoYWN0ZTogYW55KSB7XG4gICAgaWYgKGFjdGUuY29kZUFjdGUubWF0Y2goL15BTi8pKSByZXR1cm4gXCJBTlwiXG4gICAgZWxzZSBpZiAoYWN0ZS5jb2RlQWN0ZS5tYXRjaCgvXlNOLykpIHJldHVybiBcIlNOXCJcbiAgICBlbHNlIHRocm93IEVycm9yKGAke2FjdGUuY29kZUFjdGV9IGRvZXMgbm90IHN0YXJ0IHdpdGggQU4gb3IgU05gKVxuICB9XG5cbiAgc3RhdGljIG1hcChjb2RlQWN0ZTogYW55KSB7XG4gICAgcmV0dXJuIGNvZGVBY3RlLnJlcGxhY2UoTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZV9yZWdleHAsIGBsZWN0dXJlJDFgKVxuICB9XG5cbiAgc3RhdGljIGdldENvZGVBY3RlKGFjdGU6IGFueSkge1xuICAgIGlmICghTGVjdHVyZU1hcHBpbmcuaXNMZWN0dXJlKGFjdGUpKSByZXR1cm5cblxuICAgIHJldHVybiBMZWN0dXJlTWFwcGluZy5tYXAoYWN0ZS5jb2RlQWN0ZSlcbiAgfVxuXG4gIGFkZChhY3RlOiBhbnkpIHtcbiAgICB0aGlzLmNvZGVzLmFkZChhY3RlLmNvZGVBY3RlKVxuXG4gICAgY29uc3QgdHlwZSA9IExlY3R1cmVNYXBwaW5nLmdldFR5cGUoYWN0ZSlcblxuICAgIGlmICghKGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlIGluIHRoaXMubGliZWxsZSkpXG4gICAgICB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdID0gbmV3IFNldCgpXG4gICAgdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXS5hZGQodHlwZSlcbiAgfVxuXG4gIHJlbWFwKGFjdGU6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIGFjdGUuY29kZUFjdGUgPSBjb2RlQWN0ZVxuXG4gICAgbGV0IHR5cGVzID0gdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXVxuICAgIGlmICghKHR5cGVzLmhhcyhcIlNOXCIpICYmIHR5cGVzLmhhcyhcIkFOXCIpKSkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhcIlNOXCIpKSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZSArPSBcIiAoU8OpbmF0KVwiXG4gICAgICBlbHNlIGlmICh0eXBlcy5oYXMoXCJBTlwiKSlcbiAgICAgICAgYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWUgKz0gXCIgKEFzc2VtYmzDqWUgTmF0aW9uYWxlKVwiXG4gICAgfVxuICB9XG5cbiAgbWVyZ2VDb2Rlcyhjb2RlczogYW55KSB7XG4gICAgZm9yIChjb25zdCBjIG9mIEFycmF5LmZyb20odGhpcy5jb2RlcykpIGNvZGVzLmFkZChjKVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKCkge1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBBcnJheS5mcm9tKHRoaXMuY29kZXMpKSBjb25zb2xlLmxvZyhgLi4gXyR7Y29kZX06YClcbiAgfVxuXG4gIGdldENvZGVzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29kZXMpLmpvaW4oXCIsXCIpXG4gIH1cbn1cblxuY2xhc3MgTGVjdHVyZU1hcHBlciB7XG4gIG1hcHBpbmc6IGFueSA9IHt9XG5cbiAgaGFzKGNvZGVBY3RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY29kZUFjdGUgaW4gdGhpcy5tYXBwaW5nXG4gIH1cblxuICBjb2xsZWN0KGFjdGU6IGFueSkge1xuICAgIGNvbnN0IGNvZGVBY3RlID0gTGVjdHVyZU1hcHBpbmcuZ2V0Q29kZUFjdGUoYWN0ZSlcbiAgICBpZiAoY29kZUFjdGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbGVjdHVyZXMgPSB0aGlzLm1hcHBpbmdcbiAgICAgIGlmICghKGNvZGVBY3RlIGluIGxlY3R1cmVzKSkgbGVjdHVyZXNbY29kZUFjdGVdID0gbmV3IExlY3R1cmVNYXBwaW5nKClcbiAgICAgIGxlY3R1cmVzW2NvZGVBY3RlXS5hZGQoYWN0ZSlcbiAgICB9XG4gIH1cblxuICByZW1hcChhY3RlOiBhbnkpIHtcbiAgICBjb25zdCBjb2RlQWN0ZSA9IExlY3R1cmVNYXBwaW5nLmdldENvZGVBY3RlKGFjdGUpXG4gICAgaWYgKGNvZGVBY3RlICE9IHVuZGVmaW5lZCkgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5yZW1hcChhY3RlLCBjb2RlQWN0ZSlcbiAgfVxuXG4gIG1lcmdlQ29kZXMoY29kZXM6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIHRoaXMubWFwcGluZ1tjb2RlQWN0ZV0ubWVyZ2VDb2Rlcyhjb2RlcylcbiAgfVxuXG4gIHByaW50QW5jaG9ycyhjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5wcmludEFuY2hvcnMoKVxuICB9XG5cbiAgZ2V0Q29kZXMoY29kZUFjdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLmdldENvZGVzKClcbiAgfVxufVxuXG5jbGFzcyBBY3Rlc0RvY3VtZW50YXRpb24ge1xuICB2ZXJib3NlOiBib29sZWFuXG4gIHNhbml0eUNoZWNrczogYm9vbGVhblxuICBsZWN0dXJlTWFwcGVyOiBhbnkgPSBuZXcgTGVjdHVyZU1hcHBlcigpXG4gIHJlbWFwcGVkUHJvY2VkdXJlczogYW55ID0ge31cbiAgYW5jaG9yc1ByaW50ZWQ6IGFueSA9IHt9XG4gIGFuY2hvcnM6IGFueSA9IG5ldyBTZXQoKVxuICBjb2RlczogYW55ID0ge31cbiAgcHJvY2VkdXJlczogYW55ID0gbnVsbFxuICBjb2RlMnBhdHRlcm46IGFueSA9IG5ldyBDb2RlMlBhdHRlcm4obnVsbCwge1xuICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXigoKC9sZWN0dXJlLykrKXwoKC9sZWN0dXJlLykrL0NNUC8oL2xlY3R1cmUvKSopKSgvQ0MvKT8oL1BST00vKT8oL0FOLUFQUExJLyk/JFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvREVQT1QvKT8oL0RQVExFVFRSRUNULyk/KC9FVEkvKT8oL0FWQ0UvKT8oL0RHVlQvKT8oL0FDSU4vKT8oL01PVElPTi8pKigvUFJPQ0FDQy8pPygvQ09NLyk/KCgvREVCQVRTLykrKT8oL1JUUklOSS8pPyRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImxlY3R1cmUtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05EL3wvQVZJUy8pKyRcIiwge1xuICAgICAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICAgICAgXCJsZWN0dXJlLUNPTS1BVklTXCI6IG5ldyBDb2RlMlBhdHRlcm5Db21Gb25kKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFwibGVjdHVyZS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgICAgXCJeKC9TRUFOQ0UvKSooKC9NT1RJT04vKT8oL01PVElPTi1WT1RFLykrKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIENNUDogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0RFUE9UL3wvU0FJU0lFLyl7MSwyfSgvQ09NLyk/KC9ERUMvKT8oL0RFQkFUUy1BTi8vREVCQVRTLVNOLyk/XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJDTVAtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICAgIFwiXigvTk9NSU4vKT8oL1JBUFBPUlQtQU4vfC9SQVBQT1JULVNOLyl7Mn0kXCIsXG4gICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1BTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1TTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBDQzogbmV3IENvZGUyUGF0dGVybihcIl4oL1NBSVNJRS8pKygvQ09OQ0xVU0lPTi8pPyRcIiwge30pLFxuICAgICAgICBQUk9NOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUFVCLyk/JFwiLCB7fSksXG4gICAgICAgIFwiQU4tQVBQTElcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1JBUFBPUlQvKT8kXCIsIHt9KSxcbiAgICAgIH0sXG4gICAgKSxcbiAgICBcIkFsbG9jdXRpb24gZHUgUHLDqXNpZGVudCBkZSBsJ0Fzc2VtYmzDqWUgbmF0aW9uYWxlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vQU4yMS8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjE6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BUEFOLyk/JFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJSw6lzb2x1dGlvbiBBcnRpY2xlIDM0LTFcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0RFQkFUUy8pPygvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykrKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFLDqXNvbHV0aW9uOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLyk/KC9DQy8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTL3wvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLUNPTVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQ0FFLyk/KC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICBcIkFOTFVOSS1DT00tQ0FFXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICBcIl4oL1NBSVNJRS8pPygvTk9NSU4vKT8oL1JFVU5JT04vKT8oL1JBUFBPUlQvKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pKigvREVDLyk/JFwiLCB7fSksXG4gICAgICB9KSxcbiAgICAgIENDOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0FJU0lFLyk/KC9DT05DTFVTSU9OLyk/JFwiLCB7fSksXG4gICAgfSksXG4gICAgXCJSYXBwb3J0IGQnaW5mb3JtYXRpb24gc2FucyBtaXNzaW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4oL0FOMjAvKT8oL0VVLyk/JFwiLFxuICAgICAge1xuICAgICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUkFQUE9SVC8pPyRcIiwge30pLFxuICAgICAgICBFVTogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFQy8pKyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTWlzc2lvbiBkJ2luZm9ybWF0aW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BTjIwLyk/JFwiLCB7XG4gICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvTUlTSU5GLyk/JFwiLCB7XG4gICAgICAgIFwiQU4yMC1NSVNJTkZcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0NSRUEvKT8oL05PTUlOLyk/KC9SQVBQT1JULyk/JFwiLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgXCJDb21taXNzaW9uIGQnZW5xdcOqdGVcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOMjAvKT8kXCIsIHtcbiAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9DT01FTlEvKT8kXCIsIHtcbiAgICAgICAgXCJBTjIwLUNPTUVOUVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvQ1JFQS8pPygvTk9NSU4vKT8oL1JBUFBPUlQvKT8kXCIsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgICBcIkVuZ2FnZW1lbnQgZGUgbGEgcmVzcG9uc2FiaWxpdMOpIGdvdXZlcm5lbWVudGFsZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL0FOMjEvJFwiLFxuICAgICAge1xuICAgICAgICBBTjIxOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigoKC9NT1RJT04vKSovREVCQVRTLyl8KC9ER1ZULykpezEsMn0kXCIsIHtcbiAgICAgICAgICBcIkFOMjEtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL01PVElPTi1WT1RFLykqJFwiLCB7fSksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTW90aW9uIHLDqWbDqXJlbmRhaXJlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9sZWN0dXJlLykrJFwiLCB7XG4gICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/JFwiLCB7XG4gICAgICAgIFwibGVjdHVyZS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcImxlY3R1cmUtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIEltbXVuaXTDqTogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pKyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/KC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pPygvREVDLykkXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFwiUmVzcG9uc2FiaWxpdMOpIHDDqW5hbGUgZHUgcHLDqXNpZGVudCBkZSBsYSByw6lwdWJsaXF1ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL2xlY3R1cmUvJFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL1JFQ0JVUkVBVS8pPyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiUHJvcG9zaXRpb24gZGUgbG9pIHByw6lzZW50w6llIGVuIGFwcGxpY2F0aW9uIGRlIGwnYXJ0aWNsZSAxMSBkZSBsYSBDb25zdGl0dXRpb25cIjpcbiAgICAgIG5ldyBDb2RlMlBhdHRlcm4oXCJeL2xlY3R1cmUvJFwiLCB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPyRcIiwge30pLFxuICAgICAgfSksXG4gIH0pXG5cbiAgY29uc3RydWN0b3Ioc2FuaXR5Q2hlY2tzOiBib29sZWFuLCB2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlXG4gICAgdGhpcy5zYW5pdHlDaGVja3MgPSBzYW5pdHlDaGVja3NcbiAgICB0aGlzLnByb2NlZHVyZXMgPSB7fVxuICAgIHRoaXMuY29kZTJwYXR0ZXJuLl9tYXRjaF9jb3VudF8rK1xuICB9XG5cbiAgd2Fsa0ZpbGVzKGRhdGE6IHN0cmluZ1tdLCBhY3Rpb246IGFueSkge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBnZXRGaWxlcyhkYXRhKSkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGxvYWQoZmlsZSlcbiAgICAgIGxldCBwcm9jZWR1cmU6IHN0cmluZyA9IHRoaXMucmVtYXBQcm9jZWR1cmUoXG4gICAgICAgIGRvc3NpZXIucHJvY2VkdXJlUGFybGVtZW50YWlyZS5saWJlbGxlLFxuICAgICAgKVxuICAgICAgaWYgKCEocHJvY2VkdXJlIGluIHRoaXMucHJvY2VkdXJlcykpIHRoaXMucHJvY2VkdXJlc1twcm9jZWR1cmVdID0ge31cbiAgICAgIGFjdGlvbihcbiAgICAgICAgdGhpcy5wcm9jZWR1cmVzW3Byb2NlZHVyZV0sXG4gICAgICAgIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyxcbiAgICAgICAgdGhpcy5jb2RlMnBhdHRlcm5bcHJvY2VkdXJlXSxcbiAgICAgICAgbnVsbCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb2xsZWN0RmlsZXMoZGF0YTogc3RyaW5nW10pIHtcbiAgICB0aGlzLndhbGtGaWxlcyhcbiAgICAgIGRhdGEsXG4gICAgICAoX2FjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgX2MycDogYW55LCBfcGFyZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5jb2xsZWN0KGFjdGVzTGVnaXNsYXRpZnMpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIHByb2Nlc3NGaWxlcyhkYXRhOiBzdHJpbmdbXSkge1xuICAgIHRoaXMud2Fsa0ZpbGVzKFxuICAgICAgZGF0YSxcbiAgICAgIChhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLm1lcmdlKGFjdGVzLCBhY3Rlc0xlZ2lzbGF0aWZzLCBjMnAsIHBhcmVudClcbiAgICAgIH0sXG4gICAgKVxuICAgIGlmICh0aGlzLnNhbml0eUNoZWNrcykgdGhpcy52YWxpZGF0ZSgpXG4gIH1cblxuICByZW1hcEFjdGVzKGFjdGVzOiBhbnkpOiBhbnkge1xuICAgIGxldCByZXN1bHRzID0gW11cbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgYWN0ZXMpIHtcbiAgICAgIHRoaXMubGVjdHVyZU1hcHBlci5yZW1hcChhY3RlKVxuXG4gICAgICAvLyBDQy1TQUlTSUUtIHN1ZmZpeCBkb2VzIG5vdCBpbXBseSBhIGhpZXJhcmNoeVxuICAgICAgYWN0ZS5jb2RlQWN0ZSA9IGFjdGUuY29kZUFjdGUucmVwbGFjZSgvXkNDLVNBSVNJRS4qLywgXCJDQy1TQUlTSUVcIilcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICBjb2xsZWN0QWN0ZXMoYWN0ZXM6IGFueSk6IGFueSB7XG4gICAgbGV0IHJlc3VsdHMgPSBbXVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBhY3Rlcykge1xuICAgICAgdGhpcy5sZWN0dXJlTWFwcGVyLmNvbGxlY3QoYWN0ZSlcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICByZW1hcFByb2NlZHVyZShwcm9jZWR1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWVyZ2VfcHJvY2VkdXJlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoW1xuICAgICAgW1wiUHJvcG9zaXRpb24gZGUgbG9pIG9yZGluYWlyZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1wiUHJvamV0IGRlIGxvaSBvcmRpbmFpcmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgcmF0aWZpY2F0aW9uIGRlcyB0cmFpdMOpcyBldCBjb252ZW50aW9uc1wiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgICAgW1wiUHJvamV0IG91IHByb3Bvc2l0aW9uIGRlIGxvaSBvcmdhbmlxdWVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgb3UgcHJvcG9zaXRpb24gZGUgbG9pIGNvbnN0aXR1dGlvbm5lbGxlXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIGRlIGwnYW5uw6llXCIsIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIl0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIHJlY3RpZmljYXRpdmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VtZW50IGRlIGxhIHPDqWN1cml0w6kgc29jaWFsZVwiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgIF0pXG4gICAgaWYgKG1lcmdlX3Byb2NlZHVyZXMuaGFzKHByb2NlZHVyZSkpIHtcbiAgICAgIHRoaXMucmVtYXBwZWRQcm9jZWR1cmVzW3Byb2NlZHVyZV0gPSBudWxsXG4gICAgICByZXR1cm4gbWVyZ2VfcHJvY2VkdXJlcy5nZXQocHJvY2VkdXJlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvY2VkdXJlXG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIHRoZSBjb2RlQWN0ZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIHJlZ2V4cFxuICBvcmRlcmVkQ29kZXMoY29kZXM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGNvZGVzID0gbmV3IFNldChjb2RlcylcbiAgICBpZiAoIXRoaXMuc2FuaXR5Q2hlY2tzKSByZXR1cm4gY29kZXNcbiAgICBsZXQgb3JkZXJlZCA9IGMycFtcIl9wYXR0ZXJuX1wiXS5tYXRjaChuZXcgUmVnRXhwKFwiLy4qPy9cIiwgXCJnXCIpKVxuICAgIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiB4LnJlcGxhY2UobmV3IFJlZ0V4cChcIi8oLiopL1wiKSwgXCIkMVwiKSlcbiAgICBpZiAocGFyZW50ICE9IG51bGwpIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiBgJHtwYXJlbnR9LSR7eH1gKVxuICAgIG9yZGVyZWQgPSBuZXcgU2V0KG9yZGVyZWQpXG4gICAgYXNzZXJ0KGVxU2V0KG9yZGVyZWQsIGNvZGVzKSwgYCR7Wy4uLm9yZGVyZWRdfSAhPSAke1suLi5jb2Rlc119YClcbiAgICByZXR1cm4gb3JkZXJlZFxuICB9XG5cbiAgdmFsaWRhdGVDaHJvbm9sb2d5KGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGF0dGVybiA9IGMycFtcIl9wYXR0ZXJuX1wiXVxuICAgIGNvbnN0IHNlcXVlbmNlID0gYWN0ZXNMZWdpc2xhdGlmc1xuICAgICAgLm1hcCgoeDogYW55KSA9PiBgLyR7eC5jb2RlQWN0ZX0vYC5yZXBsYWNlKGAvJHtwYXJlbnR9LWAsIFwiL1wiKSlcbiAgICAgIC5qb2luKFwiXCIpXG4gICAgYXNzZXJ0KFxuICAgICAgc2VxdWVuY2UubWF0Y2gobmV3IFJlZ0V4cChwYXR0ZXJuKSksXG4gICAgICBgJHtwYXR0ZXJufSBkb2VzIG5vdCBtYXRjaCAke3NlcXVlbmNlfWAsXG4gICAgKVxuICAgIGMycC5fbWF0Y2hfY291bnRfKytcbiAgfVxuXG4gIG1lcmdlQWN0ZShhY3RlczogYW55LCBhY3RlOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBjb2RlOiBzdHJpbmcgPSBhY3RlLmNvZGVBY3RlXG4gICAgbGV0IHNob3J0Q29kZTogc3RyaW5nID0gY29kZS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3BhcmVudH0tYCksIFwiXCIpXG4gICAgc2hvcnRDb2RlID0gc2hvcnRDb2RlLnJlcGxhY2UoLy0oQU58U04pJC8sIFwiXCIpXG4gICAgdGhpcy5jb2Rlc1tzaG9ydENvZGVdID0gbnVsbFxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZVxuICAgIGlmICghKGNvZGUgaW4gYWN0ZXMpKSB7XG4gICAgICBhY3Rlc1tjb2RlXSA9IHtcbiAgICAgICAgdHlwZTogYWN0ZS54c2lUeXBlLFxuICAgICAgICBuYW1lOiBuZXcgU2V0KFtuYW1lXSksXG4gICAgICAgIHNob3J0Q29kZTogc2hvcnRDb2RlLFxuICAgICAgICBhY3Rlczoge30sXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGVzW2NvZGVdLm5hbWUuYWRkKG5hbWUpXG4gICAgfVxuICAgIGlmIChcImFjdGVzTGVnaXNsYXRpZnNcIiBpbiBhY3RlKVxuICAgICAgdGhpcy5tZXJnZShhY3Rlc1tjb2RlXS5hY3RlcywgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzLCBjMnBbY29kZV0sIGNvZGUpXG4gIH1cblxuICBtZXJnZShhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGwgPSB0aGlzLnJlbWFwQWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcylcbiAgICB0aGlzLnZhbGlkYXRlQ2hyb25vbG9neShsLCBjMnAsIHBhcmVudClcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgbCkgdGhpcy5tZXJnZUFjdGUoYWN0ZXMsIGFjdGUsIGMycCwgcGFyZW50KVxuICB9XG5cbiAgY29sbGVjdChhY3Rlc0xlZ2lzbGF0aWZzOiBhbnkpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgdGhpcy5jb2xsZWN0QWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcykpXG4gICAgICBpZiAoXCJhY3Rlc0xlZ2lzbGF0aWZzXCIgaW4gYWN0ZSkgdGhpcy5jb2xsZWN0KGFjdGUuYWN0ZXNMZWdpc2xhdGlmcylcbiAgfVxuXG4gIHZhbGlkYXRlTGV2ZWwoYzJwOiBhbnksIHBhdGg6IGFueSkge1xuICAgIGFzc2VydChjMnAuX21hdGNoX2NvdW50XyA+IDAsIGAke3BhdGh9IGlzIG5ldmVyIHVzZWRgKVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGMycCkgYXMgW3N0cmluZywgYW55XVtdKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwiQ29kZTJQYXR0ZXJuXCIpXG4gICAgICAgIHRoaXMudmFsaWRhdGVMZXZlbCh2YWx1ZSwgcGF0aC5jb25jYXQoW2tleV0pKVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIHRoaXMudmFsaWRhdGVMZXZlbCh0aGlzLmNvZGUycGF0dGVybiwgW10pXG4gIH1cblxuICBwcmludEVudHJ5KHNlY3Rpb25zOiBzdHJpbmcsIGVudHJ5OiBzdHJpbmcsIGNvZGVzOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0aXRsZSA9IGBcXGAke2VudHJ5fVxcYF9fYFxuICAgIGNvbnNvbGUubG9nKHRpdGxlKVxuICAgIGNvbnN0IHVuZGVybGluZSA9IG5ldyBBcnJheSh0aXRsZS5sZW5ndGggKyAxKS5qb2luKHNlY3Rpb25zWzBdKVxuICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICBjb25zb2xlLmxvZyhjb2RlcylcbiAgfVxuXG4gIGFkZEFuY2hvcnMoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVyblxuICAgIGlmICh0aGlzLmxlY3R1cmVNYXBwZXIuaGFzKGtleSkpXG4gICAgICB0aGlzLmxlY3R1cmVNYXBwZXIubWVyZ2VDb2Rlcyh0aGlzLmFuY2hvcnMsIGtleSlcbiAgICBlbHNlIHRoaXMuYW5jaG9ycy5hZGQoa2V5KVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm5cbiAgICB0aGlzLmFuY2hvcnNQcmludGVkW2tleV0gPSBudWxsXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgdGhpcy5sZWN0dXJlTWFwcGVyLnByaW50QW5jaG9ycyhrZXkpXG4gICAgZWxzZSBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fTpgKVxuICB9XG5cbiAgZ2V0Q29kZXMoa2V5OiBzdHJpbmcsIHNob3J0Q29kZTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm4gYGNmIFxcXFwqJHtzaG9ydENvZGV9XFxcXCpgXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgcmV0dXJuIHRoaXMubGVjdHVyZU1hcHBlci5nZXRDb2RlcyhrZXkpXG4gICAgZWxzZSByZXR1cm4ga2V5XG4gIH1cblxuICByZW5hbWVDTVAoa2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIkNNUFwiKSkge1xuICAgICAgaWYgKGtleS5lbmRzV2l0aChcIi1TTlwiKSkgcmV0dXJuIGAke25hbWV9IChTw6luYXQpYFxuICAgICAgZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiLUFOXCIpKSByZXR1cm4gYCR7bmFtZX0gKEFzc2VtYmzDqWUgTmF0aW9uYWxlKWBcbiAgICAgIGVsc2UgcmV0dXJuIG5hbWVcbiAgICB9IGVsc2UgcmV0dXJuIG5hbWVcbiAgfVxuXG4gIHByaW50TGV2ZWwoYWN0ZXM6IGFueSwgc2VjdGlvbnM6IHN0cmluZywgYzJwOiBhbnksIHBhcmVudDogYW55KSB7XG4gICAgY29uc3Qga2V5czogU2V0PHN0cmluZz4gPSB0aGlzLm9yZGVyZWRDb2RlcyhPYmplY3Qua2V5cyhhY3RlcyksIGMycCwgcGFyZW50KVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYWN0ZXNba2V5XVxuICAgICAgbGV0IG5hbWUgPSBBcnJheS5mcm9tKHZhbHVlLm5hbWUpLmpvaW4oXCIsIFwiKVxuICAgICAgbmFtZSA9IHRoaXMucmVuYW1lQ01QKGtleSwgbmFtZSlcbiAgICAgIGNvbnN0IGNvZGVzID0gdGhpcy5nZXRDb2RlcyhrZXksIHZhbHVlLnNob3J0Q29kZSlcbiAgICAgIHRoaXMuYWRkQW5jaG9ycyhrZXkpXG4gICAgICB0aGlzLnByaW50QW5jaG9ycyhrZXkpXG4gICAgICBjb25zb2xlLmxvZyhcIlwiKVxuICAgICAgdGhpcy5wcmludEVudHJ5KHNlY3Rpb25zLCBgJHtuYW1lfSA8JHt2YWx1ZS5zaG9ydENvZGV9VE9DXz5gLCBjb2RlcylcbiAgICAgIGNvbnNvbGUubG9nKFwiXCIpXG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUuYWN0ZXMpLmxlbmd0aCA+IDApXG4gICAgICAgIHRoaXMucHJpbnRMZXZlbCh2YWx1ZS5hY3Rlcywgc2VjdGlvbnMuc3Vic3RyaW5nKDEpLCBjMnBba2V5XSwga2V5KVxuICAgIH1cbiAgfVxuXG4gIHByaW50Q29kZXMoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5jb2RlcykpXG4gICAgICBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fVRPQzogaHR0cDovL2ApXG4gIH1cblxuICBwcmludEFuY2hvcnNJbmRleCgpIHtcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2YgQXJyYXkuZnJvbSh0aGlzLmFuY2hvcnMpKVxuICAgICAgY29uc29sZS5sb2coYCogOnJlZjpcXGAke2NvZGV9IDwke2NvZGV9PlxcYGApXG4gIH1cblxuICBnZXRBZ2dyZWdhdGVkKHByb2NlZHVyZTogc3RyaW5nKSB7XG4gICAgaWYgKHByb2NlZHVyZSA9PSBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIpIHtcbiAgICAgIGNvbnN0IHJlbWFwcGVkID0gT2JqZWN0LmtleXModGhpcy5yZW1hcHBlZFByb2NlZHVyZXMpLmpvaW4oXCIsIFwiKVxuICAgICAgcmV0dXJuIGAgKGFncsOpZ2F0aW9uIGRlICR7cmVtYXBwZWR9KWBcbiAgICB9IGVsc2UgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIHByaW50KCk6IHZvaWQge1xuICAgIHRoaXMuYW5jaG9yc1ByaW50ZWQgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgYWN0ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucHJvY2VkdXJlcykgYXMgW1xuICAgICAgc3RyaW5nLFxuICAgICAgYW55LFxuICAgIF1bXSkge1xuICAgICAgY29uc3QgY29kZSA9IGtleS5yZXBsYWNlKC8gKy9nLCBcIl9cIilcbiAgICAgIHRoaXMuY29kZXNbY29kZV0gPSBudWxsXG4gICAgICBjb25zdCBhZ2dyZWdhdGVkID0gdGhpcy5nZXRBZ2dyZWdhdGVkKGtleSlcbiAgICAgIGNvbnN0IHRpdGxlID0gYFxcYCR7a2V5fSA8JHtjb2RlfVRPQ18+XFxgX18ke2FnZ3JlZ2F0ZWR9YFxuICAgICAgY29uc29sZS5sb2codGl0bGUpXG4gICAgICBjb25zdCB1bmRlcmxpbmUgPSBuZXcgQXJyYXkodGl0bGUubGVuZ3RoICsgMSkuam9pbihcIj1cIilcbiAgICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICAgIHRoaXMucHJpbnRMZXZlbChhY3RlcywgXCItfi4nXCIsIHRoaXMuY29kZTJwYXR0ZXJuW2tleV0sIG51bGwpXG4gICAgfVxuICAgIHRoaXMucHJpbnRDb2RlcygpXG4gICAgdGhpcy5wcmludEFuY2hvcnNJbmRleCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChvcHRpb25zID09PSBudWxsKSByZXR1cm4gMVxuICBsZXQgZG9jID0gbmV3IEFjdGVzRG9jdW1lbnRhdGlvbihcbiAgICAhb3B0aW9uc1tcIm5vLXNhbml0eS1jaGVja3NcIl0sXG4gICAgb3B0aW9ucy52ZXJib3NlLFxuICApXG4gIGRvYy5jb2xsZWN0RmlsZXMob3B0aW9ucy5kYXRhKVxuICBkb2MucHJvY2Vzc0ZpbGVzKG9wdGlvbnMuZGF0YSlcbiAgZG9jLnByaW50KClcbiAgcmV0dXJuIDBcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwiZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPQSxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLGdCQUFnQixNQUFNLG9CQUFvQjtBQUNqRCxPQUFPQyxNQUFNLE1BQU0sUUFBUTtBQUFBLFNBQ2xCQyxJQUFJLEVBQUVDLFFBQVE7QUFFdkIsU0FBU0MsU0FBU0EsQ0FBQ0MsSUFBYyxFQUFPO0VBQ3RDLE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCO0lBQ0VDLFdBQVcsRUFBRSx5REFBeUQ7SUFDdEVDLGFBQWEsRUFBRSxJQUFJO0lBQ25CQyxRQUFRLEVBQUUsSUFBSTtJQUNkQyxJQUFJLEVBQUUsTUFBTTtJQUNaQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VGLElBQUksRUFBRSxrQkFBa0I7SUFDeEJDLElBQUksRUFBRUUsT0FBTztJQUNiTixXQUFXLEVBQUU7RUFDZixDQUFDLEVBQ0Q7SUFDRUcsSUFBSSxFQUFFLFNBQVM7SUFDZkMsSUFBSSxFQUFFRSxPQUFPO0lBQ2JOLFdBQVcsRUFBRTtFQUNmLENBQUMsRUFDRDtJQUNFRyxJQUFJLEVBQUUsTUFBTTtJQUNaSCxXQUFXLEVBQUU7RUFDZixDQUFDLENBQ0Y7RUFDRCxNQUFNTyxR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
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("core-js/modules/es.array.includes.js");
|
|
4
|
-
require("core-js/modules/es.date.to-json.js");
|
|
5
|
-
require("core-js/modules/es.date.to-string.js");
|
|
6
|
-
require("core-js/modules/es.object.values.js");
|
|
7
|
-
require("core-js/modules/es.string.includes.js");
|
|
8
|
-
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
|
|
9
|
-
var _datasets = require("../datasets");
|
|
10
|
-
var _loaders = require("../loaders");
|
|
11
|
-
var _agendas = require("../types/agendas");
|
|
12
|
-
var _cli_helpers = require("./shared/cli_helpers");
|
|
13
|
-
var _legislatures = require("../types/legislatures");
|
|
14
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
15
|
-
var optionsDefinitions = [_cli_helpers.dataDirDefaultOption];
|
|
16
|
-
var options = (0, _commandLineArgs["default"])(optionsDefinitions);
|
|
17
|
-
var now = new Date();
|
|
18
|
-
var _loadAssembleeData = (0, _loaders.loadAssembleeData)(options.dataDir, _datasets.EnabledDatasets.Agendas, _legislatures.Legislature.DixSept),
|
|
19
|
-
reunionByUid = _loadAssembleeData.reunionByUid;
|
|
20
|
-
for (var _i = 0, _Object$values = Object.values(reunionByUid); _i < _Object$values.length; _i++) {
|
|
21
|
-
var reunion = _Object$values[_i];
|
|
22
|
-
if (![_agendas.EtatCycleDeVie.Confirmé, _agendas.EtatCycleDeVie.Eventuel].includes(reunion.cycleDeVie.etat)) {
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
var timestampDebut = reunion.timestampDebut,
|
|
26
|
-
typeReunion = reunion.typeReunion,
|
|
27
|
-
uid = reunion.uid;
|
|
28
|
-
if (typeReunion !== "GP") {
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
if (timestampDebut.getFullYear() !== now.getFullYear() || timestampDebut.getMonth() !== now.getMonth() || timestampDebut.getDate() !== now.getDate()) {
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
console.log(uid, timestampDebut, JSON.stringify(reunion, null, 2));
|
|
35
|
-
}
|
|
36
|
-
console.log(now);
|
|
37
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tbWFuZExpbmVBcmdzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGF0YXNldHMiLCJfbG9hZGVycyIsIl9hZ2VuZGFzIiwiX2NsaV9oZWxwZXJzIiwiX2xlZ2lzbGF0dXJlcyIsImUiLCJfX2VzTW9kdWxlIiwib3B0aW9uc0RlZmluaXRpb25zIiwiZGF0YURpckRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwibm93IiwiRGF0ZSIsIl9sb2FkQXNzZW1ibGVlRGF0YSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZGF0YURpciIsIkVuYWJsZWREYXRhc2V0cyIsIkFnZW5kYXMiLCJMZWdpc2xhdHVyZSIsIkRpeFNlcHQiLCJyZXVuaW9uQnlVaWQiLCJfaSIsIl9PYmplY3QkdmFsdWVzIiwiT2JqZWN0IiwidmFsdWVzIiwibGVuZ3RoIiwicmV1bmlvbiIsIkV0YXRDeWNsZURlVmllIiwiQ29uZmlybcOpIiwiRXZlbnR1ZWwiLCJpbmNsdWRlcyIsImN5Y2xlRGVWaWUiLCJldGF0IiwidGltZXN0YW1wRGVidXQiLCJ0eXBlUmV1bmlvbiIsInVpZCIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiY29uc29sZSIsImxvZyIsIkpTT04iLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9nZXRfdG9kYXlfcmV1bmlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuXG5pbXBvcnQgeyBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgbG9hZEFzc2VtYmxlZURhdGEgfSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQgeyBFdGF0Q3ljbGVEZVZpZSB9IGZyb20gXCIuLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IGRhdGFEaXJEZWZhdWx0T3B0aW9uIH0gZnJvbSBcIi4vc2hhcmVkL2NsaV9oZWxwZXJzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4uL3R5cGVzL2xlZ2lzbGF0dXJlc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtkYXRhRGlyRGVmYXVsdE9wdGlvbl1cbmNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG5jb25zdCBub3cgPSBuZXcgRGF0ZSgpXG5jb25zdCB7IHJldW5pb25CeVVpZCB9ID0gbG9hZEFzc2VtYmxlZURhdGEoXG4gIG9wdGlvbnMuZGF0YURpcixcbiAgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMsXG4gIExlZ2lzbGF0dXJlLkRpeFNlcHQsXG4pXG5mb3IgKGNvbnN0IHJldW5pb24gb2YgT2JqZWN0LnZhbHVlcyhyZXVuaW9uQnlVaWQpKSB7XG4gIGlmIChcbiAgICAhW0V0YXRDeWNsZURlVmllLkNvbmZpcm3DqSwgRXRhdEN5Y2xlRGVWaWUuRXZlbnR1ZWxdLmluY2x1ZGVzKFxuICAgICAgcmV1bmlvbi5jeWNsZURlVmllLmV0YXQsXG4gICAgKVxuICApIHtcbiAgICBjb250aW51ZVxuICB9XG4gIGNvbnN0IHsgdGltZXN0YW1wRGVidXQsIHR5cGVSZXVuaW9uLCB1aWQgfSA9IHJldW5pb25cbiAgaWYgKHR5cGVSZXVuaW9uICE9PSBcIkdQXCIpIHtcbiAgICBjb250aW51ZVxuICB9XG4gIGlmIChcbiAgICB0aW1lc3RhbXBEZWJ1dC5nZXRGdWxsWWVhcigpICE9PSBub3cuZ2V0RnVsbFllYXIoKSB8fFxuICAgIHRpbWVzdGFtcERlYnV0LmdldE1vbnRoKCkgIT09IG5vdy5nZXRNb250aCgpIHx8XG4gICAgdGltZXN0YW1wRGVidXQuZ2V0RGF0ZSgpICE9PSBub3cuZ2V0RGF0ZSgpXG4gICkge1xuICAgIGNvbnRpbnVlXG4gIH1cbiAgY29uc29sZS5sb2codWlkLCB0aW1lc3RhbXBEZWJ1dCwgSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMikpXG59XG5jb25zb2xlLmxvZyhub3cpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBTCxPQUFBO0FBQW1ELFNBQUFELHVCQUFBTyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFFbkQsSUFBTUUsa0JBQWtCLEdBQUcsQ0FBQ0MsaUNBQW9CLENBQUM7QUFDakQsSUFBTUMsT0FBTyxHQUFHLElBQUFDLDJCQUFlLEVBQUNILGtCQUFrQixDQUFDO0FBRW5ELElBQU1JLEdBQUcsR0FBRyxJQUFJQyxJQUFJLENBQUMsQ0FBQztBQUN0QixJQUFBQyxrQkFBQSxHQUF5QixJQUFBQywwQkFBaUIsRUFDeENMLE9BQU8sQ0FBQ00sT0FBTyxFQUNmQyx5QkFBZSxDQUFDQyxPQUFPLEVBQ3ZCQyx5QkFBVyxDQUFDQyxPQUNkLENBQUM7RUFKT0MsWUFBWSxHQUFBUCxrQkFBQSxDQUFaTyxZQUFZO0FBS3BCLFNBQUFDLEVBQUEsTUFBQUMsY0FBQSxHQUFzQkMsTUFBTSxDQUFDQyxNQUFNLENBQUNKLFlBQVksQ0FBQyxFQUFBQyxFQUFBLEdBQUFDLGNBQUEsQ0FBQUcsTUFBQSxFQUFBSixFQUFBLElBQUU7RUFBOUMsSUFBTUssT0FBTyxHQUFBSixjQUFBLENBQUFELEVBQUE7RUFDaEIsSUFDRSxDQUFDLENBQUNNLHVCQUFjLENBQUNDLFFBQVEsRUFBRUQsdUJBQWMsQ0FBQ0UsUUFBUSxDQUFDLENBQUNDLFFBQVEsQ0FDMURKLE9BQU8sQ0FBQ0ssVUFBVSxDQUFDQyxJQUNyQixDQUFDLEVBQ0Q7SUFDQTtFQUNGO0VBQ0EsSUFBUUMsY0FBYyxHQUF1QlAsT0FBTyxDQUE1Q08sY0FBYztJQUFFQyxXQUFXLEdBQVVSLE9BQU8sQ0FBNUJRLFdBQVc7SUFBRUMsR0FBRyxHQUFLVCxPQUFPLENBQWZTLEdBQUc7RUFDeEMsSUFBSUQsV0FBVyxLQUFLLElBQUksRUFBRTtJQUN4QjtFQUNGO0VBQ0EsSUFDRUQsY0FBYyxDQUFDRyxXQUFXLENBQUMsQ0FBQyxLQUFLekIsR0FBRyxDQUFDeUIsV0FBVyxDQUFDLENBQUMsSUFDbERILGNBQWMsQ0FBQ0ksUUFBUSxDQUFDLENBQUMsS0FBSzFCLEdBQUcsQ0FBQzBCLFFBQVEsQ0FBQyxDQUFDLElBQzVDSixjQUFjLENBQUNLLE9BQU8sQ0FBQyxDQUFDLEtBQUszQixHQUFHLENBQUMyQixPQUFPLENBQUMsQ0FBQyxFQUMxQztJQUNBO0VBQ0Y7RUFDQUMsT0FBTyxDQUFDQyxHQUFHLENBQUNMLEdBQUcsRUFBRUYsY0FBYyxFQUFFUSxJQUFJLENBQUNDLFNBQVMsQ0FBQ2hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEU7QUFDQWEsT0FBTyxDQUFDQyxHQUFHLENBQUM3QixHQUFHLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import commandLineArgs from "command-line-args";
|
|
2
|
-
import { EnabledDatasets } from "../datasets.mjs";
|
|
3
|
-
import { loadAssembleeData } from "../loaders.mjs";
|
|
4
|
-
import { EtatCycleDeVie } from "../types/agendas.mjs";
|
|
5
|
-
import { dataDirDefaultOption } from "./shared/cli_helpers.mjs";
|
|
6
|
-
import { Legislature } from "../types/legislatures.mjs";
|
|
7
|
-
const optionsDefinitions = [dataDirDefaultOption];
|
|
8
|
-
const options = commandLineArgs(optionsDefinitions);
|
|
9
|
-
const now = new Date();
|
|
10
|
-
const {
|
|
11
|
-
reunionByUid
|
|
12
|
-
} = loadAssembleeData(options.dataDir, EnabledDatasets.Agendas, Legislature.DixSept);
|
|
13
|
-
for (const reunion of Object.values(reunionByUid)) {
|
|
14
|
-
if (![EtatCycleDeVie.Confirmé, EtatCycleDeVie.Eventuel].includes(reunion.cycleDeVie.etat)) {
|
|
15
|
-
continue;
|
|
16
|
-
}
|
|
17
|
-
const {
|
|
18
|
-
timestampDebut,
|
|
19
|
-
typeReunion,
|
|
20
|
-
uid
|
|
21
|
-
} = reunion;
|
|
22
|
-
if (typeReunion !== "GP") {
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
if (timestampDebut.getFullYear() !== now.getFullYear() || timestampDebut.getMonth() !== now.getMonth() || timestampDebut.getDate() !== now.getDate()) {
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
console.log(uid, timestampDebut, JSON.stringify(reunion, null, 2));
|
|
29
|
-
}
|
|
30
|
-
console.log(now);
|
|
31
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJFbmFibGVkRGF0YXNldHMiLCJsb2FkQXNzZW1ibGVlRGF0YSIsIkV0YXRDeWNsZURlVmllIiwiZGF0YURpckRlZmF1bHRPcHRpb24iLCJMZWdpc2xhdHVyZSIsIm9wdGlvbnNEZWZpbml0aW9ucyIsIm9wdGlvbnMiLCJub3ciLCJEYXRlIiwicmV1bmlvbkJ5VWlkIiwiZGF0YURpciIsIkFnZW5kYXMiLCJEaXhTZXB0IiwicmV1bmlvbiIsIk9iamVjdCIsInZhbHVlcyIsIkNvbmZpcm3DqSIsIkV2ZW50dWVsIiwiaW5jbHVkZXMiLCJjeWNsZURlVmllIiwiZXRhdCIsInRpbWVzdGFtcERlYnV0IiwidHlwZVJldW5pb24iLCJ1aWQiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvZ2V0X3RvZGF5X3JldW5pb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcblxuaW1wb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGxvYWRBc3NlbWJsZWVEYXRhIH0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgRXRhdEN5Y2xlRGVWaWUgfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBkYXRhRGlyRGVmYXVsdE9wdGlvbiB9IGZyb20gXCIuL3NoYXJlZC9jbGlfaGVscGVyc1wiXG5pbXBvcnQgeyBMZWdpc2xhdHVyZSB9IGZyb20gXCIuLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbZGF0YURpckRlZmF1bHRPcHRpb25dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuY29uc3QgeyByZXVuaW9uQnlVaWQgfSA9IGxvYWRBc3NlbWJsZWVEYXRhKFxuICBvcHRpb25zLmRhdGFEaXIsXG4gIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzLFxuICBMZWdpc2xhdHVyZS5EaXhTZXB0LFxuKVxuZm9yIChjb25zdCByZXVuaW9uIG9mIE9iamVjdC52YWx1ZXMocmV1bmlvbkJ5VWlkKSkge1xuICBpZiAoXG4gICAgIVtFdGF0Q3ljbGVEZVZpZS5Db25maXJtw6ksIEV0YXRDeWNsZURlVmllLkV2ZW50dWVsXS5pbmNsdWRlcyhcbiAgICAgIHJldW5pb24uY3ljbGVEZVZpZS5ldGF0LFxuICAgIClcbiAgKSB7XG4gICAgY29udGludWVcbiAgfVxuICBjb25zdCB7IHRpbWVzdGFtcERlYnV0LCB0eXBlUmV1bmlvbiwgdWlkIH0gPSByZXVuaW9uXG4gIGlmICh0eXBlUmV1bmlvbiAhPT0gXCJHUFwiKSB7XG4gICAgY29udGludWVcbiAgfVxuICBpZiAoXG4gICAgdGltZXN0YW1wRGVidXQuZ2V0RnVsbFllYXIoKSAhPT0gbm93LmdldEZ1bGxZZWFyKCkgfHxcbiAgICB0aW1lc3RhbXBEZWJ1dC5nZXRNb250aCgpICE9PSBub3cuZ2V0TW9udGgoKSB8fFxuICAgIHRpbWVzdGFtcERlYnV0LmdldERhdGUoKSAhPT0gbm93LmdldERhdGUoKVxuICApIHtcbiAgICBjb250aW51ZVxuICB9XG4gIGNvbnNvbGUubG9nKHVpZCwgdGltZXN0YW1wRGVidXQsIEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpKVxufVxuY29uc29sZS5sb2cobm93KVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxlQUFlLE1BQU0sbUJBQW1CO0FBQUEsU0FFdENDLGVBQWU7QUFBQSxTQUNmQyxpQkFBaUI7QUFBQSxTQUNqQkMsY0FBYztBQUFBLFNBQ2RDLG9CQUFvQjtBQUFBLFNBQ3BCQyxXQUFXO0FBRXBCLE1BQU1DLGtCQUFrQixHQUFHLENBQUNGLG9CQUFvQixDQUFDO0FBQ2pELE1BQU1HLE9BQU8sR0FBR1AsZUFBZSxDQUFDTSxrQkFBa0IsQ0FBQztBQUVuRCxNQUFNRSxHQUFHLEdBQUcsSUFBSUMsSUFBSSxDQUFDLENBQUM7QUFDdEIsTUFBTTtFQUFFQztBQUFhLENBQUMsR0FBR1IsaUJBQWlCLENBQ3hDSyxPQUFPLENBQUNJLE9BQU8sRUFDZlYsZUFBZSxDQUFDVyxPQUFPLEVBQ3ZCUCxXQUFXLENBQUNRLE9BQ2QsQ0FBQztBQUNELEtBQUssTUFBTUMsT0FBTyxJQUFJQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ04sWUFBWSxDQUFDLEVBQUU7RUFDakQsSUFDRSxDQUFDLENBQUNQLGNBQWMsQ0FBQ2MsUUFBUSxFQUFFZCxjQUFjLENBQUNlLFFBQVEsQ0FBQyxDQUFDQyxRQUFRLENBQzFETCxPQUFPLENBQUNNLFVBQVUsQ0FBQ0MsSUFDckIsQ0FBQyxFQUNEO0lBQ0E7RUFDRjtFQUNBLE1BQU07SUFBRUMsY0FBYztJQUFFQyxXQUFXO0lBQUVDO0VBQUksQ0FBQyxHQUFHVixPQUFPO0VBQ3BELElBQUlTLFdBQVcsS0FBSyxJQUFJLEVBQUU7SUFDeEI7RUFDRjtFQUNBLElBQ0VELGNBQWMsQ0FBQ0csV0FBVyxDQUFDLENBQUMsS0FBS2pCLEdBQUcsQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDLElBQ2xESCxjQUFjLENBQUNJLFFBQVEsQ0FBQyxDQUFDLEtBQUtsQixHQUFHLENBQUNrQixRQUFRLENBQUMsQ0FBQyxJQUM1Q0osY0FBYyxDQUFDSyxPQUFPLENBQUMsQ0FBQyxLQUFLbkIsR0FBRyxDQUFDbUIsT0FBTyxDQUFDLENBQUMsRUFDMUM7SUFDQTtFQUNGO0VBQ0FDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDTCxHQUFHLEVBQUVGLGNBQWMsRUFBRVEsSUFBSSxDQUFDQyxTQUFTLENBQUNqQixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0FBQ0FjLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDckIsR0FBRyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|