@tricoteuses/assemblee
Version:
Retrieve, clean up & handle French Assemblée nationale's open data
993 lines (990 loc) • 112 kB
JavaScript
// To parse this data:
//
// import { Amendements, AmendementWrapper, Convert, TexteLegislatif } from "./file";
//
// const amendements = Convert.toAmendements(json);
// const amendementWrapper = Convert.toAmendementWrapper(json);
// const texteLegislatif = Convert.toTexteLegislatif(json);
//
// These functions will throw an error if the JSON doesn't
// match the expected interface, even if the JSON is valid.
export let AccordGouvernementDepotHorsDelai = /*#__PURE__*/function (AccordGouvernementDepotHorsDelai) {
AccordGouvernementDepotHorsDelai["Accord"] = "Accord";
AccordGouvernementDepotHorsDelai["SansObjet"] = "Sans objet";
return AccordGouvernementDepotHorsDelai;
}({});
export let Action = /*#__PURE__*/function (Action) {
Action["Cr\xE9ation"] = "cr\xE9ation";
Action["Modification"] = "modification";
Action["Suppression"] = "suppression";
return Action;
}({});
export let Code = /*#__PURE__*/function (Code) {
Code["AC"] = "AC";
Code["At"] = "AT";
Code["Di"] = "DI";
Code["Effac\xE9"] = "effac\xE9";
Code["Er"] = "ER";
Code["Et"] = "ET";
Code["IR"] = "IR";
Code["Irr127"] = "IRR127";
Code["Irr20"] = "IRR20";
Code["Irr37"] = "IRR37";
Code["Irr38"] = "IRR38";
Code["Irr41"] = "IRR41";
Code["Irr42"] = "IRR42";
Code["Irr45"] = "IRR45";
Code["Irr48"] = "IRR48";
Code["Irr53"] = "IRR53";
Code["Irrai"] = "IRRAI";
Code["Irraif"] = "IRRAIF";
Code["Irrd"] = "IRRD";
Code["Irrhc"] = "IRRHC";
Code["Irrhd"] = "IRRHD";
Code["Irrsa"] = "IRRSA";
Code["R"] = "R";
Code["Rt"] = "RT";
Code["T"] = "T";
return Code;
}({});
export let Libelle = /*#__PURE__*/function (Libelle) {
Libelle["ADiscuter"] = "A discuter";
Libelle["AD\xE9poser"] = "A d\xE9poser";
Libelle["Discut\xE9"] = "Discut\xE9";
Libelle["Effac\xE9"] = "effac\xE9";
Libelle["EnRecevabilit\xE9"] = "En recevabilit\xE9";
Libelle["EnTraitement"] = "En traitement";
Libelle["Irrecevable"] = "Irrecevable";
Libelle["Irrecevable40"] = "Irrecevable 40";
Libelle["Retir\xE9"] = "Retir\xE9";
return Libelle;
}({});
export let SortEnum = /*#__PURE__*/function (SortEnum) {
SortEnum["Adopt\xE9"] = "Adopt\xE9";
SortEnum["AutreIrrecevabilit\xE9"] = "Autre irrecevabilit\xE9";
SortEnum["AutreIrrecevabilit\xE940"] = "Autre irrecevabilit\xE9 40";
SortEnum["AutresIrrLOLF"] = "Autres irr LOLF";
SortEnum["AutresIrrLOLFSS"] = "Autres irr LOLFSS";
SortEnum["Cavalier45"] = "Cavalier (45)";
SortEnum["CavalierBudg\xE9taire"] = "Cavalier budg\xE9taire";
SortEnum["CavalierSocial"] = "Cavalier social";
SortEnum["ChampDeLHabilitation38"] = "Champ de l'habilitation (38)";
SortEnum["Charge"] = "Charge";
SortEnum["Cmp45"] = "CMP (45)";
SortEnum["Cr\xE9dits"] = "Cr\xE9dits";
SortEnum["DispositionR\xE9glementaire37"] = "Disposition r\xE9glementaire (37)";
SortEnum["DomaineDeLaLoi41"] = "Domaine de la loi (41)";
SortEnum["DomaineLoiOrganique127"] = "Domaine loi organique (127)";
SortEnum["Doublon"] = "Doublon";
SortEnum["Entonnoir45"] = "Entonnoir (45)";
SortEnum["Gage"] = "Gage";
SortEnum["HorsChamp"] = "Hors champ";
SortEnum["HorsD\xE9lais"] = "Hors-d\xE9lais";
SortEnum["Injonction20"] = "Injonction (20)";
SortEnum["IrrEnPremi\xE8rePartie"] = "Irr en premi\xE8re partie";
SortEnum["IrrEnSecondePartie"] = "Irr en seconde partie";
SortEnum["Lolf"] = "LOLF";
SortEnum["Lolfss"] = "LOLFSS";
SortEnum["NonSoutenu"] = "Non soutenu";
SortEnum["OrdreDuJour48"] = "Ordre du jour (48)";
SortEnum["R"] = "R";
SortEnum["RatificationTrait\xE953"] = "Ratification trait\xE9 (53)";
SortEnum["Rejet\xE9"] = "Rejet\xE9";
SortEnum["Retir\xE9"] = "Retir\xE9";
SortEnum["Retir\xE9Apr\xE8sPublication"] = "Retir\xE9 apr\xE8s publication";
SortEnum["Retir\xE9AvantPublication"] = "Retir\xE9 avant publication";
SortEnum["SatisfaitOuInop\xE9rant42"] = "Satisfait ou inop\xE9rant (42)";
SortEnum["SousAmendement98"] = "Sous-amendement (98)";
SortEnum["Tomb\xE9"] = "Tomb\xE9";
return SortEnum;
}({});
export let TypePosition = /*#__PURE__*/function (TypePosition) {
TypePosition["Dernier"] = "Dernier";
TypePosition["Milieu"] = "Milieu";
TypePosition["Premier"] = "Premier";
return TypePosition;
}({});
export let AvantAApres = /*#__PURE__*/function (AvantAApres) {
AvantAApres["A"] = "A";
AvantAApres["Apr\xE8s"] = "Apr\xE8s";
AvantAApres["Avant"] = "Avant";
return AvantAApres;
}({});
export let DivisionType = /*#__PURE__*/function (DivisionType) {
DivisionType["Annexe"] = "ANNEXE";
DivisionType["Article"] = "ARTICLE";
DivisionType["Chapitre"] = "CHAPITRE";
DivisionType["Titre"] = "TITRE";
return DivisionType;
}({});
export let CodeEtat = /*#__PURE__*/function (CodeEtat) {
CodeEtat["B"] = "B";
CodeEtat["C"] = "C";
CodeEtat["D"] = "D";
return CodeEtat;
}({});
export let Nom = /*#__PURE__*/function (Nom) {
Nom["PDF"] = "PDF";
return Nom;
}({});
export let TypeMIMEType = /*#__PURE__*/function (TypeMIMEType) {
TypeMIMEType["Application"] = "application";
return TypeMIMEType;
}({});
export let TypeAuteur = /*#__PURE__*/function (TypeAuteur) {
TypeAuteur["D\xE9put\xE9"] = "D\xE9put\xE9";
TypeAuteur["Gouvernement"] = "Gouvernement";
TypeAuteur["Rapporteur"] = "Rapporteur";
return TypeAuteur;
}({});
// Converts JSON strings to/from your types
// and asserts the results of JSON.parse at runtime
export class Convert {
static toAmendements(json) {
return cast(JSON.parse(json), r("Amendements"));
}
static amendementsToJson(value) {
return JSON.stringify(uncast(value, r("Amendements")), null, 2);
}
static toTexteLegislatif(json) {
return cast(JSON.parse(json), r("TexteLegislatif"));
}
static texteLegislatifToJson(value) {
return JSON.stringify(uncast(value, r("TexteLegislatif")), null, 2);
}
static toAmendementWrapper(json) {
return cast(JSON.parse(json), r("AmendementWrapper"));
}
static amendementWrapperToJson(value) {
return JSON.stringify(uncast(value, r("AmendementWrapper")), null, 2);
}
}
function invalidValue(typ, val, key = '') {
if (key) {
throw Error(`Invalid value for key "${key}". Expected type ${JSON.stringify(typ)} but got ${JSON.stringify(val)}`);
}
throw Error(`Invalid value ${JSON.stringify(val)} for type ${JSON.stringify(typ)}`);
}
function jsonToJSProps(typ) {
if (typ.jsonToJS === undefined) {
const map = {};
typ.props.forEach(p => map[p.json] = {
key: p.js,
typ: p.typ
});
typ.jsonToJS = map;
}
return typ.jsonToJS;
}
function jsToJSONProps(typ) {
if (typ.jsToJSON === undefined) {
const map = {};
typ.props.forEach(p => map[p.js] = {
key: p.json,
typ: p.typ
});
typ.jsToJSON = map;
}
return typ.jsToJSON;
}
function transform(val, typ, getProps, key = '') {
function transformPrimitive(typ, val) {
if (typeof typ === typeof val) return val;
return invalidValue(typ, val, key);
}
function transformUnion(typs, val) {
// val must validate against one typ in typs
const l = typs.length;
for (let i = 0; i < l; i++) {
const typ = typs[i];
try {
return transform(val, typ, getProps);
} catch (_) {}
}
return invalidValue(typs, val);
}
function transformEnum(cases, val) {
if (cases.indexOf(val) !== -1) return val;
return invalidValue(cases, val);
}
function transformArray(typ, val) {
// val must be an array with no invalid elements
if (!Array.isArray(val)) return invalidValue("array", val);
return val.map(el => transform(el, typ, getProps));
}
function transformDate(val) {
if (val === null) {
return null;
}
const d = new Date(val);
if (isNaN(d.valueOf())) {
return invalidValue("Date", val);
}
return d;
}
function transformObject(props, additional, val) {
if (val === null || typeof val !== "object" || Array.isArray(val)) {
return invalidValue("object", val);
}
const result = {};
Object.getOwnPropertyNames(props).forEach(key => {
const prop = props[key];
const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
result[prop.key] = transform(v, prop.typ, getProps, prop.key);
});
Object.getOwnPropertyNames(val).forEach(key => {
if (!Object.prototype.hasOwnProperty.call(props, key)) {
result[key] = transform(val[key], additional, getProps, key);
}
});
return result;
}
if (typ === "any") return val;
if (typ === null) {
if (val === null) return val;
return invalidValue(typ, val);
}
if (typ === false) return invalidValue(typ, val);
while (typeof typ === "object" && typ.ref !== undefined) {
typ = typeMap[typ.ref];
}
if (Array.isArray(typ)) return transformEnum(typ, val);
if (typeof typ === "object") {
return typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val) : typ.hasOwnProperty("arrayItems") ? transformArray(typ.arrayItems, val) : typ.hasOwnProperty("props") ? transformObject(getProps(typ), typ.additional, val) : invalidValue(typ, val);
}
// Numbers can be parsed by Date but shouldn't be.
if (typ === Date && typeof val !== "number") return transformDate(val);
return transformPrimitive(typ, val);
}
function cast(val, typ) {
return transform(val, typ, jsonToJSProps);
}
function uncast(val, typ) {
return transform(val, typ, jsToJSONProps);
}
function a(typ) {
return {
arrayItems: typ
};
}
function u(...typs) {
return {
unionMembers: typs
};
}
function o(props, additional) {
return {
props,
additional
};
}
// function m(additional: any) {
// return { props: [], additional };
// }
function r(name) {
return {
ref: name
};
}
const typeMap = {
"Amendements": o([{
json: "textesLegislatifs",
js: "textesLegislatifs",
typ: a(r("TexteLegislatif"))
}], false),
"TexteLegislatif": o([{
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: ""
}, {
json: "refTexteLegislatif",
js: "refTexteLegislatif",
typ: ""
}, {
json: "amendements",
js: "amendements",
typ: r("AmendementsClass")
}], false),
"AmendementsClass": o([{
json: "amendement",
js: "amendement",
typ: a(r("Amendement"))
}], false),
"AmendementWrapper": o([{
json: "amendement",
js: "amendement",
typ: r("Amendement")
}], false),
"Amendement": o([{
json: "@xmlns",
js: "@xmlns",
typ: ""
}, {
json: "uid",
js: "uid",
typ: ""
}, {
json: "chronotag",
js: "chronotag",
typ: ""
}, {
json: "legislature",
js: "legislature",
typ: ""
}, {
json: "identification",
js: "identification",
typ: r("Identification")
}, {
json: "examenRef",
js: "examenRef",
typ: ""
}, {
json: "texteLegislatifRef",
js: "texteLegislatifRef",
typ: ""
}, {
json: "triAmendement",
js: "triAmendement",
typ: u(r("AmendementParentRefClass"), "")
}, {
json: "cardinaliteAmdtMultiples",
js: "cardinaliteAmdtMultiples",
typ: u(r("AmendementParentRefClass"), "")
}, {
json: "amendementParentRef",
js: "amendementParentRef",
typ: u(r("AmendementParentRefClass"), "")
}, {
json: "signataires",
js: "signataires",
typ: r("Signataires")
}, {
json: "pointeurFragmentTexte",
js: "pointeurFragmentTexte",
typ: r("PointeurFragmentTexte")
}, {
json: "corps",
js: "corps",
typ: r("Corps")
}, {
json: "cycleDeVie",
js: "cycleDeVie",
typ: r("CycleDeVie")
}, {
json: "representations",
js: "representations",
typ: u(r("Representations"), null)
}, {
json: "seanceDiscussionRef",
js: "seanceDiscussionRef",
typ: u(r("AmendementParentRefClass"), "")
}, {
json: "article99",
js: "article99",
typ: ""
}, {
json: "loiReference",
js: "loiReference",
typ: r("LoiReference")
}, {
json: "discussionCommune",
js: "discussionCommune",
typ: r("Discussion")
}, {
json: "discussionIdentique",
js: "discussionIdentique",
typ: r("Discussion")
}, {
json: "accordGouvernementDepotHorsDelai",
js: "accordGouvernementDepotHorsDelai",
typ: r("AccordGouvernementDepotHorsDelai")
}], false),
"AmendementParentRefClass": o([{
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: ""
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: ""
}], false),
"Corps": o([{
json: "cartoucheInformatif",
js: "cartoucheInformatif",
typ: u(undefined, u(r("AmendementParentRefClass"), ""))
}, {
json: "contenuAuteur",
js: "contenuAuteur",
typ: u(undefined, r("ContenuAuteur"))
}, {
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: u(undefined, "")
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: u(undefined, "")
}], false),
"ContenuAuteur": o([{
json: "dispositif",
js: "dispositif",
typ: u(undefined, "")
}, {
json: "avantAppel",
js: "avantAppel",
typ: u(undefined, r("AvantAppel"))
}, {
json: "exposeSommaire",
js: "exposeSommaire",
typ: u(undefined, "")
}, {
json: "annexeExposeSommaire",
js: "annexeExposeSommaire",
typ: u(undefined, r("AmendementParentRefClass"))
}, {
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: u(undefined, "")
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: u(undefined, "")
}, {
json: "dispositifAmdtCreditPLF",
js: "dispositifAmdtCreditPLF",
typ: u(undefined, r("DispositifAmdtCreditPLF"))
}, {
json: "dispositifAmdtCreditPLFR",
js: "dispositifAmdtCreditPLFR",
typ: u(undefined, r("DispositifAmdtCreditPLFR"))
}], false),
"AvantAppel": o([{
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: u(undefined, "")
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: u(undefined, "")
}, {
json: "dispositif",
js: "dispositif",
typ: u(undefined, "")
}, {
json: "dispositifAmdtCreditPLF",
js: "dispositifAmdtCreditPLF",
typ: u(undefined, r("DispositifAmdtCreditPLF"))
}, {
json: "dispositifAmdtCreditPLFR",
js: "dispositifAmdtCreditPLFR",
typ: u(undefined, r("DispositifAmdtCreditPLFR"))
}], false),
"DispositifAmdtCreditPLF": o([{
json: "listeProgrammes",
js: "listeProgrammes",
typ: u(undefined, r("DispositifAmdtCreditPLFListeProgrammes"))
}, {
json: "soldeAE",
js: "soldeAE",
typ: u(undefined, "")
}, {
json: "soldeCP",
js: "soldeCP",
typ: u(undefined, "")
}, {
json: "cpEgalAe",
js: "cpEgalAe",
typ: ""
}], false),
"DispositifAmdtCreditPLFListeProgrammes": o([{
json: "programme",
js: "programme",
typ: a(r("PurpleProgramme"))
}], false),
"PurpleProgramme": o([{
json: "libelle",
js: "libelle",
typ: ""
}, {
json: "programmeRef",
js: "programmeRef",
typ: ""
}, {
json: "autorisationEngagement",
js: "autorisationEngagement",
typ: ""
}, {
json: "creditPaiement",
js: "creditPaiement",
typ: ""
}, {
json: "action",
js: "action",
typ: r("Action")
}, {
json: "lignesCredits",
js: "lignesCredits",
typ: r("PurpleLignesCredits")
}], false),
"PurpleLignesCredits": o([{
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: u(undefined, "")
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: u(undefined, "")
}, {
json: "ligneCredit",
js: "ligneCredit",
typ: u(undefined, u(a(r("LigneCreditClass")), r("LigneCreditClass")))
}], false),
"LigneCreditClass": o([{
json: "id",
js: "id",
typ: ""
}, {
json: "libelle",
js: "libelle",
typ: ""
}, {
json: "autorisationEngagement",
js: "autorisationEngagement",
typ: ""
}, {
json: "creditPaiement",
js: "creditPaiement",
typ: ""
}, {
json: "action",
js: "action",
typ: r("Action")
}], false),
"DispositifAmdtCreditPLFR": o([{
json: "listeProgrammes",
js: "listeProgrammes",
typ: u(undefined, r("DispositifAmdtCreditPLFRListeProgrammes"))
}, {
json: "totalAE",
js: "totalAE",
typ: u(undefined, r("Total"))
}, {
json: "totalCP",
js: "totalCP",
typ: u(undefined, r("Total"))
}, {
json: "cpEgalAe",
js: "cpEgalAe",
typ: ""
}], false),
"DispositifAmdtCreditPLFRListeProgrammes": o([{
json: "programme",
js: "programme",
typ: a(r("LigneCreditElement"))
}], false),
"LigneCreditLignesCredits": o([{
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: u(undefined, "")
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: u(undefined, "")
}, {
json: "ligneCredit",
js: "ligneCredit",
typ: u(undefined, u(a(r("LigneCreditElement")), r("LigneCreditElement")))
}], false),
"LigneCreditElement": o([{
json: "libelle",
js: "libelle",
typ: ""
}, {
json: "programmeRef",
js: "programmeRef",
typ: u(undefined, "")
}, {
json: "autorisationEngagementSupplementaire",
js: "autorisationEngagementSupplementaire",
typ: ""
}, {
json: "creditPaiementSupplementaire",
js: "creditPaiementSupplementaire",
typ: ""
}, {
json: "autorisationEngagementAnnule",
js: "autorisationEngagementAnnule",
typ: ""
}, {
json: "creditPaiementAnnule",
js: "creditPaiementAnnule",
typ: ""
}, {
json: "action",
js: "action",
typ: r("Action")
}, {
json: "lignesCredits",
js: "lignesCredits",
typ: u(undefined, r("LigneCreditLignesCredits"))
}, {
json: "id",
js: "id",
typ: u(undefined, "")
}], false),
"Total": o([{
json: "supplementaire",
js: "supplementaire",
typ: ""
}, {
json: "annule",
js: "annule",
typ: ""
}, {
json: "solde",
js: "solde",
typ: ""
}], false),
"CycleDeVie": o([{
json: "dateDepot",
js: "dateDepot",
typ: u(r("AmendementParentRefClass"), Date)
}, {
json: "datePublication",
js: "datePublication",
typ: u(r("AmendementParentRefClass"), Date)
}, {
json: "soumisArticle40",
js: "soumisArticle40",
typ: ""
}, {
json: "etatDesTraitements",
js: "etatDesTraitements",
typ: r("EtatDESTraitements")
}, {
json: "dateSort",
js: "dateSort",
typ: u(r("AmendementParentRefClass"), Date)
}, {
json: "sort",
js: "sort",
typ: u(r("AmendementParentRefClass"), r("SortEnum"))
}], false),
"EtatDESTraitements": o([{
json: "etat",
js: "etat",
typ: r("Etat")
}, {
json: "sousEtat",
js: "sousEtat",
typ: r("SousEtat")
}], false),
"Etat": o([{
json: "code",
js: "code",
typ: r("Code")
}, {
json: "libelle",
js: "libelle",
typ: r("Libelle")
}], false),
"SousEtat": o([{
json: "code",
js: "code",
typ: u(undefined, r("Code"))
}, {
json: "libelle",
js: "libelle",
typ: u(undefined, r("SortEnum"))
}, {
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: u(undefined, "")
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: u(undefined, "")
}], false),
"Discussion": o([{
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: u(undefined, "")
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: u(undefined, "")
}, {
json: "idDiscussion",
js: "idDiscussion",
typ: u(undefined, "")
}, {
json: "typePosition",
js: "typePosition",
typ: u(undefined, r("TypePosition"))
}], false),
"Identification": o([{
json: "numeroLong",
js: "numeroLong",
typ: ""
}, {
json: "numeroOrdreDepot",
js: "numeroOrdreDepot",
typ: ""
}, {
json: "prefixeOrganeExamen",
js: "prefixeOrganeExamen",
typ: ""
}, {
json: "numeroRect",
js: "numeroRect",
typ: ""
}], false),
"LoiReference": o([{
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: u(undefined, "")
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: u(undefined, "")
}, {
json: "codeLoi",
js: "codeLoi",
typ: u(undefined, u(r("AmendementParentRefClass"), null, ""))
}, {
json: "divisionCodeLoi",
js: "divisionCodeLoi",
typ: u(undefined, u(r("AmendementParentRefClass"), null, ""))
}], false),
"PointeurFragmentTexte": o([{
json: "partieAmendableRef",
js: "partieAmendableRef",
typ: r("AmendementParentRefClass")
}, {
json: "division",
js: "division",
typ: u(undefined, r("Division"))
}, {
json: "amendementStandard",
js: "amendementStandard",
typ: u(undefined, r("AmendementStandard"))
}, {
json: "missionVisee",
js: "missionVisee",
typ: u(undefined, r("MissionVisee"))
}], false),
"AmendementStandard": o([{
json: "alinea",
js: "alinea",
typ: r("Alinea")
}], false),
"Alinea": o([{
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: u(undefined, "")
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: u(undefined, "")
}, {
json: "avant_A_Apres",
js: "avant_A_Apres",
typ: u(undefined, u(r("AmendementParentRefClass"), null, ""))
}, {
json: "numero",
js: "numero",
typ: u(undefined, u(r("AmendementParentRefClass"), ""))
}, {
json: "alineaDesignation",
js: "alineaDesignation",
typ: u(undefined, "")
}], false),
"Division": o([{
json: "titre",
js: "titre",
typ: u(null, "")
}, {
json: "articleDesignationCourte",
js: "articleDesignationCourte",
typ: u(null, "")
}, {
json: "articleDesignation",
js: "articleDesignation",
typ: u(null, "")
}, {
json: "type",
js: "type",
typ: r("DivisionType")
}, {
json: "avant_A_Apres",
js: "avant_A_Apres",
typ: r("AvantAApres")
}, {
json: "divisionRattachee",
js: "divisionRattachee",
typ: u(r("AmendementParentRefClass"), "")
}, {
json: "articleAdditionnel",
js: "articleAdditionnel",
typ: ""
}, {
json: "chapitreAdditionnel",
js: "chapitreAdditionnel",
typ: ""
}, {
json: "urlDivisionTexteVise",
js: "urlDivisionTexteVise",
typ: u(r("AmendementParentRefClass"), "")
}], false),
"MissionVisee": o([{
json: "codeEtat",
js: "codeEtat",
typ: r("CodeEtat")
}, {
json: "codeMissionMinefi",
js: "codeMissionMinefi",
typ: ""
}, {
json: "libelleMission",
js: "libelleMission",
typ: ""
}, {
json: "missionRef",
js: "missionRef",
typ: ""
}], false),
"Representations": o([{
json: "representation",
js: "representation",
typ: r("Representation")
}], false),
"Representation": o([{
json: "nom",
js: "nom",
typ: r("Nom")
}, {
json: "typeMime",
js: "typeMime",
typ: r("TypeMIME")
}, {
json: "statutRepresentation",
js: "statutRepresentation",
typ: r("StatutRepresentation")
}, {
json: "repSource",
js: "repSource",
typ: r("AmendementParentRefClass")
}, {
json: "offset",
js: "offset",
typ: r("AmendementParentRefClass")
}, {
json: "contenu",
js: "contenu",
typ: r("Contenu")
}, {
json: "dateDispoRepresentation",
js: "dateDispoRepresentation",
typ: r("AmendementParentRefClass")
}], false),
"Contenu": o([{
json: "documentURI",
js: "documentURI",
typ: ""
}], false),
"StatutRepresentation": o([{
json: "verbatim",
js: "verbatim",
typ: ""
}, {
json: "canonique",
js: "canonique",
typ: ""
}, {
json: "officielle",
js: "officielle",
typ: ""
}, {
json: "transcription",
js: "transcription",
typ: ""
}, {
json: "enregistrement",
js: "enregistrement",
typ: ""
}], false),
"TypeMIME": o([{
json: "type",
js: "type",
typ: r("TypeMIMEType")
}, {
json: "subType",
js: "subType",
typ: r("Nom")
}], false),
"Signataires": o([{
json: "auteur",
js: "auteur",
typ: r("Auteur")
}, {
json: "cosignataires",
js: "cosignataires",
typ: r("Cosignataires")
}, {
json: "suffixe",
js: "suffixe",
typ: u(r("AmendementParentRefClass"), "")
}, {
json: "libelle",
js: "libelle",
typ: u(null, "")
}], false),
"Auteur": o([{
json: "typeAuteur",
js: "typeAuteur",
typ: r("TypeAuteur")
}, {
json: "gouvernementRef",
js: "gouvernementRef",
typ: u(r("AmendementParentRefClass"), "")
}, {
json: "acteurRef",
js: "acteurRef",
typ: u(r("AmendementParentRefClass"), "")
}, {
json: "groupePolitiqueRef",
js: "groupePolitiqueRef",
typ: u(r("AmendementParentRefClass"), "")
}, {
json: "auteurRapporteurOrganeRef",
js: "auteurRapporteurOrganeRef",
typ: u(r("AmendementParentRefClass"), "")
}], false),
"Cosignataires": o([{
json: "@xmlns:xsi",
js: "@xmlns:xsi",
typ: u(undefined, "")
}, {
json: "@xsi:nil",
js: "@xsi:nil",
typ: u(undefined, "")
}, {
json: "acteurRef",
js: "acteurRef",
typ: u(undefined, u(a(""), ""))
}], false),
"AccordGouvernementDepotHorsDelai": ["Accord", "Sans objet"],
"Action": ["création", "modification", "suppression"],
"Code": ["AC", "AT", "DI", "effacé", "ER", "ET", "IR", "IRR127", "IRR20", "IRR37", "IRR38", "IRR41", "IRR42", "IRR45", "IRR48", "IRR53", "IRRAI", "IRRAIF", "IRRD", "IRRHC", "IRRHD", "IRRSA", "R", "RT", "T"],
"Libelle": ["A discuter", "A déposer", "Discuté", "effacé", "En recevabilité", "En traitement", "Irrecevable", "Irrecevable 40", "Retiré"],
"SortEnum": ["Adopté", "Autre irrecevabilité", "Autre irrecevabilité 40", "Autres irr LOLF", "Autres irr LOLFSS", "Cavalier (45)", "Cavalier budgétaire", "Cavalier social", "Champ de l'habilitation (38)", "Charge", "CMP (45)", "Crédits", "Disposition réglementaire (37)", "Domaine de la loi (41)", "Domaine loi organique (127)", "Doublon", "Entonnoir (45)", "Gage", "Hors champ", "Hors-délais", "Injonction (20)", "Irr en première partie", "Irr en seconde partie", "LOLF", "LOLFSS", "Non soutenu", "Ordre du jour (48)", "R", "Ratification traité (53)", "Rejeté", "Retiré", "Retiré après publication", "Retiré avant publication", "Satisfait ou inopérant (42)", "Sous-amendement (98)", "Tombé"],
"TypePosition": ["Dernier", "Milieu", "Premier"],
"AvantAApres": ["A", "Après", "Avant"],
"DivisionType": ["ANNEXE", "ARTICLE", "CHAPITRE", "TITRE"],
"CodeEtat": ["B", "C", "D"],
"Nom": ["PDF"],
"TypeMIMEType": ["application"],
"TypeAuteur": ["Député", "Gouvernement", "Rapporteur"]
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY2NvcmRHb3V2ZXJuZW1lbnREZXBvdEhvcnNEZWxhaSIsIkFjdGlvbiIsIkNvZGUiLCJMaWJlbGxlIiwiU29ydEVudW0iLCJUeXBlUG9zaXRpb24iLCJBdmFudEFBcHJlcyIsIkRpdmlzaW9uVHlwZSIsIkNvZGVFdGF0IiwiTm9tIiwiVHlwZU1JTUVUeXBlIiwiVHlwZUF1dGV1ciIsIkNvbnZlcnQiLCJ0b0FtZW5kZW1lbnRzIiwianNvbiIsImNhc3QiLCJKU09OIiwicGFyc2UiLCJyIiwiYW1lbmRlbWVudHNUb0pzb24iLCJ2YWx1ZSIsInN0cmluZ2lmeSIsInVuY2FzdCIsInRvVGV4dGVMZWdpc2xhdGlmIiwidGV4dGVMZWdpc2xhdGlmVG9Kc29uIiwidG9BbWVuZGVtZW50V3JhcHBlciIsImFtZW5kZW1lbnRXcmFwcGVyVG9Kc29uIiwiaW52YWxpZFZhbHVlIiwidHlwIiwidmFsIiwia2V5IiwiRXJyb3IiLCJqc29uVG9KU1Byb3BzIiwianNvblRvSlMiLCJ1bmRlZmluZWQiLCJtYXAiLCJwcm9wcyIsImZvckVhY2giLCJwIiwianMiLCJqc1RvSlNPTlByb3BzIiwianNUb0pTT04iLCJ0cmFuc2Zvcm0iLCJnZXRQcm9wcyIsInRyYW5zZm9ybVByaW1pdGl2ZSIsInRyYW5zZm9ybVVuaW9uIiwidHlwcyIsImwiLCJsZW5ndGgiLCJpIiwiXyIsInRyYW5zZm9ybUVudW0iLCJjYXNlcyIsImluZGV4T2YiLCJ0cmFuc2Zvcm1BcnJheSIsIkFycmF5IiwiaXNBcnJheSIsImVsIiwidHJhbnNmb3JtRGF0ZSIsImQiLCJEYXRlIiwiaXNOYU4iLCJ2YWx1ZU9mIiwidHJhbnNmb3JtT2JqZWN0IiwiYWRkaXRpb25hbCIsInJlc3VsdCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm9wIiwidiIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInJlZiIsInR5cGVNYXAiLCJ1bmlvbk1lbWJlcnMiLCJhcnJheUl0ZW1zIiwiYSIsInUiLCJvIiwibmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYXdfdHlwZXMvYW1lbmRlbWVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVG8gcGFyc2UgdGhpcyBkYXRhOlxuLy9cbi8vICAgaW1wb3J0IHsgQW1lbmRlbWVudHMsIEFtZW5kZW1lbnRXcmFwcGVyLCBDb252ZXJ0LCBUZXh0ZUxlZ2lzbGF0aWYgfSBmcm9tIFwiLi9maWxlXCI7XG4vL1xuLy8gICBjb25zdCBhbWVuZGVtZW50cyA9IENvbnZlcnQudG9BbWVuZGVtZW50cyhqc29uKTtcbi8vICAgY29uc3QgYW1lbmRlbWVudFdyYXBwZXIgPSBDb252ZXJ0LnRvQW1lbmRlbWVudFdyYXBwZXIoanNvbik7XG4vLyAgIGNvbnN0IHRleHRlTGVnaXNsYXRpZiA9IENvbnZlcnQudG9UZXh0ZUxlZ2lzbGF0aWYoanNvbik7XG4vL1xuLy8gVGhlc2UgZnVuY3Rpb25zIHdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIEpTT04gZG9lc24ndFxuLy8gbWF0Y2ggdGhlIGV4cGVjdGVkIGludGVyZmFjZSwgZXZlbiBpZiB0aGUgSlNPTiBpcyB2YWxpZC5cblxuZXhwb3J0IGludGVyZmFjZSBBbWVuZGVtZW50cyB7XG4gIHRleHRlc0xlZ2lzbGF0aWZzOiBUZXh0ZUxlZ2lzbGF0aWZbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRlTGVnaXNsYXRpZiB7XG4gICAgXCJAeG1sbnM6eHNpXCI6ICAgICAgIHN0cmluZztcbiAgICByZWZUZXh0ZUxlZ2lzbGF0aWY6IHN0cmluZztcbiAgICBhbWVuZGVtZW50czogICAgICAgIEFtZW5kZW1lbnRzQ2xhc3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1lbmRlbWVudHNDbGFzcyB7XG4gICAgYW1lbmRlbWVudDogQW1lbmRlbWVudFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtZW5kZW1lbnRXcmFwcGVyIHtcbiAgYW1lbmRlbWVudDogQW1lbmRlbWVudFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtZW5kZW1lbnQge1xuICAgIFwiQHhtbG5zXCI6ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZztcbiAgICB1aWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nO1xuICAgIGNocm9ub3RhZzogICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmc7XG4gICAgbGVnaXNsYXR1cmU6ICAgICAgICAgICAgICAgICAgICAgIHN0cmluZztcbiAgICBpZGVudGlmaWNhdGlvbjogICAgICAgICAgICAgICAgICAgSWRlbnRpZmljYXRpb247XG4gICAgZXhhbWVuUmVmOiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZztcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZSZWY6ICAgICAgICAgICAgICAgc3RyaW5nO1xuICAgIHRyaUFtZW5kZW1lbnQ6ICAgICAgICAgICAgICAgICAgICBBbWVuZGVtZW50UGFyZW50UmVmQ2xhc3MgfCBzdHJpbmc7XG4gICAgY2FyZGluYWxpdGVBbWR0TXVsdGlwbGVzOiAgICAgICAgIEFtZW5kZW1lbnRQYXJlbnRSZWZDbGFzcyB8IHN0cmluZztcbiAgICBhbWVuZGVtZW50UGFyZW50UmVmOiAgICAgICAgICAgICAgQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzIHwgc3RyaW5nO1xuICAgIHNpZ25hdGFpcmVzOiAgICAgICAgICAgICAgICAgICAgICBTaWduYXRhaXJlcztcbiAgICBwb2ludGV1ckZyYWdtZW50VGV4dGU6ICAgICAgICAgICAgUG9pbnRldXJGcmFnbWVudFRleHRlO1xuICAgIGNvcnBzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JwcztcbiAgICBjeWNsZURlVmllOiAgICAgICAgICAgICAgICAgICAgICAgQ3ljbGVEZVZpZTtcbiAgICByZXByZXNlbnRhdGlvbnM6ICAgICAgICAgICAgICAgICAgUmVwcmVzZW50YXRpb25zIHwgbnVsbDtcbiAgICBzZWFuY2VEaXNjdXNzaW9uUmVmOiAgICAgICAgICAgICAgQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzIHwgc3RyaW5nO1xuICAgIGFydGljbGU5OTogICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmc7XG4gICAgbG9pUmVmZXJlbmNlOiAgICAgICAgICAgICAgICAgICAgIExvaVJlZmVyZW5jZTtcbiAgICBkaXNjdXNzaW9uQ29tbXVuZTogICAgICAgICAgICAgICAgRGlzY3Vzc2lvbjtcbiAgICBkaXNjdXNzaW9uSWRlbnRpcXVlOiAgICAgICAgICAgICAgRGlzY3Vzc2lvbjtcbiAgICBhY2NvcmRHb3V2ZXJuZW1lbnREZXBvdEhvcnNEZWxhaTogQWNjb3JkR291dmVybmVtZW50RGVwb3RIb3JzRGVsYWk7XG59XG5cbmV4cG9ydCBlbnVtIEFjY29yZEdvdXZlcm5lbWVudERlcG90SG9yc0RlbGFpIHtcbiAgICBBY2NvcmQgPSBcIkFjY29yZFwiLFxuICAgIFNhbnNPYmpldCA9IFwiU2FucyBvYmpldFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtZW5kZW1lbnRQYXJlbnRSZWZDbGFzcyB7XG4gICAgXCJAeG1sbnM6eHNpXCI6IHN0cmluZztcbiAgICBcIkB4c2k6bmlsXCI6ICAgc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvcnBzIHtcbiAgICBjYXJ0b3VjaGVJbmZvcm1hdGlmPzogQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzIHwgc3RyaW5nO1xuICAgIGNvbnRlbnVBdXRldXI/OiAgICAgICBDb250ZW51QXV0ZXVyO1xuICAgIFwiQHhtbG5zOnhzaVwiPzogICAgICAgIHN0cmluZztcbiAgICBcIkB4c2k6bmlsXCI/OiAgICAgICAgICBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudUF1dGV1ciB7XG4gICAgZGlzcG9zaXRpZj86ICAgICAgICAgICAgICAgc3RyaW5nO1xuICAgIGF2YW50QXBwZWw/OiAgICAgICAgICAgICAgIEF2YW50QXBwZWw7XG4gICAgZXhwb3NlU29tbWFpcmU/OiAgICAgICAgICAgc3RyaW5nO1xuICAgIGFubmV4ZUV4cG9zZVNvbW1haXJlPzogICAgIEFtZW5kZW1lbnRQYXJlbnRSZWZDbGFzcztcbiAgICBcIkB4bWxuczp4c2lcIj86ICAgICAgICAgICAgIHN0cmluZztcbiAgICBcIkB4c2k6bmlsXCI/OiAgICAgICAgICAgICAgIHN0cmluZztcbiAgICBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRj86ICBEaXNwb3NpdGlmQW1kdENyZWRpdFBMRjtcbiAgICBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRlI/OiBEaXNwb3NpdGlmQW1kdENyZWRpdFBMRlI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXZhbnRBcHBlbCB7XG4gICAgXCJAeG1sbnM6eHNpXCI/OiBzdHJpbmc7XG4gICAgXCJAeHNpOm5pbFwiPzogICBzdHJpbmc7XG4gICAgZGlzcG9zaXRpZj86ICAgc3RyaW5nO1xuICAgIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGPzogIERpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGO1xuICAgIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGUj86IERpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGUjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNwb3NpdGlmQW1kdENyZWRpdFBMRiB7XG4gICAgbGlzdGVQcm9ncmFtbWVzPzogRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZMaXN0ZVByb2dyYW1tZXM7XG4gICAgc29sZGVBRT86ICAgICAgICAgc3RyaW5nO1xuICAgIHNvbGRlQ1A/OiAgICAgICAgIHN0cmluZztcbiAgICBjcEVnYWxBZTogICAgICAgICBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZMaXN0ZVByb2dyYW1tZXMge1xuICAgIHByb2dyYW1tZTogUHVycGxlUHJvZ3JhbW1lW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVycGxlUHJvZ3JhbW1lIHtcbiAgICBsaWJlbGxlOiAgICAgICAgICAgICAgICBzdHJpbmc7XG4gICAgcHJvZ3JhbW1lUmVmOiAgICAgICAgICAgc3RyaW5nO1xuICAgIGF1dG9yaXNhdGlvbkVuZ2FnZW1lbnQ6IHN0cmluZztcbiAgICBjcmVkaXRQYWllbWVudDogICAgICAgICBzdHJpbmc7XG4gICAgYWN0aW9uOiAgICAgICAgICAgICAgICAgQWN0aW9uO1xuICAgIGxpZ25lc0NyZWRpdHM6ICAgICAgICAgIFB1cnBsZUxpZ25lc0NyZWRpdHM7XG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvbiB7XG4gICAgQ3LDqWF0aW9uID0gXCJjcsOpYXRpb25cIixcbiAgICBNb2RpZmljYXRpb24gPSBcIm1vZGlmaWNhdGlvblwiLFxuICAgIFN1cHByZXNzaW9uID0gXCJzdXBwcmVzc2lvblwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1cnBsZUxpZ25lc0NyZWRpdHMge1xuICAgIFwiQHhtbG5zOnhzaVwiPzogc3RyaW5nO1xuICAgIFwiQHhzaTpuaWxcIj86ICAgc3RyaW5nO1xuICAgIGxpZ25lQ3JlZGl0PzogIExpZ25lQ3JlZGl0Q2xhc3NbXSB8IExpZ25lQ3JlZGl0Q2xhc3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlnbmVDcmVkaXRDbGFzcyB7XG4gICAgaWQ6ICAgICAgICAgICAgICAgICAgICAgc3RyaW5nO1xuICAgIGxpYmVsbGU6ICAgICAgICAgICAgICAgIHN0cmluZztcbiAgICBhdXRvcmlzYXRpb25FbmdhZ2VtZW50OiBzdHJpbmc7XG4gICAgY3JlZGl0UGFpZW1lbnQ6ICAgICAgICAgc3RyaW5nO1xuICAgIGFjdGlvbjogICAgICAgICAgICAgICAgIEFjdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNwb3NpdGlmQW1kdENyZWRpdFBMRlIge1xuICAgIGxpc3RlUHJvZ3JhbW1lcz86IERpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGUkxpc3RlUHJvZ3JhbW1lcztcbiAgICB0b3RhbEFFPzogICAgICAgICBUb3RhbDtcbiAgICB0b3RhbENQPzogICAgICAgICBUb3RhbDtcbiAgICBjcEVnYWxBZTogICAgICAgICBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSTGlzdGVQcm9ncmFtbWVzIHtcbiAgICBwcm9ncmFtbWU6IExpZ25lQ3JlZGl0RWxlbWVudFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpZ25lQ3JlZGl0TGlnbmVzQ3JlZGl0cyB7XG4gICAgXCJAeG1sbnM6eHNpXCI/OiBzdHJpbmc7XG4gICAgXCJAeHNpOm5pbFwiPzogICBzdHJpbmc7XG4gICAgbGlnbmVDcmVkaXQ/OiAgTGlnbmVDcmVkaXRFbGVtZW50W10gfCBMaWduZUNyZWRpdEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlnbmVDcmVkaXRFbGVtZW50IHtcbiAgICBsaWJlbGxlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZztcbiAgICBwcm9ncmFtbWVSZWY/OiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZztcbiAgICBhdXRvcmlzYXRpb25FbmdhZ2VtZW50U3VwcGxlbWVudGFpcmU6IHN0cmluZztcbiAgICBjcmVkaXRQYWllbWVudFN1cHBsZW1lbnRhaXJlOiAgICAgICAgIHN0cmluZztcbiAgICBhdXRvcmlzYXRpb25FbmdhZ2VtZW50QW5udWxlOiAgICAgICAgIHN0cmluZztcbiAgICBjcmVkaXRQYWllbWVudEFubnVsZTogICAgICAgICAgICAgICAgIHN0cmluZztcbiAgICBhY3Rpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjtcbiAgICBsaWduZXNDcmVkaXRzPzogICAgICAgICAgICAgICAgICAgICAgIExpZ25lQ3JlZGl0TGlnbmVzQ3JlZGl0cztcbiAgICBpZD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3RhbCB7XG4gICAgc3VwcGxlbWVudGFpcmU6IHN0cmluZztcbiAgICBhbm51bGU6ICAgICAgICAgc3RyaW5nO1xuICAgIHNvbGRlOiAgICAgICAgICBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3ljbGVEZVZpZSB7XG4gICAgZGF0ZURlcG90OiAgICAgICAgICBBbWVuZGVtZW50UGFyZW50UmVmQ2xhc3MgfCBEYXRlO1xuICAgIGRhdGVQdWJsaWNhdGlvbjogICAgQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzIHwgRGF0ZTtcbiAgICBzb3VtaXNBcnRpY2xlNDA6ICAgIHN0cmluZztcbiAgICBldGF0RGVzVHJhaXRlbWVudHM6IEV0YXRERVNUcmFpdGVtZW50cztcbiAgICBkYXRlU29ydDogICAgICAgICAgIEFtZW5kZW1lbnRQYXJlbnRSZWZDbGFzcyB8IERhdGU7XG4gICAgc29ydDogICAgICAgICAgICAgICBBbWVuZGVtZW50UGFyZW50UmVmQ2xhc3MgfCBTb3J0RW51bTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdGF0REVTVHJhaXRlbWVudHMge1xuICAgIGV0YXQ6ICAgICBFdGF0O1xuICAgIHNvdXNFdGF0OiBTb3VzRXRhdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdGF0IHtcbiAgICBjb2RlOiAgICBDb2RlO1xuICAgIGxpYmVsbGU6IExpYmVsbGU7XG59XG5cbmV4cG9ydCBlbnVtIENvZGUge1xuICAgIEFDID0gXCJBQ1wiLFxuICAgIEF0ID0gXCJBVFwiLFxuICAgIERpID0gXCJESVwiLFxuICAgIEVmZmFjw6kgPSBcImVmZmFjw6lcIixcbiAgICBFciA9IFwiRVJcIixcbiAgICBFdCA9IFwiRVRcIixcbiAgICBJUiA9IFwiSVJcIixcbiAgICBJcnIxMjcgPSBcIklSUjEyN1wiLFxuICAgIElycjIwID0gXCJJUlIyMFwiLFxuICAgIElycjM3ID0gXCJJUlIzN1wiLFxuICAgIElycjM4ID0gXCJJUlIzOFwiLFxuICAgIElycjQxID0gXCJJUlI0MVwiLFxuICAgIElycjQyID0gXCJJUlI0MlwiLFxuICAgIElycjQ1ID0gXCJJUlI0NVwiLFxuICAgIElycjQ4ID0gXCJJUlI0OFwiLFxuICAgIElycjUzID0gXCJJUlI1M1wiLFxuICAgIElycmFpID0gXCJJUlJBSVwiLFxuICAgIElycmFpZiA9IFwiSVJSQUlGXCIsXG4gICAgSXJyZCA9IFwiSVJSRFwiLFxuICAgIElycmhjID0gXCJJUlJIQ1wiLFxuICAgIElycmhkID0gXCJJUlJIRFwiLFxuICAgIElycnNhID0gXCJJUlJTQVwiLFxuICAgIFIgPSBcIlJcIixcbiAgICBSdCA9IFwiUlRcIixcbiAgICBUID0gXCJUXCIsXG59XG5cbmV4cG9ydCBlbnVtIExpYmVsbGUge1xuICAgIEFEaXNjdXRlciA9IFwiQSBkaXNjdXRlclwiLFxuICAgIEFEw6lwb3NlciA9IFwiQSBkw6lwb3NlclwiLFxuICAgIERpc2N1dMOpID0gXCJEaXNjdXTDqVwiLFxuICAgIEVmZmFjw6kgPSBcImVmZmFjw6lcIixcbiAgICBFblJlY2V2YWJpbGl0w6kgPSBcIkVuIHJlY2V2YWJpbGl0w6lcIixcbiAgICBFblRyYWl0ZW1lbnQgPSBcIkVuIHRyYWl0ZW1lbnRcIixcbiAgICBJcnJlY2V2YWJsZSA9IFwiSXJyZWNldmFibGVcIixcbiAgICBJcnJlY2V2YWJsZTQwID0gXCJJcnJlY2V2YWJsZSA0MFwiLFxuICAgIFJldGlyw6kgPSBcIlJldGlyw6lcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb3VzRXRhdCB7XG4gICAgY29kZT86ICAgICAgICAgQ29kZTtcbiAgICBsaWJlbGxlPzogICAgICBTb3J0RW51bTtcbiAgICBcIkB4bWxuczp4c2lcIj86IHN0cmluZztcbiAgICBcIkB4c2k6bmlsXCI/OiAgIHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gU29ydEVudW0ge1xuICAgIEFkb3B0w6kgPSBcIkFkb3B0w6lcIixcbiAgICBBdXRyZUlycmVjZXZhYmlsaXTDqSA9IFwiQXV0cmUgaXJyZWNldmFiaWxpdMOpXCIsXG4gICAgQXV0cmVJcnJlY2V2YWJpbGl0w6k0MCA9IFwiQXV0cmUgaXJyZWNldmFiaWxpdMOpIDQwXCIsXG4gICAgQXV0cmVzSXJyTE9MRiA9IFwiQXV0cmVzIGlyciBMT0xGXCIsXG4gICAgQXV0cmVzSXJyTE9MRlNTID0gXCJBdXRyZXMgaXJyIExPTEZTU1wiLFxuICAgIENhdmFsaWVyNDUgPSBcIkNhdmFsaWVyICg0NSlcIixcbiAgICBDYXZhbGllckJ1ZGfDqXRhaXJlID0gXCJDYXZhbGllciBidWRnw6l0YWlyZVwiLFxuICAgIENhdmFsaWVyU29jaWFsID0gXCJDYXZhbGllciBzb2NpYWxcIixcbiAgICBDaGFtcERlTEhhYmlsaXRhdGlvbjM4ID0gXCJDaGFtcCBkZSBsJ2hhYmlsaXRhdGlvbiAoMzgpXCIsXG4gICAgQ2hhcmdlID0gXCJDaGFyZ2VcIixcbiAgICBDbXA0NSA9IFwiQ01QICg0NSlcIixcbiAgICBDcsOpZGl0cyA9IFwiQ3LDqWRpdHNcIixcbiAgICBEaXNwb3NpdGlvblLDqWdsZW1lbnRhaXJlMzcgPSBcIkRpc3Bvc2l0aW9uIHLDqWdsZW1lbnRhaXJlICgzNylcIixcbiAgICBEb21haW5lRGVMYUxvaTQxID0gXCJEb21haW5lIGRlIGxhIGxvaSAoNDEpXCIsXG4gICAgRG9tYWluZUxvaU9yZ2FuaXF1ZTEyNyA9IFwiRG9tYWluZSBsb2kgb3JnYW5pcXVlICgxMjcpXCIsXG4gICAgRG91YmxvbiA9IFwiRG91YmxvblwiLFxuICAgIEVudG9ubm9pcjQ1ID0gXCJFbnRvbm5vaXIgKDQ1KVwiLFxuICAgIEdhZ2UgPSBcIkdhZ2VcIixcbiAgICBIb3JzQ2hhbXAgPSBcIkhvcnMgY2hhbXBcIixcbiAgICBIb3JzRMOpbGFpcyA9IFwiSG9ycy1kw6lsYWlzXCIsXG4gICAgSW5qb25jdGlvbjIwID0gXCJJbmpvbmN0aW9uICgyMClcIixcbiAgICBJcnJFblByZW1pw6hyZVBhcnRpZSA9IFwiSXJyIGVuIHByZW1pw6hyZSBwYXJ0aWVcIixcbiAgICBJcnJFblNlY29uZGVQYXJ0aWUgPSBcIklyciBlbiBzZWNvbmRlIHBhcnRpZVwiLFxuICAgIExvbGYgPSBcIkxPTEZcIixcbiAgICBMb2xmc3MgPSBcIkxPTEZTU1wiLFxuICAgIE5vblNvdXRlbnUgPSBcIk5vbiBzb3V0ZW51XCIsXG4gICAgT3JkcmVEdUpvdXI0OCA9IFwiT3JkcmUgZHUgam91ciAoNDgpXCIsXG4gICAgUiA9IFwiUlwiLFxuICAgIFJhdGlmaWNhdGlvblRyYWl0w6k1MyA9IFwiUmF0aWZpY2F0aW9uIHRyYWl0w6kgKDUzKVwiLFxuICAgIFJlamV0w6kgPSBcIlJlamV0w6lcIixcbiAgICBSZXRpcsOpID0gXCJSZXRpcsOpXCIsXG4gICAgUmV0aXLDqUFwcsOoc1B1YmxpY2F0aW9uID0gXCJSZXRpcsOpIGFwcsOocyBwdWJsaWNhdGlvblwiLFxuICAgIFJldGlyw6lBdmFudFB1YmxpY2F0aW9uID0gXCJSZXRpcsOpIGF2YW50IHB1YmxpY2F0aW9uXCIsXG4gICAgU2F0aXNmYWl0T3VJbm9ww6lyYW50NDIgPSBcIlNhdGlzZmFpdCBvdSBpbm9ww6lyYW50ICg0MilcIixcbiAgICBTb3VzQW1lbmRlbWVudDk4ID0gXCJTb3VzLWFtZW5kZW1lbnQgKDk4KVwiLFxuICAgIFRvbWLDqSA9IFwiVG9tYsOpXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY3Vzc2lvbiB7XG4gICAgXCJAeG1sbnM6eHNpXCI/OiBzdHJpbmc7XG4gICAgXCJAeHNpOm5pbFwiPzogICBzdHJpbmc7XG4gICAgaWREaXNjdXNzaW9uPzogc3RyaW5nO1xuICAgIHR5cGVQb3NpdGlvbj86IFR5cGVQb3NpdGlvbjtcbn1cblxuZXhwb3J0IGVudW0gVHlwZVBvc2l0aW9uIHtcbiAgICBEZXJuaWVyID0gXCJEZXJuaWVyXCIsXG4gICAgTWlsaWV1ID0gXCJNaWxpZXVcIixcbiAgICBQcmVtaWVyID0gXCJQcmVtaWVyXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpZmljYXRpb24ge1xuICAgIG51bWVyb0xvbmc6ICAgICAgICAgIHN0cmluZztcbiAgICBudW1lcm9PcmRyZURlcG90OiAgICBzdHJpbmc7XG4gICAgcHJlZml4ZU9yZ2FuZUV4YW1lbjogc3RyaW5nO1xuICAgIG51bWVyb1JlY3Q6ICAgICAgICAgIHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2lSZWZlcmVuY2Uge1xuICAgIFwiQHhtbG5zOnhzaVwiPzogICAgc3RyaW5nO1xuICAgIFwiQHhzaTpuaWxcIj86ICAgICAgc3RyaW5nO1xuICAgIGNvZGVMb2k/OiAgICAgICAgIEFtZW5kZW1lbnRQYXJlbnRSZWZDbGFzcyB8IG51bGwgfCBzdHJpbmc7XG4gICAgZGl2aXNpb25Db2RlTG9pPzogQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzIHwgbnVsbCB8IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb2ludGV1ckZyYWdtZW50VGV4dGUge1xuICAgIHBhcnRpZUFtZW5kYWJsZVJlZjogIEFtZW5kZW1lbnRQYXJlbnRSZWZDbGFzcztcbiAgICBkaXZpc2lvbj86ICAgICAgICAgICBEaXZpc2lvbjtcbiAgICBhbWVuZGVtZW50U3RhbmRhcmQ/OiBBbWVuZGVtZW50U3RhbmRhcmQ7XG4gICAgbWlzc2lvblZpc2VlPzogICAgICAgTWlzc2lvblZpc2VlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtZW5kZW1lbnRTdGFuZGFyZCB7XG4gICAgYWxpbmVhOiBBbGluZWE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxpbmVhIHtcbiAgICBcIkB4bWxuczp4c2lcIj86ICAgICAgc3RyaW5nO1xuICAgIFwiQHhzaTpuaWxcIj86ICAgICAgICBzdHJpbmc7XG4gICAgYXZhbnRfQV9BcHJlcz86ICAgICBBbWVuZGVtZW50UGFyZW50UmVmQ2xhc3MgfCBudWxsIHwgc3RyaW5nO1xuICAgIG51bWVybz86ICAgICAgICAgICAgQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzIHwgc3RyaW5nO1xuICAgIGFsaW5lYURlc2lnbmF0aW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpdmlzaW9uIHtcbiAgICB0aXRyZTogICAgICAgICAgICAgICAgICAgIG51bGwgfCBzdHJpbmc7XG4gICAgYXJ0aWNsZURlc2lnbmF0aW9uQ291cnRlOiBudWxsIHwgc3RyaW5nO1xuICAgIGFydGljbGVEZXNpZ25hdGlvbjogICAgICAgbnVsbCB8IHN0cmluZztcbiAgICB0eXBlOiAgICAgICAgICAgICAgICAgICAgIERpdmlzaW9uVHlwZTtcbiAgICBhdmFudF9BX0FwcmVzOiAgICAgICAgICAgIEF2YW50QUFwcmVzO1xuICAgIGRpdmlzaW9uUmF0dGFjaGVlOiAgICAgICAgQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzIHwgc3RyaW5nO1xuICAgIGFydGljbGVBZGRpdGlvbm5lbDogICAgICAgc3RyaW5nO1xuICAgIGNoYXBpdHJlQWRkaXRpb25uZWw6ICAgICAgc3RyaW5nO1xuICAgIHVybERpdmlzaW9uVGV4dGVWaXNlOiAgICAgQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBBdmFudEFBcHJlcyB7XG4gICAgQSA9IFwiQVwiLFxuICAgIEFwcsOocyA9IFwiQXByw6hzXCIsXG4gICAgQXZhbnQgPSBcIkF2YW50XCIsXG59XG5cbmV4cG9ydCBlbnVtIERpdmlzaW9uVHlwZSB7XG4gICAgQW5uZXhlID0gXCJBTk5FWEVcIixcbiAgICBBcnRpY2xlID0gXCJBUlRJQ0xFXCIsXG4gICAgQ2hhcGl0cmUgPSBcIkNIQVBJVFJFXCIsXG4gICAgVGl0cmUgPSBcIlRJVFJFXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlzc2lvblZpc2VlIHtcbiAgICBjb2RlRXRhdDogICAgICAgICAgQ29kZUV0YXQ7XG4gICAgY29kZU1pc3Npb25NaW5lZmk6IHN0cmluZztcbiAgICBsaWJlbGxlTWlzc2lvbjogICAgc3RyaW5nO1xuICAgIG1pc3Npb25SZWY6ICAgICAgICBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIENvZGVFdGF0IHtcbiAgICBCID0gXCJCXCIsXG4gICAgQyA9IFwiQ1wiLFxuICAgIEQgPSBcIkRcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXByZXNlbnRhdGlvbnMge1xuICAgIHJlcHJlc2VudGF0aW9uOiBSZXByZXNlbnRhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXByZXNlbnRhdGlvbiB7XG4gICAgbm9tOiAgICAgICAgICAgICAgICAgICAgIE5vbTtcbiAgICB0eXBlTWltZTogICAgICAgICAgICAgICAgVHlwZU1JTUU7XG4gICAgc3RhdHV0UmVwcmVzZW50YXRpb246ICAgIFN0YXR1dFJlcHJlc2VudGF0aW9uO1xuICAgIHJlcFNvdXJjZTogICAgICAgICAgICAgICBBbWVuZGVtZW50UGFyZW50UmVmQ2xhc3M7XG4gICAgb2Zmc2V0OiAgICAgICAgICAgICAgICAgIEFtZW5kZW1lbnRQYXJlbnRSZWZDbGFzcztcbiAgICBjb250ZW51OiAgICAgICAgICAgICAgICAgQ29udGVudTtcbiAgICBkYXRlRGlzcG9SZXByZXNlbnRhdGlvbjogQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnUge1xuICAgIGRvY3VtZW50VVJJOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIE5vbSB7XG4gICAgUERGID0gXCJQREZcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0dXRSZXByZXNlbnRhdGlvbiB7XG4gICAgdmVyYmF0aW06ICAgICAgIHN0cmluZztcbiAgICBjYW5vbmlxdWU6ICAgICAgc3RyaW5nO1xuICAgIG9mZmljaWVsbGU6ICAgICBzdHJpbmc7XG4gICAgdHJhbnNjcmlwdGlvbjogIHN0cmluZztcbiAgICBlbnJlZ2lzdHJlbWVudDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVNSU1FIHtcbiAgICB0eXBlOiAgICBUeXBlTUlNRVR5cGU7XG4gICAgc3ViVHlwZTogTm9tO1xufVxuXG5leHBvcnQgZW51bSBUeXBlTUlNRVR5cGUge1xuICAgIEFwcGxpY2F0aW9uID0gXCJhcHBsaWNhdGlvblwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hdGFpcmVzIHtcbiAgICBhdXRldXI6ICAgICAgICBBdXRldXI7XG4gICAgY29zaWduYXRhaXJlczogQ29zaWduYXRhaXJlcztcbiAgICBzdWZmaXhlOiAgICAgICBBbWVuZGVtZW50UGFyZW50UmVmQ2xhc3MgfCBzdHJpbmc7XG4gICAgbGliZWxsZTogICAgICAgbnVsbCB8IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRldXIge1xuICAgIHR5cGVBdXRldXI6ICAgICAgICAgICAgICAgIFR5cGVBdXRldXI7XG4gICAgZ291dmVybmVtZW50UmVmOiAgICAgICAgICAgQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzIHwgc3RyaW5nO1xuICAgIGFjdGV1clJlZjogICAgICAgICAgICAgICAgIEFtZW5kZW1lbnRQYXJlbnRSZWZDbGFzcyB8IHN0cmluZztcbiAgICBncm91cGVQb2xpdGlxdWVSZWY6ICAgICAgICBBbWVuZGVtZW50UGFyZW50UmVmQ2xhc3MgfCBzdHJpbmc7XG4gICAgYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZVJlZjogQW1lbmRlbWVudFBhcmVudFJlZkNsYXNzIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBUeXBlQXV0ZXVyIHtcbiAgICBEw6lwdXTDqSA9IFwiRMOpcHV0w6lcIixcbiAgICBHb3V2ZXJuZW1lbnQgPSBcIkdvdXZlcm5lbWVudFwiLFxuICAgIFJhcHBvcnRldXIgPSBcIlJhcHBvcnRldXJcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb3NpZ25hdGFpcmVzIHtcbiAgICBcIkB4bWxuczp4c2lcIj86IHN0cmluZztcbiAgICBcIkB4c2k6bmlsXCI/OiAgIHN0cmluZztcbiAgICBhY3RldXJSZWY/OiAgICBzdHJpbmdbXSB8IHN0cmluZztcbn1cblxuLy8gQ29udmVydHMgSlNPTiBzdHJpbmdzIHRvL2Zyb20geW91ciB0eXBlc1xuLy8gYW5kIGFzc2VydHMgdGhlIHJlc3VsdHMgb2YgSlNPTi5wYXJzZSBhdCBydW50aW1lXG5leHBvcnQgY2xhc3MgQ29udmVydCB7XG4gICAgcHVibGljIHN0YXRpYyB0b0FtZW5kZW1lbnRzKGpzb246IHN0cmluZyk6IEFtZW5kZW1lbnRzIHtcbiAgICAgICAgcmV0dXJuIGNhc3QoSlNPTi5wYXJzZShqc29uKSwgcihcIkFtZW5kZW1lbnRzXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFtZW5kZW1lbnRzVG9Kc29uKHZhbHVlOiBBbWVuZGVtZW50cyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh1bmNhc3QodmFsdWUsIHIoXCJBbWVuZGVtZW50c1wiKSksIG51bGwsIDIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdG9UZXh0ZUxlZ2lzbGF0aWYoanNvbjogc3RyaW5nKTogVGV4dGVMZWdpc2xhdGlmIHtcbiAgICAgICAgcmV0dXJuIGNhc3QoSlNPTi5wYXJzZShqc29uKSwgcihcIlRleHRlTGVnaXNsYXRpZlwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB0ZXh0ZUxlZ2lzbGF0aWZUb0pzb24odmFsdWU6IFRleHRlTGVnaXNsYXRpZik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh1bmNhc3QodmFsdWUsIHIoXCJUZXh0ZUxlZ2lzbGF0aWZcIikpLCBudWxsLCAyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHRvQW1lbmRlbWVudFdyYXBwZXIoanNvbjogc3RyaW5nKTogQW1lbmRlbWVudFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gY2FzdChKU09OLnBhcnNlKGpzb24pLCByKFwiQW1lbmRlbWVudFdyYXBwZXJcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYW1lbmRlbWVudFdyYXBwZXJUb0pzb24odmFsdWU6IEFtZW5kZW1lbnRXcmFwcGVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHVuY2FzdCh2YWx1ZSwgcihcIkFtZW5kZW1lbnRXcmFwcGVyXCIpKSwgbnVsbCwgMik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbnZhbGlkVmFsdWUodHlwOiBhbnksIHZhbDogYW55LCBrZXk6IGFueSA9ICcnKTogbmV2ZXIge1xuICAgIGlmIChrZXkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiLiBFeHBlY3RlZCB0eXBlICR7SlNPTi5zdHJpbmdpZnkodHlwKX0gYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbCl9YCk7XG4gICAgfVxuICAgIHRocm93IEVycm9yKGBJbnZhbGlkIHZhbHVlICR7SlNPTi5zdHJpbmdpZnkodmFsKX0gZm9yIHR5cGUgJHtKU09OLnN0cmluZ2lmeSh0eXApfWAsICk7XG59XG5cbmZ1bmN0aW9uIGpzb25Ub0pTUHJvcHModHlwOiBhbnkpOiBhbnkge1xuICAgIGlmICh0eXAuanNvblRvSlMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBtYXA6IGFueSA9IHt9O1xuICAgICAgICB0eXAucHJvcHMuZm9yRWFjaCgocDogYW55KSA9PiBtYXBbcC5qc29uXSA9IHsga2V5OiBwLmpzLCB0eXA6IHAudHlwIH0pO1xuICAgICAgICB0eXAuanNvblRvSlMgPSBtYXA7XG4gICAgfVxuICAgIHJldHVybiB0eXAuanNvblRvSlM7XG59XG5cbmZ1bmN0aW9uIGpzVG9KU09OUHJvcHModHlwOiBhbnkpOiBhbnkge1xuICAgIGlmICh0eXAuanNUb0pTT04gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBtYXA6IGFueSA9IHt9O1xuICAgICAgICB0eXAucHJvcHMuZm9yRWFjaCgocDogYW55KSA9PiBtYXBbcC5qc10gPSB7IGtleTogcC5qc29uLCB0eXA6IHAudHlwIH0pO1xuICAgICAgICB0eXAuanNUb0pTT04gPSBtYXA7XG4gICAgfVxuICAgIHJldHVybiB0eXAuanNUb0pTT047XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybSh2YWw6IGFueSwgdHlwOiBhbnksIGdldFByb3BzOiBhbnksIGtleTogYW55ID0gJycpOiBhbnkge1xuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybVByaW1pdGl2ZSh0eXA6IHN0cmluZywgdmFsOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodHlwZW9mIHR5cCA9PT0gdHlwZW9mIHZhbCkgcmV0dXJuIHZhbDtcbiAgICAgICAgcmV0dXJuIGludmFsaWRWYWx1ZSh0eXAsIHZhbCwga2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1Vbmlvbih0eXBzOiBhbnlbXSwgdmFsOiBhbnkpOiBhbnkge1xuICAgICAgICAvLyB2YWwgbXVzdCB2YWxpZGF0ZSBhZ2FpbnN0IG9uZSB0eXAgaW4gdHlwc1xuICAgICAgICBjb25zdCBsID0gdHlwcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0eXAgPSB0eXBzW2ldO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtKHZhbCwgdHlwLCBnZXRQcm9wcyk7XG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwcywgdmFsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1FbnVtKGNhc2VzOiBzdHJpbmdbXSwgdmFsOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAoY2FzZXMuaW5kZXhPZih2YWwpICE9PSAtMSkgcmV0dXJuIHZhbDtcbiAgICAgICAgcmV0dXJuIGludmFsaWRWYWx1ZShjYXNlcywgdmFsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1BcnJheSh0eXA6IGFueSwgdmFsOiBhbnkpOiBhbnkge1xuICAgICAgICAvLyB2YWwgbXVzdCBiZSBhbiBhcnJheSB3aXRoIG5vIGludmFsaWQgZWxlbWVudHNcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBpbnZhbGlkVmFsdWUoXCJhcnJheVwiLCB2YWwpO1xuICAgICAgICByZXR1cm4gdmFsLm1hcChlbCA9PiB0cmFuc2Zvcm0oZWwsIHR5cCwgZ2V0UHJvcHMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRlKHZhbDogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbCk7XG4gICAgICAgIGlmIChpc05hTihkLnZhbHVlT2YoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUoXCJEYXRlXCIsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtT2JqZWN0KHByb3BzOiB7IFtrOiBzdHJpbmddOiBhbnkgfSwgYWRkaXRpb25hbDogYW55LCB2YWw6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUoXCJvYmplY3RcIiwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW2tleV07XG4gICAgICAgICAgICBjb25zdCB2ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbCwga2V5KSA/IHZhbFtrZXldIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVzdWx0W3Byb3Aua2V5XSA9IHRyYW5zZm9ybSh2LCBwcm9wLnR5cCwgZ2V0UHJvcHMsIHByb3Aua2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHRyYW5zZm9ybSh2YWxba2V5XSwgYWRkaXRpb25hbCwgZ2V0UHJvcHMsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmICh0eXAgPT09IFwiYW55XCIpIHJldHVybiB2YWw7XG4gICAgaWYgKHR5cCA9PT0gbnVsbCkge1xuICAgICAgICBpZiAodmFsID09PSBudWxsKSByZXR1cm4gdmFsO1xuICAgICAgICByZXR1cm4gaW52YWxpZFZhbHVlKHR5cCwgdmFsKTtcbiAgICB9XG4gICAgaWYgKHR5cCA9PT0gZmFsc2UpIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwpO1xuICAgIHdoaWxlICh0eXBlb2YgdHlwID09PSBcIm9iamVjdFwiICYmIHR5cC5yZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0eXAgPSB0eXBlTWFwW3R5cC5yZWZdO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXApKSByZXR1cm4gdHJhb