@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,655 +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.iterator.js");
|
|
7
|
-
require("core-js/modules/es.symbol.to-primitive.js");
|
|
8
|
-
require("core-js/modules/es.array.is-array.js");
|
|
9
|
-
require("core-js/modules/es.array.slice.js");
|
|
10
|
-
require("core-js/modules/es.date.to-primitive.js");
|
|
11
|
-
require("core-js/modules/es.date.to-string.js");
|
|
12
|
-
require("core-js/modules/es.function.bind.js");
|
|
13
|
-
require("core-js/modules/es.number.constructor.js");
|
|
14
|
-
require("core-js/modules/es.object.create.js");
|
|
15
|
-
require("core-js/modules/es.object.define-property.js");
|
|
16
|
-
require("core-js/modules/es.object.get-prototype-of.js");
|
|
17
|
-
require("core-js/modules/es.object.set-prototype-of.js");
|
|
18
|
-
require("core-js/modules/es.reflect.construct.js");
|
|
19
|
-
require("core-js/modules/es.array.concat.js");
|
|
20
|
-
require("core-js/modules/es.array.from.js");
|
|
21
|
-
require("core-js/modules/es.array.iterator.js");
|
|
22
|
-
require("core-js/modules/es.array.join.js");
|
|
23
|
-
require("core-js/modules/es.array.map.js");
|
|
24
|
-
require("core-js/modules/es.function.name.js");
|
|
25
|
-
require("core-js/modules/es.map.js");
|
|
26
|
-
require("core-js/modules/es.object.assign.js");
|
|
27
|
-
require("core-js/modules/es.object.entries.js");
|
|
28
|
-
require("core-js/modules/es.object.keys.js");
|
|
29
|
-
require("core-js/modules/es.object.to-string.js");
|
|
30
|
-
require("core-js/modules/es.regexp.constructor.js");
|
|
31
|
-
require("core-js/modules/es.regexp.exec.js");
|
|
32
|
-
require("core-js/modules/es.regexp.to-string.js");
|
|
33
|
-
require("core-js/modules/es.set.js");
|
|
34
|
-
require("core-js/modules/es.string.ends-with.js");
|
|
35
|
-
require("core-js/modules/es.string.iterator.js");
|
|
36
|
-
require("core-js/modules/es.string.match.js");
|
|
37
|
-
require("core-js/modules/es.string.replace.js");
|
|
38
|
-
require("core-js/modules/es.string.starts-with.js");
|
|
39
|
-
require("core-js/modules/web.dom-collections.iterator.js");
|
|
40
|
-
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
|
|
41
|
-
var _commandLineUsage = _interopRequireDefault(require("command-line-usage"));
|
|
42
|
-
var _assert = _interopRequireDefault(require("assert"));
|
|
43
|
-
var _file_systems = require("../file_systems");
|
|
44
|
-
var _LectureMapping;
|
|
45
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
46
|
-
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
47
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
48
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
49
|
-
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
50
|
-
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
51
|
-
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."); }
|
|
52
|
-
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
53
|
-
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
54
|
-
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
55
|
-
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
|
|
56
|
-
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
57
|
-
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
58
|
-
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
|
59
|
-
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
60
|
-
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
61
|
-
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
62
|
-
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
63
|
-
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
64
|
-
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; }
|
|
65
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
66
|
-
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); }
|
|
67
|
-
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; } } }; }
|
|
68
|
-
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; } }
|
|
69
|
-
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; }
|
|
70
|
-
function parseArgs(argv) {
|
|
71
|
-
var optionsDefinitions = [{
|
|
72
|
-
description: "pathname to a JSON file or a glob pattern to JSON files",
|
|
73
|
-
defaultOption: true,
|
|
74
|
-
multiple: true,
|
|
75
|
-
name: "data",
|
|
76
|
-
type: String
|
|
77
|
-
}, {
|
|
78
|
-
name: "no-sanity-checks",
|
|
79
|
-
type: Boolean,
|
|
80
|
-
description: "Do not perform sanity checks."
|
|
81
|
-
}, {
|
|
82
|
-
name: "verbose",
|
|
83
|
-
type: Boolean,
|
|
84
|
-
description: "increase verbosity"
|
|
85
|
-
}, {
|
|
86
|
-
name: "help",
|
|
87
|
-
description: "Print this usage guide."
|
|
88
|
-
}];
|
|
89
|
-
var sections = [{
|
|
90
|
-
header: "Aide à la documentation du dossier législatif",
|
|
91
|
-
content: "Génère une hiérarchie des actes législatifs"
|
|
92
|
-
}, {
|
|
93
|
-
header: "Options",
|
|
94
|
-
optionList: optionsDefinitions
|
|
95
|
-
}];
|
|
96
|
-
var options = (0, _commandLineArgs["default"])(optionsDefinitions, {
|
|
97
|
-
argv: argv
|
|
98
|
-
});
|
|
99
|
-
if (!("help" in options) && !("data" in options)) {
|
|
100
|
-
console.error("--data is mandatory");
|
|
101
|
-
options.help = true;
|
|
102
|
-
}
|
|
103
|
-
if ("help" in options) {
|
|
104
|
-
var usage = (0, _commandLineUsage["default"])(sections);
|
|
105
|
-
console.warn(usage);
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
return options;
|
|
109
|
-
}
|
|
110
|
-
function eqSet(as, bs) {
|
|
111
|
-
if (as.size !== bs.size) return false;
|
|
112
|
-
var _iterator = _createForOfIteratorHelper(as),
|
|
113
|
-
_step;
|
|
114
|
-
try {
|
|
115
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
116
|
-
var a = _step.value;
|
|
117
|
-
if (!bs.has(a)) return false;
|
|
118
|
-
}
|
|
119
|
-
} catch (err) {
|
|
120
|
-
_iterator.e(err);
|
|
121
|
-
} finally {
|
|
122
|
-
_iterator.f();
|
|
123
|
-
}
|
|
124
|
-
return true;
|
|
125
|
-
}
|
|
126
|
-
var Code2Pattern = /*#__PURE__*/_createClass(function Code2Pattern(pattern, children) {
|
|
127
|
-
_classCallCheck(this, Code2Pattern);
|
|
128
|
-
_defineProperty(this, "_pattern_", void 0);
|
|
129
|
-
_defineProperty(this, "_match_count_", void 0);
|
|
130
|
-
this._pattern_ = pattern;
|
|
131
|
-
this._match_count_ = 0;
|
|
132
|
-
Object.assign(this, children);
|
|
133
|
-
});
|
|
134
|
-
var Code2PatternComFond = /*#__PURE__*/function (_Code2Pattern2) {
|
|
135
|
-
function Code2PatternComFond() {
|
|
136
|
-
_classCallCheck(this, Code2PatternComFond);
|
|
137
|
-
return _callSuper(this, Code2PatternComFond, ["^/SAISIE/(/NOMIN/)*(/REUNION/)*(/RAPPORT/)*$", {}]);
|
|
138
|
-
}
|
|
139
|
-
_inherits(Code2PatternComFond, _Code2Pattern2);
|
|
140
|
-
return _createClass(Code2PatternComFond);
|
|
141
|
-
}(Code2Pattern);
|
|
142
|
-
var LectureMapping = /*#__PURE__*/function () {
|
|
143
|
-
function LectureMapping() {
|
|
144
|
-
_classCallCheck(this, LectureMapping);
|
|
145
|
-
_defineProperty(this, "libelle", {});
|
|
146
|
-
_defineProperty(this, "codes", new Set());
|
|
147
|
-
}
|
|
148
|
-
return _createClass(LectureMapping, [{
|
|
149
|
-
key: "add",
|
|
150
|
-
value: function add(acte) {
|
|
151
|
-
this.codes.add(acte.codeActe);
|
|
152
|
-
var type = LectureMapping.getType(acte);
|
|
153
|
-
if (!(acte.libelleActe.nomCanonique in this.libelle)) this.libelle[acte.libelleActe.nomCanonique] = new Set();
|
|
154
|
-
this.libelle[acte.libelleActe.nomCanonique].add(type);
|
|
155
|
-
}
|
|
156
|
-
}, {
|
|
157
|
-
key: "remap",
|
|
158
|
-
value: function remap(acte, codeActe) {
|
|
159
|
-
acte.codeActe = codeActe;
|
|
160
|
-
var types = this.libelle[acte.libelleActe.nomCanonique];
|
|
161
|
-
if (!(types.has("SN") && types.has("AN"))) {
|
|
162
|
-
if (types.has("SN")) acte.libelleActe.nomCanonique += " (Sénat)";else if (types.has("AN")) acte.libelleActe.nomCanonique += " (Assemblée Nationale)";
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}, {
|
|
166
|
-
key: "mergeCodes",
|
|
167
|
-
value: function mergeCodes(codes) {
|
|
168
|
-
for (var _i = 0, _Array$from = Array.from(this.codes); _i < _Array$from.length; _i++) {
|
|
169
|
-
var c = _Array$from[_i];
|
|
170
|
-
codes.add(c);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}, {
|
|
174
|
-
key: "printAnchors",
|
|
175
|
-
value: function printAnchors() {
|
|
176
|
-
for (var _i2 = 0, _Array$from2 = Array.from(this.codes); _i2 < _Array$from2.length; _i2++) {
|
|
177
|
-
var code = _Array$from2[_i2];
|
|
178
|
-
console.log(".. _".concat(code, ":"));
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}, {
|
|
182
|
-
key: "getCodes",
|
|
183
|
-
value: function getCodes() {
|
|
184
|
-
return Array.from(this.codes).join(",");
|
|
185
|
-
}
|
|
186
|
-
}], [{
|
|
187
|
-
key: "isLecture",
|
|
188
|
-
value: function isLecture(acte) {
|
|
189
|
-
return acte.codeActe.match(LectureMapping.codes_lecture_regexp);
|
|
190
|
-
}
|
|
191
|
-
}, {
|
|
192
|
-
key: "getType",
|
|
193
|
-
value: function getType(acte) {
|
|
194
|
-
if (acte.codeActe.match(/^AN/)) return "AN";else if (acte.codeActe.match(/^SN/)) return "SN";else throw Error("".concat(acte.codeActe, " does not start with AN or SN"));
|
|
195
|
-
}
|
|
196
|
-
}, {
|
|
197
|
-
key: "map",
|
|
198
|
-
value: function map(codeActe) {
|
|
199
|
-
return codeActe.replace(LectureMapping.codes_lecture_regexp, "lecture$1");
|
|
200
|
-
}
|
|
201
|
-
}, {
|
|
202
|
-
key: "getCodeActe",
|
|
203
|
-
value: function getCodeActe(acte) {
|
|
204
|
-
if (!LectureMapping.isLecture(acte)) return;
|
|
205
|
-
return LectureMapping.map(acte.codeActe);
|
|
206
|
-
}
|
|
207
|
-
}]);
|
|
208
|
-
}();
|
|
209
|
-
_LectureMapping = LectureMapping;
|
|
210
|
-
_defineProperty(LectureMapping, "codes_lecture", ["AN1", "SN1", "ANNLEC", "SNNLEC", "ANLDEF", "AN2", "SN2", "SN3"]);
|
|
211
|
-
_defineProperty(LectureMapping, "codes_lecture_regexp", new RegExp("^(?:" + _LectureMapping.codes_lecture.join("|") + ")(-.*)?$"));
|
|
212
|
-
var LectureMapper = /*#__PURE__*/function () {
|
|
213
|
-
function LectureMapper() {
|
|
214
|
-
_classCallCheck(this, LectureMapper);
|
|
215
|
-
_defineProperty(this, "mapping", {});
|
|
216
|
-
}
|
|
217
|
-
return _createClass(LectureMapper, [{
|
|
218
|
-
key: "has",
|
|
219
|
-
value: function has(codeActe) {
|
|
220
|
-
return codeActe in this.mapping;
|
|
221
|
-
}
|
|
222
|
-
}, {
|
|
223
|
-
key: "collect",
|
|
224
|
-
value: function collect(acte) {
|
|
225
|
-
var codeActe = LectureMapping.getCodeActe(acte);
|
|
226
|
-
if (codeActe != undefined) {
|
|
227
|
-
var lectures = this.mapping;
|
|
228
|
-
if (!(codeActe in lectures)) lectures[codeActe] = new LectureMapping();
|
|
229
|
-
lectures[codeActe].add(acte);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}, {
|
|
233
|
-
key: "remap",
|
|
234
|
-
value: function remap(acte) {
|
|
235
|
-
var codeActe = LectureMapping.getCodeActe(acte);
|
|
236
|
-
if (codeActe != undefined) this.mapping[codeActe].remap(acte, codeActe);
|
|
237
|
-
}
|
|
238
|
-
}, {
|
|
239
|
-
key: "mergeCodes",
|
|
240
|
-
value: function mergeCodes(codes, codeActe) {
|
|
241
|
-
this.mapping[codeActe].mergeCodes(codes);
|
|
242
|
-
}
|
|
243
|
-
}, {
|
|
244
|
-
key: "printAnchors",
|
|
245
|
-
value: function printAnchors(codeActe) {
|
|
246
|
-
this.mapping[codeActe].printAnchors();
|
|
247
|
-
}
|
|
248
|
-
}, {
|
|
249
|
-
key: "getCodes",
|
|
250
|
-
value: function getCodes(codeActe) {
|
|
251
|
-
return this.mapping[codeActe].getCodes();
|
|
252
|
-
}
|
|
253
|
-
}]);
|
|
254
|
-
}();
|
|
255
|
-
var ActesDocumentation = /*#__PURE__*/function () {
|
|
256
|
-
function ActesDocumentation(sanityChecks) {
|
|
257
|
-
var verbose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
258
|
-
_classCallCheck(this, ActesDocumentation);
|
|
259
|
-
_defineProperty(this, "verbose", void 0);
|
|
260
|
-
_defineProperty(this, "sanityChecks", void 0);
|
|
261
|
-
_defineProperty(this, "lectureMapper", new LectureMapper());
|
|
262
|
-
_defineProperty(this, "remappedProcedures", {});
|
|
263
|
-
_defineProperty(this, "anchorsPrinted", {});
|
|
264
|
-
_defineProperty(this, "anchors", new Set());
|
|
265
|
-
_defineProperty(this, "codes", {});
|
|
266
|
-
_defineProperty(this, "procedures", null);
|
|
267
|
-
_defineProperty(this, "code2pattern", new Code2Pattern(null, {
|
|
268
|
-
"Procédure législative": new Code2Pattern("^(((/lecture/)+)|((/lecture/)+/CMP/(/lecture/)*))(/CC/)?(/PROM/)?(/AN-APPLI/)?$", {
|
|
269
|
-
lecture: new Code2Pattern("^(/DEPOT/)?(/DPTLETTRECT/)?(/ETI/)?(/AVCE/)?(/DGVT/)?(/ACIN/)?(/MOTION/)*(/PROCACC/)?(/COM/)?((/DEBATS/)+)?(/RTRINI/)?$", {
|
|
270
|
-
"lecture-COM": new Code2Pattern("^(/FOND/|/AVIS/)+$", {
|
|
271
|
-
"lecture-COM-FOND": new Code2PatternComFond(),
|
|
272
|
-
"lecture-COM-AVIS": new Code2PatternComFond()
|
|
273
|
-
}),
|
|
274
|
-
"lecture-DEBATS": new Code2Pattern("^(/SEANCE/)*((/MOTION/)?(/MOTION-VOTE/)+)?(/DEC/)?$", {})
|
|
275
|
-
}),
|
|
276
|
-
CMP: new Code2Pattern("^(/DEPOT/|/SAISIE/){1,2}(/COM/)?(/DEC/)?(/DEBATS-AN//DEBATS-SN/)?", {
|
|
277
|
-
"CMP-COM": new Code2Pattern("^(/NOMIN/)?(/RAPPORT-AN/|/RAPPORT-SN/){2}$", {}),
|
|
278
|
-
"CMP-DEBATS-AN": new Code2Pattern("^(/SEANCE/)*(/DEC/)?$", {}),
|
|
279
|
-
"CMP-DEBATS-SN": new Code2Pattern("^(/SEANCE/)*(/DEC/)?$", {})
|
|
280
|
-
}),
|
|
281
|
-
CC: new Code2Pattern("^(/SAISIE/)+(/CONCLUSION/)?$", {}),
|
|
282
|
-
PROM: new Code2Pattern("^(/PUB/)?$", {}),
|
|
283
|
-
"AN-APPLI": new Code2Pattern("^(/RAPPORT/)?$", {})
|
|
284
|
-
}),
|
|
285
|
-
"Allocution du Président de l'Assemblée nationale": new Code2Pattern("^/AN21/$", {
|
|
286
|
-
AN21: new Code2Pattern("^(/APAN/)?$", {})
|
|
287
|
-
}),
|
|
288
|
-
"Résolution Article 34-1": new Code2Pattern("^(/ANLUNI/)?$", {
|
|
289
|
-
ANLUNI: new Code2Pattern("^(/DEPOT/)?(/DEBATS/)?(/RTRINI/)?$", {
|
|
290
|
-
"ANLUNI-DEBATS": new Code2Pattern("^(/SEANCE/)+(/DEC/)?$", {})
|
|
291
|
-
})
|
|
292
|
-
}),
|
|
293
|
-
Résolution: new Code2Pattern("^(/ANLUNI/)?(/CC/)?$", {
|
|
294
|
-
ANLUNI: new Code2Pattern("^(/DEPOT/)?(/COM/)?(/DEBATS/|/RTRINI/)?$", {
|
|
295
|
-
"ANLUNI-COM": new Code2Pattern("^(/CAE/)?(/FOND/)?$", {
|
|
296
|
-
"ANLUNI-COM-FOND": new Code2PatternComFond(),
|
|
297
|
-
"ANLUNI-COM-CAE": new Code2Pattern("^(/SAISIE/)?(/NOMIN/)?(/REUNION/)?(/RAPPORT/)?(/DEC/)?$", {})
|
|
298
|
-
}),
|
|
299
|
-
"ANLUNI-DEBATS": new Code2Pattern("^(/SEANCE/)*(/DEC/)?$", {})
|
|
300
|
-
}),
|
|
301
|
-
CC: new Code2Pattern("^(/SAISIE/)?(/CONCLUSION/)?$", {})
|
|
302
|
-
}),
|
|
303
|
-
"Rapport d'information sans mission": new Code2Pattern("^(/AN20/)?(/EU/)?$", {
|
|
304
|
-
AN20: new Code2Pattern("^(/RAPPORT/)?$", {}),
|
|
305
|
-
EU: new Code2Pattern("^(/DEC/)+$", {})
|
|
306
|
-
}),
|
|
307
|
-
"Mission d'information": new Code2Pattern("^(/AN20/)?$", {
|
|
308
|
-
AN20: new Code2Pattern("^(/MISINF/)?$", {
|
|
309
|
-
"AN20-MISINF": new Code2Pattern("^(/CREA/)?(/NOMIN/)?(/RAPPORT/)?$", {})
|
|
310
|
-
})
|
|
311
|
-
}),
|
|
312
|
-
"Commission d'enquête": new Code2Pattern("^(/AN20/)?$", {
|
|
313
|
-
AN20: new Code2Pattern("^(/COMENQ/)?$", {
|
|
314
|
-
"AN20-COMENQ": new Code2Pattern("^(/CREA/)?(/NOMIN/)?(/RAPPORT/)?$", {})
|
|
315
|
-
})
|
|
316
|
-
}),
|
|
317
|
-
"Engagement de la responsabilité gouvernementale": new Code2Pattern("^/AN21/$", {
|
|
318
|
-
AN21: new Code2Pattern("^(((/MOTION/)*/DEBATS/)|(/DGVT/)){1,2}$", {
|
|
319
|
-
"AN21-DEBATS": new Code2Pattern("^(/SEANCE/)*(/MOTION-VOTE/)*$", {})
|
|
320
|
-
})
|
|
321
|
-
}),
|
|
322
|
-
"Motion référendaire": new Code2Pattern("^(/lecture/)+$", {
|
|
323
|
-
lecture: new Code2Pattern("^(/DEPOT/)?(/COM/)?(/DEBATS/)?$", {
|
|
324
|
-
"lecture-COM": new Code2Pattern("^(/FOND/)?$", {
|
|
325
|
-
"lecture-COM-FOND": new Code2Pattern("^(/SAISIE/)?(/NOMIN/)*(/RAPPORT/)*$", {})
|
|
326
|
-
}),
|
|
327
|
-
"lecture-DEBATS": new Code2Pattern("^(/DEC/)?$", {})
|
|
328
|
-
})
|
|
329
|
-
}),
|
|
330
|
-
Immunité: new Code2Pattern("^(/ANLUNI/)+$", {
|
|
331
|
-
ANLUNI: new Code2Pattern("^(/DEPOT/)?(/COM/)?(/DEBATS/)?(/RTRINI/)?$", {
|
|
332
|
-
"ANLUNI-COM": new Code2Pattern("^(/FOND/)?$", {
|
|
333
|
-
"ANLUNI-COM-FOND": new Code2Pattern("^(/SAISIE/)?(/NOMIN/)*(/RAPPORT/)*$", {})
|
|
334
|
-
}),
|
|
335
|
-
"ANLUNI-DEBATS": new Code2Pattern("^(/SEANCE/)?(/DEC/)$", {})
|
|
336
|
-
})
|
|
337
|
-
}),
|
|
338
|
-
"Responsabilité pénale du président de la république": new Code2Pattern("^/lecture/$", {
|
|
339
|
-
lecture: new Code2Pattern("^(/DEPOT/)?(/RECBUREAU/)?$", {})
|
|
340
|
-
}),
|
|
341
|
-
"Proposition de loi présentée en application de l'article 11 de la Constitution": new Code2Pattern("^/lecture/$", {
|
|
342
|
-
lecture: new Code2Pattern("^(/DEPOT/)?$", {})
|
|
343
|
-
})
|
|
344
|
-
}));
|
|
345
|
-
this.verbose = verbose;
|
|
346
|
-
this.sanityChecks = sanityChecks;
|
|
347
|
-
this.procedures = {};
|
|
348
|
-
this.code2pattern._match_count_++;
|
|
349
|
-
}
|
|
350
|
-
return _createClass(ActesDocumentation, [{
|
|
351
|
-
key: "walkFiles",
|
|
352
|
-
value: function walkFiles(data, action) {
|
|
353
|
-
var _iterator2 = _createForOfIteratorHelper((0, _file_systems.getFiles)(data)),
|
|
354
|
-
_step2;
|
|
355
|
-
try {
|
|
356
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
357
|
-
var file = _step2.value;
|
|
358
|
-
var dossier = (0, _file_systems.load)(file);
|
|
359
|
-
var procedure = this.remapProcedure(dossier.procedureParlementaire.libelle);
|
|
360
|
-
if (!(procedure in this.procedures)) this.procedures[procedure] = {};
|
|
361
|
-
action(this.procedures[procedure], dossier.actesLegislatifs, this.code2pattern[procedure], null);
|
|
362
|
-
}
|
|
363
|
-
} catch (err) {
|
|
364
|
-
_iterator2.e(err);
|
|
365
|
-
} finally {
|
|
366
|
-
_iterator2.f();
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
}, {
|
|
370
|
-
key: "collectFiles",
|
|
371
|
-
value: function collectFiles(data) {
|
|
372
|
-
var _this = this;
|
|
373
|
-
this.walkFiles(data, function (_actes, actesLegislatifs, _c2p, _parent) {
|
|
374
|
-
_this.collect(actesLegislatifs);
|
|
375
|
-
});
|
|
376
|
-
}
|
|
377
|
-
}, {
|
|
378
|
-
key: "processFiles",
|
|
379
|
-
value: function processFiles(data) {
|
|
380
|
-
var _this2 = this;
|
|
381
|
-
this.walkFiles(data, function (actes, actesLegislatifs, c2p, parent) {
|
|
382
|
-
_this2.merge(actes, actesLegislatifs, c2p, parent);
|
|
383
|
-
});
|
|
384
|
-
if (this.sanityChecks) this.validate();
|
|
385
|
-
}
|
|
386
|
-
}, {
|
|
387
|
-
key: "remapActes",
|
|
388
|
-
value: function remapActes(actes) {
|
|
389
|
-
var results = [];
|
|
390
|
-
var _iterator3 = _createForOfIteratorHelper(actes),
|
|
391
|
-
_step3;
|
|
392
|
-
try {
|
|
393
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
394
|
-
var acte = _step3.value;
|
|
395
|
-
this.lectureMapper.remap(acte);
|
|
396
|
-
|
|
397
|
-
// CC-SAISIE- suffix does not imply a hierarchy
|
|
398
|
-
acte.codeActe = acte.codeActe.replace(/^CC-SAISIE.*/, "CC-SAISIE");
|
|
399
|
-
results.push(acte);
|
|
400
|
-
}
|
|
401
|
-
} catch (err) {
|
|
402
|
-
_iterator3.e(err);
|
|
403
|
-
} finally {
|
|
404
|
-
_iterator3.f();
|
|
405
|
-
}
|
|
406
|
-
return results;
|
|
407
|
-
}
|
|
408
|
-
}, {
|
|
409
|
-
key: "collectActes",
|
|
410
|
-
value: function collectActes(actes) {
|
|
411
|
-
var results = [];
|
|
412
|
-
var _iterator4 = _createForOfIteratorHelper(actes),
|
|
413
|
-
_step4;
|
|
414
|
-
try {
|
|
415
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
416
|
-
var acte = _step4.value;
|
|
417
|
-
this.lectureMapper.collect(acte);
|
|
418
|
-
results.push(acte);
|
|
419
|
-
}
|
|
420
|
-
} catch (err) {
|
|
421
|
-
_iterator4.e(err);
|
|
422
|
-
} finally {
|
|
423
|
-
_iterator4.f();
|
|
424
|
-
}
|
|
425
|
-
return results;
|
|
426
|
-
}
|
|
427
|
-
}, {
|
|
428
|
-
key: "remapProcedure",
|
|
429
|
-
value: function remapProcedure(procedure) {
|
|
430
|
-
var 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"]]);
|
|
431
|
-
if (merge_procedures.has(procedure)) {
|
|
432
|
-
this.remappedProcedures[procedure] = null;
|
|
433
|
-
return merge_procedures.get(procedure);
|
|
434
|
-
} else {
|
|
435
|
-
return procedure;
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
// return the codeActes in the same order they appear in the regexp
|
|
440
|
-
}, {
|
|
441
|
-
key: "orderedCodes",
|
|
442
|
-
value: function orderedCodes(codes, c2p, parent) {
|
|
443
|
-
codes = new Set(codes);
|
|
444
|
-
if (!this.sanityChecks) return codes;
|
|
445
|
-
var ordered = c2p["_pattern_"].match(new RegExp("/.*?/", "g"));
|
|
446
|
-
ordered = ordered.map(function (x) {
|
|
447
|
-
return x.replace(new RegExp("/(.*)/"), "$1");
|
|
448
|
-
});
|
|
449
|
-
if (parent != null) ordered = ordered.map(function (x) {
|
|
450
|
-
return "".concat(parent, "-").concat(x);
|
|
451
|
-
});
|
|
452
|
-
ordered = new Set(ordered);
|
|
453
|
-
(0, _assert["default"])(eqSet(ordered, codes), "".concat(_toConsumableArray(ordered), " != ").concat(_toConsumableArray(codes)));
|
|
454
|
-
return ordered;
|
|
455
|
-
}
|
|
456
|
-
}, {
|
|
457
|
-
key: "validateChronology",
|
|
458
|
-
value: function validateChronology(actesLegislatifs, c2p, parent) {
|
|
459
|
-
var pattern = c2p["_pattern_"];
|
|
460
|
-
var sequence = actesLegislatifs.map(function (x) {
|
|
461
|
-
return "/".concat(x.codeActe, "/").replace("/".concat(parent, "-"), "/");
|
|
462
|
-
}).join("");
|
|
463
|
-
(0, _assert["default"])(sequence.match(new RegExp(pattern)), "".concat(pattern, " does not match ").concat(sequence));
|
|
464
|
-
c2p._match_count_++;
|
|
465
|
-
}
|
|
466
|
-
}, {
|
|
467
|
-
key: "mergeActe",
|
|
468
|
-
value: function mergeActe(actes, acte, c2p, parent) {
|
|
469
|
-
var code = acte.codeActe;
|
|
470
|
-
var shortCode = code.replace(new RegExp("^".concat(parent, "-")), "");
|
|
471
|
-
shortCode = shortCode.replace(/-(AN|SN)$/, "");
|
|
472
|
-
this.codes[shortCode] = null;
|
|
473
|
-
var name = acte.libelleActe.nomCanonique;
|
|
474
|
-
if (!(code in actes)) {
|
|
475
|
-
actes[code] = {
|
|
476
|
-
type: acte.xsiType,
|
|
477
|
-
name: new Set([name]),
|
|
478
|
-
shortCode: shortCode,
|
|
479
|
-
actes: {}
|
|
480
|
-
};
|
|
481
|
-
} else {
|
|
482
|
-
actes[code].name.add(name);
|
|
483
|
-
}
|
|
484
|
-
if ("actesLegislatifs" in acte) this.merge(actes[code].actes, acte.actesLegislatifs, c2p[code], code);
|
|
485
|
-
}
|
|
486
|
-
}, {
|
|
487
|
-
key: "merge",
|
|
488
|
-
value: function merge(actes, actesLegislatifs, c2p, parent) {
|
|
489
|
-
var l = this.remapActes(actesLegislatifs);
|
|
490
|
-
this.validateChronology(l, c2p, parent);
|
|
491
|
-
var _iterator5 = _createForOfIteratorHelper(l),
|
|
492
|
-
_step5;
|
|
493
|
-
try {
|
|
494
|
-
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
495
|
-
var acte = _step5.value;
|
|
496
|
-
this.mergeActe(actes, acte, c2p, parent);
|
|
497
|
-
}
|
|
498
|
-
} catch (err) {
|
|
499
|
-
_iterator5.e(err);
|
|
500
|
-
} finally {
|
|
501
|
-
_iterator5.f();
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
}, {
|
|
505
|
-
key: "collect",
|
|
506
|
-
value: function collect(actesLegislatifs) {
|
|
507
|
-
var _iterator6 = _createForOfIteratorHelper(this.collectActes(actesLegislatifs)),
|
|
508
|
-
_step6;
|
|
509
|
-
try {
|
|
510
|
-
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
511
|
-
var acte = _step6.value;
|
|
512
|
-
if ("actesLegislatifs" in acte) this.collect(acte.actesLegislatifs);
|
|
513
|
-
}
|
|
514
|
-
} catch (err) {
|
|
515
|
-
_iterator6.e(err);
|
|
516
|
-
} finally {
|
|
517
|
-
_iterator6.f();
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
}, {
|
|
521
|
-
key: "validateLevel",
|
|
522
|
-
value: function validateLevel(c2p, path) {
|
|
523
|
-
(0, _assert["default"])(c2p._match_count_ > 0, "".concat(path, " is never used"));
|
|
524
|
-
for (var _i3 = 0, _arr = Object.entries(c2p); _i3 < _arr.length; _i3++) {
|
|
525
|
-
var _arr$_i = _slicedToArray(_arr[_i3], 2),
|
|
526
|
-
key = _arr$_i[0],
|
|
527
|
-
value = _arr$_i[1];
|
|
528
|
-
if (value != null && value.constructor.name == "Code2Pattern") this.validateLevel(value, path.concat([key]));
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
}, {
|
|
532
|
-
key: "validate",
|
|
533
|
-
value: function validate() {
|
|
534
|
-
this.validateLevel(this.code2pattern, []);
|
|
535
|
-
}
|
|
536
|
-
}, {
|
|
537
|
-
key: "printEntry",
|
|
538
|
-
value: function printEntry(sections, entry, codes) {
|
|
539
|
-
var title = "`".concat(entry, "`__");
|
|
540
|
-
console.log(title);
|
|
541
|
-
var underline = new Array(title.length + 1).join(sections[0]);
|
|
542
|
-
console.log(underline);
|
|
543
|
-
console.log(codes);
|
|
544
|
-
}
|
|
545
|
-
}, {
|
|
546
|
-
key: "addAnchors",
|
|
547
|
-
value: function addAnchors(key) {
|
|
548
|
-
if (key in this.anchorsPrinted) return;
|
|
549
|
-
if (this.lectureMapper.has(key)) this.lectureMapper.mergeCodes(this.anchors, key);else this.anchors.add(key);
|
|
550
|
-
}
|
|
551
|
-
}, {
|
|
552
|
-
key: "printAnchors",
|
|
553
|
-
value: function printAnchors(key) {
|
|
554
|
-
if (key in this.anchorsPrinted) return;
|
|
555
|
-
this.anchorsPrinted[key] = null;
|
|
556
|
-
if (this.lectureMapper.has(key)) this.lectureMapper.printAnchors(key);else console.log(".. _".concat(key, ":"));
|
|
557
|
-
}
|
|
558
|
-
}, {
|
|
559
|
-
key: "getCodes",
|
|
560
|
-
value: function getCodes(key, shortCode) {
|
|
561
|
-
if (key in this.anchorsPrinted) return "cf \\*".concat(shortCode, "\\*");
|
|
562
|
-
if (this.lectureMapper.has(key)) return this.lectureMapper.getCodes(key);else return key;
|
|
563
|
-
}
|
|
564
|
-
}, {
|
|
565
|
-
key: "renameCMP",
|
|
566
|
-
value: function renameCMP(key, name) {
|
|
567
|
-
if (key.startsWith("CMP")) {
|
|
568
|
-
if (key.endsWith("-SN")) return "".concat(name, " (S\xE9nat)");else if (key.endsWith("-AN")) return "".concat(name, " (Assembl\xE9e Nationale)");else return name;
|
|
569
|
-
} else return name;
|
|
570
|
-
}
|
|
571
|
-
}, {
|
|
572
|
-
key: "printLevel",
|
|
573
|
-
value: function printLevel(actes, sections, c2p, parent) {
|
|
574
|
-
var keys = this.orderedCodes(Object.keys(actes), c2p, parent);
|
|
575
|
-
var _iterator7 = _createForOfIteratorHelper(keys),
|
|
576
|
-
_step7;
|
|
577
|
-
try {
|
|
578
|
-
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
579
|
-
var key = _step7.value;
|
|
580
|
-
var value = actes[key];
|
|
581
|
-
var name = Array.from(value.name).join(", ");
|
|
582
|
-
name = this.renameCMP(key, name);
|
|
583
|
-
var codes = this.getCodes(key, value.shortCode);
|
|
584
|
-
this.addAnchors(key);
|
|
585
|
-
this.printAnchors(key);
|
|
586
|
-
console.log("");
|
|
587
|
-
this.printEntry(sections, "".concat(name, " <").concat(value.shortCode, "TOC_>"), codes);
|
|
588
|
-
console.log("");
|
|
589
|
-
if (Object.keys(value.actes).length > 0) this.printLevel(value.actes, sections.substring(1), c2p[key], key);
|
|
590
|
-
}
|
|
591
|
-
} catch (err) {
|
|
592
|
-
_iterator7.e(err);
|
|
593
|
-
} finally {
|
|
594
|
-
_iterator7.f();
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
}, {
|
|
598
|
-
key: "printCodes",
|
|
599
|
-
value: function printCodes() {
|
|
600
|
-
for (var _i4 = 0, _Object$keys = Object.keys(this.codes); _i4 < _Object$keys.length; _i4++) {
|
|
601
|
-
var key = _Object$keys[_i4];
|
|
602
|
-
console.log(".. _".concat(key, "TOC: http://"));
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
}, {
|
|
606
|
-
key: "printAnchorsIndex",
|
|
607
|
-
value: function printAnchorsIndex() {
|
|
608
|
-
for (var _i5 = 0, _Array$from3 = Array.from(this.anchors); _i5 < _Array$from3.length; _i5++) {
|
|
609
|
-
var code = _Array$from3[_i5];
|
|
610
|
-
console.log("* :ref:`".concat(code, " <").concat(code, ">`"));
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
}, {
|
|
614
|
-
key: "getAggregated",
|
|
615
|
-
value: function getAggregated(procedure) {
|
|
616
|
-
if (procedure == "Procédure législative") {
|
|
617
|
-
var remapped = Object.keys(this.remappedProcedures).join(", ");
|
|
618
|
-
return " (agr\xE9gation de ".concat(remapped, ")");
|
|
619
|
-
} else return "";
|
|
620
|
-
}
|
|
621
|
-
}, {
|
|
622
|
-
key: "print",
|
|
623
|
-
value: function print() {
|
|
624
|
-
this.anchorsPrinted = {};
|
|
625
|
-
for (var _i6 = 0, _arr2 = Object.entries(this.procedures); _i6 < _arr2.length; _i6++) {
|
|
626
|
-
var _arr2$_i = _slicedToArray(_arr2[_i6], 2),
|
|
627
|
-
key = _arr2$_i[0],
|
|
628
|
-
actes = _arr2$_i[1];
|
|
629
|
-
var code = key.replace(/ +/g, "_");
|
|
630
|
-
this.codes[code] = null;
|
|
631
|
-
var aggregated = this.getAggregated(key);
|
|
632
|
-
var title = "`".concat(key, " <").concat(code, "TOC_>`__").concat(aggregated);
|
|
633
|
-
console.log(title);
|
|
634
|
-
var underline = new Array(title.length + 1).join("=");
|
|
635
|
-
console.log(underline);
|
|
636
|
-
this.printLevel(actes, "-~.'", this.code2pattern[key], null);
|
|
637
|
-
}
|
|
638
|
-
this.printCodes();
|
|
639
|
-
this.printAnchorsIndex();
|
|
640
|
-
}
|
|
641
|
-
}]);
|
|
642
|
-
}();
|
|
643
|
-
function main(argv) {
|
|
644
|
-
var options = parseArgs(argv);
|
|
645
|
-
if (options === null) return 1;
|
|
646
|
-
var doc = new ActesDocumentation(!options["no-sanity-checks"], options.verbose);
|
|
647
|
-
doc.collectFiles(options.data);
|
|
648
|
-
doc.processFiles(options.data);
|
|
649
|
-
doc.print();
|
|
650
|
-
return 0;
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
/* istanbul ignore if */
|
|
654
|
-
if (process.argv[1].endsWith("document_dossiers_legislatifs.ts")) process.exit(main(process.argv));
|
|
655
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tbWFuZExpbmVBcmdzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29tbWFuZExpbmVVc2FnZSIsIl9hc3NlcnQiLCJfZmlsZV9zeXN0ZW1zIiwiX0xlY3R1cmVNYXBwaW5nIiwiZSIsIl9fZXNNb2R1bGUiLCJfc2xpY2VkVG9BcnJheSIsInIiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwibCIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIm4iLCJpIiwidSIsImEiLCJmIiwibyIsImNhbGwiLCJuZXh0IiwiT2JqZWN0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImxlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJmcm9tIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJfdHlwZW9mIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiYmluZCIsIl9fcHJvdG9fXyIsIl9pbmhlcml0cyIsImNyZWF0ZSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJfc2V0UHJvdG90eXBlT2YiLCJfZGVmaW5lUHJvcGVydGllcyIsImVudW1lcmFibGUiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfbiIsIkYiLCJzIiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJ0ZXN0IiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdE9wdGlvbiIsIm11bHRpcGxlIiwidHlwZSIsInNlY3Rpb25zIiwiaGVhZGVyIiwiY29udGVudCIsIm9wdGlvbkxpc3QiLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwiY29uc29sZSIsImVycm9yIiwiaGVscCIsInVzYWdlIiwiY29tbWFuZExpbmVVc2FnZSIsIndhcm4iLCJlcVNldCIsImFzIiwiYnMiLCJzaXplIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJoYXMiLCJlcnIiLCJDb2RlMlBhdHRlcm4iLCJwYXR0ZXJuIiwiY2hpbGRyZW4iLCJfcGF0dGVybl8iLCJfbWF0Y2hfY291bnRfIiwiYXNzaWduIiwiQ29kZTJQYXR0ZXJuQ29tRm9uZCIsIl9Db2RlMlBhdHRlcm4yIiwiTGVjdHVyZU1hcHBpbmciLCJTZXQiLCJhZGQiLCJhY3RlIiwiY29kZXMiLCJjb2RlQWN0ZSIsImdldFR5cGUiLCJsaWJlbGxlQWN0ZSIsIm5vbUNhbm9uaXF1ZSIsImxpYmVsbGUiLCJyZW1hcCIsInR5cGVzIiwibWVyZ2VDb2RlcyIsIl9pIiwiX0FycmF5JGZyb20iLCJjIiwicHJpbnRBbmNob3JzIiwiX2kyIiwiX0FycmF5JGZyb20yIiwiY29kZSIsImxvZyIsImNvbmNhdCIsImdldENvZGVzIiwiam9pbiIsImlzTGVjdHVyZSIsIm1hdGNoIiwiY29kZXNfbGVjdHVyZV9yZWdleHAiLCJFcnJvciIsIm1hcCIsInJlcGxhY2UiLCJnZXRDb2RlQWN0ZSIsIlJlZ0V4cCIsImNvZGVzX2xlY3R1cmUiLCJMZWN0dXJlTWFwcGVyIiwibWFwcGluZyIsImNvbGxlY3QiLCJ1bmRlZmluZWQiLCJsZWN0dXJlcyIsIkFjdGVzRG9jdW1lbnRhdGlvbiIsInNhbml0eUNoZWNrcyIsInZlcmJvc2UiLCJhcmd1bWVudHMiLCJsZWN0dXJlIiwiQ01QIiwiQ0MiLCJQUk9NIiwiQU4yMSIsIkFOTFVOSSIsIlLDqXNvbHV0aW9uIiwiQU4yMCIsIkVVIiwiSW1tdW5pdMOpIiwicHJvY2VkdXJlcyIsImNvZGUycGF0dGVybiIsIndhbGtGaWxlcyIsImRhdGEiLCJhY3Rpb24iLCJfaXRlcmF0b3IyIiwiZ2V0RmlsZXMiLCJfc3RlcDIiLCJmaWxlIiwiZG9zc2llciIsImxvYWQiLCJwcm9jZWR1cmUiLCJyZW1hcFByb2NlZHVyZSIsInByb2NlZHVyZVBhcmxlbWVudGFpcmUiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwiY29sbGVjdEZpbGVzIiwiX3RoaXMiLCJfYWN0ZXMiLCJfYzJwIiwiX3BhcmVudCIsInByb2Nlc3NGaWxlcyIsIl90aGlzMiIsImFjdGVzIiwiYzJwIiwicGFyZW50IiwibWVyZ2UiLCJ2YWxpZGF0ZSIsInJlbWFwQWN0ZXMiLCJyZXN1bHRzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImxlY3R1cmVNYXBwZXIiLCJjb2xsZWN0QWN0ZXMiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwibWVyZ2VfcHJvY2VkdXJlcyIsIk1hcCIsInJlbWFwcGVkUHJvY2VkdXJlcyIsImdldCIsIm9yZGVyZWRDb2RlcyIsIm9yZGVyZWQiLCJ4IiwiYXNzZXJ0IiwidmFsaWRhdGVDaHJvbm9sb2d5Iiwic2VxdWVuY2UiLCJtZXJnZUFjdGUiLCJzaG9ydENvZGUiLCJ4c2lUeXBlIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJ2YWxpZGF0ZUxldmVsIiwicGF0aCIsIl9pMyIsIl9hcnIiLCJlbnRyaWVzIiwiX2FyciRfaSIsInByaW50RW50cnkiLCJlbnRyeSIsInRpdGxlIiwidW5kZXJsaW5lIiwiYWRkQW5jaG9ycyIsImFuY2hvcnNQcmludGVkIiwiYW5jaG9ycyIsInJlbmFtZUNNUCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInByaW50TGV2ZWwiLCJrZXlzIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsInN1YnN0cmluZyIsInByaW50Q29kZXMiLCJfaTQiLCJfT2JqZWN0JGtleXMiLCJwcmludEFuY2hvcnNJbmRleCIsIl9pNSIsIl9BcnJheSRmcm9tMyIsImdldEFnZ3JlZ2F0ZWQiLCJyZW1hcHBlZCIsInByaW50IiwiX2k2IiwiX2FycjIiLCJfYXJyMiRfaSIsImFnZ3JlZ2F0ZWQiLCJtYWluIiwiZG9jIiwicHJvY2VzcyIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9kb2N1bWVudF9kb3NzaWVyc19sZWdpc2xhdGlmcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgY29tbWFuZExpbmVVc2FnZSBmcm9tIFwiY29tbWFuZC1saW5lLXVzYWdlXCJcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBsb2FkLCBnZXRGaWxlcyB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwicGF0aG5hbWUgdG8gYSBKU09OIGZpbGUgb3IgYSBnbG9iIHBhdHRlcm4gdG8gSlNPTiBmaWxlc1wiLFxuICAgICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJkYXRhXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm5vLXNhbml0eS1jaGVja3NcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZXNjcmlwdGlvbjogXCJEbyBub3QgcGVyZm9ybSBzYW5pdHkgY2hlY2tzLlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVzY3JpcHRpb246IFwiaW5jcmVhc2UgdmVyYm9zaXR5XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImhlbHBcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlByaW50IHRoaXMgdXNhZ2UgZ3VpZGUuXCIsXG4gICAgfSxcbiAgXVxuICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiQWlkZSDDoCBsYSBkb2N1bWVudGF0aW9uIGR1IGRvc3NpZXIgbMOpZ2lzbGF0aWZcIixcbiAgICAgIGNvbnRlbnQ6IFwiR8OpbsOocmUgdW5lIGhpw6lyYXJjaGllIGRlcyBhY3RlcyBsw6lnaXNsYXRpZnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlYWRlcjogXCJPcHRpb25zXCIsXG4gICAgICBvcHRpb25MaXN0OiBvcHRpb25zRGVmaW5pdGlvbnMsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIGlmICghKFwiaGVscFwiIGluIG9wdGlvbnMpICYmICEoXCJkYXRhXCIgaW4gb3B0aW9ucykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiLS1kYXRhIGlzIG1hbmRhdG9yeVwiKVxuICAgIG9wdGlvbnMuaGVscCA9IHRydWVcbiAgfVxuICBpZiAoXCJoZWxwXCIgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IHVzYWdlID0gY29tbWFuZExpbmVVc2FnZShzZWN0aW9ucylcbiAgICBjb25zb2xlLndhcm4odXNhZ2UpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiBlcVNldChhczogU2V0PHN0cmluZz4sIGJzOiBTZXQ8c3RyaW5nPik6IGJvb2xlYW4ge1xuICBpZiAoYXMuc2l6ZSAhPT0gYnMuc2l6ZSkgcmV0dXJuIGZhbHNlXG4gIGZvciAodmFyIGEgb2YgYXMpIGlmICghYnMuaGFzKGEpKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIHRydWVcbn1cblxuY2xhc3MgQ29kZTJQYXR0ZXJuIHtcbiAgX3BhdHRlcm5fOiBhbnlcbiAgX21hdGNoX2NvdW50XzogbnVtYmVyXG4gIGNvbnN0cnVjdG9yKHBhdHRlcm46IGFueSwgY2hpbGRyZW46IGFueSkge1xuICAgIHRoaXMuX3BhdHRlcm5fID0gcGF0dGVyblxuICAgIHRoaXMuX21hdGNoX2NvdW50XyA9IDBcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNoaWxkcmVuKVxuICB9XG59XG5cbmNsYXNzIENvZGUyUGF0dGVybkNvbUZvbmQgZXh0ZW5kcyBDb2RlMlBhdHRlcm4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIl4vU0FJU0lFLygvTk9NSU4vKSooL1JFVU5JT04vKSooL1JBUFBPUlQvKSokXCIsIHt9KVxuICB9XG59XG5cbmNsYXNzIExlY3R1cmVNYXBwaW5nIHtcbiAgbGliZWxsZTogYW55ID0ge31cbiAgY29kZXM6IGFueSA9IG5ldyBTZXQoKVxuXG4gIHN0YXRpYyBjb2Rlc19sZWN0dXJlOiBzdHJpbmdbXSA9IFtcbiAgICBcIkFOMVwiLFxuICAgIFwiU04xXCIsXG4gICAgXCJBTk5MRUNcIixcbiAgICBcIlNOTkxFQ1wiLFxuICAgIFwiQU5MREVGXCIsXG4gICAgXCJBTjJcIixcbiAgICBcIlNOMlwiLFxuICAgIFwiU04zXCIsXG4gIF1cbiAgc3RhdGljIGNvZGVzX2xlY3R1cmVfcmVnZXhwOiBhbnkgPSBuZXcgUmVnRXhwKFxuICAgIFwiXig/OlwiICsgTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZS5qb2luKFwifFwiKSArIFwiKSgtLiopPyRcIixcbiAgKVxuXG4gIHN0YXRpYyBpc0xlY3R1cmUoYWN0ZTogYW55KSB7XG4gICAgcmV0dXJuIGFjdGUuY29kZUFjdGUubWF0Y2goTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZV9yZWdleHApXG4gIH1cblxuICBzdGF0aWMgZ2V0VHlwZShhY3RlOiBhbnkpIHtcbiAgICBpZiAoYWN0ZS5jb2RlQWN0ZS5tYXRjaCgvXkFOLykpIHJldHVybiBcIkFOXCJcbiAgICBlbHNlIGlmIChhY3RlLmNvZGVBY3RlLm1hdGNoKC9eU04vKSkgcmV0dXJuIFwiU05cIlxuICAgIGVsc2UgdGhyb3cgRXJyb3IoYCR7YWN0ZS5jb2RlQWN0ZX0gZG9lcyBub3Qgc3RhcnQgd2l0aCBBTiBvciBTTmApXG4gIH1cblxuICBzdGF0aWMgbWFwKGNvZGVBY3RlOiBhbnkpIHtcbiAgICByZXR1cm4gY29kZUFjdGUucmVwbGFjZShMZWN0dXJlTWFwcGluZy5jb2Rlc19sZWN0dXJlX3JlZ2V4cCwgYGxlY3R1cmUkMWApXG4gIH1cblxuICBzdGF0aWMgZ2V0Q29kZUFjdGUoYWN0ZTogYW55KSB7XG4gICAgaWYgKCFMZWN0dXJlTWFwcGluZy5pc0xlY3R1cmUoYWN0ZSkpIHJldHVyblxuXG4gICAgcmV0dXJuIExlY3R1cmVNYXBwaW5nLm1hcChhY3RlLmNvZGVBY3RlKVxuICB9XG5cbiAgYWRkKGFjdGU6IGFueSkge1xuICAgIHRoaXMuY29kZXMuYWRkKGFjdGUuY29kZUFjdGUpXG5cbiAgICBjb25zdCB0eXBlID0gTGVjdHVyZU1hcHBpbmcuZ2V0VHlwZShhY3RlKVxuXG4gICAgaWYgKCEoYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWUgaW4gdGhpcy5saWJlbGxlKSlcbiAgICAgIHRoaXMubGliZWxsZVthY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZV0gPSBuZXcgU2V0KClcbiAgICB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdLmFkZCh0eXBlKVxuICB9XG5cbiAgcmVtYXAoYWN0ZTogYW55LCBjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgYWN0ZS5jb2RlQWN0ZSA9IGNvZGVBY3RlXG5cbiAgICBsZXQgdHlwZXMgPSB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdXG4gICAgaWYgKCEodHlwZXMuaGFzKFwiU05cIikgJiYgdHlwZXMuaGFzKFwiQU5cIikpKSB7XG4gICAgICBpZiAodHlwZXMuaGFzKFwiU05cIikpIGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlICs9IFwiIChTw6luYXQpXCJcbiAgICAgIGVsc2UgaWYgKHR5cGVzLmhhcyhcIkFOXCIpKVxuICAgICAgICBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZSArPSBcIiAoQXNzZW1ibMOpZSBOYXRpb25hbGUpXCJcbiAgICB9XG4gIH1cblxuICBtZXJnZUNvZGVzKGNvZGVzOiBhbnkpIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgQXJyYXkuZnJvbSh0aGlzLmNvZGVzKSkgY29kZXMuYWRkKGMpXG4gIH1cblxuICBwcmludEFuY2hvcnMoKSB7XG4gICAgZm9yIChjb25zdCBjb2RlIG9mIEFycmF5LmZyb20odGhpcy5jb2RlcykpIGNvbnNvbGUubG9nKGAuLiBfJHtjb2RlfTpgKVxuICB9XG5cbiAgZ2V0Q29kZXMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jb2Rlcykuam9pbihcIixcIilcbiAgfVxufVxuXG5jbGFzcyBMZWN0dXJlTWFwcGVyIHtcbiAgbWFwcGluZzogYW55ID0ge31cblxuICBoYXMoY29kZUFjdGU6IHN0cmluZykge1xuICAgIHJldHVybiBjb2RlQWN0ZSBpbiB0aGlzLm1hcHBpbmdcbiAgfVxuXG4gIGNvbGxlY3QoYWN0ZTogYW55KSB7XG4gICAgY29uc3QgY29kZUFjdGUgPSBMZWN0dXJlTWFwcGluZy5nZXRDb2RlQWN0ZShhY3RlKVxuICAgIGlmIChjb2RlQWN0ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBsZWN0dXJlcyA9IHRoaXMubWFwcGluZ1xuICAgICAgaWYgKCEoY29kZUFjdGUgaW4gbGVjdHVyZXMpKSBsZWN0dXJlc1tjb2RlQWN0ZV0gPSBuZXcgTGVjdHVyZU1hcHBpbmcoKVxuICAgICAgbGVjdHVyZXNbY29kZUFjdGVdLmFkZChhY3RlKVxuICAgIH1cbiAgfVxuXG4gIHJlbWFwKGFjdGU6IGFueSkge1xuICAgIGNvbnN0IGNvZGVBY3RlID0gTGVjdHVyZU1hcHBpbmcuZ2V0Q29kZUFjdGUoYWN0ZSlcbiAgICBpZiAoY29kZUFjdGUgIT0gdW5kZWZpbmVkKSB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLnJlbWFwKGFjdGUsIGNvZGVBY3RlKVxuICB9XG5cbiAgbWVyZ2VDb2Rlcyhjb2RlczogYW55LCBjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5tZXJnZUNvZGVzKGNvZGVzKVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKGNvZGVBY3RlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLnByaW50QW5jaG9ycygpXG4gIH1cblxuICBnZXRDb2Rlcyhjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwcGluZ1tjb2RlQWN0ZV0uZ2V0Q29kZXMoKVxuICB9XG59XG5cbmNsYXNzIEFjdGVzRG9jdW1lbnRhdGlvbiB7XG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgc2FuaXR5Q2hlY2tzOiBib29sZWFuXG4gIGxlY3R1cmVNYXBwZXI6IGFueSA9IG5ldyBMZWN0dXJlTWFwcGVyKClcbiAgcmVtYXBwZWRQcm9jZWR1cmVzOiBhbnkgPSB7fVxuICBhbmNob3JzUHJpbnRlZDogYW55ID0ge31cbiAgYW5jaG9yczogYW55ID0gbmV3IFNldCgpXG4gIGNvZGVzOiBhbnkgPSB7fVxuICBwcm9jZWR1cmVzOiBhbnkgPSBudWxsXG4gIGNvZGUycGF0dGVybjogYW55ID0gbmV3IENvZGUyUGF0dGVybihudWxsLCB7XG4gICAgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeKCgoL2xlY3R1cmUvKSspfCgoL2xlY3R1cmUvKSsvQ01QLygvbGVjdHVyZS8pKikpKC9DQy8pPygvUFJPTS8pPygvQU4tQVBQTEkvKT8kXCIsXG4gICAgICB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgXCJeKC9ERVBPVC8pPygvRFBUTEVUVFJFQ1QvKT8oL0VUSS8pPygvQVZDRS8pPygvREdWVC8pPygvQUNJTi8pPygvTU9USU9OLykqKC9QUk9DQUNDLyk/KC9DT00vKT8oKC9ERUJBVFMvKSspPygvUlRSSU5JLyk/JFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwibGVjdHVyZS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvfC9BVklTLykrJFwiLCB7XG4gICAgICAgICAgICAgIFwibGVjdHVyZS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuQ29tRm9uZCgpLFxuICAgICAgICAgICAgICBcImxlY3R1cmUtQ09NLUFWSVNcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXCJsZWN0dXJlLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgICAgICBcIl4oL1NFQU5DRS8pKigoL01PVElPTi8pPygvTU9USU9OLVZPVEUvKSspPygvREVDLyk/JFwiLFxuICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICAgQ01QOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvREVQT1QvfC9TQUlTSUUvKXsxLDJ9KC9DT00vKT8oL0RFQy8pPygvREVCQVRTLUFOLy9ERUJBVFMtU04vKT9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIkNNUC1DT01cIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgICAgXCJeKC9OT01JTi8pPygvUkFQUE9SVC1BTi98L1JBUFBPUlQtU04vKXsyfSRcIixcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgXCJDTVAtREVCQVRTLUFOXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL0RFQy8pPyRcIiwge30pLFxuICAgICAgICAgICAgXCJDTVAtREVCQVRTLVNOXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL0RFQy8pPyRcIiwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIENDOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0FJU0lFLykrKC9DT05DTFVTSU9OLyk/JFwiLCB7fSksXG4gICAgICAgIFBST006IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9QVUIvKT8kXCIsIHt9KSxcbiAgICAgICAgXCJBTi1BUFBMSVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUkFQUE9SVC8pPyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiQWxsb2N1dGlvbiBkdSBQcsOpc2lkZW50IGRlIGwnQXNzZW1ibMOpZSBuYXRpb25hbGVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXi9BTjIxLyRcIixcbiAgICAgIHtcbiAgICAgICAgQU4yMTogbmV3IENvZGUyUGF0dGVybihcIl4oL0FQQU4vKT8kXCIsIHt9KSxcbiAgICAgIH0sXG4gICAgKSxcbiAgICBcIlLDqXNvbHV0aW9uIEFydGljbGUgMzQtMVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLyk/JFwiLCB7XG4gICAgICBBTkxVTkk6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvREVCQVRTLyk/KC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSsoL0RFQy8pPyRcIiwge30pLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgUsOpc29sdXRpb246IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BTkxVTkkvKT8oL0NDLyk/JFwiLCB7XG4gICAgICBBTkxVTkk6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvQ09NLyk/KC9ERUJBVFMvfC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9DQUUvKT8oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcIkFOTFVOSS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuQ29tRm9uZCgpLFxuICAgICAgICAgIFwiQU5MVU5JLUNPTS1DQUVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pPygvUkVVTklPTi8pPygvUkFQUE9SVC8pPygvREVDLyk/JFwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgICAgQ0M6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TQUlTSUUvKT8oL0NPTkNMVVNJT04vKT8kXCIsIHt9KSxcbiAgICB9KSxcbiAgICBcIlJhcHBvcnQgZCdpbmZvcm1hdGlvbiBzYW5zIG1pc3Npb25cIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXigvQU4yMC8pPygvRVUvKT8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9SQVBQT1JULyk/JFwiLCB7fSksXG4gICAgICAgIEVVOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVDLykrJFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJNaXNzaW9uIGQnaW5mb3JtYXRpb25cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOMjAvKT8kXCIsIHtcbiAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9NSVNJTkYvKT8kXCIsIHtcbiAgICAgICAgXCJBTjIwLU1JU0lORlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvQ1JFQS8pPygvTk9NSU4vKT8oL1JBUFBPUlQvKT8kXCIsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgICBcIkNvbW1pc3Npb24gZCdlbnF1w6p0ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU4yMC8pPyRcIiwge1xuICAgICAgQU4yMDogbmV3IENvZGUyUGF0dGVybihcIl4oL0NPTUVOUS8pPyRcIiwge1xuICAgICAgICBcIkFOMjAtQ09NRU5RXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgXCJeKC9DUkVBLyk/KC9OT01JTi8pPygvUkFQUE9SVC8pPyRcIixcbiAgICAgICAgICB7fSxcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFwiRW5nYWdlbWVudCBkZSBsYSByZXNwb25zYWJpbGl0w6kgZ291dmVybmVtZW50YWxlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vQU4yMS8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjE6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKCgoL01PVElPTi8pKi9ERUJBVFMvKXwoL0RHVlQvKSl7MSwyfSRcIiwge1xuICAgICAgICAgIFwiQU4yMS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pKigvTU9USU9OLVZPVEUvKSokXCIsIHt9KSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJNb3Rpb24gcsOpZsOpcmVuZGFpcmVcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL2xlY3R1cmUvKSskXCIsIHtcbiAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvQ09NLyk/KC9ERUJBVFMvKT8kXCIsIHtcbiAgICAgICAgXCJsZWN0dXJlLUNPTVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvRk9ORC8pPyRcIiwge1xuICAgICAgICAgIFwibGVjdHVyZS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgICAgXCJeKC9TQUlTSUUvKT8oL05PTUlOLykqKC9SQVBQT1JULykqJFwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIFwibGVjdHVyZS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFQy8pPyRcIiwge30pLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgSW1tdW5pdMOpOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLykrJFwiLCB7XG4gICAgICBBTkxVTkk6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvQ09NLyk/KC9ERUJBVFMvKT8oL1JUUklOSS8pPyRcIiwge1xuICAgICAgICBcIkFOTFVOSS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcIkFOTFVOSS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgICAgXCJeKC9TQUlTSUUvKT8oL05PTUlOLykqKC9SQVBQT1JULykqJFwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLyk/KC9ERUMvKSRcIiwge30pLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgXCJSZXNwb25zYWJpbGl0w6kgcMOpbmFsZSBkdSBwcsOpc2lkZW50IGRlIGxhIHLDqXB1YmxpcXVlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vbGVjdHVyZS8kXCIsXG4gICAgICB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvUkVDQlVSRUFVLyk/JFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJQcm9wb3NpdGlvbiBkZSBsb2kgcHLDqXNlbnTDqWUgZW4gYXBwbGljYXRpb24gZGUgbCdhcnRpY2xlIDExIGRlIGxhIENvbnN0aXR1dGlvblwiOlxuICAgICAgbmV3IENvZGUyUGF0dGVybihcIl4vbGVjdHVyZS8kXCIsIHtcbiAgICAgICAgbGVjdHVyZTogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFUE9ULyk/JFwiLCB7fSksXG4gICAgICB9KSxcbiAgfSlcblxuICBjb25zdHJ1Y3RvcihzYW5pdHlDaGVja3M6IGJvb2xlYW4sIHZlcmJvc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2VcbiAgICB0aGlzLnNhbml0eUNoZWNrcyA9IHNhbml0eUNoZWNrc1xuICAgIHRoaXMucHJvY2VkdXJlcyA9IHt9XG4gICAgdGhpcy5jb2RlMnBhdHRlcm4uX21hdGNoX2NvdW50XysrXG4gIH1cblxuICB3YWxrRmlsZXMoZGF0YTogc3RyaW5nW10sIGFjdGlvbjogYW55KSB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGdldEZpbGVzKGRhdGEpKSB7XG4gICAgICBjb25zdCBkb3NzaWVyID0gbG9hZChmaWxlKVxuICAgICAgbGV0IHByb2NlZHVyZTogc3RyaW5nID0gdGhpcy5yZW1hcFByb2NlZHVyZShcbiAgICAgICAgZG9zc2llci5wcm9jZWR1cmVQYXJsZW1lbnRhaXJlLmxpYmVsbGUsXG4gICAgICApXG4gICAgICBpZiAoIShwcm9jZWR1cmUgaW4gdGhpcy5wcm9jZWR1cmVzKSkgdGhpcy5wcm9jZWR1cmVzW3Byb2NlZHVyZV0gPSB7fVxuICAgICAgYWN0aW9uKFxuICAgICAgICB0aGlzLnByb2NlZHVyZXNbcHJvY2VkdXJlXSxcbiAgICAgICAgZG9zc2llci5hY3Rlc0xlZ2lzbGF0aWZzLFxuICAgICAgICB0aGlzLmNvZGUycGF0dGVybltwcm9jZWR1cmVdLFxuICAgICAgICBudWxsLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGNvbGxlY3RGaWxlcyhkYXRhOiBzdHJpbmdbXSkge1xuICAgIHRoaXMud2Fsa0ZpbGVzKFxuICAgICAgZGF0YSxcbiAgICAgIChfYWN0ZXM6IGFueSwgYWN0ZXNMZWdpc2xhdGlmczogYW55LCBfYzJwOiBhbnksIF9wYXJlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmNvbGxlY3QoYWN0ZXNMZWdpc2xhdGlmcylcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgcHJvY2Vzc0ZpbGVzKGRhdGE6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy53YWxrRmlsZXMoXG4gICAgICBkYXRhLFxuICAgICAgKGFjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubWVyZ2UoYWN0ZXMsIGFjdGVzTGVnaXNsYXRpZnMsIGMycCwgcGFyZW50KVxuICAgICAgfSxcbiAgICApXG4gICAgaWYgKHRoaXMuc2FuaXR5Q2hlY2tzKSB0aGlzLnZhbGlkYXRlKClcbiAgfVxuXG4gIHJlbWFwQWN0ZXMoYWN0ZXM6IGFueSk6IGFueSB7XG4gICAgbGV0IHJlc3VsdHMgPSBbXVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBhY3Rlcykge1xuICAgICAgdGhpcy5sZWN0dXJlTWFwcGVyLnJlbWFwKGFjdGUpXG5cbiAgICAgIC8vIENDLVNBSVNJRS0gc3VmZml4IGRvZXMgbm90IGltcGx5IGEgaGllcmFyY2h5XG4gICAgICBhY3RlLmNvZGVBY3RlID0gYWN0ZS5jb2RlQWN0ZS5yZXBsYWNlKC9eQ0MtU0FJU0lFLiovLCBcIkNDLVNBSVNJRVwiKVxuXG4gICAgICByZXN1bHRzLnB1c2goYWN0ZSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIGNvbGxlY3RBY3RlcyhhY3RlczogYW55KTogYW55IHtcbiAgICBsZXQgcmVzdWx0cyA9IFtdXG4gICAgZm9yIChjb25zdCBhY3RlIG9mIGFjdGVzKSB7XG4gICAgICB0aGlzLmxlY3R1cmVNYXBwZXIuY29sbGVjdChhY3RlKVxuXG4gICAgICByZXN1bHRzLnB1c2goYWN0ZSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIHJlbWFwUHJvY2VkdXJlKHByb2NlZHVyZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXJnZV9wcm9jZWR1cmVzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcChbXG4gICAgICBbXCJQcm9wb3NpdGlvbiBkZSBsb2kgb3JkaW5haXJlXCIsIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIl0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIG9yZGluYWlyZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1xuICAgICAgICBcIlByb2pldCBkZSByYXRpZmljYXRpb24gZGVzIHRyYWl0w6lzIGV0IGNvbnZlbnRpb25zXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgICBbXCJQcm9qZXQgb3UgcHJvcG9zaXRpb24gZGUgbG9pIG9yZ2FuaXF1ZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1xuICAgICAgICBcIlByb2pldCBvdSBwcm9wb3NpdGlvbiBkZSBsb2kgY29uc3RpdHV0aW9ubmVsbGVcIixcbiAgICAgICAgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiLFxuICAgICAgXSxcbiAgICAgIFtcIlByb2pldCBkZSBsb2kgZGUgZmluYW5jZXMgZGUgbCdhbm7DqWVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcIlByb2pldCBkZSBsb2kgZGUgZmluYW5jZXMgcmVjdGlmaWNhdGl2ZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1xuICAgICAgICBcIlByb2pldCBkZSBsb2kgZGUgZmluYW5jZW1lbnQgZGUgbGEgc8OpY3VyaXTDqSBzb2NpYWxlXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgXSlcbiAgICBpZiAobWVyZ2VfcHJvY2VkdXJlcy5oYXMocHJvY2VkdXJlKSkge1xuICAgICAgdGhpcy5yZW1hcHBlZFByb2NlZHVyZXNbcHJvY2VkdXJlXSA9IG51bGxcbiAgICAgIHJldHVybiBtZXJnZV9wcm9jZWR1cmVzLmdldChwcm9jZWR1cmUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcm9jZWR1cmVcbiAgICB9XG4gIH1cblxuICAvLyByZXR1cm4gdGhlIGNvZGVBY3RlcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgcmVnZXhwXG4gIG9yZGVyZWRDb2Rlcyhjb2RlczogYW55LCBjMnA6IGFueSwgcGFyZW50OiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gICAgY29kZXMgPSBuZXcgU2V0KGNvZGVzKVxuICAgIGlmICghdGhpcy5zYW5pdHlDaGVja3MpIHJldHVybiBjb2Rlc1xuICAgIGxldCBvcmRlcmVkID0gYzJwW1wiX3BhdHRlcm5fXCJdLm1hdGNoKG5ldyBSZWdFeHAoXCIvLio/L1wiLCBcImdcIikpXG4gICAgb3JkZXJlZCA9IG9yZGVyZWQubWFwKCh4OiBzdHJpbmcpID0+IHgucmVwbGFjZShuZXcgUmVnRXhwKFwiLyguKikvXCIpLCBcIiQxXCIpKVxuICAgIGlmIChwYXJlbnQgIT0gbnVsbCkgb3JkZXJlZCA9IG9yZGVyZWQubWFwKCh4OiBzdHJpbmcpID0+IGAke3BhcmVudH0tJHt4fWApXG4gICAgb3JkZXJlZCA9IG5ldyBTZXQob3JkZXJlZClcbiAgICBhc3NlcnQoZXFTZXQob3JkZXJlZCwgY29kZXMpLCBgJHtbLi4ub3JkZXJlZF19ICE9ICR7Wy4uLmNvZGVzXX1gKVxuICAgIHJldHVybiBvcmRlcmVkXG4gIH1cblxuICB2YWxpZGF0ZUNocm9ub2xvZ3koYWN0ZXNMZWdpc2xhdGlmczogYW55LCBjMnA6IGFueSwgcGFyZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gYzJwW1wiX3BhdHRlcm5fXCJdXG4gICAgY29uc3Qgc2VxdWVuY2UgPSBhY3Rlc0xlZ2lzbGF0aWZzXG4gICAgICAubWFwKCh4OiBhbnkpID0+IGAvJHt4LmNvZGVBY3RlfS9gLnJlcGxhY2UoYC8ke3BhcmVudH0tYCwgXCIvXCIpKVxuICAgICAgLmpvaW4oXCJcIilcbiAgICBhc3NlcnQoXG4gICAgICBzZXF1ZW5jZS5tYXRjaChuZXcgUmVnRXhwKHBhdHRlcm4pKSxcbiAgICAgIGAke3BhdHRlcm59IGRvZXMgbm90IG1hdGNoICR7c2VxdWVuY2V9YCxcbiAgICApXG4gICAgYzJwLl9tYXRjaF9jb3VudF8rK1xuICB9XG5cbiAgbWVyZ2VBY3RlKGFjdGVzOiBhbnksIGFjdGU6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGNvZGU6IHN0cmluZyA9IGFjdGUuY29kZUFjdGVcbiAgICBsZXQgc2hvcnRDb2RlOiBzdHJpbmcgPSBjb2RlLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cGFyZW50fS1gKSwgXCJcIilcbiAgICBzaG9ydENvZGUgPSBzaG9ydENvZGUucmVwbGFjZSgvLShBTnxTTikkLywgXCJcIilcbiAgICB0aGlzLmNvZGVzW3Nob3J0Q29kZV0gPSBudWxsXG4gICAgbGV0IG5hbWU6IHN0cmluZyA9IGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXG4gICAgaWYgKCEoY29kZSBpbiBhY3RlcykpIHtcbiAgICAgIGFjdGVzW2NvZGVdID0ge1xuICAgICAgICB0eXBlOiBhY3RlLnhzaVR5cGUsXG4gICAgICAgIG5hbWU6IG5ldyBTZXQoW25hbWVdKSxcbiAgICAgICAgc2hvcnRDb2RlOiBzaG9ydENvZGUsXG4gICAgICAgIGFjdGVzOiB7fSxcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWN0ZXNbY29kZV0ubmFtZS5hZGQobmFtZSlcbiAgICB9XG4gICAgaWYgKFwiYWN0ZXNMZWdpc2xhdGlmc1wiIGluIGFjdGUpXG4gICAgICB0aGlzLm1lcmdlKGFjdGVzW2NvZGVdLmFjdGVzLCBhY3RlLmFjdGVzTGVnaXNsYXRpZnMsIGMycFtjb2RlXSwgY29kZSlcbiAgfVxuXG4gIG1lcmdlKGFjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgbCA9IHRoaXMucmVtYXBBY3RlcyhhY3Rlc0xlZ2lzbGF0aWZzKVxuICAgIHRoaXMudmFsaWRhdGVDaHJvbm9sb2d5KGwsIGMycCwgcGFyZW50KVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBsKSB0aGlzLm1lcmdlQWN0ZShhY3RlcywgYWN0ZSwgYzJwLCBwYXJlbnQpXG4gIH1cblxuICBjb2xsZWN0KGFjdGVzTGVnaXNsYXRpZnM6IGFueSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYWN0ZSBvZiB0aGlzLmNvbGxlY3RBY3RlcyhhY3Rlc0xlZ2lzbGF0aWZzKSlcbiAgICAgIGlmIChcImFjdGVzTGVnaXNsYXRpZnNcIiBpbiBhY3RlKSB0aGlzLmNvbGxlY3QoYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzKVxuICB9XG5cbiAgdmFsaWRhdGVMZXZlbChjMnA6IGFueSwgcGF0aDogYW55KSB7XG4gICAgYXNzZXJ0KGMycC5fbWF0Y2hfY291bnRfID4gMCwgYCR7cGF0aH0gaXMgbmV2ZXIgdXNlZGApXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYzJwKSBhcyBbc3RyaW5nLCBhbnldW10pIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT0gXCJDb2RlMlBhdHRlcm5cIilcbiAgICAgICAgdGhpcy52YWxpZGF0ZUxldmVsKHZhbHVlLCBwYXRoLmNvbmNhdChba2V5XSkpXG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdGhpcy52YWxpZGF0ZUxldmVsKHRoaXMuY29kZTJwYXR0ZXJuLCBbXSlcbiAgfVxuXG4gIHByaW50RW50cnkoc2VjdGlvbnM6IHN0cmluZywgZW50cnk6IHN0cmluZywgY29kZXM6IHN0cmluZykge1xuICAgIGNvbnN0IHRpdGxlID0gYFxcYCR7ZW50cnl9XFxgX19gXG4gICAgY29uc29sZS5sb2codGl0bGUpXG4gICAgY29uc3QgdW5kZXJsaW5lID0gbmV3IEFycmF5KHRpdGxlLmxlbmd0aCArIDEpLmpvaW4oc2VjdGlvbnNbMF0pXG4gICAgY29uc29sZS5sb2codW5kZXJsaW5lKVxuICAgIGNvbnNvbGUubG9nKGNvZGVzKVxuICB9XG5cbiAgYWRkQW5jaG9ycyhrZXk6IHN0cmluZykge1xuICAgIGlmIChrZXkgaW4gdGhpcy5hbmNob3JzUHJpbnRlZCkgcmV0dXJuXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSlcbiAgICAgIHRoaXMubGVjdHVyZU1hcHBlci5tZXJnZUNvZGVzKHRoaXMuYW5jaG9ycywga2V5KVxuICAgIGVsc2UgdGhpcy5hbmNob3JzLmFkZChrZXkpXG4gIH1cblxuICBwcmludEFuY2hvcnMoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVyblxuICAgIHRoaXMuYW5jaG9yc1ByaW50ZWRba2V5XSA9IG51bGxcbiAgICBpZiAodGhpcy5sZWN0dXJlTWFwcGVyLmhhcyhrZXkpKSB0aGlzLmxlY3R1cmVNYXBwZXIucHJpbnRBbmNob3JzKGtleSlcbiAgICBlbHNlIGNvbnNvbGUubG9nKGAuLiBfJHtrZXl9OmApXG4gIH1cblxuICBnZXRDb2RlcyhrZXk6IHN0cmluZywgc2hvcnRDb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVybiBgY2YgXFxcXCoke3Nob3J0Q29kZX1cXFxcKmBcbiAgICBpZiAodGhpcy5sZWN0dXJlTWFwcGVyLmhhcyhrZXkpKSByZXR1cm4gdGhpcy5sZWN0dXJlTWFwcGVyLmdldENvZGVzKGtleSlcbiAgICBlbHNlIHJldHVybiBrZXlcbiAgfVxuXG4gIHJlbmFtZUNNUChrZXk6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKFwiQ01QXCIpKSB7XG4gICAgICBpZiAoa2V5LmVuZHNXaXRoKFwiLVNOXCIpKSByZXR1cm4gYCR7bmFtZX0gKFPDqW5hdClgXG4gICAgICBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCItQU5cIikpIHJldHVybiBgJHtuYW1lfSAoQXNzZW1ibMOpZSBOYXRpb25hbGUpYFxuICAgICAgZWxzZSByZXR1cm4gbmFtZVxuICAgIH0gZWxzZSByZXR1cm4gbmFtZVxuICB9XG5cbiAgcHJpbnRMZXZlbChhY3RlczogYW55LCBzZWN0aW9uczogc3RyaW5nLCBjMnA6IGFueSwgcGFyZW50OiBhbnkpIHtcbiAgICBjb25zdCBrZXlzOiBTZXQ8c3RyaW5nPiA9IHRoaXMub3JkZXJlZENvZGVzKE9iamVjdC5rZXlzKGFjdGVzKSwgYzJwLCBwYXJlbnQpXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3QgdmFsdWUgPSBhY3Rlc1trZXldXG4gICAgICBsZXQgbmFtZSA9IEFycmF5LmZyb20odmFsdWUubmFtZSkuam9pbihcIiwgXCIpXG4gICAgICBuYW1lID0gdGhpcy5yZW5hbWVDTVAoa2V5LCBuYW1lKVxuICAgICAgY29uc3QgY29kZXMgPSB0aGlzLmdldENvZGVzKGtleSwgdmFsdWUuc2hvcnRDb2RlKVxuICAgICAgdGhpcy5hZGRBbmNob3JzKGtleSlcbiAgICAgIHRoaXMucHJpbnRBbmNob3JzKGtleSlcbiAgICAgIGNvbnNvbGUubG9nKFwiXCIpXG4gICAgICB0aGlzLnByaW50RW50cnkoc2VjdGlvbnMsIGAke25hbWV9IDwke3ZhbHVlLnNob3J0Q29kZX1UT0NfPmAsIGNvZGVzKVxuICAgICAgY29uc29sZS5sb2coXCJcIilcbiAgICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZS5hY3RlcykubGVuZ3RoID4gMClcbiAgICAgICAgdGhpcy5wcmludExldmVsKHZhbHVlLmFjdGVzLCBzZWN0aW9ucy5zdWJzdHJpbmcoMSksIGMycFtrZXldLCBrZXkpXG4gICAgfVxuICB9XG5cbiAgcHJpbnRDb2RlcygpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmNvZGVzKSlcbiAgICAgIGNvbnNvbGUubG9nKGAuLiBfJHtrZXl9VE9DOiBodHRwOi8vYClcbiAgfVxuXG4gIHByaW50QW5jaG9yc0luZGV4KCkge1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBBcnJheS5mcm9tKHRoaXMuYW5jaG9ycykpXG4gICAgICBjb25zb2xlLmxvZyhgKiA6cmVmOlxcYCR7Y29kZX0gPCR7Y29kZX0+XFxgYClcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZWQocHJvY2VkdXJlOiBzdHJpbmcpIHtcbiAgICBpZiAocHJvY2VkdXJlID09IFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIikge1xuICAgICAgY29uc3QgcmVtYXBwZWQgPSBPYmplY3Qua2V5cyh0aGlzLnJlbWFwcGVkUHJvY2VkdXJlcykuam9pbihcIiwgXCIpXG4gICAgICByZXR1cm4gYCAoYWdyw6lnYXRpb24gZGUgJHtyZW1hcHBlZH0pYFxuICAgIH0gZWxzZSByZXR1cm4gXCJcIlxuICB9XG5cbiAgcHJpbnQoKTogdm9pZCB7XG4gICAgdGhpcy5hbmNob3JzUHJpbnRlZCA9IHt9XG4gICAgZm9yIChjb25zdCBba2V5LCBhY3Rlc10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5wcm9jZWR1cmVzKSBhcyBbXG4gICAgICBzdHJpbmcsXG4gICAgICBhbnksXG4gICAgXVtdKSB7XG4gICAgICBjb25zdCBjb2RlID0ga2V5LnJlcGxhY2UoLyArL2csIFwiX1wiKVxuICAgICAgdGhpcy5jb2Rlc1tjb2RlXSA9IG51bGxcbiAgICAgIGNvbnN0IGFnZ3JlZ2F0ZWQgPSB0aGlzLmdldEFnZ3JlZ2F0ZWQoa2V5KVxuICAgICAgY29uc3QgdGl0bGUgPSBgXFxgJHtrZXl9IDwke2NvZGV9VE9DXz5cXGBfXyR7YWdncmVnYXRlZH1gXG4gICAgICBjb25zb2xlLmxvZyh0aXRsZSlcbiAgICAgIGNvbnN0IHVuZGVybGluZSA9IG5ldyBBcnJheSh0aXRsZS5sZW5ndGggKyAxKS5qb2luKFwiPVwiKVxuICAgICAgY29uc29sZS5sb2codW5kZXJsaW5lKVxuICAgICAgdGhpcy5wcmludExldmVsKGFjdGVzLCBcIi1+LidcIiwgdGhpcy5jb2RlMnBhdHRlcm5ba2V5XSwgbnVsbClcbiAgICB9XG4gICAgdGhpcy5wcmludENvZGVzKClcbiAgICB0aGlzLnByaW50QW5jaG9yc0luZGV4KClcbiAgfVxufVxuXG5mdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHJldHVybiAxXG4gIGxldCBkb2MgPSBuZXcgQWN0ZXNEb2N1bWVudGF0aW9uKFxuICAgICFvcHRpb25zW1wibm8tc2FuaXR5LWNoZWNrc1wiXSxcbiAgICBvcHRpb25zLnZlcmJvc2UsXG4gIClcbiAgZG9jLmNvbGxlY3RGaWxlcyhvcHRpb25zLmRhdGEpXG4gIGRvYy5wcm9jZXNzRmlsZXMob3B0aW9ucy5kYXRhKVxuICBkb2MucHJpbnQoKVxuICByZXR1cm4gMFxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJkb2N1bWVudF9kb3NzaWVyc19sZWdpc2xhdGlmcy50c1wiKSlcbiAgcHJvY2Vzcy5leGl0KG1haW4ocHJvY2Vzcy5hcmd2KSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENB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
|