@tricoteuses/assemblee 1.1.3 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/lib/bugs/acteur-00010/plugin.test.js +53 -55
  2. package/lib/bugs/acteur-00010.js +26 -30
  3. package/lib/bugs/agenda-00002/plugin.test.js +78 -82
  4. package/lib/bugs/agenda-00002.js +206 -214
  5. package/lib/bugs/agenda-00008/plugin.test.js +54 -56
  6. package/lib/bugs/agenda-00008.js +38 -42
  7. package/lib/bugs/agenda-00011/plugin.test.js +204 -214
  8. package/lib/bugs/agenda-00011.js +117 -131
  9. package/lib/bugs.js +212 -232
  10. package/lib/cleaners/actes_legislatifs.js +1 -1
  11. package/lib/cleaners/acteurs.js +2 -2
  12. package/lib/cleaners/amendements.js +1 -1
  13. package/lib/cleaners/documents.js +1 -1
  14. package/lib/cleaners/dossiers_legislatifs.js +1 -1
  15. package/lib/cleaners/reunions.js +1 -1
  16. package/lib/cleaners/scrutins.js +1 -1
  17. package/lib/cleaners/xml.js +2 -2
  18. package/lib/datasets.js +2 -2
  19. package/lib/dossiers_legislatifs.js +1 -1
  20. package/lib/file_systems.js +48 -50
  21. package/lib/git.js +3 -3
  22. package/lib/git.mjs +2 -2
  23. package/lib/inserters.js +1 -1
  24. package/lib/loaders.js +1 -1
  25. package/lib/parsers/documents.js +29 -31
  26. package/lib/parsers/recherche_amendements.js +284 -288
  27. package/lib/parsers/recherche_amendements.mjs +1 -1
  28. package/lib/raw_types/acteurs_et_organes.d.ts +1 -0
  29. package/lib/raw_types/acteurs_et_organes.js +3 -2
  30. package/lib/raw_types/acteurs_et_organes.mjs +3 -2
  31. package/lib/scripts/bugs_helper.js +301 -317
  32. package/lib/scripts/clean_data.js +1 -1
  33. package/lib/scripts/clean_reorganized_data.js +13 -15
  34. package/lib/scripts/clean_reorganized_data.mjs +1 -1
  35. package/lib/scripts/diff_amendements.js +1 -1
  36. package/lib/scripts/document_dossiers_legislatifs.js +2 -2
  37. package/lib/scripts/merge_scrutins.js +1 -1
  38. package/lib/scripts/parse_textes_lois.js +3 -3
  39. package/lib/scripts/parse_textes_lois.mjs +2 -2
  40. package/lib/scripts/raw_types_from_amendements.js +133 -135
  41. package/lib/scripts/reorganize_data.js +14 -16
  42. package/lib/scripts/reorganize_data.mjs +2 -2
  43. package/lib/scripts/retrieve_deputes_photos.js +170 -172
  44. package/lib/scripts/retrieve_deputes_photos.mjs +2 -2
  45. package/lib/scripts/retrieve_documents.js +266 -278
  46. package/lib/scripts/retrieve_open_data.js +140 -144
  47. package/lib/scripts/retrieve_open_data.mjs +1 -1
  48. package/lib/scripts/retrieve_pending_amendments.js +118 -120
  49. package/lib/scripts/retrieve_senateurs_photos.js +168 -170
  50. package/lib/scripts/retrieve_senateurs_photos.mjs +2 -2
  51. package/lib/scripts/retrieve_textes_lois.js +130 -132
  52. package/lib/scripts/retrieve_textes_lois.mjs +2 -2
  53. package/lib/scripts/validate_json.js +87 -91
  54. package/lib/types/acteurs_et_organes.d.ts +1 -0
  55. package/lib/types/acteurs_et_organes.js +3 -2
  56. package/lib/types/acteurs_et_organes.mjs +3 -2
  57. package/lib/types/dossiers_legislatifs.js +1 -1
  58. package/lib/types/dossiers_legislatifs.mjs +1 -1
  59. package/package.json +6 -6
@@ -39,7 +39,7 @@ var _nodeFetch = _interopRequireDefault(require("node-fetch"));
39
39
  var _bugs = require("../bugs");
40
40
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
41
41
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
42
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
42
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
43
43
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
44
44
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
45
45
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@@ -79,14 +79,12 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
79
79
  value: function () {
80
80
  var _preFix = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
81
81
  return _regeneratorRuntime().wrap(function _callee$(_context) {
82
- while (1) {
83
- switch (_context.prev = _context.next) {
84
- case 0:
85
- return _context.abrupt("return", this.setSessions());
86
- case 1:
87
- case "end":
88
- return _context.stop();
89
- }
82
+ while (1) switch (_context.prev = _context.next) {
83
+ case 0:
84
+ return _context.abrupt("return", this.setSessions());
85
+ case 1:
86
+ case "end":
87
+ return _context.stop();
90
88
  }
91
89
  }, _callee, this);
92
90
  }));
@@ -100,14 +98,12 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
100
98
  value: function () {
101
99
  var _preCheck = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
102
100
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
103
- while (1) {
104
- switch (_context2.prev = _context2.next) {
105
- case 0:
106
- return _context2.abrupt("return", this.setSessions());
107
- case 1:
108
- case "end":
109
- return _context2.stop();
110
- }
101
+ while (1) switch (_context2.prev = _context2.next) {
102
+ case 0:
103
+ return _context2.abrupt("return", this.setSessions());
104
+ case 1:
105
+ case "end":
106
+ return _context2.stop();
111
107
  }
112
108
  }, _callee2, this);
113
109
  }));
@@ -122,26 +118,24 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
122
118
  var _setSessions = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
123
119
  var sessions;
124
120
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
125
- while (1) {
126
- switch (_context3.prev = _context3.next) {
127
- case 0:
128
- _context3.next = 2;
129
- return this.fetchSessions();
130
- case 2:
131
- sessions = _context3.sent.sort(function (a, b) {
132
- return compareString(a["start_time"]["value"], b["start_time"]["value"]);
133
- });
134
- this.sessions = sessions.map(function (s) {
135
- return {
136
- label: s["label"]["value"].replace(/\s+en france/i, ""),
137
- debut: s["start_time"]["value"].substr(0, 10),
138
- fin: s["end_time"]["value"].substr(0, 10)
139
- };
140
- });
141
- case 4:
142
- case "end":
143
- return _context3.stop();
144
- }
121
+ while (1) switch (_context3.prev = _context3.next) {
122
+ case 0:
123
+ _context3.next = 2;
124
+ return this.fetchSessions();
125
+ case 2:
126
+ sessions = _context3.sent.sort(function (a, b) {
127
+ return compareString(a["start_time"]["value"], b["start_time"]["value"]);
128
+ });
129
+ this.sessions = sessions.map(function (s) {
130
+ return {
131
+ label: s["label"]["value"].replace(/\s+en france/i, ""),
132
+ debut: s["start_time"]["value"].substr(0, 10),
133
+ fin: s["end_time"]["value"].substr(0, 10)
134
+ };
135
+ });
136
+ case 4:
137
+ case "end":
138
+ return _context3.stop();
145
139
  }
146
140
  }, _callee3, this);
147
141
  }));
@@ -155,14 +149,12 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
155
149
  value: function () {
156
150
  var _get = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(url, headers) {
157
151
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
158
- while (1) {
159
- switch (_context4.prev = _context4.next) {
160
- case 0:
161
- return _context4.abrupt("return", this.fetch(url, headers));
162
- case 1:
163
- case "end":
164
- return _context4.stop();
165
- }
152
+ while (1) switch (_context4.prev = _context4.next) {
153
+ case 0:
154
+ return _context4.abrupt("return", this.fetch(url, headers));
155
+ case 1:
156
+ case "end":
157
+ return _context4.stop();
166
158
  }
167
159
  }, _callee4, this);
168
160
  }));
@@ -177,32 +169,30 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
177
169
  var _fetchSessions = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
178
170
  var response, payload;
179
171
  return _regeneratorRuntime().wrap(function _callee5$(_context5) {
180
- while (1) {
181
- switch (_context5.prev = _context5.next) {
182
- case 0:
183
- _context5.next = 2;
184
- return this.get(url, {
185
- headers: {
186
- Accept: "application/json"
187
- }
188
- });
189
- case 2:
190
- response = _context5.sent;
191
- if (response.ok) {
192
- _context5.next = 5;
193
- break;
172
+ while (1) switch (_context5.prev = _context5.next) {
173
+ case 0:
174
+ _context5.next = 2;
175
+ return this.get(url, {
176
+ headers: {
177
+ Accept: "application/json"
194
178
  }
195
- throw response;
196
- case 5:
197
- _context5.next = 7;
198
- return response.json();
199
- case 7:
200
- payload = _context5.sent;
201
- return _context5.abrupt("return", payload["results"]["bindings"]);
202
- case 9:
203
- case "end":
204
- return _context5.stop();
205
- }
179
+ });
180
+ case 2:
181
+ response = _context5.sent;
182
+ if (response.ok) {
183
+ _context5.next = 5;
184
+ break;
185
+ }
186
+ throw response;
187
+ case 5:
188
+ _context5.next = 7;
189
+ return response.json();
190
+ case 7:
191
+ payload = _context5.sent;
192
+ return _context5.abrupt("return", payload["results"]["bindings"]);
193
+ case 9:
194
+ case "end":
195
+ return _context5.stop();
206
196
  }
207
197
  }, _callee5, this);
208
198
  }));
@@ -253,34 +243,32 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
253
243
  var _check = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(agenda, _filename) {
254
244
  var debut, session;
255
245
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
256
- while (1) {
257
- switch (_context6.prev = _context6.next) {
258
- case 0:
259
- if (this.inScope(agenda)) {
260
- _context6.next = 2;
261
- break;
262
- }
263
- return _context6.abrupt("return", null);
264
- case 2:
265
- debut = agenda.timestampDebut.substr(0, 10);
266
- session = this.lookupSession(debut);
267
- if (!(session == null)) {
268
- _context6.next = 8;
269
- break;
270
- }
271
- return _context6.abrupt("return", {
272
- status: "needs-fixing",
273
- info: ["".concat(debut, " is not in a session")]
274
- });
275
- case 8:
276
- return _context6.abrupt("return", {
277
- status: "ok",
278
- info: [""]
279
- });
280
- case 9:
281
- case "end":
282
- return _context6.stop();
283
- }
246
+ while (1) switch (_context6.prev = _context6.next) {
247
+ case 0:
248
+ if (this.inScope(agenda)) {
249
+ _context6.next = 2;
250
+ break;
251
+ }
252
+ return _context6.abrupt("return", null);
253
+ case 2:
254
+ debut = agenda.timestampDebut.substr(0, 10);
255
+ session = this.lookupSession(debut);
256
+ if (!(session == null)) {
257
+ _context6.next = 8;
258
+ break;
259
+ }
260
+ return _context6.abrupt("return", {
261
+ status: "needs-fixing",
262
+ info: ["".concat(debut, " is not in a session")]
263
+ });
264
+ case 8:
265
+ return _context6.abrupt("return", {
266
+ status: "ok",
267
+ info: [""]
268
+ });
269
+ case 9:
270
+ case "end":
271
+ return _context6.stop();
284
272
  }
285
273
  }, _callee6, this);
286
274
  }));
@@ -304,38 +292,36 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
304
292
  var _fix = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(agenda, _filename) {
305
293
  var status, session;
306
294
  return _regeneratorRuntime().wrap(function _callee7$(_context7) {
307
- while (1) {
308
- switch (_context7.prev = _context7.next) {
309
- case 0:
310
- if ("sessionRef" in agenda) {
311
- // sessionRef is undefined and must be removed
312
- delete agenda.sessionRef;
313
- status = true;
314
- } else {
315
- // if there is no sessionRef to remove, file which is not in scope does not need to be rewritten
316
- status = null;
317
- }
318
- if (this.inScope(agenda)) {
319
- _context7.next = 3;
320
- break;
321
- }
322
- return _context7.abrupt("return", status);
323
- case 3:
324
- if ("session" in agenda) delete agenda.session;
325
- session = this.lookupSession(agenda.timestampDebut.substr(0, 10));
326
- if (!(session == null)) {
327
- _context7.next = 9;
328
- break;
329
- }
330
- return _context7.abrupt("return", null);
331
- case 9:
332
- agenda.session = session;
333
- this.maybeUpgradeSchemaVersion(agenda);
334
- return _context7.abrupt("return", true);
335
- case 12:
336
- case "end":
337
- return _context7.stop();
338
- }
295
+ while (1) switch (_context7.prev = _context7.next) {
296
+ case 0:
297
+ if ("sessionRef" in agenda) {
298
+ // sessionRef is undefined and must be removed
299
+ delete agenda.sessionRef;
300
+ status = true;
301
+ } else {
302
+ // if there is no sessionRef to remove, file which is not in scope does not need to be rewritten
303
+ status = null;
304
+ }
305
+ if (this.inScope(agenda)) {
306
+ _context7.next = 3;
307
+ break;
308
+ }
309
+ return _context7.abrupt("return", status);
310
+ case 3:
311
+ if ("session" in agenda) delete agenda.session;
312
+ session = this.lookupSession(agenda.timestampDebut.substr(0, 10));
313
+ if (!(session == null)) {
314
+ _context7.next = 9;
315
+ break;
316
+ }
317
+ return _context7.abrupt("return", null);
318
+ case 9:
319
+ agenda.session = session;
320
+ this.maybeUpgradeSchemaVersion(agenda);
321
+ return _context7.abrupt("return", true);
322
+ case 12:
323
+ case "end":
324
+ return _context7.stop();
339
325
  }
340
326
  }, _callee7, this);
341
327
  }));
@@ -348,4 +334,4 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
348
334
  return Plugin;
349
335
  }(_bugs.BasePlugin);
350
336
  exports.Plugin = Plugin;
351
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1cmwiLCJjb21wYXJlU3RyaW5nIiwiYSIsImIiLCJQbHVnaW4iLCJvcHRpb25zIiwiZmV0Y2giLCJzZXRTZXNzaW9ucyIsImZldGNoU2Vzc2lvbnMiLCJzZXNzaW9ucyIsInNvcnQiLCJtYXAiLCJzIiwibGFiZWwiLCJyZXBsYWNlIiwiZGVidXQiLCJzdWJzdHIiLCJmaW4iLCJoZWFkZXJzIiwiZ2V0IiwiQWNjZXB0IiwicmVzcG9uc2UiLCJvayIsImpzb24iLCJwYXlsb2FkIiwibWF4IiwibGVuZ3RoIiwibWluIiwiaCIsIm0iLCJsIiwic2Vzc2lvbiIsIk1hdGgiLCJmbG9vciIsImFnZW5kYSIsInhzaVR5cGUiLCJsaWV1IiwidW5kZWZpbmVkIiwiY29kZSIsImN5Y2xlRGVWaWUiLCJldGF0IiwiX2ZpbGVuYW1lIiwiaW5TY29wZSIsInRpbWVzdGFtcERlYnV0IiwibG9va3VwU2Vzc2lvbiIsInN0YXR1cyIsImluZm8iLCJzY2hlbWFWZXJzaW9uIiwidmVyc2lvbiIsInNwbGl0IiwidmVyc2lvbkNvbXBhcmUiLCJzZXNzaW9uUmVmIiwibWF5YmVVcGdyYWRlU2NoZW1hVmVyc2lvbiIsIkJhc2VQbHVnaW4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVncy9hZ2VuZGEtMDAwMTEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZlcnNpb25Db21wYXJlIGZyb20gXCJ0aW55LXZlcnNpb24tY29tcGFyZVwiXG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxuaW1wb3J0IHsgQmFzZVBsdWdpbiB9IGZyb20gXCIuLi9idWdzXCJcblxuLy8gaHR0cHM6Ly93d3cud2lraWRhdGEub3JnL3dpa2kvV2lraWRhdGE6V2lraVByb2plY3RfRnJhbmNlL0Fzc2VtYmwlQzMlQTllX05hdGlvbmFsZSNMZWdpc2xhdGl2ZV9zZXNzaW9uXG5jb25zdCB1cmwgPVxuICBcImh0dHBzOi8vcXVlcnkud2lraWRhdGEub3JnL3NwYXJxbD9xdWVyeT1TRUxFQ1QlMjBESVNUSU5DVCUyMCUzRnNlc3Npb24lMjAlM0ZzdGFydF90aW1lJTIwJTNGZW5kX3RpbWUlMjAlM0ZsYWJlbCUyMCUzRmZvbGxvd3MlMjAlM0Zmb2xsb3dlZF9ieSUyMFdIRVJFJTIwJTdCJTBBJTBBJTIwJTIwJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVAzMSUyRndkdCUzQVAyNzkqJTIwd2QlM0FRODczMzc0ODEuJTBBJTIwJTIwJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVA1ODAlMjAlM0ZzdGFydF90aW1lLiUyMCUwQSUyMCUyMCUyME9QVElPTkFMJTIwJTdCJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVA1ODIlMjAlM0ZlbmRfdGltZSUyMCU3RC4lMEElMjAlMjAlMjBPUFRJT05BTCUyMCU3QiUyMCUzRnNlc3Npb24lMjB3ZHQlM0FQMTU1JTIwJTNGZm9sbG93cyUyMCU3RC4lMEElMjAlMjAlMjBPUFRJT05BTCUyMCU3QiUyMCUzRnNlc3Npb24lMjB3ZHQlM0FQMTU2JTIwJTNGZm9sbG93ZWRfYnklMjAlN0QuJTBBJTIwJTIwJTIwT1BUSU9OQUwlMjAlN0IlMjAlM0ZzZXNzaW9uJTIwcmRmcyUzQWxhYmVsJTIwJTNGbGFiZWwlMjBmaWx0ZXIlMjAobGFuZyglM0ZsYWJlbCklMjAlM0QlMjAlMjJmciUyMiklMjAuJTdEJTBBJTdEXCJcblxuZnVuY3Rpb24gY29tcGFyZVN0cmluZyhhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuICBpZiAoYSA8IGIpIHJldHVybiAtMVxuICBpZiAoYSA+IGIpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbmV4cG9ydCBjbGFzcyBQbHVnaW4gZXh0ZW5kcyBCYXNlUGx1Z2luIHtcbiAgc2Vzc2lvbnM6IGFueVxuICBmZXRjaDogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgc3VwZXIob3B0aW9ucywgXCJhZ2VuZGEtMDAwMTFcIilcbiAgICB0aGlzLmZldGNoID0gZmV0Y2hcbiAgfVxuXG4gIGFzeW5jIHByZUZpeCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNldFNlc3Npb25zKClcbiAgfVxuXG4gIGFzeW5jIHByZUNoZWNrKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U2Vzc2lvbnMoKVxuICB9XG5cbiAgYXN5bmMgc2V0U2Vzc2lvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZXNzaW9ucyA9IChhd2FpdCB0aGlzLmZldGNoU2Vzc2lvbnMoKSkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICBjb21wYXJlU3RyaW5nKGFbXCJzdGFydF90aW1lXCJdW1widmFsdWVcIl0sIGJbXCJzdGFydF90aW1lXCJdW1widmFsdWVcIl0pLFxuICAgIClcbiAgICB0aGlzLnNlc3Npb25zID0gc2Vzc2lvbnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBzW1wibGFiZWxcIl1bXCJ2YWx1ZVwiXS5yZXBsYWNlKC9cXHMrZW4gZnJhbmNlL2ksIFwiXCIpLFxuICAgICAgICBkZWJ1dDogc1tcInN0YXJ0X3RpbWVcIl1bXCJ2YWx1ZVwiXS5zdWJzdHIoMCwgMTApLFxuICAgICAgICBmaW46IHNbXCJlbmRfdGltZVwiXVtcInZhbHVlXCJdLnN1YnN0cigwLCAxMCksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldCh1cmw6IHN0cmluZywgaGVhZGVyczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh1cmwsIGhlYWRlcnMpXG4gIH1cblxuICBhc3luYyBmZXRjaFNlc3Npb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldCh1cmwsIHtcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgIH0pXG4gICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgcmVzcG9uc2VcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgcmV0dXJuIHBheWxvYWRbXCJyZXN1bHRzXCJdW1wiYmluZGluZ3NcIl1cbiAgfVxuXG4gIGxvb2t1cFNlc3Npb24oZGVidXQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5zZXNzaW9ucy5sZW5ndGggLSAxXG4gICAgY29uc3QgbWluID0gMFxuICAgIGxldCBoID0gbWF4XG4gICAgbGV0IG1cbiAgICBsZXQgbCA9IG1pblxuICAgIGxldCBzZXNzaW9uXG4gICAgbGV0IG9rXG4gICAgZG8ge1xuICAgICAgbSA9IE1hdGguZmxvb3IoKGwgKyBoKSAvIDIpXG4gICAgICBzZXNzaW9uID0gdGhpcy5zZXNzaW9uc1ttXVxuICAgICAgb2sgPSBzZXNzaW9uLmRlYnV0IDw9IGRlYnV0ICYmIGRlYnV0IDw9IHNlc3Npb24uZmluXG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChsID09IG0gJiYgbSA9PSBoKVxuICAgICAgICAgIC8vIGluIGJldHdlZW4gc2Vzc2lvbnNcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICBpZiAoZGVidXQgPCBzZXNzaW9uLmRlYnV0KSB7XG4gICAgICAgICAgaWYgKG0gPD0gbWluKSByZXR1cm4gbnVsbFxuICAgICAgICAgIGggPSBtXG4gICAgICAgIH0gZWxzZSBpZiAoZGVidXQgPiBzZXNzaW9uLmZpbikge1xuICAgICAgICAgIGlmIChtID49IG1heCkgcmV0dXJuIG51bGxcbiAgICAgICAgICBsID0gbCA9PSBtID8gaCA6IG1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCFvaylcbiAgICByZXR1cm4gc2Vzc2lvblxuICB9XG5cbiAgaW5TY29wZShhZ2VuZGE6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGFnZW5kYS54c2lUeXBlICE9IFwic2VhbmNlX3R5cGVcIiB8fFxuICAgICAgKGFnZW5kYS5saWV1ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgYWdlbmRhLmxpZXUuY29kZSAhPSBcIkNHXCIgJiZcbiAgICAgICAgYWdlbmRhLmxpZXUuY29kZSAhPSBcIkFOXCIpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGFnZW5kYS5jeWNsZURlVmllLmV0YXQgIT0gXCJDb25maXJtw6lcIikgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIGNoZWNrKGFnZW5kYTogYW55LCBfZmlsZW5hbWU6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0aGlzLmluU2NvcGUoYWdlbmRhKSkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBkZWJ1dCA9IGFnZW5kYS50aW1lc3RhbXBEZWJ1dC5zdWJzdHIoMCwgMTApXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMubG9va3VwU2Vzc2lvbihkZWJ1dClcbiAgICBpZiAoc2Vzc2lvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBzdGF0dXM6IFwibmVlZHMtZml4aW5nXCIsIGluZm86IFtgJHtkZWJ1dH0gaXMgbm90IGluIGEgc2Vzc2lvbmBdIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcIm9rXCIsIGluZm86IFtcIlwiXSB9XG4gICAgfVxuICB9XG5cbiAgbWF5YmVVcGdyYWRlU2NoZW1hVmVyc2lvbihhZ2VuZGE6IGFueSkge1xuICAgIGlmIChhZ2VuZGEuc2NoZW1hVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gYWdlbmRhLnNjaGVtYVZlcnNpb24uc3BsaXQoXCItXCIpWzFdXG4gICAgICBpZiAodmVyc2lvbkNvbXBhcmUodmVyc2lvbiwgXCIxLjBcIikgPT0gMSkgcmV0dXJuXG4gICAgfVxuICAgIGFnZW5kYS5zY2hlbWFWZXJzaW9uID0gXCJhZ2VuZGEtMS4xXCJcbiAgfVxuXG4gIGFzeW5jIGZpeChhZ2VuZGE6IGFueSwgX2ZpbGVuYW1lOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCBzdGF0dXNcbiAgICBpZiAoXCJzZXNzaW9uUmVmXCIgaW4gYWdlbmRhKSB7XG4gICAgICAvLyBzZXNzaW9uUmVmIGlzIHVuZGVmaW5lZCBhbmQgbXVzdCBiZSByZW1vdmVkXG4gICAgICBkZWxldGUgYWdlbmRhLnNlc3Npb25SZWZcbiAgICAgIHN0YXR1cyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gc2Vzc2lvblJlZiB0byByZW1vdmUsIGZpbGUgd2hpY2ggaXMgbm90IGluIHNjb3BlIGRvZXMgbm90IG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gICAgICBzdGF0dXMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmluU2NvcGUoYWdlbmRhKSkgcmV0dXJuIHN0YXR1c1xuXG4gICAgaWYgKFwic2Vzc2lvblwiIGluIGFnZW5kYSkgZGVsZXRlIGFnZW5kYS5zZXNzaW9uXG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5sb29rdXBTZXNzaW9uKGFnZW5kYS50aW1lc3RhbXBEZWJ1dC5zdWJzdHIoMCwgMTApKVxuICAgIGlmIChzZXNzaW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIGFnZW5kYS5zZXNzaW9uID0gc2Vzc2lvblxuICAgICAgdGhpcy5tYXliZVVwZ3JhZGVTY2hlbWFWZXJzaW9uKGFnZW5kYSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUFvQztBQUFBO0FBQUEsK0NBRHBDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQSxJQUFNQSxHQUFHLEdBQ1AsaW5CQUFpbkI7QUFFbm5CLFNBQVNDLGFBQWEsQ0FBQ0MsQ0FBUyxFQUFFQyxDQUFTLEVBQUU7RUFDM0MsSUFBSUQs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
337
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1cmwiLCJjb21wYXJlU3RyaW5nIiwiYSIsImIiLCJQbHVnaW4iLCJvcHRpb25zIiwiZmV0Y2giLCJzZXRTZXNzaW9ucyIsImZldGNoU2Vzc2lvbnMiLCJzZXNzaW9ucyIsInNvcnQiLCJtYXAiLCJzIiwibGFiZWwiLCJyZXBsYWNlIiwiZGVidXQiLCJzdWJzdHIiLCJmaW4iLCJoZWFkZXJzIiwiZ2V0IiwiQWNjZXB0IiwicmVzcG9uc2UiLCJvayIsImpzb24iLCJwYXlsb2FkIiwibWF4IiwibGVuZ3RoIiwibWluIiwiaCIsIm0iLCJsIiwic2Vzc2lvbiIsIk1hdGgiLCJmbG9vciIsImFnZW5kYSIsInhzaVR5cGUiLCJsaWV1IiwidW5kZWZpbmVkIiwiY29kZSIsImN5Y2xlRGVWaWUiLCJldGF0IiwiX2ZpbGVuYW1lIiwiaW5TY29wZSIsInRpbWVzdGFtcERlYnV0IiwibG9va3VwU2Vzc2lvbiIsInN0YXR1cyIsImluZm8iLCJzY2hlbWFWZXJzaW9uIiwidmVyc2lvbiIsInNwbGl0IiwidmVyc2lvbkNvbXBhcmUiLCJzZXNzaW9uUmVmIiwibWF5YmVVcGdyYWRlU2NoZW1hVmVyc2lvbiIsIkJhc2VQbHVnaW4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVncy9hZ2VuZGEtMDAwMTEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZlcnNpb25Db21wYXJlIGZyb20gXCJ0aW55LXZlcnNpb24tY29tcGFyZVwiXG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxuaW1wb3J0IHsgQmFzZVBsdWdpbiB9IGZyb20gXCIuLi9idWdzXCJcblxuLy8gaHR0cHM6Ly93d3cud2lraWRhdGEub3JnL3dpa2kvV2lraWRhdGE6V2lraVByb2plY3RfRnJhbmNlL0Fzc2VtYmwlQzMlQTllX05hdGlvbmFsZSNMZWdpc2xhdGl2ZV9zZXNzaW9uXG5jb25zdCB1cmwgPVxuICBcImh0dHBzOi8vcXVlcnkud2lraWRhdGEub3JnL3NwYXJxbD9xdWVyeT1TRUxFQ1QlMjBESVNUSU5DVCUyMCUzRnNlc3Npb24lMjAlM0ZzdGFydF90aW1lJTIwJTNGZW5kX3RpbWUlMjAlM0ZsYWJlbCUyMCUzRmZvbGxvd3MlMjAlM0Zmb2xsb3dlZF9ieSUyMFdIRVJFJTIwJTdCJTBBJTBBJTIwJTIwJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVAzMSUyRndkdCUzQVAyNzkqJTIwd2QlM0FRODczMzc0ODEuJTBBJTIwJTIwJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVA1ODAlMjAlM0ZzdGFydF90aW1lLiUyMCUwQSUyMCUyMCUyME9QVElPTkFMJTIwJTdCJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVA1ODIlMjAlM0ZlbmRfdGltZSUyMCU3RC4lMEElMjAlMjAlMjBPUFRJT05BTCUyMCU3QiUyMCUzRnNlc3Npb24lMjB3ZHQlM0FQMTU1JTIwJTNGZm9sbG93cyUyMCU3RC4lMEElMjAlMjAlMjBPUFRJT05BTCUyMCU3QiUyMCUzRnNlc3Npb24lMjB3ZHQlM0FQMTU2JTIwJTNGZm9sbG93ZWRfYnklMjAlN0QuJTBBJTIwJTIwJTIwT1BUSU9OQUwlMjAlN0IlMjAlM0ZzZXNzaW9uJTIwcmRmcyUzQWxhYmVsJTIwJTNGbGFiZWwlMjBmaWx0ZXIlMjAobGFuZyglM0ZsYWJlbCklMjAlM0QlMjAlMjJmciUyMiklMjAuJTdEJTBBJTdEXCJcblxuZnVuY3Rpb24gY29tcGFyZVN0cmluZyhhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuICBpZiAoYSA8IGIpIHJldHVybiAtMVxuICBpZiAoYSA+IGIpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbmV4cG9ydCBjbGFzcyBQbHVnaW4gZXh0ZW5kcyBCYXNlUGx1Z2luIHtcbiAgc2Vzc2lvbnM6IGFueVxuICBmZXRjaDogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgc3VwZXIob3B0aW9ucywgXCJhZ2VuZGEtMDAwMTFcIilcbiAgICB0aGlzLmZldGNoID0gZmV0Y2hcbiAgfVxuXG4gIGFzeW5jIHByZUZpeCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNldFNlc3Npb25zKClcbiAgfVxuXG4gIGFzeW5jIHByZUNoZWNrKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U2Vzc2lvbnMoKVxuICB9XG5cbiAgYXN5bmMgc2V0U2Vzc2lvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZXNzaW9ucyA9IChhd2FpdCB0aGlzLmZldGNoU2Vzc2lvbnMoKSkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICBjb21wYXJlU3RyaW5nKGFbXCJzdGFydF90aW1lXCJdW1widmFsdWVcIl0sIGJbXCJzdGFydF90aW1lXCJdW1widmFsdWVcIl0pLFxuICAgIClcbiAgICB0aGlzLnNlc3Npb25zID0gc2Vzc2lvbnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBzW1wibGFiZWxcIl1bXCJ2YWx1ZVwiXS5yZXBsYWNlKC9cXHMrZW4gZnJhbmNlL2ksIFwiXCIpLFxuICAgICAgICBkZWJ1dDogc1tcInN0YXJ0X3RpbWVcIl1bXCJ2YWx1ZVwiXS5zdWJzdHIoMCwgMTApLFxuICAgICAgICBmaW46IHNbXCJlbmRfdGltZVwiXVtcInZhbHVlXCJdLnN1YnN0cigwLCAxMCksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldCh1cmw6IHN0cmluZywgaGVhZGVyczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh1cmwsIGhlYWRlcnMpXG4gIH1cblxuICBhc3luYyBmZXRjaFNlc3Npb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldCh1cmwsIHtcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgIH0pXG4gICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgcmVzcG9uc2VcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgcmV0dXJuIHBheWxvYWRbXCJyZXN1bHRzXCJdW1wiYmluZGluZ3NcIl1cbiAgfVxuXG4gIGxvb2t1cFNlc3Npb24oZGVidXQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5zZXNzaW9ucy5sZW5ndGggLSAxXG4gICAgY29uc3QgbWluID0gMFxuICAgIGxldCBoID0gbWF4XG4gICAgbGV0IG1cbiAgICBsZXQgbCA9IG1pblxuICAgIGxldCBzZXNzaW9uXG4gICAgbGV0IG9rXG4gICAgZG8ge1xuICAgICAgbSA9IE1hdGguZmxvb3IoKGwgKyBoKSAvIDIpXG4gICAgICBzZXNzaW9uID0gdGhpcy5zZXNzaW9uc1ttXVxuICAgICAgb2sgPSBzZXNzaW9uLmRlYnV0IDw9IGRlYnV0ICYmIGRlYnV0IDw9IHNlc3Npb24uZmluXG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChsID09IG0gJiYgbSA9PSBoKVxuICAgICAgICAgIC8vIGluIGJldHdlZW4gc2Vzc2lvbnNcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICBpZiAoZGVidXQgPCBzZXNzaW9uLmRlYnV0KSB7XG4gICAgICAgICAgaWYgKG0gPD0gbWluKSByZXR1cm4gbnVsbFxuICAgICAgICAgIGggPSBtXG4gICAgICAgIH0gZWxzZSBpZiAoZGVidXQgPiBzZXNzaW9uLmZpbikge1xuICAgICAgICAgIGlmIChtID49IG1heCkgcmV0dXJuIG51bGxcbiAgICAgICAgICBsID0gbCA9PSBtID8gaCA6IG1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCFvaylcbiAgICByZXR1cm4gc2Vzc2lvblxuICB9XG5cbiAgaW5TY29wZShhZ2VuZGE6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGFnZW5kYS54c2lUeXBlICE9IFwic2VhbmNlX3R5cGVcIiB8fFxuICAgICAgKGFnZW5kYS5saWV1ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgYWdlbmRhLmxpZXUuY29kZSAhPSBcIkNHXCIgJiZcbiAgICAgICAgYWdlbmRhLmxpZXUuY29kZSAhPSBcIkFOXCIpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGFnZW5kYS5jeWNsZURlVmllLmV0YXQgIT0gXCJDb25maXJtw6lcIikgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIGNoZWNrKGFnZW5kYTogYW55LCBfZmlsZW5hbWU6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0aGlzLmluU2NvcGUoYWdlbmRhKSkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBkZWJ1dCA9IGFnZW5kYS50aW1lc3RhbXBEZWJ1dC5zdWJzdHIoMCwgMTApXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMubG9va3VwU2Vzc2lvbihkZWJ1dClcbiAgICBpZiAoc2Vzc2lvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBzdGF0dXM6IFwibmVlZHMtZml4aW5nXCIsIGluZm86IFtgJHtkZWJ1dH0gaXMgbm90IGluIGEgc2Vzc2lvbmBdIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcIm9rXCIsIGluZm86IFtcIlwiXSB9XG4gICAgfVxuICB9XG5cbiAgbWF5YmVVcGdyYWRlU2NoZW1hVmVyc2lvbihhZ2VuZGE6IGFueSkge1xuICAgIGlmIChhZ2VuZGEuc2NoZW1hVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gYWdlbmRhLnNjaGVtYVZlcnNpb24uc3BsaXQoXCItXCIpWzFdXG4gICAgICBpZiAodmVyc2lvbkNvbXBhcmUodmVyc2lvbiwgXCIxLjBcIikgPT0gMSkgcmV0dXJuXG4gICAgfVxuICAgIGFnZW5kYS5zY2hlbWFWZXJzaW9uID0gXCJhZ2VuZGEtMS4xXCJcbiAgfVxuXG4gIGFzeW5jIGZpeChhZ2VuZGE6IGFueSwgX2ZpbGVuYW1lOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCBzdGF0dXNcbiAgICBpZiAoXCJzZXNzaW9uUmVmXCIgaW4gYWdlbmRhKSB7XG4gICAgICAvLyBzZXNzaW9uUmVmIGlzIHVuZGVmaW5lZCBhbmQgbXVzdCBiZSByZW1vdmVkXG4gICAgICBkZWxldGUgYWdlbmRhLnNlc3Npb25SZWZcbiAgICAgIHN0YXR1cyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gc2Vzc2lvblJlZiB0byByZW1vdmUsIGZpbGUgd2hpY2ggaXMgbm90IGluIHNjb3BlIGRvZXMgbm90IG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gICAgICBzdGF0dXMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmluU2NvcGUoYWdlbmRhKSkgcmV0dXJuIHN0YXR1c1xuXG4gICAgaWYgKFwic2Vzc2lvblwiIGluIGFnZW5kYSkgZGVsZXRlIGFnZW5kYS5zZXNzaW9uXG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5sb29rdXBTZXNzaW9uKGFnZW5kYS50aW1lc3RhbXBEZWJ1dC5zdWJzdHIoMCwgMTApKVxuICAgIGlmIChzZXNzaW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIGFnZW5kYS5zZXNzaW9uID0gc2Vzc2lvblxuICAgICAgdGhpcy5tYXliZVVwZ3JhZGVTY2hlbWFWZXJzaW9uKGFnZW5kYSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUFvQztBQUFBO0FBQUEsK0NBRHBDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQSxJQUFNQSxHQUFHLEdBQ1AsaW5CQUFpbkI7QUFFbm5CLFNBQVNDLGFBQWEsQ0FBQ0MsQ0FBUyxFQUFFQyxDQUFTLEVBQUU7RUFDM0MsSUFBSUQs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