@tricoteuses/assemblee 1.10.5 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -1
- package/lib/amendements-CN7bRFdP.js +259 -0
- package/lib/amendements-CN7bRFdP.js.map +1 -0
- package/lib/amendements-Cg1lyCBp.js +735 -0
- package/lib/amendements-Cg1lyCBp.js.map +1 -0
- package/lib/api.d.ts +1 -0
- package/lib/api.d.ts.map +1 -0
- package/lib/cleaners/actes_legislatifs.d.ts +1 -0
- package/lib/cleaners/actes_legislatifs.d.ts.map +1 -0
- package/lib/cleaners/acteurs.d.ts +1 -0
- package/lib/cleaners/acteurs.d.ts.map +1 -0
- package/lib/cleaners/amendements.d.ts +1 -0
- package/lib/cleaners/amendements.d.ts.map +1 -0
- package/lib/cleaners/debats.d.ts +1 -0
- package/lib/cleaners/debats.d.ts.map +1 -0
- package/lib/cleaners/documents.d.ts +1 -0
- package/lib/cleaners/documents.d.ts.map +1 -0
- package/lib/cleaners/dossiers_legislatifs.d.ts +1 -0
- package/lib/cleaners/dossiers_legislatifs.d.ts.map +1 -0
- package/lib/cleaners/index.d.ts +10 -9
- package/lib/cleaners/index.d.ts.map +1 -0
- package/lib/cleaners/organes.d.ts +1 -0
- package/lib/cleaners/organes.d.ts.map +1 -0
- package/lib/cleaners/questions.d.ts +1 -0
- package/lib/cleaners/questions.d.ts.map +1 -0
- package/lib/cleaners/reunions.d.ts +1 -0
- package/lib/cleaners/reunions.d.ts.map +1 -0
- package/lib/cleaners/scrutins.d.ts +1 -0
- package/lib/cleaners/scrutins.d.ts.map +1 -0
- package/lib/cleaners/xml.d.ts +1 -0
- package/lib/cleaners/xml.d.ts.map +1 -0
- package/lib/cleaners.js +1138 -0
- package/lib/cleaners.js.map +1 -0
- package/lib/datasets.d.ts +4 -3
- package/lib/datasets.d.ts.map +1 -0
- package/lib/dates.d.ts +1 -0
- package/lib/dates.d.ts.map +1 -0
- package/lib/debats-BwZYgzXe.js +3978 -0
- package/lib/debats-BwZYgzXe.js.map +1 -0
- package/lib/dossiers_legislatifs.d.ts +3 -2
- package/lib/dossiers_legislatifs.d.ts.map +1 -0
- package/lib/file_systems.d.ts +1 -0
- package/lib/file_systems.d.ts.map +1 -0
- package/lib/git.d.ts +1 -0
- package/lib/git.d.ts.map +1 -0
- package/lib/index.d.ts +18 -22
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +1916 -285
- package/lib/index.js.map +1 -0
- package/lib/inserters.d.ts +6 -5
- package/lib/inserters.d.ts.map +1 -0
- package/lib/loaders.d.ts +13 -12
- package/lib/loaders.d.ts.map +1 -0
- package/lib/loaders.js +812 -1516
- package/lib/loaders.js.map +1 -0
- package/lib/logger.d.ts +1 -0
- package/lib/logger.d.ts.map +1 -0
- package/lib/organes.d.ts +2 -1
- package/lib/organes.d.ts.map +1 -0
- package/lib/parse-CzW8NHW5.js +2850 -0
- package/lib/parse-CzW8NHW5.js.map +1 -0
- package/lib/parsers/index.d.ts +3 -3
- package/lib/parsers/index.d.ts.map +1 -0
- package/lib/parsers/plf.d.ts +2 -0
- package/lib/parsers/plf.d.ts.map +1 -0
- package/lib/parsers/recherche_amendements.d.ts +3 -2
- package/lib/parsers/recherche_amendements.d.ts.map +1 -0
- package/lib/parsers/textes_lois.d.ts +2 -23
- package/lib/parsers/textes_lois.d.ts.map +1 -0
- package/lib/parsers.js +393 -0
- package/lib/parsers.js.map +1 -0
- package/lib/raw_types/acteurs_et_organes.d.ts +1 -0
- package/lib/raw_types/acteurs_et_organes.d.ts.map +1 -0
- package/lib/raw_types/agendas.d.ts +1 -0
- package/lib/raw_types/agendas.d.ts.map +1 -0
- package/lib/raw_types/amendements.d.ts +1 -0
- package/lib/raw_types/amendements.d.ts.map +1 -0
- package/lib/raw_types/debats.d.ts +3 -2
- package/lib/raw_types/debats.d.ts.map +1 -0
- package/lib/raw_types/dossiers_legislatifs.d.ts +2 -1
- package/lib/raw_types/dossiers_legislatifs.d.ts.map +1 -0
- package/lib/raw_types/questions.d.ts +1 -0
- package/lib/raw_types/questions.d.ts.map +1 -0
- package/lib/raw_types/scrutins.d.ts +1 -0
- package/lib/raw_types/scrutins.d.ts.map +1 -0
- package/lib/schemas/acteurs_et_organes.d.json +982 -0
- package/lib/schemas/acteurs_et_organes.json +1166 -0
- package/lib/schemas/agendas.d.json +1561 -0
- package/lib/schemas/agendas.json +1745 -0
- package/lib/schemas/amendements.d.json +1901 -0
- package/lib/schemas/amendements.json +2085 -0
- package/lib/schemas/debats.d.json +623 -0
- package/lib/schemas/debats.json +842 -0
- package/lib/schemas/dossiers_legislatifs.d.json +3690 -0
- package/lib/schemas/dossiers_legislatifs.json +3874 -0
- package/lib/schemas/legislatures.d.json +17 -0
- package/lib/schemas/legislatures.json +17 -0
- package/lib/schemas/questions.d.json +520 -0
- package/lib/schemas/questions.json +704 -0
- package/lib/schemas/scrutins.d.json +517 -0
- package/lib/schemas/scrutins.json +701 -0
- package/lib/scripts/add_links_to_documents.d.ts +2 -0
- package/lib/scripts/add_links_to_documents.d.ts.map +1 -0
- package/lib/scripts/clean_reorganized_data.d.ts +1 -0
- package/lib/scripts/clean_reorganized_data.d.ts.map +1 -0
- package/lib/scripts/copy-schemas.d.ts +2 -0
- package/lib/scripts/copy-schemas.d.ts.map +1 -0
- package/lib/scripts/diff_amendements.d.ts +1 -0
- package/lib/scripts/diff_amendements.d.ts.map +1 -0
- package/lib/scripts/document_dossiers_legislatifs.d.ts +1 -0
- package/lib/scripts/document_dossiers_legislatifs.d.ts.map +1 -0
- package/lib/scripts/generate-json-schemas.d.ts +2 -0
- package/lib/scripts/generate-json-schemas.d.ts.map +1 -0
- package/lib/scripts/get_today_reunions.d.ts +1 -0
- package/lib/scripts/get_today_reunions.d.ts.map +1 -0
- package/lib/scripts/merge_scrutins.d.ts +1 -0
- package/lib/scripts/merge_scrutins.d.ts.map +1 -0
- package/lib/scripts/process_open_dataset.d.ts +1 -0
- package/lib/scripts/process_open_dataset.d.ts.map +1 -0
- package/lib/scripts/raw_types_from_amendements.d.ts +1 -0
- package/lib/scripts/raw_types_from_amendements.d.ts.map +1 -0
- package/lib/scripts/reorganize_data.d.ts +1 -0
- package/lib/scripts/reorganize_data.d.ts.map +1 -0
- package/lib/scripts/retrieve_deputes_photos.d.ts +2 -1
- package/lib/scripts/retrieve_deputes_photos.d.ts.map +1 -0
- package/lib/scripts/retrieve_documents.d.ts +1 -0
- package/lib/scripts/retrieve_documents.d.ts.map +1 -0
- package/lib/scripts/retrieve_open_data.d.ts +1 -0
- package/lib/scripts/retrieve_open_data.d.ts.map +1 -0
- package/lib/scripts/retrieve_pending_amendments.d.ts +1 -0
- package/lib/scripts/retrieve_pending_amendments.d.ts.map +1 -0
- package/lib/scripts/retrieve_senateurs_photos.d.ts +1 -0
- package/lib/scripts/retrieve_senateurs_photos.d.ts.map +1 -0
- package/lib/scripts/shared/cli_helpers.d.ts +1 -0
- package/lib/scripts/shared/cli_helpers.d.ts.map +1 -0
- package/lib/scripts/test_iter_load.d.ts +1 -0
- package/lib/scripts/test_iter_load.d.ts.map +1 -0
- package/lib/scripts/test_load.d.ts +1 -0
- package/lib/scripts/test_load.d.ts.map +1 -0
- package/lib/scripts/test_load_big_files.d.ts +1 -0
- package/lib/scripts/test_load_big_files.d.ts.map +1 -0
- package/lib/scripts/validate_json.d.ts +1 -0
- package/lib/scripts/validate_json.d.ts.map +1 -0
- package/lib/shared_types/codes_actes.d.ts +1 -0
- package/lib/shared_types/codes_actes.d.ts.map +1 -0
- package/lib/strings.d.ts +1 -0
- package/lib/strings.d.ts.map +1 -0
- package/lib/types/acteurs_et_organes.d.ts +341 -0
- package/lib/types/acteurs_et_organes.d.ts.map +1 -0
- package/lib/types/agendas.d.ts +237 -10
- package/lib/types/agendas.d.ts.map +1 -0
- package/lib/types/amendements.d.ts +277 -1
- package/lib/types/amendements.d.ts.map +1 -0
- package/lib/types/debats.d.ts +53 -2
- package/lib/types/debats.d.ts.map +1 -0
- package/lib/types/dossiers_legislatifs.d.ts +404 -9
- package/lib/types/dossiers_legislatifs.d.ts.map +1 -0
- package/lib/types/legislatures.d.ts +1 -0
- package/lib/types/legislatures.d.ts.map +1 -0
- package/lib/types/questions.d.ts +100 -2
- package/lib/types/questions.d.ts.map +1 -0
- package/lib/types/scrutins.d.ts +102 -0
- package/lib/types/scrutins.d.ts.map +1 -0
- package/lib/urls.d.ts +3 -2
- package/lib/urls.d.ts.map +1 -0
- package/package.json +31 -95
- package/lib/api.js +0 -52
- package/lib/api.mjs +0 -45
- package/lib/bugs/acteur-00010/plugin.test.d.ts +0 -1
- 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.d.ts +0 -1
- 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.d.ts +0 -1
- 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 -74
- package/lib/cleaners/xml.mjs +0 -59
- 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 -1215
- package/lib/raw_types/acteurs_et_organes.mjs +0 -1148
- 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 -613
- package/lib/scripts/clean_reorganized_data.mjs +0 -276
- 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 -965
- package/lib/types/acteurs_et_organes.mjs +0 -906
- 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
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
import assert from "assert";
|
|
2
|
-
import commandLineArgs from "command-line-args";
|
|
3
|
-
import { createHash } from "crypto";
|
|
4
|
-
import { differenceInDays } from "date-fns";
|
|
5
|
-
import fs from "fs-extra";
|
|
6
|
-
import path from "path";
|
|
7
|
-
import { walkDocumentAndDivisions } from "../dossiers_legislatifs.mjs";
|
|
8
|
-
import * as git from "../git.mjs";
|
|
9
|
-
import { iterLoadAssembleeDocuments, pathFromDocumentUid } from "../loaders.mjs";
|
|
10
|
-
import { parseTexte } from "../parsers/index.mjs";
|
|
11
|
-
import { DocumentUrlFormat, iterDocumentOrDivisionUrls } from "../urls.mjs";
|
|
12
|
-
import { commitOption, dataDirDefaultOption, legislatureOption, pullOption, remoteOption, silentOption, verboseOption, documentFormatOption } from "./shared/cli_helpers.mjs";
|
|
13
|
-
function parseArgs(argv) {
|
|
14
|
-
const optionsDefinitions = [commitOption, legislatureOption, remoteOption, silentOption, verboseOption, dataDirDefaultOption, pullOption, {
|
|
15
|
-
alias: "f",
|
|
16
|
-
help: "retrieve all documents, even already retrieved ones",
|
|
17
|
-
name: "full",
|
|
18
|
-
type: Boolean
|
|
19
|
-
}, {
|
|
20
|
-
alias: "n",
|
|
21
|
-
help: "try to also retrieve documents that were previously not found",
|
|
22
|
-
name: "not-found",
|
|
23
|
-
type: Boolean
|
|
24
|
-
}, documentFormatOption, {
|
|
25
|
-
alias: "T",
|
|
26
|
-
help: "type of documents to retrieve (for example: PION)",
|
|
27
|
-
multiple: true,
|
|
28
|
-
name: "document-type",
|
|
29
|
-
type: String
|
|
30
|
-
}];
|
|
31
|
-
const options = commandLineArgs(optionsDefinitions, {
|
|
32
|
-
argv: argv
|
|
33
|
-
});
|
|
34
|
-
return options;
|
|
35
|
-
}
|
|
36
|
-
const today = new Date();
|
|
37
|
-
async function fetchWithRetry(url, retries = 3, backoff = 300) {
|
|
38
|
-
for (let attempt = 0; attempt < retries; attempt++) {
|
|
39
|
-
try {
|
|
40
|
-
return await fetch(url);
|
|
41
|
-
} catch (error) {
|
|
42
|
-
if (attempt === retries - 1) {
|
|
43
|
-
throw error;
|
|
44
|
-
}
|
|
45
|
-
console.warn(`Fetch attempt ${attempt + 1} for ${url} failed. Retrying in ${backoff}ms...`);
|
|
46
|
-
await new Promise(resolve => setTimeout(resolve, backoff));
|
|
47
|
-
backoff *= 2;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
throw new Error(`Failed to fetch ${url} after ${retries} attempts`);
|
|
51
|
-
}
|
|
52
|
-
export async function downloadAndParse(document, documentsDir, options) {
|
|
53
|
-
if (document.uid.substring(4, 6) === "SN") {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (["RAPP", "RINF"].includes(document.uid.substring(0, 4))) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
if (options.legislature?.toString() !== document.legislature) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
if (options.fetchDocuments) {
|
|
63
|
-
const dataDir = options.dataDir;
|
|
64
|
-
const documentsFilesDir = path.join(dataDir, "Documents");
|
|
65
|
-
const documentDir = pathFromDocumentUid(`${documentsDir}/documents`, document.uid);
|
|
66
|
-
const documentFileDir = pathFromDocumentUid(documentsFilesDir, document.uid);
|
|
67
|
-
fs.ensureDirSync(documentsFilesDir);
|
|
68
|
-
await processDocumentOrDivision(document, documentsFilesDir, options);
|
|
69
|
-
if (options.parseDocuments) {
|
|
70
|
-
const documentPath = `${documentDir}.json`;
|
|
71
|
-
const htmlPath = path.join(documentFileDir, `dyn-opendata.html`);
|
|
72
|
-
if (fs.existsSync(htmlPath)) {
|
|
73
|
-
const html = fs.readFileSync(htmlPath, {
|
|
74
|
-
encoding: "utf-8"
|
|
75
|
-
});
|
|
76
|
-
try {
|
|
77
|
-
const parsedDocument = parseTexte("https://www.assemblee-nationale.fr", html);
|
|
78
|
-
if (parsedDocument && fs.existsSync(documentPath)) {
|
|
79
|
-
const json = fs.readFileSync(documentPath, {
|
|
80
|
-
encoding: "utf-8"
|
|
81
|
-
});
|
|
82
|
-
const documentJson = JSON.parse(json);
|
|
83
|
-
documentJson.subdivisions = parsedDocument?.subdivisions;
|
|
84
|
-
fs.writeFileSync(documentPath, JSON.stringify(documentJson, null, 2));
|
|
85
|
-
}
|
|
86
|
-
} catch (e) {
|
|
87
|
-
console.log(`Unable to parse document ${document.uid}`);
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
async function retrieveDocuments(options) {
|
|
95
|
-
assert(!options.commit || !options.uid, 'Options "commit" & "uid" are incompatible');
|
|
96
|
-
const dataDir = options.dataDir;
|
|
97
|
-
const documentsDir = path.join(dataDir, "Documents");
|
|
98
|
-
if (options.pull) {
|
|
99
|
-
git.resetAndPull(documentsDir);
|
|
100
|
-
}
|
|
101
|
-
fs.ensureDirSync(documentsDir);
|
|
102
|
-
if (options.full && !options.uid) {
|
|
103
|
-
for (const filename of fs.readdirSync(documentsDir)) {
|
|
104
|
-
if (filename[0] === ".") {
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
fs.removeSync(path.join(documentsDir, filename));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
const firstUid = options.uid;
|
|
111
|
-
let skip = Boolean(firstUid);
|
|
112
|
-
for (const {
|
|
113
|
-
document
|
|
114
|
-
} of iterLoadAssembleeDocuments(dataDir, options.legislature)) {
|
|
115
|
-
for (const documentOrDivision of walkDocumentAndDivisions(document)) {
|
|
116
|
-
// Ignore documents from Sénat.
|
|
117
|
-
if (documentOrDivision.uid.substring(4, 6) === "SN") {
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
if (skip) {
|
|
121
|
-
if (documentOrDivision.uid === firstUid) {
|
|
122
|
-
skip = false;
|
|
123
|
-
} else {
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
await processDocumentOrDivision(documentOrDivision, documentsDir, options);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
if (options.commit) {
|
|
131
|
-
return git.commitAndPush(documentsDir, "Nouvelle moisson", options.remote);
|
|
132
|
-
}
|
|
133
|
-
return 0;
|
|
134
|
-
}
|
|
135
|
-
async function processDocumentOrDivision(documentOrDivision, documentsDir, options) {
|
|
136
|
-
const documentDir = pathFromDocumentUid(documentsDir, documentOrDivision.uid);
|
|
137
|
-
fs.ensureDirSync(documentDir);
|
|
138
|
-
const filenameBySha256 = {};
|
|
139
|
-
const indexPath = path.join(documentDir, "index.json");
|
|
140
|
-
const index = fs.pathExistsSync(indexPath) ? fs.readJsonSync(indexPath) : {};
|
|
141
|
-
for (const {
|
|
142
|
-
format,
|
|
143
|
-
type,
|
|
144
|
-
url
|
|
145
|
-
} of iterDocumentOrDivisionUrls(documentOrDivision)) {
|
|
146
|
-
const filename = `${type}.${format === DocumentUrlFormat.Pdf ? "pdf" : "html"}`;
|
|
147
|
-
|
|
148
|
-
// Filter by file extension if option is passed
|
|
149
|
-
const fileExtension = url.split(".").pop();
|
|
150
|
-
if (options.format && fileExtension && options.format !== fileExtension) {
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
if (options.legislature && options.legislature.toString() !== documentOrDivision.legislature) {
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Filter by document type if option is passed
|
|
158
|
-
const documentType = documentOrDivision.classification?.type?.code;
|
|
159
|
-
if (options["document-type"] !== undefined && !options["document-type"].includes(documentType)) {
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
let formatFilesInfos = index[format] ?? (index[format] = []);
|
|
163
|
-
let fileInfos = formatFilesInfos.find(file => file.url === url) ?? {};
|
|
164
|
-
if (!formatFilesInfos.includes(fileInfos)) {
|
|
165
|
-
formatFilesInfos.push(fileInfos);
|
|
166
|
-
}
|
|
167
|
-
fileInfos.url = url;
|
|
168
|
-
if (fileInfos.status === 200 && !options.full) {
|
|
169
|
-
filenameBySha256[fileInfos.sha256] = filename;
|
|
170
|
-
continue;
|
|
171
|
-
}
|
|
172
|
-
if (fileInfos.status === 404 && !options["not-found"] && differenceInDays(today, documentOrDivision.cycleDeVie.chrono.dateCreation ?? documentOrDivision.cycleDeVie.chrono.dateDepot) > 10) {
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
if (!options.silent) {
|
|
176
|
-
console.log(`Retrieving document or division ${documentOrDivision.uid} at ${url}…`);
|
|
177
|
-
}
|
|
178
|
-
const response = await fetchWithRetry(url);
|
|
179
|
-
const filePath = path.join(documentDir, filename);
|
|
180
|
-
if (response.ok) {
|
|
181
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
182
|
-
const buffer = Buffer.from(arrayBuffer);
|
|
183
|
-
if (format === DocumentUrlFormat.Pdf && !buffer.subarray(0, 4).toString().startsWith("%PDF")) {
|
|
184
|
-
// Instead of a PDF, the received data may be an HTML page with a message like
|
|
185
|
-
// "Document non encore publié".
|
|
186
|
-
if (!options.silent) {
|
|
187
|
-
console.warn(` PDF "${url}" not found.`);
|
|
188
|
-
}
|
|
189
|
-
fs.removeSync(filePath);
|
|
190
|
-
delete fileInfos.filename;
|
|
191
|
-
delete fileInfos.sha256;
|
|
192
|
-
fileInfos.status = 404;
|
|
193
|
-
} else {
|
|
194
|
-
const sha256 = createHash("sha256").update(buffer).digest("hex");
|
|
195
|
-
const existingFilename = filenameBySha256[sha256];
|
|
196
|
-
if (existingFilename === undefined) {
|
|
197
|
-
fs.writeFileSync(filePath, buffer, {
|
|
198
|
-
encoding: "utf8"
|
|
199
|
-
});
|
|
200
|
-
fileInfos.filename = filename;
|
|
201
|
-
filenameBySha256[sha256] = filename;
|
|
202
|
-
} else {
|
|
203
|
-
fileInfos.filename = existingFilename;
|
|
204
|
-
}
|
|
205
|
-
fileInfos.sha256 = sha256;
|
|
206
|
-
fileInfos.status = response.status;
|
|
207
|
-
}
|
|
208
|
-
} else {
|
|
209
|
-
if (response.status === 404) {
|
|
210
|
-
if (!options.silent) {
|
|
211
|
-
console.warn(` Page "${url}" not found.`);
|
|
212
|
-
}
|
|
213
|
-
} else {
|
|
214
|
-
console.error(` Error:\n${JSON.stringify({
|
|
215
|
-
code: response.status,
|
|
216
|
-
message: response.statusText
|
|
217
|
-
}, null, 2)}`);
|
|
218
|
-
}
|
|
219
|
-
fs.removeSync(filePath);
|
|
220
|
-
delete fileInfos.filename;
|
|
221
|
-
delete fileInfos.sha256;
|
|
222
|
-
fileInfos.status = response.status;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
fs.writeJsonSync(indexPath, index, {
|
|
226
|
-
encoding: "utf-8",
|
|
227
|
-
spaces: 2
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
function main(argv) {
|
|
231
|
-
const options = parseArgs(argv);
|
|
232
|
-
return retrieveDocuments(options);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
/* istanbul ignore if */
|
|
236
|
-
if (process.argv[1].endsWith("retrieve_documents.ts")) {
|
|
237
|
-
main(process.argv).then(exitCode => process.exit(exitCode)).catch(error => {
|
|
238
|
-
console.log(error);
|
|
239
|
-
process.exit(1);
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjb21tYW5kTGluZUFyZ3MiLCJjcmVhdGVIYXNoIiwiZGlmZmVyZW5jZUluRGF5cyIsImZzIiwicGF0aCIsIndhbGtEb2N1bWVudEFuZERpdmlzaW9ucyIsImdpdCIsIml0ZXJMb2FkQXNzZW1ibGVlRG9jdW1lbnRzIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsInBhcnNlVGV4dGUiLCJEb2N1bWVudFVybEZvcm1hdCIsIml0ZXJEb2N1bWVudE9yRGl2aXNpb25VcmxzIiwiY29tbWl0T3B0aW9uIiwiZGF0YURpckRlZmF1bHRPcHRpb24iLCJsZWdpc2xhdHVyZU9wdGlvbiIsInB1bGxPcHRpb24iLCJyZW1vdGVPcHRpb24iLCJzaWxlbnRPcHRpb24iLCJ2ZXJib3NlT3B0aW9uIiwiZG9jdW1lbnRGb3JtYXRPcHRpb24iLCJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJCb29sZWFuIiwibXVsdGlwbGUiLCJTdHJpbmciLCJvcHRpb25zIiwidG9kYXkiLCJEYXRlIiwiZmV0Y2hXaXRoUmV0cnkiLCJ1cmwiLCJyZXRyaWVzIiwiYmFja29mZiIsImF0dGVtcHQiLCJmZXRjaCIsImVycm9yIiwiY29uc29sZSIsIndhcm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJFcnJvciIsImRvd25sb2FkQW5kUGFyc2UiLCJkb2N1bWVudCIsImRvY3VtZW50c0RpciIsInVpZCIsInN1YnN0cmluZyIsImluY2x1ZGVzIiwibGVnaXNsYXR1cmUiLCJ0b1N0cmluZyIsImZldGNoRG9jdW1lbnRzIiwiZGF0YURpciIsImRvY3VtZW50c0ZpbGVzRGlyIiwiam9pbiIsImRvY3VtZW50RGlyIiwiZG9jdW1lbnRGaWxlRGlyIiwiZW5zdXJlRGlyU3luYyIsInByb2Nlc3NEb2N1bWVudE9yRGl2aXNpb24iLCJwYXJzZURvY3VtZW50cyIsImRvY3VtZW50UGF0aCIsImh0bWxQYXRoIiwiZXhpc3RzU3luYyIsImh0bWwiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsInBhcnNlZERvY3VtZW50IiwianNvbiIsImRvY3VtZW50SnNvbiIsIkpTT04iLCJwYXJzZSIsInN1YmRpdmlzaW9ucyIsIndyaXRlRmlsZVN5bmMiLCJzdHJpbmdpZnkiLCJlIiwibG9nIiwicmV0cmlldmVEb2N1bWVudHMiLCJjb21taXQiLCJwdWxsIiwicmVzZXRBbmRQdWxsIiwiZnVsbCIsImZpbGVuYW1lIiwicmVhZGRpclN5bmMiLCJyZW1vdmVTeW5jIiwiZmlyc3RVaWQiLCJza2lwIiwiZG9jdW1lbnRPckRpdmlzaW9uIiwiY29tbWl0QW5kUHVzaCIsInJlbW90ZSIsImZpbGVuYW1lQnlTaGEyNTYiLCJpbmRleFBhdGgiLCJpbmRleCIsInBhdGhFeGlzdHNTeW5jIiwicmVhZEpzb25TeW5jIiwiZm9ybWF0IiwiUGRmIiwiZmlsZUV4dGVuc2lvbiIsInNwbGl0IiwicG9wIiwiZG9jdW1lbnRUeXBlIiwiY2xhc3NpZmljYXRpb24iLCJjb2RlIiwidW5kZWZpbmVkIiwiZm9ybWF0RmlsZXNJbmZvcyIsImZpbGVJbmZvcyIsImZpbmQiLCJmaWxlIiwicHVzaCIsInN0YXR1cyIsInNoYTI1NiIsImN5Y2xlRGVWaWUiLCJjaHJvbm8iLCJkYXRlQ3JlYXRpb24iLCJkYXRlRGVwb3QiLCJzaWxlbnQiLCJyZXNwb25zZSIsImZpbGVQYXRoIiwib2siLCJhcnJheUJ1ZmZlciIsImJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJzdWJhcnJheSIsInN0YXJ0c1dpdGgiLCJ1cGRhdGUiLCJkaWdlc3QiLCJleGlzdGluZ0ZpbGVuYW1lIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJ3cml0ZUpzb25TeW5jIiwic3BhY2VzIiwibWFpbiIsInByb2Nlc3MiLCJlbmRzV2l0aCIsInRoZW4iLCJleGl0Q29kZSIsImV4aXQiLCJjYXRjaCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3JldHJpZXZlX2RvY3VtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIlxuaW1wb3J0IHsgZGlmZmVyZW5jZUluRGF5cyB9IGZyb20gXCJkYXRlLWZuc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHtcbiAgRG9jdW1lbnRGaWxlSW5mb3MsXG4gIERvY3VtZW50RmlsZXNJbmRleCxcbiAgd2Fsa0RvY3VtZW50QW5kRGl2aXNpb25zLFxufSBmcm9tIFwiLi4vZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHsgaXRlckxvYWRBc3NlbWJsZWVEb2N1bWVudHMsIHBhdGhGcm9tRG9jdW1lbnRVaWQgfSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQgeyBwYXJzZVRleHRlIH0gZnJvbSBcIi4uL3BhcnNlcnNcIlxuaW1wb3J0IHsgRG9jdW1lbnRVcmxGb3JtYXQsIGl0ZXJEb2N1bWVudE9yRGl2aXNpb25VcmxzIH0gZnJvbSBcIi4uL3VybHNcIlxuaW1wb3J0IHtcbiAgY29tbWl0T3B0aW9uLFxuICBkYXRhRGlyRGVmYXVsdE9wdGlvbixcbiAgbGVnaXNsYXR1cmVPcHRpb24sXG4gIHB1bGxPcHRpb24sXG4gIHJlbW90ZU9wdGlvbixcbiAgc2lsZW50T3B0aW9uLFxuICB2ZXJib3NlT3B0aW9uLFxuICBkb2N1bWVudEZvcm1hdE9wdGlvbixcbn0gZnJvbSBcIi4vc2hhcmVkL2NsaV9oZWxwZXJzXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIGNvbW1pdE9wdGlvbixcbiAgICBsZWdpc2xhdHVyZU9wdGlvbixcbiAgICByZW1vdGVPcHRpb24sXG4gICAgc2lsZW50T3B0aW9uLFxuICAgIHZlcmJvc2VPcHRpb24sXG4gICAgZGF0YURpckRlZmF1bHRPcHRpb24sXG4gICAgcHVsbE9wdGlvbixcbiAgICB7XG4gICAgICBhbGlhczogXCJmXCIsXG4gICAgICBoZWxwOiBcInJldHJpZXZlIGFsbCBkb2N1bWVudHMsIGV2ZW4gYWxyZWFkeSByZXRyaWV2ZWQgb25lc1wiLFxuICAgICAgbmFtZTogXCJmdWxsXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiblwiLFxuICAgICAgaGVscDogXCJ0cnkgdG8gYWxzbyByZXRyaWV2ZSBkb2N1bWVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgbm90IGZvdW5kXCIsXG4gICAgICBuYW1lOiBcIm5vdC1mb3VuZFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIGRvY3VtZW50Rm9ybWF0T3B0aW9uLFxuICAgIHtcbiAgICAgIGFsaWFzOiBcIlRcIixcbiAgICAgIGhlbHA6IFwidHlwZSBvZiBkb2N1bWVudHMgdG8gcmV0cmlldmUgKGZvciBleGFtcGxlOiBQSU9OKVwiLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBuYW1lOiBcImRvY3VtZW50LXR5cGVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoV2l0aFJldHJ5KFxuICB1cmw6IHN0cmluZyxcbiAgcmV0cmllczogbnVtYmVyID0gMyxcbiAgYmFja29mZjogbnVtYmVyID0gMzAwLFxuKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IHJldHJpZXM7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmV0Y2godXJsKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoYXR0ZW1wdCA9PT0gcmV0cmllcyAtIDEpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEZldGNoIGF0dGVtcHQgJHthdHRlbXB0ICsgMX0gZm9yICR7dXJsfSBmYWlsZWQuIFJldHJ5aW5nIGluICR7YmFja29mZn1tcy4uLmAsXG4gICAgICApXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBiYWNrb2ZmKSlcbiAgICAgIGJhY2tvZmYgKj0gMlxuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCAke3VybH0gYWZ0ZXIgJHtyZXRyaWVzfSBhdHRlbXB0c2ApXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3dubG9hZEFuZFBhcnNlKFxuICBkb2N1bWVudDogYW55LFxuICBkb2N1bWVudHNEaXI6IHN0cmluZyxcbiAgb3B0aW9uczogYW55LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChkb2N1bWVudC51aWQuc3Vic3RyaW5nKDQsIDYpID09PSBcIlNOXCIpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChbXCJSQVBQXCIsIFwiUklORlwiXS5pbmNsdWRlcyhkb2N1bWVudC51aWQuc3Vic3RyaW5nKDAsIDQpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKG9wdGlvbnMubGVnaXNsYXR1cmU/LnRvU3RyaW5nKCkgIT09IGRvY3VtZW50LmxlZ2lzbGF0dXJlKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAob3B0aW9ucy5mZXRjaERvY3VtZW50cykge1xuICAgIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgICBjb25zdCBkb2N1bWVudHNGaWxlc0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBcIkRvY3VtZW50c1wiKVxuICAgIGNvbnN0IGRvY3VtZW50RGlyID0gcGF0aEZyb21Eb2N1bWVudFVpZChcbiAgICAgIGAke2RvY3VtZW50c0Rpcn0vZG9jdW1lbnRzYCxcbiAgICAgIGRvY3VtZW50LnVpZCxcbiAgICApXG4gICAgY29uc3QgZG9jdW1lbnRGaWxlRGlyID0gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNGaWxlc0RpciwgZG9jdW1lbnQudWlkKVxuXG4gICAgZnMuZW5zdXJlRGlyU3luYyhkb2N1bWVudHNGaWxlc0RpcilcbiAgICBhd2FpdCBwcm9jZXNzRG9jdW1lbnRPckRpdmlzaW9uKGRvY3VtZW50LCBkb2N1bWVudHNGaWxlc0Rpciwgb3B0aW9ucylcblxuICAgIGlmIChvcHRpb25zLnBhcnNlRG9jdW1lbnRzKSB7XG4gICAgICBjb25zdCBkb2N1bWVudFBhdGggPSBgJHtkb2N1bWVudERpcn0uanNvbmBcbiAgICAgIGNvbnN0IGh0bWxQYXRoID0gcGF0aC5qb2luKGRvY3VtZW50RmlsZURpciwgYGR5bi1vcGVuZGF0YS5odG1sYClcblxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoaHRtbFBhdGgpKSB7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBmcy5yZWFkRmlsZVN5bmMoaHRtbFBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZERvY3VtZW50ID0gcGFyc2VUZXh0ZShcbiAgICAgICAgICAgIFwiaHR0cHM6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mclwiLFxuICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHBhcnNlZERvY3VtZW50ICYmIGZzLmV4aXN0c1N5bmMoZG9jdW1lbnRQYXRoKSkge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudFBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICAgICAgZG9jdW1lbnRKc29uLnN1YmRpdmlzaW9ucyA9IHBhcnNlZERvY3VtZW50Py5zdWJkaXZpc2lvbnNcbiAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgIGRvY3VtZW50UGF0aCxcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnRKc29uLCBudWxsLCAyKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgVW5hYmxlIHRvIHBhcnNlIGRvY3VtZW50ICR7ZG9jdW1lbnQudWlkfWApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVEb2N1bWVudHMob3B0aW9uczogYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgYXNzZXJ0KFxuICAgICFvcHRpb25zLmNvbW1pdCB8fCAhb3B0aW9ucy51aWQsXG4gICAgJ09wdGlvbnMgXCJjb21taXRcIiAmIFwidWlkXCIgYXJlIGluY29tcGF0aWJsZScsXG4gIClcblxuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBcIkRvY3VtZW50c1wiKVxuICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgZ2l0LnJlc2V0QW5kUHVsbChkb2N1bWVudHNEaXIpXG4gIH1cbiAgZnMuZW5zdXJlRGlyU3luYyhkb2N1bWVudHNEaXIpXG5cbiAgaWYgKG9wdGlvbnMuZnVsbCAmJiAhb3B0aW9ucy51aWQpIHtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRvY3VtZW50c0RpcikpIHtcbiAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRvY3VtZW50c0RpciwgZmlsZW5hbWUpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpcnN0VWlkID0gb3B0aW9ucy51aWRcbiAgbGV0IHNraXAgPSBCb29sZWFuKGZpcnN0VWlkKVxuICBmb3IgKGNvbnN0IHsgZG9jdW1lbnQgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyhcbiAgICBkYXRhRGlyLFxuICAgIG9wdGlvbnMubGVnaXNsYXR1cmUsXG4gICkpIHtcbiAgICBmb3IgKGNvbnN0IGRvY3VtZW50T3JEaXZpc2lvbiBvZiB3YWxrRG9jdW1lbnRBbmREaXZpc2lvbnMoZG9jdW1lbnQpKSB7XG4gICAgICAvLyBJZ25vcmUgZG9jdW1lbnRzIGZyb20gU8OpbmF0LlxuICAgICAgaWYgKGRvY3VtZW50T3JEaXZpc2lvbi51aWQuc3Vic3RyaW5nKDQsIDYpID09PSBcIlNOXCIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgaWYgKGRvY3VtZW50T3JEaXZpc2lvbi51aWQgPT09IGZpcnN0VWlkKSB7XG4gICAgICAgICAgc2tpcCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBwcm9jZXNzRG9jdW1lbnRPckRpdmlzaW9uKGRvY3VtZW50T3JEaXZpc2lvbiwgZG9jdW1lbnRzRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgIHJldHVybiBnaXQuY29tbWl0QW5kUHVzaChkb2N1bWVudHNEaXIsIFwiTm91dmVsbGUgbW9pc3NvblwiLCBvcHRpb25zLnJlbW90ZSlcbiAgfVxuICByZXR1cm4gMFxufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRG9jdW1lbnRPckRpdmlzaW9uKFxuICBkb2N1bWVudE9yRGl2aXNpb246IGFueSxcbiAgZG9jdW1lbnRzRGlyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IGFueSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkb2N1bWVudERpciA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCBkb2N1bWVudE9yRGl2aXNpb24udWlkKVxuICBmcy5lbnN1cmVEaXJTeW5jKGRvY3VtZW50RGlyKVxuXG4gIGNvbnN0IGZpbGVuYW1lQnlTaGEyNTY6IHsgW2RpZ2VzdDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fVxuICBjb25zdCBpbmRleFBhdGggPSBwYXRoLmpvaW4oZG9jdW1lbnREaXIsIFwiaW5kZXguanNvblwiKVxuICBjb25zdCBpbmRleCA9IChcbiAgICBmcy5wYXRoRXhpc3RzU3luYyhpbmRleFBhdGgpID8gZnMucmVhZEpzb25TeW5jKGluZGV4UGF0aCkgOiB7fVxuICApIGFzIERvY3VtZW50RmlsZXNJbmRleFxuXG4gIGZvciAoY29uc3QgeyBmb3JtYXQsIHR5cGUsIHVybCB9IG9mIGl0ZXJEb2N1bWVudE9yRGl2aXNpb25VcmxzKFxuICAgIGRvY3VtZW50T3JEaXZpc2lvbixcbiAgKSkge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7dHlwZX0uJHtmb3JtYXQgPT09IERvY3VtZW50VXJsRm9ybWF0LlBkZiA/IFwicGRmXCIgOiBcImh0bWxcIn1gXG5cbiAgICAvLyBGaWx0ZXIgYnkgZmlsZSBleHRlbnNpb24gaWYgb3B0aW9uIGlzIHBhc3NlZFxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSB1cmwuc3BsaXQoXCIuXCIpLnBvcCgpXG4gICAgaWYgKG9wdGlvbnMuZm9ybWF0ICYmIGZpbGVFeHRlbnNpb24gJiYgb3B0aW9ucy5mb3JtYXQgIT09IGZpbGVFeHRlbnNpb24pIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgb3B0aW9ucy5sZWdpc2xhdHVyZSAmJlxuICAgICAgb3B0aW9ucy5sZWdpc2xhdHVyZS50b1N0cmluZygpICE9PSBkb2N1bWVudE9yRGl2aXNpb24ubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIGJ5IGRvY3VtZW50IHR5cGUgaWYgb3B0aW9uIGlzIHBhc3NlZFxuICAgIGNvbnN0IGRvY3VtZW50VHlwZSA9IGRvY3VtZW50T3JEaXZpc2lvbi5jbGFzc2lmaWNhdGlvbj8udHlwZT8uY29kZVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnNbXCJkb2N1bWVudC10eXBlXCJdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFvcHRpb25zW1wiZG9jdW1lbnQtdHlwZVwiXS5pbmNsdWRlcyhkb2N1bWVudFR5cGUpXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGxldCBmb3JtYXRGaWxlc0luZm9zID0gaW5kZXhbZm9ybWF0XSA/PyAoaW5kZXhbZm9ybWF0XSA9IFtdKVxuICAgIGxldCBmaWxlSW5mb3MgPVxuICAgICAgZm9ybWF0RmlsZXNJbmZvcy5maW5kKChmaWxlKSA9PiBmaWxlLnVybCA9PT0gdXJsKSA/P1xuICAgICAgKHt9IGFzIERvY3VtZW50RmlsZUluZm9zKVxuICAgIGlmICghZm9ybWF0RmlsZXNJbmZvcy5pbmNsdWRlcyhmaWxlSW5mb3MpKSB7XG4gICAgICBmb3JtYXRGaWxlc0luZm9zLnB1c2goZmlsZUluZm9zKVxuICAgIH1cbiAgICBmaWxlSW5mb3MudXJsID0gdXJsXG5cbiAgICBpZiAoZmlsZUluZm9zLnN0YXR1cyA9PT0gMjAwICYmICFvcHRpb25zLmZ1bGwpIHtcbiAgICAgIGZpbGVuYW1lQnlTaGEyNTZbZmlsZUluZm9zLnNoYTI1NiBhcyBzdHJpbmddID0gZmlsZW5hbWVcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpbGVJbmZvcy5zdGF0dXMgPT09IDQwNCAmJlxuICAgICAgIW9wdGlvbnNbXCJub3QtZm91bmRcIl0gJiZcbiAgICAgIGRpZmZlcmVuY2VJbkRheXMoXG4gICAgICAgIHRvZGF5LFxuICAgICAgICBkb2N1bWVudE9yRGl2aXNpb24uY3ljbGVEZVZpZS5jaHJvbm8uZGF0ZUNyZWF0aW9uID8/XG4gICAgICAgICAgKGRvY3VtZW50T3JEaXZpc2lvbi5jeWNsZURlVmllLmNocm9uby5kYXRlRGVwb3QgYXMgRGF0ZSB8IHN0cmluZyksXG4gICAgICApID4gMTBcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBSZXRyaWV2aW5nIGRvY3VtZW50IG9yIGRpdmlzaW9uICR7ZG9jdW1lbnRPckRpdmlzaW9uLnVpZH0gYXQgJHt1cmx94oCmYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aFJldHJ5KHVybClcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkb2N1bWVudERpciwgZmlsZW5hbWUpXG5cbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKVxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpXG4gICAgICBpZiAoXG4gICAgICAgIGZvcm1hdCA9PT0gRG9jdW1lbnRVcmxGb3JtYXQuUGRmICYmXG4gICAgICAgICFidWZmZXIuc3ViYXJyYXkoMCwgNCkudG9TdHJpbmcoKS5zdGFydHNXaXRoKFwiJVBERlwiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEluc3RlYWQgb2YgYSBQREYsIHRoZSByZWNlaXZlZCBkYXRhIG1heSBiZSBhbiBIVE1MIHBhZ2Ugd2l0aCBhIG1lc3NhZ2UgbGlrZVxuICAgICAgICAvLyBcIkRvY3VtZW50IG5vbiBlbmNvcmUgcHVibGnDqVwiLlxuICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGAgIFBERiBcIiR7dXJsfVwiIG5vdCBmb3VuZC5gKVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMoZmlsZVBhdGgpXG4gICAgICAgIGRlbGV0ZSBmaWxlSW5mb3MuZmlsZW5hbWVcbiAgICAgICAgZGVsZXRlIGZpbGVJbmZvcy5zaGEyNTZcbiAgICAgICAgZmlsZUluZm9zLnN0YXR1cyA9IDQwNFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2hhMjU2ID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoYnVmZmVyKS5kaWdlc3QoXCJoZXhcIilcbiAgICAgICAgY29uc3QgZXhpc3RpbmdGaWxlbmFtZSA9IGZpbGVuYW1lQnlTaGEyNTZbc2hhMjU2XVxuICAgICAgICBpZiAoZXhpc3RpbmdGaWxlbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgYnVmZmVyLCB7XG4gICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBmaWxlSW5mb3MuZmlsZW5hbWUgPSBmaWxlbmFtZVxuICAgICAgICAgIGZpbGVuYW1lQnlTaGEyNTZbc2hhMjU2XSA9IGZpbGVuYW1lXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsZUluZm9zLmZpbGVuYW1lID0gZXhpc3RpbmdGaWxlbmFtZVxuICAgICAgICB9XG4gICAgICAgIGZpbGVJbmZvcy5zaGEyNTYgPSBzaGEyNTZcbiAgICAgICAgZmlsZUluZm9zLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgICBQYWdlIFwiJHt1cmx9XCIgbm90IGZvdW5kLmApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYCAgRXJyb3I6XFxuJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHsgY29kZTogcmVzcG9uc2Uuc3RhdHVzLCBtZXNzYWdlOiByZXNwb25zZS5zdGF0dXNUZXh0IH0sXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGZzLnJlbW92ZVN5bmMoZmlsZVBhdGgpXG4gICAgICBkZWxldGUgZmlsZUluZm9zLmZpbGVuYW1lXG4gICAgICBkZWxldGUgZmlsZUluZm9zLnNoYTI1NlxuICAgICAgZmlsZUluZm9zLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c1xuICAgIH1cbiAgfVxuXG4gIGZzLndyaXRlSnNvblN5bmMoaW5kZXhQYXRoLCBpbmRleCwgeyBlbmNvZGluZzogXCJ1dGYtOFwiLCBzcGFjZXM6IDIgfSlcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIHJldHVybiByZXRyaWV2ZURvY3VtZW50cyhvcHRpb25zKVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZXRyaWV2ZV9kb2N1bWVudHMudHNcIikpIHtcbiAgbWFpbihwcm9jZXNzLmFyZ3YpXG4gICAgLnRoZW4oKGV4aXRDb2RlKSA9PiBwcm9jZXNzLmV4aXQoZXhpdENvZGUpKVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgfSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEs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
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
-
require("core-js/modules/es.symbol.js");
|
|
5
|
-
require("core-js/modules/es.symbol.description.js");
|
|
6
|
-
require("core-js/modules/es.symbol.async-iterator.js");
|
|
7
|
-
require("core-js/modules/es.symbol.iterator.js");
|
|
8
|
-
require("core-js/modules/es.symbol.to-string-tag.js");
|
|
9
|
-
require("core-js/modules/es.array.for-each.js");
|
|
10
|
-
require("core-js/modules/es.array.from.js");
|
|
11
|
-
require("core-js/modules/es.array.is-array.js");
|
|
12
|
-
require("core-js/modules/es.array.iterator.js");
|
|
13
|
-
require("core-js/modules/es.array.reverse.js");
|
|
14
|
-
require("core-js/modules/es.array.slice.js");
|
|
15
|
-
require("core-js/modules/es.date.to-string.js");
|
|
16
|
-
require("core-js/modules/es.function.name.js");
|
|
17
|
-
require("core-js/modules/es.json.to-string-tag.js");
|
|
18
|
-
require("core-js/modules/es.math.to-string-tag.js");
|
|
19
|
-
require("core-js/modules/es.object.create.js");
|
|
20
|
-
require("core-js/modules/es.object.define-property.js");
|
|
21
|
-
require("core-js/modules/es.object.get-prototype-of.js");
|
|
22
|
-
require("core-js/modules/es.object.set-prototype-of.js");
|
|
23
|
-
require("core-js/modules/es.regexp.exec.js");
|
|
24
|
-
require("core-js/modules/es.regexp.to-string.js");
|
|
25
|
-
require("core-js/modules/es.string.iterator.js");
|
|
26
|
-
require("core-js/modules/web.dom-collections.for-each.js");
|
|
27
|
-
require("core-js/modules/web.dom-collections.iterator.js");
|
|
28
|
-
require("core-js/modules/es.array.concat.js");
|
|
29
|
-
require("core-js/modules/es.array.filter.js");
|
|
30
|
-
require("core-js/modules/es.object.to-string.js");
|
|
31
|
-
require("core-js/modules/es.promise.js");
|
|
32
|
-
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
|
|
33
|
-
var _datasets = require("../datasets");
|
|
34
|
-
var _legislatures = require("../types/legislatures");
|
|
35
|
-
var _cli_helpers = require("./shared/cli_helpers");
|
|
36
|
-
var _process_open_dataset = require("./process_open_dataset");
|
|
37
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
38
|
-
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
39
|
-
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
40
|
-
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
41
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
42
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
43
|
-
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
44
|
-
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
45
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
46
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
47
|
-
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
48
|
-
var optionsDefinitions = [_cli_helpers.categoriesOption, _cli_helpers.legislatureOption, _cli_helpers.silentOption, _cli_helpers.dataDirDefaultOption, _cli_helpers.fetchOption, _cli_helpers.fetchDocumentsOption, _cli_helpers.parseDocumentsOption, _cli_helpers.documentFormatOption];
|
|
49
|
-
var options = (0, _commandLineArgs["default"])(optionsDefinitions);
|
|
50
|
-
function retrieveOpenData(_x) {
|
|
51
|
-
return _retrieveOpenData.apply(this, arguments);
|
|
52
|
-
}
|
|
53
|
-
function _retrieveOpenData() {
|
|
54
|
-
_retrieveOpenData = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(dataDir) {
|
|
55
|
-
var enabledDatasets, chosenDatasets, _iterator, _step, dataset;
|
|
56
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
57
|
-
while (1) switch (_context.prev = _context.next) {
|
|
58
|
-
case 0:
|
|
59
|
-
enabledDatasets = (0, _datasets.getEnabledDatasets)(options.categories);
|
|
60
|
-
chosenDatasets = [].concat(_toConsumableArray(enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes ? _datasets.datasets.acteursEtOrganes : []), _toConsumableArray(enabledDatasets & _datasets.EnabledDatasets.Agendas ? _datasets.datasets.agendas : []), _toConsumableArray(enabledDatasets & _datasets.EnabledDatasets.Amendements ? _datasets.datasets.amendements : []), _toConsumableArray(enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs ? _datasets.datasets.dossiersLegislatifs : []), _toConsumableArray(enabledDatasets & _datasets.EnabledDatasets.Scrutins ? _datasets.datasets.scrutins : []), _toConsumableArray(enabledDatasets & _datasets.EnabledDatasets.Questions ? _datasets.datasets.questions : []), _toConsumableArray(enabledDatasets & _datasets.EnabledDatasets.ComptesRendusSeances ? _datasets.datasets.comptesRendusSeances : []));
|
|
61
|
-
if (options.legislature !== 0 && options.legislature !== undefined) {
|
|
62
|
-
chosenDatasets = chosenDatasets.filter(function (dataset) {
|
|
63
|
-
return dataset.legislature === _legislatures.Legislature.All || options.legislature === dataset.legislature;
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
_iterator = _createForOfIteratorHelper(chosenDatasets);
|
|
67
|
-
_context.prev = 4;
|
|
68
|
-
_iterator.s();
|
|
69
|
-
case 6:
|
|
70
|
-
if ((_step = _iterator.n()).done) {
|
|
71
|
-
_context.next = 12;
|
|
72
|
-
break;
|
|
73
|
-
}
|
|
74
|
-
dataset = _step.value;
|
|
75
|
-
_context.next = 10;
|
|
76
|
-
return (0, _process_open_dataset.processDataset)({
|
|
77
|
-
dataDir: dataDir,
|
|
78
|
-
dataset: dataset,
|
|
79
|
-
options: options
|
|
80
|
-
});
|
|
81
|
-
case 10:
|
|
82
|
-
_context.next = 6;
|
|
83
|
-
break;
|
|
84
|
-
case 12:
|
|
85
|
-
_context.next = 17;
|
|
86
|
-
break;
|
|
87
|
-
case 14:
|
|
88
|
-
_context.prev = 14;
|
|
89
|
-
_context.t0 = _context["catch"](4);
|
|
90
|
-
_iterator.e(_context.t0);
|
|
91
|
-
case 17:
|
|
92
|
-
_context.prev = 17;
|
|
93
|
-
_iterator.f();
|
|
94
|
-
return _context.finish(17);
|
|
95
|
-
case 20:
|
|
96
|
-
case "end":
|
|
97
|
-
return _context.stop();
|
|
98
|
-
}
|
|
99
|
-
}, _callee, null, [[4, 14, 17, 20]]);
|
|
100
|
-
}));
|
|
101
|
-
return _retrieveOpenData.apply(this, arguments);
|
|
102
|
-
}
|
|
103
|
-
retrieveOpenData(options.dataDir)["catch"](function (error) {
|
|
104
|
-
console.log(error);
|
|
105
|
-
process.exit(1);
|
|
106
|
-
});
|
|
107
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tbWFuZExpbmVBcmdzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGF0YXNldHMiLCJfbGVnaXNsYXR1cmVzIiwiX2NsaV9oZWxwZXJzIiwiX3Byb2Nlc3Nfb3Blbl9kYXRhc2V0IiwiZSIsIl9fZXNNb2R1bGUiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwidCIsInIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImkiLCJTeW1ib2wiLCJhIiwiaXRlcmF0b3IiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9uIiwiRiIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwiZnJvbSIsInRlc3QiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJjYXRlZ29yaWVzT3B0aW9uIiwibGVnaXNsYXR1cmVPcHRpb24iLCJzaWxlbnRPcHRpb24iLCJkYXRhRGlyRGVmYXVsdE9wdGlvbiIsImZldGNoT3B0aW9uIiwiZmV0Y2hEb2N1bWVudHNPcHRpb24iLCJwYXJzZURvY3VtZW50c09wdGlvbiIsImRvY3VtZW50Rm9ybWF0T3B0aW9uIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsInJldHJpZXZlT3BlbkRhdGEiLCJfeCIsIl9yZXRyaWV2ZU9wZW5EYXRhIiwiX2NhbGxlZSIsImRhdGFEaXIiLCJlbmFibGVkRGF0YXNldHMiLCJjaG9zZW5EYXRhc2V0cyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZGF0YXNldCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJnZXRFbmFibGVkRGF0YXNldHMiLCJjYXRlZ29yaWVzIiwiY29uY2F0IiwiRW5hYmxlZERhdGFzZXRzIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsIlF1ZXN0aW9ucyIsInF1ZXN0aW9ucyIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlc1JlbmR1c1NlYW5jZXMiLCJsZWdpc2xhdHVyZSIsInVuZGVmaW5lZCIsImZpbHRlciIsIkxlZ2lzbGF0dXJlIiwiQWxsIiwicHJvY2Vzc0RhdGFzZXQiLCJ0MCIsImVycm9yIiwiY29uc29sZSIsImxvZyIsInByb2Nlc3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfb3Blbl9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCB7XG4gIERhdGFzZXQsXG4gIGRhdGFzZXRzLFxuICBFbmFibGVkRGF0YXNldHMsXG4gIGdldEVuYWJsZWREYXRhc2V0cyxcbn0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4uL3R5cGVzL2xlZ2lzbGF0dXJlc1wiXG5pbXBvcnQge1xuICBjYXRlZ29yaWVzT3B0aW9uLFxuICBkYXRhRGlyRGVmYXVsdE9wdGlvbixcbiAgZmV0Y2hPcHRpb24sXG4gIGZldGNoRG9jdW1lbnRzT3B0aW9uLFxuICBsZWdpc2xhdHVyZU9wdGlvbixcbiAgc2lsZW50T3B0aW9uLFxuICBwYXJzZURvY3VtZW50c09wdGlvbixcbiAgZG9jdW1lbnRGb3JtYXRPcHRpb24sXG59IGZyb20gXCIuL3NoYXJlZC9jbGlfaGVscGVyc1wiXG5pbXBvcnQgeyBwcm9jZXNzRGF0YXNldCB9IGZyb20gXCIuL3Byb2Nlc3Nfb3Blbl9kYXRhc2V0XCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICBjYXRlZ29yaWVzT3B0aW9uLFxuICBsZWdpc2xhdHVyZU9wdGlvbixcbiAgc2lsZW50T3B0aW9uLFxuICBkYXRhRGlyRGVmYXVsdE9wdGlvbixcbiAgZmV0Y2hPcHRpb24sXG4gIGZldGNoRG9jdW1lbnRzT3B0aW9uLFxuICBwYXJzZURvY3VtZW50c09wdGlvbixcbiAgZG9jdW1lbnRGb3JtYXRPcHRpb24sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVPcGVuRGF0YShkYXRhRGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gZ2V0RW5hYmxlZERhdGFzZXRzKG9wdGlvbnMuY2F0ZWdvcmllcylcblxuICBsZXQgY2hvc2VuRGF0YXNldHMgPSBbXG4gICAgLi4uKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzXG4gICAgICA/IGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXNcbiAgICAgIDogW10pLFxuICAgIC4uLihlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcyA/IGRhdGFzZXRzLmFnZW5kYXMgOiBbXSksXG4gICAgLi4uKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50c1xuICAgICAgPyBkYXRhc2V0cy5hbWVuZGVtZW50c1xuICAgICAgOiBbXSksXG4gICAgLi4uKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzXG4gICAgICA/IGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnNcbiAgICAgIDogW10pLFxuICAgIC4uLihlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMgPyBkYXRhc2V0cy5zY3J1dGlucyA6IFtdKSxcbiAgICAuLi4oZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucyA/IGRhdGFzZXRzLnF1ZXN0aW9ucyA6IFtdKSxcbiAgICAuLi4oZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzXG4gICAgICA/IGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzXG4gICAgICA6IFtdKSxcbiAgXVxuXG4gIGlmIChvcHRpb25zLmxlZ2lzbGF0dXJlICE9PSAwICYmIG9wdGlvbnMubGVnaXNsYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNob3NlbkRhdGFzZXRzID0gY2hvc2VuRGF0YXNldHMuZmlsdGVyKFxuICAgICAgKGRhdGFzZXQ6IERhdGFzZXQpID0+XG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCB8fFxuICAgICAgICBvcHRpb25zLmxlZ2lzbGF0dXJlID09PSBkYXRhc2V0LmxlZ2lzbGF0dXJlLFxuICAgIClcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cykge1xuICAgIGF3YWl0IHByb2Nlc3NEYXRhc2V0KHsgZGF0YURpciwgZGF0YXNldCwgb3B0aW9ucyB9KVxuICB9XG59XG5cbnJldHJpZXZlT3BlbkRhdGEob3B0aW9ucy5kYXRhRGlyKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgY29uc29sZS5sb2coZXJyb3IpXG4gIHByb2Nlc3MuZXhpdCgxKVxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLGdCQUFBLEdBQUFDLHNC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
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import commandLineArgs from "command-line-args";
|
|
2
|
-
import { datasets, EnabledDatasets, getEnabledDatasets } from "../datasets.mjs";
|
|
3
|
-
import { Legislature } from "../types/legislatures.mjs";
|
|
4
|
-
import { categoriesOption, dataDirDefaultOption, fetchOption, fetchDocumentsOption, legislatureOption, silentOption, parseDocumentsOption, documentFormatOption } from "./shared/cli_helpers.mjs";
|
|
5
|
-
import { processDataset } from "./process_open_dataset.mjs";
|
|
6
|
-
const optionsDefinitions = [categoriesOption, legislatureOption, silentOption, dataDirDefaultOption, fetchOption, fetchDocumentsOption, parseDocumentsOption, documentFormatOption];
|
|
7
|
-
const options = commandLineArgs(optionsDefinitions);
|
|
8
|
-
async function retrieveOpenData(dataDir) {
|
|
9
|
-
const enabledDatasets = getEnabledDatasets(options.categories);
|
|
10
|
-
let chosenDatasets = [...(enabledDatasets & EnabledDatasets.ActeursEtOrganes ? datasets.acteursEtOrganes : []), ...(enabledDatasets & EnabledDatasets.Agendas ? datasets.agendas : []), ...(enabledDatasets & EnabledDatasets.Amendements ? datasets.amendements : []), ...(enabledDatasets & EnabledDatasets.DossiersLegislatifs ? datasets.dossiersLegislatifs : []), ...(enabledDatasets & EnabledDatasets.Scrutins ? datasets.scrutins : []), ...(enabledDatasets & EnabledDatasets.Questions ? datasets.questions : []), ...(enabledDatasets & EnabledDatasets.ComptesRendusSeances ? datasets.comptesRendusSeances : [])];
|
|
11
|
-
if (options.legislature !== 0 && options.legislature !== undefined) {
|
|
12
|
-
chosenDatasets = chosenDatasets.filter(dataset => dataset.legislature === Legislature.All || options.legislature === dataset.legislature);
|
|
13
|
-
}
|
|
14
|
-
for (const dataset of chosenDatasets) {
|
|
15
|
-
await processDataset({
|
|
16
|
-
dataDir,
|
|
17
|
-
dataset,
|
|
18
|
-
options
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
retrieveOpenData(options.dataDir).catch(error => {
|
|
23
|
-
console.log(error);
|
|
24
|
-
process.exit(1);
|
|
25
|
-
});
|
|
26
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJkYXRhc2V0cyIsIkVuYWJsZWREYXRhc2V0cyIsImdldEVuYWJsZWREYXRhc2V0cyIsIkxlZ2lzbGF0dXJlIiwiY2F0ZWdvcmllc09wdGlvbiIsImRhdGFEaXJEZWZhdWx0T3B0aW9uIiwiZmV0Y2hPcHRpb24iLCJmZXRjaERvY3VtZW50c09wdGlvbiIsImxlZ2lzbGF0dXJlT3B0aW9uIiwic2lsZW50T3B0aW9uIiwicGFyc2VEb2N1bWVudHNPcHRpb24iLCJkb2N1bWVudEZvcm1hdE9wdGlvbiIsInByb2Nlc3NEYXRhc2V0Iiwib3B0aW9uc0RlZmluaXRpb25zIiwib3B0aW9ucyIsInJldHJpZXZlT3BlbkRhdGEiLCJkYXRhRGlyIiwiZW5hYmxlZERhdGFzZXRzIiwiY2F0ZWdvcmllcyIsImNob3NlbkRhdGFzZXRzIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnNFdE9yZ2FuZXMiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJRdWVzdGlvbnMiLCJxdWVzdGlvbnMiLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwibGVnaXNsYXR1cmUiLCJ1bmRlZmluZWQiLCJmaWx0ZXIiLCJkYXRhc2V0IiwiQWxsIiwiY2F0Y2giLCJlcnJvciIsImNvbnNvbGUiLCJsb2ciLCJwcm9jZXNzIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3JldHJpZXZlX29wZW5fZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQge1xuICBEYXRhc2V0LFxuICBkYXRhc2V0cyxcbiAgRW5hYmxlZERhdGFzZXRzLFxuICBnZXRFbmFibGVkRGF0YXNldHMsXG59IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBMZWdpc2xhdHVyZSB9IGZyb20gXCIuLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHtcbiAgY2F0ZWdvcmllc09wdGlvbixcbiAgZGF0YURpckRlZmF1bHRPcHRpb24sXG4gIGZldGNoT3B0aW9uLFxuICBmZXRjaERvY3VtZW50c09wdGlvbixcbiAgbGVnaXNsYXR1cmVPcHRpb24sXG4gIHNpbGVudE9wdGlvbixcbiAgcGFyc2VEb2N1bWVudHNPcHRpb24sXG4gIGRvY3VtZW50Rm9ybWF0T3B0aW9uLFxufSBmcm9tIFwiLi9zaGFyZWQvY2xpX2hlbHBlcnNcIlxuaW1wb3J0IHsgcHJvY2Vzc0RhdGFzZXQgfSBmcm9tIFwiLi9wcm9jZXNzX29wZW5fZGF0YXNldFwiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgY2F0ZWdvcmllc09wdGlvbixcbiAgbGVnaXNsYXR1cmVPcHRpb24sXG4gIHNpbGVudE9wdGlvbixcbiAgZGF0YURpckRlZmF1bHRPcHRpb24sXG4gIGZldGNoT3B0aW9uLFxuICBmZXRjaERvY3VtZW50c09wdGlvbixcbiAgcGFyc2VEb2N1bWVudHNPcHRpb24sXG4gIGRvY3VtZW50Rm9ybWF0T3B0aW9uLFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlT3BlbkRhdGEoZGF0YURpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IGdldEVuYWJsZWREYXRhc2V0cyhvcHRpb25zLmNhdGVnb3JpZXMpXG5cbiAgbGV0IGNob3NlbkRhdGFzZXRzID0gW1xuICAgIC4uLihlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lc1xuICAgICAgPyBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzXG4gICAgICA6IFtdKSxcbiAgICAuLi4oZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMgPyBkYXRhc2V0cy5hZ2VuZGFzIDogW10pLFxuICAgIC4uLihlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHNcbiAgICAgID8gZGF0YXNldHMuYW1lbmRlbWVudHNcbiAgICAgIDogW10pLFxuICAgIC4uLihlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmc1xuICAgICAgPyBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzXG4gICAgICA6IFtdKSxcbiAgICAuLi4oZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zID8gZGF0YXNldHMuc2NydXRpbnMgOiBbXSksXG4gICAgLi4uKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMgPyBkYXRhc2V0cy5xdWVzdGlvbnMgOiBbXSksXG4gICAgLi4uKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Db21wdGVzUmVuZHVzU2VhbmNlc1xuICAgICAgPyBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlc1xuICAgICAgOiBbXSksXG4gIF1cblxuICBpZiAob3B0aW9ucy5sZWdpc2xhdHVyZSAhPT0gMCAmJiBvcHRpb25zLmxlZ2lzbGF0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjaG9zZW5EYXRhc2V0cyA9IGNob3NlbkRhdGFzZXRzLmZpbHRlcihcbiAgICAgIChkYXRhc2V0OiBEYXRhc2V0KSA9PlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgfHxcbiAgICAgICAgb3B0aW9ucy5sZWdpc2xhdHVyZSA9PT0gZGF0YXNldC5sZWdpc2xhdHVyZSxcbiAgICApXG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMpIHtcbiAgICBhd2FpdCBwcm9jZXNzRGF0YXNldCh7IGRhdGFEaXIsIGRhdGFzZXQsIG9wdGlvbnMgfSlcbiAgfVxufVxuXG5yZXRyaWV2ZU9wZW5EYXRhKG9wdGlvbnMuZGF0YURpcikuY2F0Y2goKGVycm9yKSA9PiB7XG4gIGNvbnNvbGUubG9nKGVycm9yKVxuICBwcm9jZXNzLmV4aXQoMSlcbn0pXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLGVBQWUsTUFBTSxtQkFBbUI7QUFBQSxTQUc3Q0MsUUFBUSxFQUNSQyxlQUFlLEVBQ2ZDLGtCQUFrQjtBQUFBLFNBRVhDLFdBQVc7QUFBQSxTQUVsQkMsZ0JBQWdCLEVBQ2hCQyxvQkFBb0IsRUFDcEJDLFdBQVcsRUFDWEMsb0JBQW9CLEVBQ3BCQyxpQkFBaUIsRUFDakJDLFlBQVksRUFDWkMsb0JBQW9CLEVBQ3BCQyxvQkFBb0I7QUFBQSxTQUViQyxjQUFjO0FBRXZCLE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCVCxnQkFBZ0IsRUFDaEJJLGlCQUFpQixFQUNqQkMsWUFBWSxFQUNaSixvQkFBb0IsRUFDcEJDLFdBQVcsRUFDWEMsb0JBQW9CLEVBQ3BCRyxvQkFBb0IsRUFDcEJDLG9CQUFvQixDQUNyQjtBQUNELE1BQU1HLE9BQU8sR0FBR2YsZUFBZSxDQUFDYyxrQkFBa0IsQ0FBQztBQUVuRCxlQUFlRSxnQkFBZ0JBLENBQUNDLE9BQWUsRUFBaUI7RUFDOUQsTUFBTUMsZUFBZSxHQUFHZixrQkFBa0IsQ0FBQ1ksT0FBTyxDQUFDSSxVQUFVLENBQUM7RUFFOUQsSUFBSUMsY0FBYyxHQUFHLENBQ25CLElBQUlGLGVBQWUsR0FBR2hCLGVBQWUsQ0FBQ21CLGdCQUFnQixHQUNsRHBCLFFBQVEsQ0FBQ3FCLGdCQUFnQixHQUN6QixFQUFFLENBQUMsRUFDUCxJQUFJSixlQUFlLEdBQUdoQixlQUFlLENBQUNxQixPQUFPLEdBQUd0QixRQUFRLENBQUN1QixPQUFPLEdBQUcsRUFBRSxDQUFDLEVBQ3RFLElBQUlOLGVBQWUsR0FBR2hCLGVBQWUsQ0FBQ3VCLFdBQVcsR0FDN0N4QixRQUFRLENBQUN5QixXQUFXLEdBQ3BCLEVBQUUsQ0FBQyxFQUNQLElBQUlSLGVBQWUsR0FBR2hCLGVBQWUsQ0FBQ3lCLG1CQUFtQixHQUNyRDFCLFFBQVEsQ0FBQzJCLG1CQUFtQixHQUM1QixFQUFFLENBQUMsRUFDUCxJQUFJVixlQUFlLEdBQUdoQixlQUFlLENBQUMyQixRQUFRLEdBQUc1QixRQUFRLENBQUM2QixRQUFRLEdBQUcsRUFBRSxDQUFDLEVBQ3hFLElBQUlaLGVBQWUsR0FBR2hCLGVBQWUsQ0FBQzZCLFNBQVMsR0FBRzlCLFFBQVEsQ0FBQytCLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFDMUUsSUFBSWQsZUFBZSxHQUFHaEIsZUFBZSxDQUFDK0Isb0JBQW9CLEdBQ3REaEMsUUFBUSxDQUFDaUMsb0JBQW9CLEdBQzdCLEVBQUUsQ0FBQyxDQUNSO0VBRUQsSUFBSW5CLE9BQU8sQ0FBQ29CLFdBQVcsS0FBSyxDQUFDLElBQUlwQixPQUFPLENBQUNvQixXQUFXLEtBQUtDLFNBQVMsRUFBRTtJQUNsRWhCLGNBQWMsR0FBR0EsY0FBYyxDQUFDaUIsTUFBTSxDQUNuQ0MsT0FBZ0IsSUFDZkEsT0FBTyxDQUFDSCxXQUFXLEtBQUsvQixXQUFXLENBQUNtQyxHQUFHLElBQ3ZDeEIsT0FBTyxDQUFDb0IsV0FBVyxLQUFLRyxPQUFPLENBQUNILFdBQ3BDLENBQUM7RUFDSDtFQUVBLEtBQUssTUFBTUcsT0FBTyxJQUFJbEIsY0FBYyxFQUFFO0lBQ3BDLE1BQU1QLGNBQWMsQ0FBQztNQUFFSSxPQUFPO01BQUVxQixPQUFPO01BQUV2QjtJQUFRLENBQUMsQ0FBQztFQUNyRDtBQUNGO0FBRUFDLGdCQUFnQixDQUFDRCxPQUFPLENBQUNFLE9BQU8sQ0FBQyxDQUFDdUIsS0FBSyxDQUFFQyxLQUFLLElBQUs7RUFDakRDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDRixLQUFLLENBQUM7RUFDbEJHLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|