UNPKG

@tricoteuses/assemblee

Version:

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

294 lines (292 loc) 37.4 kB
"use strict"; require("core-js/modules/es.symbol.js"); require("core-js/modules/es.symbol.description.js"); require("core-js/modules/es.symbol.iterator.js"); require("core-js/modules/es.array.from.js"); require("core-js/modules/es.array.iterator.js"); require("core-js/modules/es.array.slice.js"); require("core-js/modules/es.date.to-string.js"); require("core-js/modules/es.function.name.js"); require("core-js/modules/es.object.define-property.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.regexp.to-string.js"); require("core-js/modules/es.string.iterator.js"); require("core-js/modules/web.dom-collections.iterator.js"); Object.defineProperty(exports, "__esModule", { value: true }); exports.cleanAmendement = cleanAmendement; exports.cleanTexteLegislatif = cleanTexteLegislatif; require("core-js/modules/es.array.filter.js"); require("core-js/modules/es.array.includes.js"); require("core-js/modules/es.array.is-array.js"); require("core-js/modules/es.array.join.js"); require("core-js/modules/es.object.keys.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/es.string.includes.js"); var _assert = _interopRequireDefault(require("assert")); var _xml = require("./xml"); var _amendements = require("../types/amendements"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } 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; } } }; } 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; } } 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; } function cleanAmendement(amendement) { (0, _xml.cleanXmlArtefacts)(amendement); var signataires = amendement.signataires; { (0, _xml.cleanXmlArtefacts)(signataires); var auteur = signataires.auteur; { (0, _xml.cleanXmlArtefacts)(auteur); } if (signataires.cosignataires !== undefined) { var acteurRef = signataires.cosignataires.acteurRef; if (Array.isArray(acteurRef)) { signataires.cosignatairesRefs = acteurRef; } else { (0, _assert["default"])(acteurRef); signataires.cosignatairesRefs = [acteurRef]; } delete signataires.cosignataires; } var libelle = signataires.libelle; if (libelle !== undefined) { libelle = libelle.split(" ").filter(Boolean).join(" "); if (libelle) { signataires.libelle = libelle; } else { delete signataires.libelle; } } } var pointeurFragmentTexte = amendement.pointeurFragmentTexte; { (0, _xml.cleanXmlArtefacts)(pointeurFragmentTexte); var division = pointeurFragmentTexte.division; if (division !== undefined) { (0, _xml.cleanXmlArtefacts)(division); var avantAApres = division.avant_A_Apres; if (avantAApres !== undefined) { delete division.avant_A_Apres; if (avantAApres === "Après") { avantAApres = _amendements.AvantAApres.Apres; } division.avantAApres = avantAApres; } } var amendementStandard = pointeurFragmentTexte.amendementStandard; if (amendementStandard !== undefined) { (0, _xml.cleanXmlArtefacts)(amendementStandard); var alinea = amendementStandard.alinea; if (alinea !== undefined) { (0, _xml.cleanXmlArtefacts)(alinea); var _avantAApres = alinea.avant_A_Apres; if (_avantAApres !== undefined) { delete alinea.avant_A_Apres; if (_avantAApres === "Après") { _avantAApres = _amendements.AvantAApres.Apres; } else if (![_amendements.AvantAApres.A, _amendements.AvantAApres.Apres, _amendements.AvantAApres.Avant].includes(_avantAApres)) { _avantAApres = _amendements.AvantAApres.A; } alinea.avantAApres = _avantAApres; } pointeurFragmentTexte.alinea = alinea; } delete pointeurFragmentTexte.amendementStandard; } } var corps = amendement.corps; if (corps !== undefined) { (0, _xml.cleanXmlArtefacts)(corps); var contenuAuteur = corps.contenuAuteur; if (contenuAuteur !== undefined) { (0, _xml.cleanXmlArtefacts)(contenuAuteur); var avantAppel = contenuAuteur.avantAppel; if (avantAppel !== undefined) { (0, _xml.cleanXmlArtefacts)(avantAppel); cleanDispositifAmdtCreditPLF(avantAppel.dispositifAmdtCreditPLF, { rectificatif: false }); cleanDispositifAmdtCreditPLF(avantAppel.dispositifAmdtCreditPLFR, { rectificatif: true }); if (Object.keys(avantAppel).length === 0) { delete contenuAuteur.avantAppel; } } _assert["default"].strictEqual(contenuAuteur.annexeExposeSommaire, undefined); cleanDispositifAmdtCreditPLF(contenuAuteur.dispositifAmdtCreditPLF, { rectificatif: false }); cleanDispositifAmdtCreditPLF(contenuAuteur.dispositifAmdtCreditPLFR, { rectificatif: true }); } } var cycleDeVie = amendement.cycleDeVie; if (cycleDeVie !== undefined) { (0, _xml.cleanXmlArtefacts)(cycleDeVie); var etatDesTraitements = cycleDeVie.etatDesTraitements; { (0, _xml.cleanXmlArtefacts)(etatDesTraitements); var etat = etatDesTraitements.etat; { (0, _xml.cleanXmlArtefacts)(etat); } var sousEtat = etatDesTraitements.sousEtat; if (sousEtat !== undefined) { (0, _xml.cleanXmlArtefacts)(sousEtat); } } } if (amendement.representations !== undefined) { var representation = amendement.representations.representation; (0, _assert["default"])(!Array.isArray(representation)); amendement.representation = representation; delete amendement.representations; { (0, _xml.cleanXmlArtefacts)(representation); _assert["default"].strictEqual(representation.repSource, undefined); _assert["default"].strictEqual(representation.offset, undefined); _assert["default"].strictEqual(representation.dateDispoRepresentation, undefined); var statutRepresentation = representation.statutRepresentation; { (0, _xml.cleanBooleanAttribute)(statutRepresentation, "canonique"); (0, _xml.cleanBooleanAttribute)(statutRepresentation, "enregistrement"); (0, _xml.cleanBooleanAttribute)(statutRepresentation, "officielle"); (0, _xml.cleanBooleanAttribute)(statutRepresentation, "transcription"); (0, _xml.cleanBooleanAttribute)(statutRepresentation, "verbatim"); } } } var loiReference = amendement.loiReference; if (loiReference !== undefined) { (0, _xml.cleanXmlArtefacts)(loiReference); } var discussionCommune = amendement.discussionCommune; if (discussionCommune !== undefined) { (0, _xml.cleanXmlArtefacts)(discussionCommune); } var discussionIdentique = amendement.discussionIdentique; if (discussionIdentique !== undefined) { (0, _xml.cleanXmlArtefacts)(discussionIdentique); } } function cleanDispositifAmdtCreditPLF(dispositifAmdtCreditPLF, _ref) { var rectificatif = _ref.rectificatif; if (dispositifAmdtCreditPLF !== undefined) { var _dispositifAmdtCredit; var listeProgrammes = (_dispositifAmdtCredit = dispositifAmdtCreditPLF.listeProgrammes) === null || _dispositifAmdtCredit === void 0 ? void 0 : _dispositifAmdtCredit.programme; if (listeProgrammes !== undefined) { if (Array.isArray(listeProgrammes)) { dispositifAmdtCreditPLF.listeProgrammes = listeProgrammes; } else { (0, _assert["default"])(listeProgrammes); dispositifAmdtCreditPLF.listeProgrammes = [listeProgrammes]; } var _iterator = _createForOfIteratorHelper(dispositifAmdtCreditPLF.listeProgrammes), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var programme = _step.value; (0, _xml.cleanXmlArtefacts)(programme); if (programme.lignesCredits !== undefined) { var lignesCredits = programme.lignesCredits.ligneCredit; if (lignesCredits === undefined) { delete programme.lignesCredits; } else { if (!Array.isArray(lignesCredits)) { (0, _assert["default"])(lignesCredits); lignesCredits = [lignesCredits]; } programme.lignesCredits = lignesCredits; } if (lignesCredits !== undefined) { var _iterator2 = _createForOfIteratorHelper(lignesCredits), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var ligneCredit = _step2.value; if (rectificatif) { cleanLigneCreditPLFR(ligneCredit); } else { (0, _xml.cleanXmlArtefacts)(ligneCredit); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } } } function cleanLigneCreditPLFR(ligneCreditPLFR) { (0, _xml.cleanXmlArtefacts)(ligneCreditPLFR); if (ligneCreditPLFR.lignesCredits !== undefined) { var lignesCredits = ligneCreditPLFR.lignesCredits.ligneCredit; if (lignesCredits === undefined) { delete ligneCreditPLFR.lignesCredits; } else { if (!Array.isArray(lignesCredits)) { (0, _assert["default"])(lignesCredits); lignesCredits = [lignesCredits]; } ligneCreditPLFR.lignesCredits = lignesCredits; } if (lignesCredits !== undefined) { var _iterator3 = _createForOfIteratorHelper(lignesCredits), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var ligneCredit = _step3.value; cleanLigneCreditPLFR(ligneCredit); } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } } } function cleanTexteLegislatif(texteLegislatif) { (0, _xml.cleanXmlArtefacts)(texteLegislatif); // Note: The following fields in `texteLegislatif.amendements` are currently ignored: // * "#text"?: string; // * offset?: null; // * nom?: Nom; // * avant_A_Apres?: DivisionAvantAApres; // * dateDepot?: Date; // * documentURI?: string; // Because it seems they should belong to an "amendement". var amendement = texteLegislatif.amendements.amendement; if (Array.isArray(amendement)) { texteLegislatif.amendements = amendement; } else { (0, _assert["default"])(amendement); texteLegislatif.amendements = [amendement]; } var _iterator4 = _createForOfIteratorHelper(texteLegislatif.amendements), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var _amendement = _step4.value; cleanAmendement(_amendement); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfeG1sIiwiX2FtZW5kZW1lbnRzIiwiZSIsIl9fZXNNb2R1bGUiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiY2xlYW5BbWVuZGVtZW50IiwiYW1lbmRlbWVudCIsImNsZWFuWG1sQXJ0ZWZhY3RzIiwic2lnbmF0YWlyZXMiLCJhdXRldXIiLCJjb3NpZ25hdGFpcmVzIiwidW5kZWZpbmVkIiwiYWN0ZXVyUmVmIiwiY29zaWduYXRhaXJlc1JlZnMiLCJhc3NlcnQiLCJsaWJlbGxlIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsInBvaW50ZXVyRnJhZ21lbnRUZXh0ZSIsImRpdmlzaW9uIiwiYXZhbnRBQXByZXMiLCJhdmFudF9BX0FwcmVzIiwiQXZhbnRBQXByZXMiLCJBcHJlcyIsImFtZW5kZW1lbnRTdGFuZGFyZCIsImFsaW5lYSIsIkEiLCJBdmFudCIsImluY2x1ZGVzIiwiY29ycHMiLCJjb250ZW51QXV0ZXVyIiwiYXZhbnRBcHBlbCIsImNsZWFuRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYiLCJkaXNwb3NpdGlmQW1kdENyZWRpdFBMRiIsInJlY3RpZmljYXRpZiIsImRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGUiIsIk9iamVjdCIsImtleXMiLCJzdHJpY3RFcXVhbCIsImFubmV4ZUV4cG9zZVNvbW1haXJlIiwiY3ljbGVEZVZpZSIsImV0YXREZXNUcmFpdGVtZW50cyIsImV0YXQiLCJzb3VzRXRhdCIsInJlcHJlc2VudGF0aW9ucyIsInJlcHJlc2VudGF0aW9uIiwicmVwU291cmNlIiwib2Zmc2V0IiwiZGF0ZURpc3BvUmVwcmVzZW50YXRpb24iLCJzdGF0dXRSZXByZXNlbnRhdGlvbiIsImNsZWFuQm9vbGVhbkF0dHJpYnV0ZSIsImxvaVJlZmVyZW5jZSIsImRpc2N1c3Npb25Db21tdW5lIiwiZGlzY3Vzc2lvbklkZW50aXF1ZSIsIl9yZWYiLCJfZGlzcG9zaXRpZkFtZHRDcmVkaXQiLCJsaXN0ZVByb2dyYW1tZXMiLCJwcm9ncmFtbWUiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpZ25lc0NyZWRpdHMiLCJsaWduZUNyZWRpdCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJjbGVhbkxpZ25lQ3JlZGl0UExGUiIsImVyciIsImxpZ25lQ3JlZGl0UExGUiIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJjbGVhblRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZiIsImFtZW5kZW1lbnRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGVhbmVycy9hbWVuZGVtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuXG5pbXBvcnQgeyBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUsIGNsZWFuWG1sQXJ0ZWZhY3RzIH0gZnJvbSBcIi4veG1sXCJcbmltcG9ydCB7IEF2YW50QUFwcmVzIH0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQW1lbmRlbWVudChhbWVuZGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoYW1lbmRlbWVudClcblxuICBjb25zdCBzaWduYXRhaXJlcyA9IGFtZW5kZW1lbnQuc2lnbmF0YWlyZXNcbiAge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHNpZ25hdGFpcmVzKVxuXG4gICAgY29uc3QgYXV0ZXVyID0gc2lnbmF0YWlyZXMuYXV0ZXVyXG4gICAge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoYXV0ZXVyKVxuICAgIH1cblxuICAgIGlmIChzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1clJlZiA9IHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXMuYWN0ZXVyUmVmXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhY3RldXJSZWYpKSB7XG4gICAgICAgIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzID0gYWN0ZXVyUmVmXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQoYWN0ZXVyUmVmKVxuICAgICAgICBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmcyA9IFthY3RldXJSZWZdXG4gICAgICB9XG4gICAgICBkZWxldGUgc2lnbmF0YWlyZXMuY29zaWduYXRhaXJlc1xuICAgIH1cblxuICAgIGxldCBsaWJlbGxlID0gc2lnbmF0YWlyZXMubGliZWxsZVxuICAgIGlmIChsaWJlbGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpYmVsbGUgPSBsaWJlbGxlLnNwbGl0KFwiIFwiKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIilcbiAgICAgIGlmIChsaWJlbGxlKSB7XG4gICAgICAgIHNpZ25hdGFpcmVzLmxpYmVsbGUgPSBsaWJlbGxlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgc2lnbmF0YWlyZXMubGliZWxsZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBvaW50ZXVyRnJhZ21lbnRUZXh0ZSA9IGFtZW5kZW1lbnQucG9pbnRldXJGcmFnbWVudFRleHRlXG4gIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhwb2ludGV1ckZyYWdtZW50VGV4dGUpXG5cbiAgICBjb25zdCBkaXZpc2lvbiA9IHBvaW50ZXVyRnJhZ21lbnRUZXh0ZS5kaXZpc2lvblxuICAgIGlmIChkaXZpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhkaXZpc2lvbilcblxuICAgICAgbGV0IGF2YW50QUFwcmVzID0gZGl2aXNpb24uYXZhbnRfQV9BcHJlc1xuICAgICAgaWYgKGF2YW50QUFwcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIGRpdmlzaW9uLmF2YW50X0FfQXByZXNcbiAgICAgICAgaWYgKGF2YW50QUFwcmVzID09PSBcIkFwcsOoc1wiKSB7XG4gICAgICAgICAgYXZhbnRBQXByZXMgPSBBdmFudEFBcHJlcy5BcHJlc1xuICAgICAgICB9XG4gICAgICAgIGRpdmlzaW9uLmF2YW50QUFwcmVzID0gYXZhbnRBQXByZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhbWVuZGVtZW50U3RhbmRhcmQgPSBwb2ludGV1ckZyYWdtZW50VGV4dGUuYW1lbmRlbWVudFN0YW5kYXJkXG4gICAgaWYgKGFtZW5kZW1lbnRTdGFuZGFyZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhhbWVuZGVtZW50U3RhbmRhcmQpXG5cbiAgICAgIGNvbnN0IGFsaW5lYSA9IGFtZW5kZW1lbnRTdGFuZGFyZC5hbGluZWFcbiAgICAgIGlmIChhbGluZWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhhbGluZWEpXG5cbiAgICAgICAgbGV0IGF2YW50QUFwcmVzID0gYWxpbmVhLmF2YW50X0FfQXByZXNcbiAgICAgICAgaWYgKGF2YW50QUFwcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgYWxpbmVhLmF2YW50X0FfQXByZXNcbiAgICAgICAgICBpZiAoYXZhbnRBQXByZXMgPT09IFwiQXByw6hzXCIpIHtcbiAgICAgICAgICAgIGF2YW50QUFwcmVzID0gQXZhbnRBQXByZXMuQXByZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgIVtBdmFudEFBcHJlcy5BLCBBdmFudEFBcHJlcy5BcHJlcywgQXZhbnRBQXByZXMuQXZhbnRdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBhdmFudEFBcHJlcyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGF2YW50QUFwcmVzID0gQXZhbnRBQXByZXMuQVxuICAgICAgICAgIH1cbiAgICAgICAgICBhbGluZWEuYXZhbnRBQXByZXMgPSBhdmFudEFBcHJlc1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRldXJGcmFnbWVudFRleHRlLmFsaW5lYSA9IGFsaW5lYVxuICAgICAgfVxuICAgICAgZGVsZXRlIHBvaW50ZXVyRnJhZ21lbnRUZXh0ZS5hbWVuZGVtZW50U3RhbmRhcmRcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb3JwcyA9IGFtZW5kZW1lbnQuY29ycHNcbiAgaWYgKGNvcnBzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhjb3JwcylcblxuICAgIGNvbnN0IGNvbnRlbnVBdXRldXIgPSBjb3Jwcy5jb250ZW51QXV0ZXVyXG4gICAgaWYgKGNvbnRlbnVBdXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoY29udGVudUF1dGV1cilcblxuICAgICAgY29uc3QgYXZhbnRBcHBlbCA9IGNvbnRlbnVBdXRldXIuYXZhbnRBcHBlbFxuICAgICAgaWYgKGF2YW50QXBwZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhhdmFudEFwcGVsKVxuXG4gICAgICAgIGNsZWFuRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYoYXZhbnRBcHBlbC5kaXNwb3NpdGlmQW1kdENyZWRpdFBMRiwge1xuICAgICAgICAgIHJlY3RpZmljYXRpZjogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIGNsZWFuRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYoYXZhbnRBcHBlbC5kaXNwb3NpdGlmQW1kdENyZWRpdFBMRlIsIHtcbiAgICAgICAgICByZWN0aWZpY2F0aWY6IHRydWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGF2YW50QXBwZWwpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBjb250ZW51QXV0ZXVyLmF2YW50QXBwZWxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29udGVudUF1dGV1ci5hbm5leGVFeHBvc2VTb21tYWlyZSwgdW5kZWZpbmVkKVxuXG4gICAgICBjbGVhbkRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGKGNvbnRlbnVBdXRldXIuZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYsIHtcbiAgICAgICAgcmVjdGlmaWNhdGlmOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgICBjbGVhbkRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGKGNvbnRlbnVBdXRldXIuZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSLCB7XG4gICAgICAgIHJlY3RpZmljYXRpZjogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgY3ljbGVEZVZpZSA9IGFtZW5kZW1lbnQuY3ljbGVEZVZpZVxuICBpZiAoY3ljbGVEZVZpZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoY3ljbGVEZVZpZSlcblxuICAgIGNvbnN0IGV0YXREZXNUcmFpdGVtZW50cyA9IGN5Y2xlRGVWaWUuZXRhdERlc1RyYWl0ZW1lbnRzXG4gICAge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoZXRhdERlc1RyYWl0ZW1lbnRzKVxuXG4gICAgICBjb25zdCBldGF0ID0gZXRhdERlc1RyYWl0ZW1lbnRzLmV0YXRcbiAgICAgIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoZXRhdClcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291c0V0YXQgPSBldGF0RGVzVHJhaXRlbWVudHMuc291c0V0YXRcbiAgICAgIGlmIChzb3VzRXRhdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHNvdXNFdGF0KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbWVuZGVtZW50LnJlcHJlc2VudGF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmVwcmVzZW50YXRpb24gPSBhbWVuZGVtZW50LnJlcHJlc2VudGF0aW9ucy5yZXByZXNlbnRhdGlvblxuICAgIGFzc2VydCghQXJyYXkuaXNBcnJheShyZXByZXNlbnRhdGlvbikpXG4gICAgYW1lbmRlbWVudC5yZXByZXNlbnRhdGlvbiA9IHJlcHJlc2VudGF0aW9uXG4gICAgZGVsZXRlIGFtZW5kZW1lbnQucmVwcmVzZW50YXRpb25zXG4gICAge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMocmVwcmVzZW50YXRpb24pXG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXByZXNlbnRhdGlvbi5yZXBTb3VyY2UsIHVuZGVmaW5lZClcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXByZXNlbnRhdGlvbi5vZmZzZXQsIHVuZGVmaW5lZClcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXByZXNlbnRhdGlvbi5kYXRlRGlzcG9SZXByZXNlbnRhdGlvbiwgdW5kZWZpbmVkKVxuXG4gICAgICBjb25zdCBzdGF0dXRSZXByZXNlbnRhdGlvbiA9IHJlcHJlc2VudGF0aW9uLnN0YXR1dFJlcHJlc2VudGF0aW9uXG4gICAgICB7XG4gICAgICAgIGNsZWFuQm9vbGVhbkF0dHJpYnV0ZShzdGF0dXRSZXByZXNlbnRhdGlvbiwgXCJjYW5vbmlxdWVcIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcImVucmVnaXN0cmVtZW50XCIpXG4gICAgICAgIGNsZWFuQm9vbGVhbkF0dHJpYnV0ZShzdGF0dXRSZXByZXNlbnRhdGlvbiwgXCJvZmZpY2llbGxlXCIpXG4gICAgICAgIGNsZWFuQm9vbGVhbkF0dHJpYnV0ZShzdGF0dXRSZXByZXNlbnRhdGlvbiwgXCJ0cmFuc2NyaXB0aW9uXCIpXG4gICAgICAgIGNsZWFuQm9vbGVhbkF0dHJpYnV0ZShzdGF0dXRSZXByZXNlbnRhdGlvbiwgXCJ2ZXJiYXRpbVwiKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxvaVJlZmVyZW5jZSA9IGFtZW5kZW1lbnQubG9pUmVmZXJlbmNlXG4gIGlmIChsb2lSZWZlcmVuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGxvaVJlZmVyZW5jZSlcbiAgfVxuXG4gIGNvbnN0IGRpc2N1c3Npb25Db21tdW5lID0gYW1lbmRlbWVudC5kaXNjdXNzaW9uQ29tbXVuZVxuICBpZiAoZGlzY3Vzc2lvbkNvbW11bmUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGRpc2N1c3Npb25Db21tdW5lKVxuICB9XG5cbiAgY29uc3QgZGlzY3Vzc2lvbklkZW50aXF1ZSA9IGFtZW5kZW1lbnQuZGlzY3Vzc2lvbklkZW50aXF1ZVxuICBpZiAoZGlzY3Vzc2lvbklkZW50aXF1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoZGlzY3Vzc2lvbklkZW50aXF1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhbkRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGKFxuICBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRjogYW55LFxuICB7IHJlY3RpZmljYXRpZiB9OiB7IHJlY3RpZmljYXRpZjogYm9vbGVhbiB9LFxuKTogdm9pZCB7XG4gIGlmIChkaXNwb3NpdGlmQW1kdENyZWRpdFBMRiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbGlzdGVQcm9ncmFtbWVzID0gZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYubGlzdGVQcm9ncmFtbWVzPy5wcm9ncmFtbWVcbiAgICBpZiAobGlzdGVQcm9ncmFtbWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3RlUHJvZ3JhbW1lcykpIHtcbiAgICAgICAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYubGlzdGVQcm9ncmFtbWVzID0gbGlzdGVQcm9ncmFtbWVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQobGlzdGVQcm9ncmFtbWVzKVxuICAgICAgICBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRi5saXN0ZVByb2dyYW1tZXMgPSBbbGlzdGVQcm9ncmFtbWVzXVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHByb2dyYW1tZSBvZiBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRi5saXN0ZVByb2dyYW1tZXMpIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMocHJvZ3JhbW1lKVxuXG4gICAgICAgIGlmIChwcm9ncmFtbWUubGlnbmVzQ3JlZGl0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGV0IGxpZ25lc0NyZWRpdHMgPSBwcm9ncmFtbWUubGlnbmVzQ3JlZGl0cy5saWduZUNyZWRpdFxuICAgICAgICAgIGlmIChsaWduZXNDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBwcm9ncmFtbWUubGlnbmVzQ3JlZGl0c1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlnbmVzQ3JlZGl0cykpIHtcbiAgICAgICAgICAgICAgYXNzZXJ0KGxpZ25lc0NyZWRpdHMpXG4gICAgICAgICAgICAgIGxpZ25lc0NyZWRpdHMgPSBbbGlnbmVzQ3JlZGl0c11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2dyYW1tZS5saWduZXNDcmVkaXRzID0gbGlnbmVzQ3JlZGl0c1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGlnbmVzQ3JlZGl0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpZ25lQ3JlZGl0IG9mIGxpZ25lc0NyZWRpdHMpIHtcbiAgICAgICAgICAgICAgaWYgKHJlY3RpZmljYXRpZikge1xuICAgICAgICAgICAgICAgIGNsZWFuTGlnbmVDcmVkaXRQTEZSKGxpZ25lQ3JlZGl0KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGxpZ25lQ3JlZGl0KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFuTGlnbmVDcmVkaXRQTEZSKGxpZ25lQ3JlZGl0UExGUjogYW55KTogdm9pZCB7XG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKGxpZ25lQ3JlZGl0UExGUilcblxuICBpZiAobGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCBsaWduZXNDcmVkaXRzID0gbGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHMubGlnbmVDcmVkaXRcbiAgICBpZiAobGlnbmVzQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgbGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHNcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxpZ25lc0NyZWRpdHMpKSB7XG4gICAgICAgIGFzc2VydChsaWduZXNDcmVkaXRzKVxuICAgICAgICBsaWduZXNDcmVkaXRzID0gW2xpZ25lc0NyZWRpdHNdXG4gICAgICB9XG4gICAgICBsaWduZUNyZWRpdFBMRlIubGlnbmVzQ3JlZGl0cyA9IGxpZ25lc0NyZWRpdHNcbiAgICB9XG4gICAgaWYgKGxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsaWduZUNyZWRpdCBvZiBsaWduZXNDcmVkaXRzKSB7XG4gICAgICAgIGNsZWFuTGlnbmVDcmVkaXRQTEZSKGxpZ25lQ3JlZGl0KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5UZXh0ZUxlZ2lzbGF0aWYodGV4dGVMZWdpc2xhdGlmOiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHModGV4dGVMZWdpc2xhdGlmKVxuXG4gIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgZmllbGRzIGluIGB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHNgIGFyZSBjdXJyZW50bHkgaWdub3JlZDpcbiAgLy8gKiBcIiN0ZXh0XCI/OiAgICAgICBzdHJpbmc7XG4gIC8vICogb2Zmc2V0PzogICAgICAgIG51bGw7XG4gIC8vICogbm9tPzogICAgICAgICAgIE5vbTtcbiAgLy8gKiBhdmFudF9BX0FwcmVzPzogRGl2aXNpb25BdmFudEFBcHJlcztcbiAgLy8gKiBkYXRlRGVwb3Q/OiAgICAgRGF0ZTtcbiAgLy8gKiBkb2N1bWVudFVSST86ICAgc3RyaW5nO1xuICAvLyBCZWNhdXNlIGl0IHNlZW1zIHRoZXkgc2hvdWxkIGJlbG9uZyB0byBhbiBcImFtZW5kZW1lbnRcIi5cbiAgbGV0IGFtZW5kZW1lbnQgPSB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMuYW1lbmRlbWVudFxuICBpZiAoQXJyYXkuaXNBcnJheShhbWVuZGVtZW50KSkge1xuICAgIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cyA9IGFtZW5kZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoYW1lbmRlbWVudClcbiAgICB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMgPSBbYW1lbmRlbWVudF1cbiAgfVxuXG4gIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICBjbGVhbkFtZW5kZW1lbnQoYW1lbmRlbWVudClcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxJQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFBa0QsU0FBQUQsdUJBQUFJLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxnQkFBQUEsQ0FBQTtBQUFBLFNBQUFFLDJCQUFBQyxDQUFBLEVBQUFILENBQUEsUUFBQUksQ0FBQSx5QkFBQUMsTUFBQSxJQUFBRixDQUFBLENBQUFFLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSCxDQUFBLHFCQUFBQyxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTCxDQUFBLE1BQUFDLENBQUEsR0FBQUssMkJBQUEsQ0FBQU4sQ0FBQSxNQUFBSCxDQUFBLElBQUFHLENBQUEsdUJBQUFBLENBQUEsQ0FBQU8sTUFBQSxJQUFBTixDQUFBLEtBQUFELENBQUEsR0FBQUMsQ0FBQSxPQUFBTyxFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQSxFQUFBLFdBQUFILEVBQUEsSUFBQVIsQ0FBQSxDQUFBTyxNQUFBLEtBQUFLLElBQUEsV0FBQUEsSUFBQSxNQUFBQyxLQUFBLEVBQUFiLENBQUEsQ0FBQVEsRUFBQSxVQUFBWCxDQUFBLFdBQUFBLEVBQUFHLENBQUEsVUFBQUEsQ0FBQSxLQUFBYyxDQUFBLEVBQUFMLENBQUEsZ0JBQUFNLFNBQUEsaUpBQUFDLENBQUEsRUFBQUMsQ0FBQSxPQUFBQyxDQUFBLGdCQUFBUixDQUFBLFdBQUFBLEVBQUEsSUFBQVQsQ0FBQSxHQUFBQSxDQUFBLENBQUFrQixJQUFBLENBQUFuQixDQUFBLE1BQUFXLENBQUEsV0FBQUEsRUFBQSxRQUFBWCxDQUFBLEdBQUFDLENBQUEsQ0FBQW1CLElBQUEsV0FBQUgsQ0FBQSxHQUFBakIsQ0FBQSxDQUFBWSxJQUFBLEVBQUFaLENBQUEsS0FBQUgsQ0FBQSxXQUFBQSxFQUFBRyxDQUFBLElBQUFrQixDQUFBLE9BQUFGLENBQUEsR0FBQWhCLENBQUEsS0FBQWMsQ0FBQSxXQUFBQSxFQUFBLFVBQUFHLENBQUEsWUFBQWhCLENBQUEsY0FBQUEsQ0FBQSw4QkFBQWlCLENBQUEsUUFBQUYsQ0FBQTtBQUFBLFNBQUFWLDRCQUFBTixDQUFBLEVBQUFpQixDQUFBLFFBQUFqQixDQUFBLDJCQUFBQSxDQUFBLFNBQUFxQixpQkFBQSxDQUFBckIsQ0FBQSxFQUFBaUIsQ0FBQSxPQUFBaEIsQ0FBQSxNQUFBcUIsUUFBQSxDQUFBSCxJQUFBLENBQUFuQixDQUFBLEVBQUF1QixLQUFBLDZCQUFBdEIsQ0FBQSxJQUFBRCxDQUFBLENBQUF3QixXQUFBLEtBQUF2QixDQUFBLEdBQUFELENBQUEsQ0FBQXdCLFdBQUEsQ0FBQUMsSUFBQSxhQUFBeEIsQ0FBQSxjQUFBQSxDQUFBLEdBQUFHLEtBQUEsQ0FBQXNCLElBQUEsQ0FBQTFCLENBQUEsb0JBQUFDLENBQUEsK0NBQUEwQixJQUFBLENBQUExQixDQUFBLElBQUFvQixpQkFBQSxDQUFBckIsQ0FBQSxFQUFBaUIsQ0FBQTtBQUFBLFNBQUFJLGtCQUFBckIsQ0FBQSxFQUFBaUIsQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQWpCLENBQUEsQ0FBQU8sTUFBQSxNQUFBVSxDQUFBLEdBQUFqQixDQUFBLENBQUFPLE1BQUEsWUFBQVYsQ0FBQSxNQUFBYyxDQUFBLEdBQUFQLEtBQUEsQ0FBQWEsQ0FBQSxHQUFBcEIsQ0FBQSxHQUFBb0IsQ0FBQSxFQUFBcEIsQ0FBQSxJQUFBYyxDQUFBLENBQUFkLENBQUEsSUFBQUcsQ0FBQSxDQUFBSCxDQUFBLFVBQUFjLENBQUE7QUFFM0MsU0FBU2lCLGVBQWVBLENBQUNDLFVBQWUsRUFBUTtFQUNyRCxJQUFBQyxzQkFBaUIsRUFBQ0QsVUFBVSxDQUFDO0VBRTdCLElBQU1FLFdBQVcsR0FBR0YsVUFBVSxDQUFDRSxXQUFXO0VBQzFDO0lBQ0UsSUFBQUQsc0JBQWlCLEVBQUNDLFdBQVcsQ0FBQztJQUU5QixJQUFNQyxNQUFNLEdBQUdELFdBQVcsQ0FBQ0MsTUFBTTtJQUNqQztNQUNFLElBQUFGLHNCQUFpQixFQUFDRSxNQUFNLENBQUM7SUFDM0I7SUFFQSxJQUFJRCxXQUFXLENBQUNFLGFBQWEsS0FBS0MsU0FBUyxFQUFFO01BQzNDLElBQU1DLFNBQVMsR0FBR0osV0FBVyxDQUFDRSxhQUFhLENBQUNFLFNBQVM7TUFDckQsSUFBSS9CLEtBQUssQ0FBQ0MsT0FBTyxDQUFDOEIsU0FBUyxDQUFDLEVBQUU7UUFDNUJKLFdBQVcsQ0FBQ0ssaUJBQWlCLEdBQUdELFNBQVM7TUFDM0MsQ0FBQyxNQUFNO1FBQ0wsSUFBQUUsa0JBQU0sRUFBQ0YsU0FBUyxDQUFDO1FBQ2pCSixXQUFXLENBQUNLLGlCQUFpQixHQUFHLENBQUNELFNBQVMsQ0FBQztNQUM3QztNQUNBLE9BQU9KLFdBQVcsQ0FBQ0UsYUFBYTtJQUNsQztJQUVBLElBQUlLLE9BQU8sR0FBR1AsV0FBVyxDQUFDTyxPQUFPO0lBQ2pDLElBQUlBLE9BQU8sS0FBS0osU0FBUyxFQUFFO01BQ3pCSSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxDQUFDQyxJQUFJLENBQUMsR0FBRyxDQUFDO01BQ3RELElBQUlKLE9BQU8sRUFBRTtRQUNYUCxXQUFXLENBQUNPLE9BQU8sR0FBR0EsT0FBTztNQUMvQixDQUFDLE1BQU07UUFDTCxPQUFPUCxXQUFXLENBQUNPLE9BQU87TUFDNUI7SUFDRjtFQUNGO0VBRUEsSUFBTUsscUJBQXFCLEdBQUdkLFVBQVUsQ0FBQ2MscUJBQXFCO0VBQzlEO0lBQ0UsSUFBQWIsc0JBQWlCLEVBQUNhLHFCQUFxQixDQUFDO0lBRXhDLElBQU1DLFFBQVEsR0FBR0QscUJBQXFCLENBQUNDLFFBQVE7SUFDL0MsSUFBSUEsUUFBUSxLQUFLVixTQUFTLEVBQUU7TUFDMUIsSUFBQUosc0JBQWlCLEVBQUNjLFFBQVEsQ0FBQztNQUUzQixJQUFJQyxXQUFXLEdBQUdELFFBQVEsQ0FBQ0UsYUFBYTtNQUN4QyxJQUFJRCxXQUFXLEtBQUtYLFNBQVMsRUFBRTtRQUM3QixPQUFPVSxRQUFRLENBQUNFLGFBQWE7UUFDN0IsSUFBSUQsV0FBVyxLQUFLLE9BQU8sRUFBRTtVQUMzQkEsV0FBVyxHQUFHRSx3QkFBVyxDQUFDQyxLQUFLO1FBQ2pDO1FBQ0FKLFFBQVEsQ0FBQ0MsV0FBVyxHQUFHQSxXQUFXO01BQ3BDO0lBQ0Y7SUFFQSxJQUFNSSxrQkFBa0IsR0FBR04scUJBQXFCLENBQUNNLGtCQUFrQjtJQUNuRSxJQUFJQSxrQkFBa0IsS0FBS2YsU0FBUyxFQUFFO01BQ3BDLElBQUFKLHNCQUFpQixFQUFDbUIsa0JBQWtCLENBQUM7TUFFckMsSUFBTUMsTUFBTSxHQUFHRCxrQkFBa0IsQ0FBQ0MsTUFBTTtNQUN4QyxJQUFJQSxNQUFNLEtBQUtoQixTQUFTLEVBQUU7UUFDeEIsSUFBQUosc0JBQWlCLEVBQUNvQixNQUFNLENBQUM7UUFFekIsSUFBSUwsWUFBVyxHQUFHSyxNQUFNLENBQUNKLGFBQWE7UUFDdEMsSUFBSUQsWUFBVyxLQUFLWCxTQUFTLEVBQUU7VUFDN0IsT0FBT2dCLE1BQU0sQ0FBQ0osYUFBYTtVQUMzQixJQUFJRCxZQUFXLEtBQUssT0FBTyxFQUFFO1lBQzNCQSxZQUFXLEdBQUdFLHdCQUFXLENBQUNDLEtBQUs7VUFDakMsQ0FBQyxNQUFNLElBQ0wsQ0FBQyxDQUFDRCx3QkFBVyxDQUFDSSxDQUFDLEVBQUVKLHdCQUFXLENBQUNDLEtBQUssRUFBRUQsd0JBQVcsQ0FBQ0ssS0FBSyxDQUFDLENBQUNDLFFBQVEsQ0FDN0RSLFlBQ0YsQ0FBQyxFQUNEO1lBQ0FBLFlBQVcsR0FBR0Usd0JBQVcsQ0FBQ0ksQ0FBQztVQUM3QjtVQUNBRCxNQUFNLENBQUNMLFdBQVcsR0FBR0EsWUFBVztRQUNsQztRQUVBRixxQkFBcUIsQ0FBQ08sTUFBTSxHQUFHQSxNQUFNO01BQ3ZDO01BQ0EsT0FBT1AscUJBQXFCLENBQUNNLGtCQUFrQjtJQUNqRDtFQUNGO0VBRUEsSUFBTUssS0FBSyxHQUFHekIsVUFBVSxDQUFDeUIsS0FBSztFQUM5QixJQUFJQSxLQUFLLEtBQUtwQixTQUFTLEVBQUU7SUFDdkIsSUFBQUosc0JBQWlCLEVBQUN3QixLQUFLLENBQUM7SUFFeEIsSUFBTUMsYUFBYSxHQUFHRCxLQUFLLENBQUNDLGFBQWE7SUFDekMsSUFBSUEsYUFBYSxLQUFLckIsU0FBUyxFQUFFO01BQy9CLElBQUFKLHNCQUFpQixFQUFDeUIsYUFBYSxDQUFDO01BRWhDLElBQU1DLFVBQVUsR0FBR0QsYUFBYSxDQUFDQyxVQUFVO01BQzNDLElBQUlBLFVBQVUsS0FBS3RCLFNBQVMsRUFBRTtRQUM1QixJQUFBSixzQkFBaUIsRUFBQzBCLFVBQVUsQ0FBQztRQUU3QkMsNEJBQTRCLENBQUNELFVBQVUsQ0FBQ0UsdUJBQXVCLEVBQUU7VUFDL0RDLFlBQVksRUFBRTtRQUNoQixDQUFDLENBQUM7UUFDRkYsNEJBQTRCLENBQUNELFVBQVUsQ0FBQ0ksd0JBQXdCLEVBQUU7VUFDaEVELFlBQVksRUFBRTtRQUNoQixDQUFDLENBQUM7UUFFRixJQUFJRSxNQUFNLENBQUNDLElBQUksQ0FBQ04sVUFBVSxDQUFDLENBQUNqRCxNQUFNLEtBQUssQ0FBQyxFQUFFO1VBQ3hDLE9BQU9nRCxhQUFhLENBQUNDLFVBQVU7UUFDakM7TUFDRjtNQUVBbkIsa0JBQU0sQ0FBQzBCLFdBQVcsQ0FBQ1IsYUFBYSxDQUFDUyxvQkFBb0IsRUFBRTlCLFNBQVMsQ0FBQztNQUVqRXVCLDRCQUE0QixDQUFDRixhQUFhLENBQUNHLHVCQUF1QixFQUFFO1FBQ2xFQyxZQUFZLEVBQUU7TUFDaEIsQ0FBQyxDQUFDO01BQ0ZGLDRCQUE0QixDQUFDRixhQUFhLENBQUNLLHdCQUF3QixFQUFFO1FBQ25FRCxZQUFZLEVBQUU7TUFDaEIsQ0FBQyxDQUFDO0lBQ0o7RUFDRjtFQUVBLElBQU1NLFVBQVUsR0FBR3BDLFVBQVUsQ0FBQ29DLFVBQVU7RUFDeEMsSUFBSUEsVUFBVSxLQUFLL0IsU0FBUyxFQUFFO0lBQzVCLElBQUFKLHNCQUFpQixFQUFDbUMsVUFBVSxDQUFDO0lBRTdCLElBQU1DLGtCQUFrQixHQUFHRCxVQUFVLENBQUNDLGtCQUFrQjtJQUN4RDtNQUNFLElBQUFwQyxzQkFBaUIsRUFBQ29DLGtCQUFrQixDQUFDO01BRXJDLElBQU1DLElBQUksR0FBR0Qsa0JBQWtCLENBQUNDLElBQUk7TUFDcEM7UUFDRSxJQUFBckMsc0JBQWlCLEVBQUNxQyxJQUFJLENBQUM7TUFDekI7TUFFQSxJQUFNQyxRQUFRLEdBQUdGLGtCQUFrQixDQUFDRSxRQUFRO01BQzVDLElBQUlBLFFBQVEsS0FBS2xDLFNBQVMsRUFBRTtRQUMxQixJQUFBSixzQkFBaUIsRUFBQ3NDLFFBQVEsQ0FBQztNQUM3QjtJQUNGO0VBQ0Y7RUFFQSxJQUFJdkMsVUFBVSxDQUFDd0MsZUFBZSxLQUFLbkMsU0FBUyxFQUFFO0lBQzVDLElBQU1vQyxjQUFjLEdBQUd6QyxVQUFVLENBQUN3QyxlQUFlLENBQUNDLGNBQWM7SUFDaEUsSUFBQWpDLGtCQUFNLEVBQUMsQ0FBQ2pDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaUUsY0FBYyxDQUFDLENBQUM7SUFDdEN6QyxVQUFVLENBQUN5QyxjQUFjLEdBQUdBLGNBQWM7SUFDMUMsT0FBT3pDLFVBQVUsQ0FBQ3dDLGVBQWU7SUFDakM7TUFDRSxJQUFBdkMsc0JBQWlCLEVBQUN3QyxjQUFjLENBQUM7TUFFakNqQyxrQkFBTSxDQUFDMEIsV0FBVyxDQUFDTyxjQUFjLENBQUNDLFNBQVMsRUFBRXJDLFNBQVMsQ0FBQztNQUN2REcsa0JBQU0sQ0FBQzBCLFdBQVcsQ0FBQ08sY0FBYyxDQUFDRSxNQUFNLEVBQUV0QyxTQUFTLENBQUM7TUFDcERHLGtCQUFNLENBQUMwQixXQUFXLENBQUNPLGNBQWMsQ0FBQ0csdUJBQXVCLEVBQUV2QyxTQUFTLENBQUM7TUFFckUsSUFBTXdDLG9CQUFvQixHQUFHSixjQUFjLENBQUNJLG9CQUFvQjtNQUNoRTtRQUNFLElBQUFDLDBCQUFxQixFQUFDRCxvQkFBb0IsRUFBRSxXQUFXLENBQUM7UUFDeEQsSUFBQUMsMEJBQXFCLEVBQUNELG9CQUFvQixFQUFFLGdCQUFnQixDQUFDO1FBQzdELElBQUFDLDBCQUFxQixFQUFDRCxvQkFBb0IsRUFBRSxZQUFZLENBQUM7UUFDekQsSUFBQUMsMEJBQXFCLEVBQUNELG9CQUFvQixFQUFFLGVBQWUsQ0FBQztRQUM1RCxJQUFBQywwQkFBcUIsRUFBQ0Qsb0JBQW9CLEVBQUUsVUFBVSxDQUFDO01BQ3pEO0lBQ0Y7RUFDRjtFQUVBLElBQU1FLFlBQVksR0FBRy9DLFVBQVUsQ0FBQytDLFlBQVk7RUFDNUMsSUFBSUEsWUFBWSxLQUFLMUMsU0FBUyxFQUFFO0lBQzlCLElBQUFKLHNCQUFpQixFQUFDOEMsWUFBWSxDQUFDO0VBQ2pDO0VBRUEsSUFBTUMsaUJBQWlCLEdBQUdoRCxVQUFVLENBQUNnRCxpQkFBaUI7RUFDdEQsSUFBSUEsaUJBQWlCLEtBQUszQyxTQUFTLEVBQUU7SUFDbkMsSUFBQUosc0JBQWlCLEVBQUMrQyxpQkFBaUIsQ0FBQztFQUN0QztFQUVBLElBQU1DLG1CQUFtQixHQUFHakQsVUFBVSxDQUFDaUQsbUJBQW1CO0VBQzFELElBQUlBLG1CQUFtQixLQUFLNUMsU0FBUyxFQUFFO0lBQ3JDLElBQUFKLHNCQUFpQixFQUFDZ0QsbUJBQW1CLENBQUM7RUFDeEM7QUFDRjtBQUVBLFNBQVNyQiw0QkFBNEJBLENBQ25DQyx1QkFBNEIsRUFBQXFCLElBQUEsRUFFdEI7RUFBQSxJQURKcEIsWUFBWSxHQUFBb0IsSUFBQSxDQUFacEIsWUFBWTtFQUVkLElBQUlELHVCQUF1QixLQUFLeEIsU0FBUyxFQUFFO0lBQUEsSUFBQThDLHFCQUFBO0lBQ3pDLElBQU1DLGVBQWUsSUFBQUQscUJBQUEsR0FBR3RCLHVCQUF1QixDQUFDdUIsZUFBZSxjQUFBRCxxQkFBQSx1QkFBdkNBLHFCQUFBLENBQXlDRSxTQUFTO0lBQzFFLElBQUlELGVBQWUsS0FBSy9DLFNBQVMsRUFBRTtNQUNqQyxJQUFJOUIsS0FBSyxDQUFDQyxPQUFPLENBQUM0RSxlQUFlLENBQUMsRUFBRTtRQUNsQ3ZCLHVCQUF1QixDQUFDdUIsZUFBZSxHQUFHQSxlQUFlO01BQzNELENBQUMsTUFBTTtRQUNMLElBQUE1QyxrQkFBTSxFQUFDNEMsZUFBZSxDQUFDO1FBQ3ZCdkIsdUJBQXVCLENBQUN1QixlQUFlLEdBQUcsQ0FBQ0EsZUFBZSxDQUFDO01BQzdEO01BQUMsSUFBQUUsU0FBQSxHQUFBcEYsMEJBQUEsQ0FFdUIyRCx1QkFBdUIsQ0FBQ3VCLGVBQWU7UUFBQUcsS0FBQTtNQUFBO1FBQS9ELEtBQUFELFNBQUEsQ0FBQXpFLENBQUEsTUFBQTBFLEtBQUEsR0FBQUQsU0FBQSxDQUFBeEUsQ0FBQSxJQUFBQyxJQUFBLEdBQWlFO1VBQUEsSUFBdERzRSxTQUFTLEdBQUFFLEtBQUEsQ0FBQXZFLEtBQUE7VUFDbEIsSUFBQWlCLHNCQUFpQixFQUFDb0QsU0FBUyxDQUFDO1VBRTVCLElBQUlBLFNBQVMsQ0FBQ0csYUFBYSxLQUFLbkQsU0FBUyxFQUFFO1lBQ3pDLElBQUltRCxhQUFhLEdBQUdILFNBQVMsQ0FBQ0csYUFBYSxDQUFDQyxXQUFXO1lBQ3ZELElBQUlELGFBQWEsS0FBS25ELFNBQVMsRUFBRTtjQUMvQixPQUFPZ0QsU0FBUyxDQUFDRyxhQUFhO1lBQ2hDLENBQUMsTUFBTTtjQUNMLElBQUksQ0FBQ2pGLEtBQUssQ0FBQ0MsT0FBTyxDQUFDZ0YsYUFBYSxDQUFDLEVBQUU7Z0JBQ2pDLElBQUFoRCxrQkFBTSxFQUFDZ0QsYUFBYSxDQUFDO2dCQUNyQkEsYUFBYSxHQUFHLENBQUNBLGFBQWEsQ0FBQztjQUNqQztjQUNBSCxTQUFTLENBQUNHLGFBQWEsR0FBR0EsYUFBYTtZQUN6QztZQUNBLElBQUlBLGFBQWEsS0FBS25ELFNBQVMsRUFBRTtjQUFBLElBQUFxRCxVQUFBLEdBQUF4RiwwQkFBQSxDQUNMc0YsYUFBYTtnQkFBQUcsTUFBQTtjQUFBO2dCQUF2QyxLQUFBRCxVQUFBLENBQUE3RSxDQUFBLE1BQUE4RSxNQUFBLEdBQUFELFVBQUEsQ0FBQTVFLENBQUEsSUFBQUMsSUFBQSxHQUF5QztrQkFBQSxJQUE5QjBFLFdBQVcsR0FBQUUsTUFBQSxDQUFBM0UsS0FBQTtrQkFDcEIsSUFBSThDLFlBQVksRUFBRTtvQkFDaEI4QixvQkFBb0IsQ0FBQ0gsV0FBVyxDQUFDO2tCQUNuQyxDQUFDLE1BQU07b0JBQ0wsSUFBQXhELHNCQUFpQixFQUFDd0QsV0FBVyxDQUFDO2tCQUNoQztnQkFDRjtjQUFDLFNBQUFJLEdBQUE7Z0JBQUFILFVBQUEsQ0FBQTFGLENBQUEsQ0FBQTZGLEdBQUE7Y0FBQTtnQkFBQUgsVUFBQSxDQUFBekUsQ0FBQTtjQUFBO1lBQ0g7VUFDRjtRQUNGO01BQUMsU0FBQTRFLEdBQUE7UUFBQVAsU0FBQSxDQUFBdEYsQ0FBQSxDQUFBNkYsR0FBQTtNQUFBO1FBQUFQLFNBQUEsQ0FBQXJFLENBQUE7TUFBQTtJQUNIO0VBQ0Y7QUFDRjtBQUVBLFNBQVMyRSxvQkFBb0JBLENBQUNFLGVBQW9CLEVBQVE7RUFDeEQsSUFBQTdELHNCQUFpQixFQUFDNkQsZUFBZSxDQUFDO0VBRWxDLElBQUlBLGVBQWUsQ0FBQ04sYUFBYSxLQUFLbkQsU0FBUyxFQUFFO0lBQy9DLElBQUltRCxhQUFhLEdBQUdNLGVBQWUsQ0FBQ04sYUFBYSxDQUFDQyxXQUFXO0lBQzdELElBQUlELGFBQWEsS0FBS25ELFNBQVMsRUFBRTtNQUMvQixPQUFPeUQsZUFBZSxDQUFDTixhQUFhO0lBQ3RDLENBQUMsTUFBTTtNQUNMLElBQUksQ0FBQ2pGLEtBQUssQ0FBQ0MsT0FBTyxDQUFDZ0YsYUFBYSxDQUFDLEVBQUU7UUFDakMsSUFBQWhELGtCQUFNLEVBQUNnRCxhQUFhLENBQUM7UUFDckJBLGFBQWEsR0FBRyxDQUFDQSxhQUFhLENBQUM7TUFDakM7TUFDQU0sZUFBZSxDQUFDTixhQUFhLEdBQUdBLGFBQWE7SUFDL0M7SUFDQSxJQUFJQSxhQUFhLEtBQUtuRCxTQUFTLEVBQUU7TUFBQSxJQUFBMEQsVUFBQSxHQUFBN0YsMEJBQUEsQ0FDTHNGLGFBQWE7UUFBQVEsTUFBQTtNQUFBO1FBQXZDLEtBQUFELFVBQUEsQ0FBQWxGLENBQUEsTUFBQW1GLE1BQUEsR0FBQUQsVUFBQSxDQUFBakYsQ0FBQSxJQUFBQyxJQUFBLEdBQXlDO1VBQUEsSUFBOUIwRSxXQUFXLEdBQUFPLE1BQUEsQ0FBQWhGLEtBQUE7VUFDcEI0RSxvQkFBb0IsQ0FBQ0gsV0FBVyxDQUFDO1FBQ25DO01BQUMsU0FBQUksR0FBQTtRQUFBRSxVQUFBLENBQUEvRixDQUFBLENBQUE2RixHQUFBO01BQUE7UUFBQUUsVUFBQSxDQUFBOUUsQ0FBQTtNQUFBO0lBQ0g7RUFDRjtBQUNGO0FBRU8sU0FBU2dGLG9CQUFvQkEsQ0FBQ0MsZUFBb0IsRUFBUTtFQUMvRCxJQUFBakUsc0JBQWlCLEVBQUNpRSxlQUFlLENBQUM7O0VBRWxDO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFJbEUsVUFBVSxHQUFHa0UsZUFBZSxDQUFDQyxXQUFXLENBQUNuRSxVQUFVO0VBQ3ZELElBQUl6QixLQUFLLENBQUNDLE9BQU8sQ0FBQ3dCLFVBQVUsQ0FBQyxFQUFFO0lBQzdCa0UsZUFBZSxDQUFDQyxXQUFXLEdBQUduRSxVQUFVO0VBQzFDLENBQUMsTUFBTTtJQUNMLElBQUFRLGtCQUFNLEVBQUNSLFVBQVUsQ0FBQztJQUNsQmtFLGVBQWUsQ0FBQ0MsV0FBVyxHQUFHLENBQUNuRSxVQUFVLENBQUM7RUFDNUM7RUFBQyxJQUFBb0UsVUFBQSxHQUFBbEcsMEJBQUEsQ0FFd0JnRyxlQUFlLENBQUNDLFdBQVc7SUFBQUUsTUFBQTtFQUFBO0lBQXBELEtBQUFELFVBQUEsQ0FBQXZGLENBQUEsTUFBQXdGLE1BQUEsR0FBQUQsVUFBQSxDQUFBdEYsQ0FBQSxJQUFBQyxJQUFBLEdBQXNEO01BQUEsSUFBM0NpQixXQUFVLEdBQUFxRSxNQUFBLENBQUFyRixLQUFBO01BQ25CZSxlQUFlLENBQUNDLFdBQVUsQ0FBQztJQUM3QjtFQUFDLFNBQUE2RCxHQUFBO0lBQUFPLFVBQUEsQ0FBQXBHLENBQUEsQ0FBQTZGLEdBQUE7RUFBQTtJQUFBTyxVQUFBLENBQUFuRixDQUFBO0VBQUE7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==