UNPKG

@tricoteuses/assemblee

Version:

Retrieve, clean up & handle French Assemblée nationale's open data

208 lines 26.7 kB
import { uncapitalizeFirstLetter } from "./strings.mjs"; import { CodeTypeOrgane } from "./types/acteurs_et_organes.mjs"; export let FinalStatus = /*#__PURE__*/function (FinalStatus) { FinalStatus["Failure"] = "FAILURE"; FinalStatus["Success"] = "SUCCESS"; return FinalStatus; }({}); export let StatusOnly = /*#__PURE__*/function (StatusOnly) { StatusOnly["Failure"] = "FAILURE"; StatusOnly["InProgress"] = "IN_PROGRESS"; StatusOnly["Success"] = "SUCCESS"; return StatusOnly; }({}); export function commissionFondUidFromDossier(dossier) { if (dossier.actesLegislatifs !== undefined) { for (const acte of walkActes(dossier.actesLegislatifs)) { if (acte.codeActe.match(/^AN.*-COM-FOND-SAISIE$/) !== null && acte.organeRef !== undefined && acte.organeRef !== "PO211494" // Commission des finances du SÉNAT (=> erreur) ) { return acte.organeRef; } } } return undefined; } export function statusFromCodierLibelle(libelle) { switch (libelle) { case "Accord": case "adopté": case "adopté, dans les conditions prévues à l'article 45, alinéa 3," + " de la Constitution": case "adoptée": case "adopté sans modification": case "adoptée sans modification": case "Conforme": case "considérée comme définitive en application de l'article 151-7 du Règlement": case "considérée comme définitive en application de l'article 151-9 du Règlement": case "Motion adopté(e)": return StatusOnly.Success; case "Désaccord": case "Motion rejeté(e)": case "rejeté": case "rejetée": return StatusOnly.Failure; case "adopté avec modifications": case "adoptée avec modifications": case "De droit (article 61 alinéa 1 de la Constitution)": case "modifié": case "modifiée": case "Motion de censure 49-2": case "Partiellement conforme": return StatusOnly.InProgress; case "Soixante députés au moins": case "Soixante sénateurs au moins": return CodeTypeOrgane.Constitu; default: return StatusOnly.InProgress; } } export function stateFromActePath(dossier, actePath) { const leafActe = actePath[actePath.length - 1]; let libelle = null; switch (leafActe.xsiType) { case "Adoption_Europe_Type": libelle = leafActe.statutAdoption.libelle; return { currentStatus: statusFromCodierLibelle(libelle), label: uncapitalizeFirstLetter(libelle) }; case "ConclusionEtapeCC_Type": libelle = leafActe.statutConclusion.libelle; return { currentStatus: statusFromCodierLibelle(libelle), label: uncapitalizeFirstLetter(libelle) }; case "Decision_Type": { libelle = leafActe.statutConclusion.libelle; let currentStatus = statusFromCodierLibelle(libelle); let finalStatus = undefined; switch (dossier.procedureParlementaire.code) { case "PROCEDURE_PARLEMENTAIRE_2": // Proposition de loi ordinaire // Not sure for other cases => To improve. if (["rejeté", "rejetée"].includes(libelle) && dossier.actesLegislatifs !== undefined && dossier.actesLegislatifs.length === 1) { finalStatus = FinalStatus.Failure; } break; case "PROCEDURE_PARLEMENTAIRE_8": // Résolution case "PROCEDURE_PARLEMENTAIRE_22": // Résolution Article 34-1 if (currentStatus === StatusOnly.Success) { finalStatus = FinalStatus.Success; } else if (currentStatus === StatusOnly.Failure) { finalStatus = FinalStatus.Failure; } break; default: break; } return { currentStatus, finalStatus, label: uncapitalizeFirstLetter(libelle) }; } case "DecisionMotionCensure_Type": libelle = leafActe.decision.libelle; return { currentStatus: statusFromCodierLibelle(libelle), finalStatus: // Not sure for other cases => To improve. // Engagement de la responsabilité gouvernementale dossier.procedureParlementaire.code === "PROCEDURE_PARLEMENTAIRE_13" && libelle === "Motion rejeté(e)" ? FinalStatus.Failure : FinalStatus.Success, // TODO: Not sure of this `true` value label: uncapitalizeFirstLetter(libelle) }; case "DecisionRecevabiliteBureau_Type": libelle = leafActe.decision.libelle; return { currentStatus: statusFromCodierLibelle(libelle), label: uncapitalizeFirstLetter(libelle) }; case "DeclarationGouvernement_Type": libelle = leafActe.typeDeclaration.libelle; return { currentStatus: statusFromCodierLibelle(libelle), label: uncapitalizeFirstLetter(libelle) }; case "DepotMotionCensure_Type": libelle = leafActe.typeMotionCensure.libelle; return { currentStatus: statusFromCodierLibelle(libelle), label: uncapitalizeFirstLetter(libelle) }; case "DepotRapport_Type": if (["DossierCommissionEnquete_Type", "DossierMissionControle_Type", "DossierMissionInformation_Type"].includes(dossier.xsiType)) { return { currentStatus: actePath[0].organe.codeType, finalStatus: FinalStatus.Success, label: "rapport déposé" }; } return null; case "MotionProcedure_Type": libelle = leafActe.typeMotion.libelle; return { currentStatus: statusFromCodierLibelle(libelle), label: uncapitalizeFirstLetter(libelle) }; case "Promulgation_Type": return { currentStatus: StatusOnly.Success, finalStatus: FinalStatus.Success, label: "promulgué" }; case "RetraitInitiative_Type": return { currentStatus: StatusOnly.Failure, finalStatus: FinalStatus.Failure, label: "retiré" }; case "SaisineConseilConstit_Type": libelle = leafActe.casSaisine.libelle; return { currentStatus: statusFromCodierLibelle(libelle), label: uncapitalizeFirstLetter(libelle) }; default: // This acte gives no status. return null; } } export function stateFromActes(dossier, actePath, actes) { if (actes !== undefined) { for (const acte of [...actes].reverse()) { const status = acte.actesLegislatifs ? stateFromActes(dossier, [...actePath, acte], acte.actesLegislatifs) : stateFromActePath(dossier, [...actePath, acte]); if (status !== null) { return status; } // No status found, continue with previous acte. } } return null; } export function stateFromDossier(dossier) { const status = stateFromActes(dossier, [], dossier.actesLegislatifs); if (status !== null) { return status; } return { currentStatus: StatusOnly.InProgress, label: "en cours" }; } export function* walkActes(actes) { for (const acte of actes) { yield acte; if (acte.actesLegislatifs !== undefined) { yield* walkActes(acte.actesLegislatifs); } } } export function* walkDocumentAndDivisions(documentOrDivision) { yield documentOrDivision; for (const division of documentOrDivision.divisions ?? []) { yield* walkDocumentAndDivisions(division); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmNhcGl0YWxpemVGaXJzdExldHRlciIsIkNvZGVUeXBlT3JnYW5lIiwiRmluYWxTdGF0dXMiLCJTdGF0dXNPbmx5IiwiY29tbWlzc2lvbkZvbmRVaWRGcm9tRG9zc2llciIsImRvc3NpZXIiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwidW5kZWZpbmVkIiwiYWN0ZSIsIndhbGtBY3RlcyIsImNvZGVBY3RlIiwibWF0Y2giLCJvcmdhbmVSZWYiLCJzdGF0dXNGcm9tQ29kaWVyTGliZWxsZSIsImxpYmVsbGUiLCJTdWNjZXNzIiwiRmFpbHVyZSIsIkluUHJvZ3Jlc3MiLCJDb25zdGl0dSIsInN0YXRlRnJvbUFjdGVQYXRoIiwiYWN0ZVBhdGgiLCJsZWFmQWN0ZSIsImxlbmd0aCIsInhzaVR5cGUiLCJzdGF0dXRBZG9wdGlvbiIsImN1cnJlbnRTdGF0dXMiLCJsYWJlbCIsInN0YXR1dENvbmNsdXNpb24iLCJmaW5hbFN0YXR1cyIsInByb2NlZHVyZVBhcmxlbWVudGFpcmUiLCJjb2RlIiwiaW5jbHVkZXMiLCJkZWNpc2lvbiIsInR5cGVEZWNsYXJhdGlvbiIsInR5cGVNb3Rpb25DZW5zdXJlIiwib3JnYW5lIiwiY29kZVR5cGUiLCJ0eXBlTW90aW9uIiwiY2FzU2Fpc2luZSIsInN0YXRlRnJvbUFjdGVzIiwiYWN0ZXMiLCJyZXZlcnNlIiwic3RhdHVzIiwic3RhdGVGcm9tRG9zc2llciIsIndhbGtEb2N1bWVudEFuZERpdmlzaW9ucyIsImRvY3VtZW50T3JEaXZpc2lvbiIsImRpdmlzaW9uIiwiZGl2aXNpb25zIl0sInNvdXJjZXMiOlsiLi4vc3JjL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyIH0gZnJvbSBcIi4vc3RyaW5nc1wiXG5pbXBvcnQgeyBDb2RlVHlwZU9yZ2FuZSB9IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgdHlwZSB7XG4gIERvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBBY3RlTGVnaXNsYXRpZixcbiAgRGl2aXNpb24sXG4gIERvY3VtZW50LFxufSBmcm9tIFwiLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRGaWxlSW5mb3Mge1xuICBmaWxlbmFtZT86IHN0cmluZ1xuICBzaGEyNTY/OiBzdHJpbmdcbiAgdXJsOiBzdHJpbmdcbiAgc3RhdHVzOiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRGaWxlc0luZGV4ID0ge1xuICBodG1sPzogRG9jdW1lbnRGaWxlSW5mb3NbXVxuICBwZGY/OiBEb2N1bWVudEZpbGVJbmZvc1tdXG4gIFwicmF3LWh0bWxcIj86IERvY3VtZW50RmlsZUluZm9zW11cbn1cblxuZXhwb3J0IGVudW0gRmluYWxTdGF0dXMge1xuICBGYWlsdXJlID0gXCJGQUlMVVJFXCIsXG4gIFN1Y2Nlc3MgPSBcIlNVQ0NFU1NcIixcbn1cblxuaW50ZXJmYWNlIFN0YXRlIHtcbiAgY3VycmVudFN0YXR1czogU3RhdHVzXG4gIGZpbmFsU3RhdHVzPzogRmluYWxTdGF0dXNcbiAgbGFiZWw6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBTdGF0dXMgPSBDb2RlVHlwZU9yZ2FuZSB8IFN0YXR1c09ubHlcblxuZXhwb3J0IGVudW0gU3RhdHVzT25seSB7XG4gIEZhaWx1cmUgPSBcIkZBSUxVUkVcIixcbiAgSW5Qcm9ncmVzcyA9IFwiSU5fUFJPR1JFU1NcIixcbiAgU3VjY2VzcyA9IFwiU1VDQ0VTU1wiLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWlzc2lvbkZvbmRVaWRGcm9tRG9zc2llcihcbiAgZG9zc2llcjogRG9zc2llclBhcmxlbWVudGFpcmUsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoZG9zc2llci5hY3Rlc0xlZ2lzbGF0aWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2Ygd2Fsa0FjdGVzKGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcykpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGFjdGUuY29kZUFjdGUgYXMgdW5rbm93biBhcyBzdHJpbmcpLm1hdGNoKC9eQU4uKi1DT00tRk9ORC1TQUlTSUUkLykgIT09XG4gICAgICAgICAgbnVsbCAmJlxuICAgICAgICBhY3RlLm9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGFjdGUub3JnYW5lUmVmICE9PSBcIlBPMjExNDk0XCIgLy8gQ29tbWlzc2lvbiBkZXMgZmluYW5jZXMgZHUgU8OJTkFUICg9PiBlcnJldXIpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGFjdGUub3JnYW5lUmVmXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c0Zyb21Db2RpZXJMaWJlbGxlKGxpYmVsbGU6IHN0cmluZyk6IFN0YXR1cyB7XG4gIHN3aXRjaCAobGliZWxsZSkge1xuICAgIGNhc2UgXCJBY2NvcmRcIjpcbiAgICBjYXNlIFwiYWRvcHTDqVwiOlxuICAgIGNhc2UgXCJhZG9wdMOpLCBkYW5zIGxlcyBjb25kaXRpb25zIHByw6l2dWVzIMOgIGwnYXJ0aWNsZSA0NSwgYWxpbsOpYSAzLFwiICtcbiAgICAgIFwiIGRlIGxhIENvbnN0aXR1dGlvblwiOlxuICAgIGNhc2UgXCJhZG9wdMOpZVwiOlxuICAgIGNhc2UgXCJhZG9wdMOpIHNhbnMgbW9kaWZpY2F0aW9uXCI6XG4gICAgY2FzZSBcImFkb3B0w6llIHNhbnMgbW9kaWZpY2F0aW9uXCI6XG4gICAgY2FzZSBcIkNvbmZvcm1lXCI6XG4gICAgY2FzZSBcImNvbnNpZMOpcsOpZSBjb21tZSBkw6lmaW5pdGl2ZSBlbiBhcHBsaWNhdGlvbiBkZSBsJ2FydGljbGUgMTUxLTcgZHUgUsOoZ2xlbWVudFwiOlxuICAgIGNhc2UgXCJjb25zaWTDqXLDqWUgY29tbWUgZMOpZmluaXRpdmUgZW4gYXBwbGljYXRpb24gZGUgbCdhcnRpY2xlIDE1MS05IGR1IFLDqGdsZW1lbnRcIjpcbiAgICBjYXNlIFwiTW90aW9uIGFkb3B0w6koZSlcIjpcbiAgICAgIHJldHVybiBTdGF0dXNPbmx5LlN1Y2Nlc3NcbiAgICBjYXNlIFwiRMOpc2FjY29yZFwiOlxuICAgIGNhc2UgXCJNb3Rpb24gcmVqZXTDqShlKVwiOlxuICAgIGNhc2UgXCJyZWpldMOpXCI6XG4gICAgY2FzZSBcInJlamV0w6llXCI6XG4gICAgICByZXR1cm4gU3RhdHVzT25seS5GYWlsdXJlXG4gICAgY2FzZSBcImFkb3B0w6kgYXZlYyBtb2RpZmljYXRpb25zXCI6XG4gICAgY2FzZSBcImFkb3B0w6llIGF2ZWMgbW9kaWZpY2F0aW9uc1wiOlxuICAgIGNhc2UgXCJEZSBkcm9pdCAoYXJ0aWNsZSA2MSBhbGluw6lhIDEgZGUgbGEgQ29uc3RpdHV0aW9uKVwiOlxuICAgIGNhc2UgXCJtb2RpZmnDqVwiOlxuICAgIGNhc2UgXCJtb2RpZmnDqWVcIjpcbiAgICBjYXNlIFwiTW90aW9uIGRlIGNlbnN1cmUgNDktMlwiOlxuICAgIGNhc2UgXCJQYXJ0aWVsbGVtZW50IGNvbmZvcm1lXCI6XG4gICAgICByZXR1cm4gU3RhdHVzT25seS5JblByb2dyZXNzXG4gICAgY2FzZSBcIlNvaXhhbnRlIGTDqXB1dMOpcyBhdSBtb2luc1wiOlxuICAgIGNhc2UgXCJTb2l4YW50ZSBzw6luYXRldXJzIGF1IG1vaW5zXCI6XG4gICAgICByZXR1cm4gQ29kZVR5cGVPcmdhbmUuQ29uc3RpdHVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFN0YXR1c09ubHkuSW5Qcm9ncmVzc1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZUZyb21BY3RlUGF0aChcbiAgZG9zc2llcjogRG9zc2llclBhcmxlbWVudGFpcmUsXG4gIGFjdGVQYXRoOiBBY3RlTGVnaXNsYXRpZltdLFxuKTogU3RhdGUgfCBudWxsIHtcbiAgY29uc3QgbGVhZkFjdGUgPSBhY3RlUGF0aFthY3RlUGF0aC5sZW5ndGggLSAxXVxuICBsZXQgbGliZWxsZSA9IG51bGxcbiAgc3dpdGNoIChsZWFmQWN0ZS54c2lUeXBlKSB7XG4gICAgY2FzZSBcIkFkb3B0aW9uX0V1cm9wZV9UeXBlXCI6XG4gICAgICBsaWJlbGxlID0gbGVhZkFjdGUuc3RhdHV0QWRvcHRpb24hLmxpYmVsbGVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRTdGF0dXM6IHN0YXR1c0Zyb21Db2RpZXJMaWJlbGxlKGxpYmVsbGUpLFxuICAgICAgICBsYWJlbDogdW5jYXBpdGFsaXplRmlyc3RMZXR0ZXIobGliZWxsZSksXG4gICAgICB9XG4gICAgY2FzZSBcIkNvbmNsdXNpb25FdGFwZUNDX1R5cGVcIjpcbiAgICAgIGxpYmVsbGUgPSBsZWFmQWN0ZS5zdGF0dXRDb25jbHVzaW9uIS5saWJlbGxlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50U3RhdHVzOiBzdGF0dXNGcm9tQ29kaWVyTGliZWxsZShsaWJlbGxlKSxcbiAgICAgICAgbGFiZWw6IHVuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGxpYmVsbGUpLFxuICAgICAgfVxuICAgIGNhc2UgXCJEZWNpc2lvbl9UeXBlXCI6IHtcbiAgICAgIGxpYmVsbGUgPSBsZWFmQWN0ZS5zdGF0dXRDb25jbHVzaW9uIS5saWJlbGxlXG4gICAgICBsZXQgY3VycmVudFN0YXR1cyA9IHN0YXR1c0Zyb21Db2RpZXJMaWJlbGxlKGxpYmVsbGUpXG4gICAgICBsZXQgZmluYWxTdGF0dXMgPSB1bmRlZmluZWRcbiAgICAgIHN3aXRjaCAoZG9zc2llci5wcm9jZWR1cmVQYXJsZW1lbnRhaXJlLmNvZGUpIHtcbiAgICAgICAgY2FzZSBcIlBST0NFRFVSRV9QQVJMRU1FTlRBSVJFXzJcIjpcbiAgICAgICAgICAvLyBQcm9wb3NpdGlvbiBkZSBsb2kgb3JkaW5haXJlXG4gICAgICAgICAgLy8gTm90IHN1cmUgZm9yIG90aGVyIGNhc2VzID0+IFRvIGltcHJvdmUuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgW1wicmVqZXTDqVwiLCBcInJlamV0w6llXCJdLmluY2x1ZGVzKGxpYmVsbGUpICYmXG4gICAgICAgICAgICBkb3NzaWVyLmFjdGVzTGVnaXNsYXRpZnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgZG9zc2llci5hY3Rlc0xlZ2lzbGF0aWZzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmluYWxTdGF0dXMgPSBGaW5hbFN0YXR1cy5GYWlsdXJlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJQUk9DRURVUkVfUEFSTEVNRU5UQUlSRV84XCI6IC8vIFLDqXNvbHV0aW9uXG4gICAgICAgIGNhc2UgXCJQUk9DRURVUkVfUEFSTEVNRU5UQUlSRV8yMlwiOlxuICAgICAgICAgIC8vIFLDqXNvbHV0aW9uIEFydGljbGUgMzQtMVxuICAgICAgICAgIGlmIChjdXJyZW50U3RhdHVzID09PSBTdGF0dXNPbmx5LlN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGZpbmFsU3RhdHVzID0gRmluYWxTdGF0dXMuU3VjY2Vzc1xuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PT0gU3RhdHVzT25seS5GYWlsdXJlKSB7XG4gICAgICAgICAgICBmaW5hbFN0YXR1cyA9IEZpbmFsU3RhdHVzLkZhaWx1cmVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFN0YXR1cyxcbiAgICAgICAgZmluYWxTdGF0dXMsXG4gICAgICAgIGxhYmVsOiB1bmNhcGl0YWxpemVGaXJzdExldHRlcihsaWJlbGxlKSxcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSBcIkRlY2lzaW9uTW90aW9uQ2Vuc3VyZV9UeXBlXCI6XG4gICAgICBsaWJlbGxlID0gbGVhZkFjdGUuZGVjaXNpb24hLmxpYmVsbGVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRTdGF0dXM6IHN0YXR1c0Zyb21Db2RpZXJMaWJlbGxlKGxpYmVsbGUpLFxuICAgICAgICBmaW5hbFN0YXR1czpcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBmb3Igb3RoZXIgY2FzZXMgPT4gVG8gaW1wcm92ZS5cbiAgICAgICAgICAvLyBFbmdhZ2VtZW50IGRlIGxhIHJlc3BvbnNhYmlsaXTDqSBnb3V2ZXJuZW1lbnRhbGVcbiAgICAgICAgICBkb3NzaWVyLnByb2NlZHVyZVBhcmxlbWVudGFpcmUuY29kZSA9PT1cbiAgICAgICAgICAgIFwiUFJPQ0VEVVJFX1BBUkxFTUVOVEFJUkVfMTNcIiAmJiBsaWJlbGxlID09PSBcIk1vdGlvbiByZWpldMOpKGUpXCJcbiAgICAgICAgICAgID8gRmluYWxTdGF0dXMuRmFpbHVyZVxuICAgICAgICAgICAgOiBGaW5hbFN0YXR1cy5TdWNjZXNzLCAvLyBUT0RPOiBOb3Qgc3VyZSBvZiB0aGlzIGB0cnVlYCB2YWx1ZVxuICAgICAgICBsYWJlbDogdW5jYXBpdGFsaXplRmlyc3RMZXR0ZXIobGliZWxsZSksXG4gICAgICB9XG4gICAgY2FzZSBcIkRlY2lzaW9uUmVjZXZhYmlsaXRlQnVyZWF1X1R5cGVcIjpcbiAgICAgIGxpYmVsbGUgPSBsZWFmQWN0ZS5kZWNpc2lvbiEubGliZWxsZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFN0YXR1czogc3RhdHVzRnJvbUNvZGllckxpYmVsbGUobGliZWxsZSksXG4gICAgICAgIGxhYmVsOiB1bmNhcGl0YWxpemVGaXJzdExldHRlcihsaWJlbGxlKSxcbiAgICAgIH1cbiAgICBjYXNlIFwiRGVjbGFyYXRpb25Hb3V2ZXJuZW1lbnRfVHlwZVwiOlxuICAgICAgbGliZWxsZSA9IGxlYWZBY3RlLnR5cGVEZWNsYXJhdGlvbiEubGliZWxsZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFN0YXR1czogc3RhdHVzRnJvbUNvZGllckxpYmVsbGUobGliZWxsZSksXG4gICAgICAgIGxhYmVsOiB1bmNhcGl0YWxpemVGaXJzdExldHRlcihsaWJlbGxlKSxcbiAgICAgIH1cbiAgICBjYXNlIFwiRGVwb3RNb3Rpb25DZW5zdXJlX1R5cGVcIjpcbiAgICAgIGxpYmVsbGUgPSBsZWFmQWN0ZS50eXBlTW90aW9uQ2Vuc3VyZSEubGliZWxsZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFN0YXR1czogc3RhdHVzRnJvbUNvZGllckxpYmVsbGUobGliZWxsZSksXG4gICAgICAgIGxhYmVsOiB1bmNhcGl0YWxpemVGaXJzdExldHRlcihsaWJlbGxlKSxcbiAgICAgIH1cbiAgICBjYXNlIFwiRGVwb3RSYXBwb3J0X1R5cGVcIjpcbiAgICAgIGlmIChcbiAgICAgICAgW1xuICAgICAgICAgIFwiRG9zc2llckNvbW1pc3Npb25FbnF1ZXRlX1R5cGVcIixcbiAgICAgICAgICBcIkRvc3NpZXJNaXNzaW9uQ29udHJvbGVfVHlwZVwiLFxuICAgICAgICAgIFwiRG9zc2llck1pc3Npb25JbmZvcm1hdGlvbl9UeXBlXCIsXG4gICAgICAgIF0uaW5jbHVkZXMoZG9zc2llci54c2lUeXBlISlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1cnJlbnRTdGF0dXM6IGFjdGVQYXRoWzBdLm9yZ2FuZSEuY29kZVR5cGUsXG4gICAgICAgICAgZmluYWxTdGF0dXM6IEZpbmFsU3RhdHVzLlN1Y2Nlc3MsXG4gICAgICAgICAgbGFiZWw6IFwicmFwcG9ydCBkw6lwb3PDqVwiLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIGNhc2UgXCJNb3Rpb25Qcm9jZWR1cmVfVHlwZVwiOlxuICAgICAgbGliZWxsZSA9IGxlYWZBY3RlLnR5cGVNb3Rpb24hLmxpYmVsbGVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRTdGF0dXM6IHN0YXR1c0Zyb21Db2RpZXJMaWJlbGxlKGxpYmVsbGUpLFxuICAgICAgICBsYWJlbDogdW5jYXBpdGFsaXplRmlyc3RMZXR0ZXIobGliZWxsZSksXG4gICAgICB9XG4gICAgY2FzZSBcIlByb211bGdhdGlvbl9UeXBlXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50U3RhdHVzOiBTdGF0dXNPbmx5LlN1Y2Nlc3MsXG4gICAgICAgIGZpbmFsU3RhdHVzOiBGaW5hbFN0YXR1cy5TdWNjZXNzLFxuICAgICAgICBsYWJlbDogXCJwcm9tdWxndcOpXCIsXG4gICAgICB9XG4gICAgY2FzZSBcIlJldHJhaXRJbml0aWF0aXZlX1R5cGVcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRTdGF0dXM6IFN0YXR1c09ubHkuRmFpbHVyZSxcbiAgICAgICAgZmluYWxTdGF0dXM6IEZpbmFsU3RhdHVzLkZhaWx1cmUsXG4gICAgICAgIGxhYmVsOiBcInJldGlyw6lcIixcbiAgICAgIH1cbiAgICBjYXNlIFwiU2Fpc2luZUNvbnNlaWxDb25zdGl0X1R5cGVcIjpcbiAgICAgIGxpYmVsbGUgPSBsZWFmQWN0ZS5jYXNTYWlzaW5lIS5saWJlbGxlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50U3RhdHVzOiBzdGF0dXNGcm9tQ29kaWVyTGliZWxsZShsaWJlbGxlKSxcbiAgICAgICAgbGFiZWw6IHVuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGxpYmVsbGUpLFxuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBUaGlzIGFjdGUgZ2l2ZXMgbm8gc3RhdHVzLlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVGcm9tQWN0ZXMoXG4gIGRvc3NpZXI6IERvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBhY3RlUGF0aDogQWN0ZUxlZ2lzbGF0aWZbXSxcbiAgYWN0ZXM/OiBBY3RlTGVnaXNsYXRpZltdLFxuKTogU3RhdGUgfCBudWxsIHtcbiAgaWYgKGFjdGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgWy4uLmFjdGVzXS5yZXZlcnNlKCkpIHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGFjdGUuYWN0ZXNMZWdpc2xhdGlmc1xuICAgICAgICA/IHN0YXRlRnJvbUFjdGVzKGRvc3NpZXIsIFsuLi5hY3RlUGF0aCwgYWN0ZV0sIGFjdGUuYWN0ZXNMZWdpc2xhdGlmcylcbiAgICAgICAgOiBzdGF0ZUZyb21BY3RlUGF0aChkb3NzaWVyLCBbLi4uYWN0ZVBhdGgsIGFjdGVdKVxuICAgICAgaWYgKHN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3RhdHVzXG4gICAgICB9XG4gICAgICAvLyBObyBzdGF0dXMgZm91bmQsIGNvbnRpbnVlIHdpdGggcHJldmlvdXMgYWN0ZS5cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlRnJvbURvc3NpZXIoZG9zc2llcjogRG9zc2llclBhcmxlbWVudGFpcmUpOiBTdGF0ZSB7XG4gIGNvbnN0IHN0YXR1cyA9IHN0YXRlRnJvbUFjdGVzKGRvc3NpZXIsIFtdLCBkb3NzaWVyLmFjdGVzTGVnaXNsYXRpZnMpXG4gIGlmIChzdGF0dXMgIT09IG51bGwpIHtcbiAgICByZXR1cm4gc3RhdHVzXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50U3RhdHVzOiBTdGF0dXNPbmx5LkluUHJvZ3Jlc3MsXG4gICAgbGFiZWw6IFwiZW4gY291cnNcIixcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIHdhbGtBY3RlcyhcbiAgYWN0ZXM6IEFjdGVMZWdpc2xhdGlmW10sXG4pOiBHZW5lcmF0b3I8QWN0ZUxlZ2lzbGF0aWYsIHZvaWQsIHVua25vd24+IHtcbiAgZm9yIChjb25zdCBhY3RlIG9mIGFjdGVzKSB7XG4gICAgeWllbGQgYWN0ZVxuICAgIGlmIChhY3RlLmFjdGVzTGVnaXNsYXRpZnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgeWllbGQqIHdhbGtBY3RlcyhhY3RlLmFjdGVzTGVnaXNsYXRpZnMpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogd2Fsa0RvY3VtZW50QW5kRGl2aXNpb25zKFxuICBkb2N1bWVudE9yRGl2aXNpb246IERvY3VtZW50IHwgRGl2aXNpb24sXG4pOiBHZW5lcmF0b3I8RG9jdW1lbnQgfCBEaXZpc2lvbiwgdm9pZCwgdW5rbm93bj4ge1xuICB5aWVsZCBkb2N1bWVudE9yRGl2aXNpb25cbiAgZm9yIChjb25zdCBkaXZpc2lvbiBvZiBkb2N1bWVudE9yRGl2aXNpb24uZGl2aXNpb25zID8/IFtdKSB7XG4gICAgeWllbGQqIHdhbGtEb2N1bWVudEFuZERpdmlzaW9ucyhkaXZpc2lvbilcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiU0FBU0EsdUJBQXVCO0FBQUEsU0FDdkJDLGNBQWM7QUFxQnZCLFdBQVlDLFdBQVcsMEJBQVhBLFdBQVc7RUFBWEEsV0FBVztFQUFYQSxXQUFXO0VBQUEsT0FBWEEsV0FBVztBQUFBO0FBYXZCLFdBQVlDLFVBQVUsMEJBQVZBLFVBQVU7RUFBVkEsVUFBVTtFQUFWQSxVQUFVO0VBQVZBLFVBQVU7RUFBQSxPQUFWQSxVQUFVO0FBQUE7QUFNdEIsT0FBTyxTQUFTQyw0QkFBNEJBLENBQzFDQyxPQUE2QixFQUNUO0VBQ3BCLElBQUlBLE9BQU8sQ0FBQ0MsZ0JBQWdCLEtBQUtDLFNBQVMsRUFBRTtJQUMxQyxLQUFLLE1BQU1DLElBQUksSUFBSUMsU0FBUyxDQUFDSixPQUFPLENBQUNDLGdCQUFnQixDQUFDLEVBQUU7TUFDdEQsSUFDR0UsSUFBSSxDQUFDRSxRQUFRLENBQXVCQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsS0FDbEUsSUFBSSxJQUNOSCxJQUFJLENBQUNJLFNBQVMsS0FBS0wsU0FBUyxJQUM1QkMsSUFBSSxDQUFDSSxTQUFTLEtBQUssVUFBVSxDQUFDO01BQUEsRUFDOUI7UUFDQSxPQUFPSixJQUFJLENBQUNJLFNBQVM7TUFDdkI7SUFDRjtFQUNGO0VBQ0EsT0FBT0wsU0FBUztBQUNsQjtBQUVBLE9BQU8sU0FBU00sdUJBQXVCQSxDQUFDQyxPQUFlLEVBQVU7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