@tricoteuses/assemblee 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api.js +3 -9
- package/lib/api.mjs +4 -5
- package/lib/bugs/acteur-00010/plugin.test.js +3 -50
- package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
- package/lib/bugs/acteur-00010.js +2 -57
- package/lib/bugs/acteur-00010.mjs +1 -6
- package/lib/bugs/agenda-00002/plugin.test.js +3 -53
- package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
- package/lib/bugs/agenda-00002.js +3 -148
- package/lib/bugs/agenda-00002.mjs +1 -28
- package/lib/bugs/agenda-00008/plugin.test.js +3 -52
- package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00008.js +2 -61
- package/lib/bugs/agenda-00008.mjs +1 -5
- package/lib/bugs/agenda-00011/plugin.test.js +5 -99
- package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
- package/lib/bugs/agenda-00011.js +4 -105
- package/lib/bugs/agenda-00011.mjs +3 -29
- package/lib/bugs.js +3 -164
- package/lib/bugs.mjs +1 -26
- package/lib/cleaners/actes_legislatifs.js +11 -115
- package/lib/cleaners/actes_legislatifs.mjs +7 -82
- package/lib/cleaners/acteurs.js +12 -92
- package/lib/cleaners/acteurs.mjs +7 -38
- package/lib/cleaners/amendements.js +10 -103
- package/lib/cleaners/amendements.mjs +4 -58
- package/lib/cleaners/documents.js +5 -67
- package/lib/cleaners/documents.mjs +1 -37
- package/lib/cleaners/dossiers_legislatifs.js +5 -61
- package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
- package/lib/cleaners/index.js +1 -9
- package/lib/cleaners/index.mjs +1 -1
- package/lib/cleaners/organes.js +1 -33
- package/lib/cleaners/organes.mjs +1 -17
- package/lib/cleaners/reunions.js +4 -119
- package/lib/cleaners/reunions.mjs +1 -64
- package/lib/cleaners/scrutins.js +10 -102
- package/lib/cleaners/scrutins.mjs +1 -48
- package/lib/cleaners/xml.js +8 -42
- package/lib/cleaners/xml.mjs +6 -8
- package/lib/datasets.js +14 -113
- package/lib/datasets.mjs +6 -46
- package/lib/dates.js +7 -37
- package/lib/dates.mjs +9 -14
- package/lib/dossiers_legislatifs.js +6 -68
- package/lib/dossiers_legislatifs.mjs +5 -36
- package/lib/file_systems.js +56 -139
- package/lib/file_systems.mjs +1 -9
- package/lib/git.js +4 -53
- package/lib/git.mjs +1 -12
- package/lib/index.js +1 -15
- package/lib/index.mjs +1 -1
- package/lib/inserters.js +23 -146
- package/lib/inserters.mjs +6 -87
- package/lib/loaders.js +44 -316
- package/lib/loaders.mjs +12 -135
- package/lib/organes.js +1 -7
- package/lib/organes.mjs +1 -4
- package/lib/parsers/documents.js +22 -151
- package/lib/parsers/documents.mjs +19 -81
- package/lib/parsers/index.js +1 -4
- package/lib/parsers/index.mjs +1 -1
- package/lib/parsers/recherche_amendements.js +302 -527
- package/lib/parsers/recherche_amendements.mjs +8 -31
- package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
- package/lib/raw_types/acteurs_et_organes.js +5 -124
- package/lib/raw_types/acteurs_et_organes.mjs +5 -105
- package/lib/raw_types/agendas.js +6 -89
- package/lib/raw_types/agendas.mjs +9 -65
- package/lib/raw_types/amendements.d.ts +2 -0
- package/lib/raw_types/amendements.js +10 -90
- package/lib/raw_types/amendements.mjs +11 -69
- package/lib/raw_types/dossiers_legislatifs.d.ts +16 -115
- package/lib/raw_types/dossiers_legislatifs.js +26 -435
- package/lib/raw_types/dossiers_legislatifs.mjs +26 -412
- package/lib/raw_types/scrutins.js +6 -81
- package/lib/raw_types/scrutins.mjs +9 -57
- package/lib/scripts/bugs_helper.js +2 -181
- package/lib/scripts/bugs_helper.mjs +2 -39
- package/lib/scripts/clean_data.js +27 -143
- package/lib/scripts/clean_data.mjs +15 -34
- package/lib/scripts/clean_reorganized_data.js +76 -240
- package/lib/scripts/clean_reorganized_data.mjs +36 -99
- package/lib/scripts/diff_amendements.js +19 -79
- package/lib/scripts/diff_amendements.mjs +17 -35
- package/lib/scripts/document_dossiers_legislatifs.js +17 -142
- package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
- package/lib/scripts/get_today_reunions.js +4 -22
- package/lib/scripts/get_today_reunions.mjs +1 -7
- package/lib/scripts/merge_scrutins.js +3 -47
- package/lib/scripts/merge_scrutins.mjs +1 -9
- package/lib/scripts/parse_textes_lois.js +15 -44
- package/lib/scripts/parse_textes_lois.mjs +18 -19
- package/lib/scripts/raw_types_from_amendements.js +3 -95
- package/lib/scripts/raw_types_from_amendements.mjs +1 -16
- package/lib/scripts/reorganize_data.js +74 -294
- package/lib/scripts/reorganize_data.mjs +22 -133
- package/lib/scripts/retrieve_deputes_photos.js +6 -119
- package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
- package/lib/scripts/retrieve_documents.js +4 -192
- package/lib/scripts/retrieve_documents.mjs +2 -50
- package/lib/scripts/retrieve_open_data.js +44 -116
- package/lib/scripts/retrieve_open_data.mjs +14 -19
- package/lib/scripts/retrieve_pending_amendments.js +4 -98
- package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
- package/lib/scripts/retrieve_senateurs_photos.js +18 -114
- package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
- package/lib/scripts/retrieve_textes_lois.js +3 -122
- package/lib/scripts/retrieve_textes_lois.mjs +3 -21
- package/lib/scripts/test_load.js +2 -10
- package/lib/scripts/test_load.mjs +2 -1
- package/lib/scripts/test_load_big_files.js +2 -10
- package/lib/scripts/test_load_big_files.mjs +2 -1
- package/lib/scripts/validate_json.js +4 -119
- package/lib/scripts/validate_json.mjs +2 -36
- package/lib/shared_types/codes_actes.js +1 -24
- package/lib/shared_types/codes_actes.mjs +3 -10
- package/lib/strings.js +1 -5
- package/lib/strings.mjs +1 -1
- package/lib/types/acteurs_et_organes.js +9 -84
- package/lib/types/acteurs_et_organes.mjs +10 -63
- package/lib/types/agendas.js +8 -90
- package/lib/types/agendas.mjs +11 -66
- package/lib/types/amendements.d.ts +2 -0
- package/lib/types/amendements.js +12 -92
- package/lib/types/amendements.mjs +15 -70
- package/lib/types/dossiers_legislatifs.js +8 -96
- package/lib/types/dossiers_legislatifs.mjs +10 -72
- package/lib/types/legislatures.js +1 -3
- package/lib/types/legislatures.mjs +1 -2
- package/lib/types/scrutins.js +8 -82
- package/lib/types/scrutins.mjs +11 -58
- package/lib/urls.js +3 -27
- package/lib/urls.mjs +3 -21
- package/package.json +1 -1
|
@@ -1,57 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
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); }
|
|
4
|
-
|
|
5
4
|
require("core-js/modules/es.object.define-property.js");
|
|
6
|
-
|
|
7
5
|
require("core-js/modules/es.object.to-string.js");
|
|
8
|
-
|
|
9
6
|
require("core-js/modules/es.promise.js");
|
|
10
|
-
|
|
11
7
|
require("core-js/modules/es.array.slice.js");
|
|
12
|
-
|
|
13
8
|
require("core-js/modules/es.function.name.js");
|
|
14
|
-
|
|
15
9
|
require("core-js/modules/es.array.from.js");
|
|
16
|
-
|
|
17
10
|
require("core-js/modules/es.string.iterator.js");
|
|
18
|
-
|
|
19
11
|
require("core-js/modules/es.symbol.js");
|
|
20
|
-
|
|
21
12
|
require("core-js/modules/es.symbol.description.js");
|
|
22
|
-
|
|
23
13
|
require("core-js/modules/es.symbol.iterator.js");
|
|
24
|
-
|
|
25
14
|
require("core-js/modules/es.array.iterator.js");
|
|
26
|
-
|
|
27
15
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
28
|
-
|
|
29
16
|
require("core-js/modules/es.array.is-array.js");
|
|
30
|
-
|
|
31
17
|
require("core-js/modules/es.symbol.async-iterator.js");
|
|
32
|
-
|
|
33
18
|
require("core-js/modules/es.symbol.to-string-tag.js");
|
|
34
|
-
|
|
35
19
|
require("core-js/modules/es.json.to-string-tag.js");
|
|
36
|
-
|
|
37
20
|
require("core-js/modules/es.math.to-string-tag.js");
|
|
38
|
-
|
|
39
21
|
require("core-js/modules/es.object.create.js");
|
|
40
|
-
|
|
41
22
|
require("core-js/modules/es.object.get-prototype-of.js");
|
|
42
|
-
|
|
43
23
|
require("core-js/modules/es.array.for-each.js");
|
|
44
|
-
|
|
45
24
|
require("core-js/modules/web.dom-collections.for-each.js");
|
|
46
|
-
|
|
47
25
|
require("core-js/modules/es.object.set-prototype-of.js");
|
|
48
|
-
|
|
49
26
|
require("core-js/modules/es.array.reverse.js");
|
|
50
|
-
|
|
51
27
|
require("core-js/modules/es.weak-map.js");
|
|
52
|
-
|
|
53
28
|
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
54
|
-
|
|
55
29
|
Object.defineProperty(exports, "__esModule", {
|
|
56
30
|
value: true
|
|
57
31
|
});
|
|
@@ -59,71 +33,38 @@ exports.BugsHelper = void 0;
|
|
|
59
33
|
exports.checkoutFix = checkoutFix;
|
|
60
34
|
exports.main = main;
|
|
61
35
|
exports.mergeFix = mergeFix;
|
|
62
|
-
|
|
63
36
|
require("core-js/modules/es.array.includes.js");
|
|
64
|
-
|
|
65
37
|
require("core-js/modules/es.string.includes.js");
|
|
66
|
-
|
|
67
38
|
require("core-js/modules/es.object.keys.js");
|
|
68
|
-
|
|
69
39
|
require("core-js/modules/es.array.concat.js");
|
|
70
|
-
|
|
71
40
|
require("core-js/modules/es.array.join.js");
|
|
72
|
-
|
|
73
41
|
require("core-js/modules/es.number.constructor.js");
|
|
74
|
-
|
|
75
42
|
require("core-js/modules/es.string.ends-with.js");
|
|
76
|
-
|
|
77
43
|
require("core-js/modules/es.regexp.exec.js");
|
|
78
|
-
|
|
79
44
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
80
|
-
|
|
81
45
|
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
|
|
82
|
-
|
|
83
46
|
var _commandLineUsage = _interopRequireDefault(require("command-line-usage"));
|
|
84
|
-
|
|
85
47
|
var _file_systems = require("../file_systems");
|
|
86
|
-
|
|
87
48
|
var _bugs = require("../../src/bugs");
|
|
88
|
-
|
|
89
49
|
var git = _interopRequireWildcard(require("../../src/git"));
|
|
90
|
-
|
|
91
50
|
var _datasets = require("../../src/datasets");
|
|
92
|
-
|
|
93
51
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
94
|
-
|
|
95
52
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
96
|
-
|
|
97
53
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
98
|
-
|
|
99
54
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
100
|
-
|
|
101
55
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
102
|
-
|
|
103
56
|
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
104
|
-
|
|
105
57
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
106
|
-
|
|
107
|
-
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, $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 generator._invoke = function (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); } }; }(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; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return 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, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), 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 (object) { var 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; }
|
|
108
|
-
|
|
58
|
+
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 method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return 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; }
|
|
109
59
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
110
|
-
|
|
111
60
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
112
|
-
|
|
113
61
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
114
|
-
|
|
115
62
|
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); } }
|
|
116
|
-
|
|
117
63
|
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); }); }; }
|
|
118
|
-
|
|
119
64
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
120
|
-
|
|
121
65
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
122
|
-
|
|
123
66
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
124
|
-
|
|
125
67
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
126
|
-
|
|
127
68
|
function parseArgs(argv) {
|
|
128
69
|
var optionsDefinitions = [{
|
|
129
70
|
description: "pathname to the directory containing the dataset",
|
|
@@ -188,57 +129,45 @@ function parseArgs(argv) {
|
|
|
188
129
|
var options = (0, _commandLineArgs["default"])(optionsDefinitions, {
|
|
189
130
|
argv: argv
|
|
190
131
|
});
|
|
191
|
-
|
|
192
132
|
if (options.dataset) {
|
|
193
133
|
if (!(0, _datasets.validDataset)(options.dataset)) {
|
|
194
134
|
console.error("--dataset ".concat(options.dataset));
|
|
195
135
|
options.help = true;
|
|
196
136
|
}
|
|
197
137
|
}
|
|
198
|
-
|
|
199
138
|
if (options.schema) {
|
|
200
139
|
if (!(0, _datasets.getSchemas)().includes(options.schema)) {
|
|
201
140
|
console.error("--schema ".concat(options.schema));
|
|
202
141
|
options.help = true;
|
|
203
142
|
}
|
|
204
143
|
}
|
|
205
|
-
|
|
206
144
|
if (options.commit) {
|
|
207
145
|
if (!_fsExtra["default"].existsSync(options.commit)) {
|
|
208
146
|
console.error("".concat(options.commit, " does not exist"));
|
|
209
147
|
options.help = true;
|
|
210
148
|
}
|
|
211
149
|
}
|
|
212
|
-
|
|
213
150
|
if (options.debug) options.verbose = true;
|
|
214
|
-
|
|
215
151
|
if ("help" in options) {
|
|
216
152
|
var usage = (0, _commandLineUsage["default"])(sections);
|
|
217
153
|
console.warn(usage);
|
|
218
154
|
return null;
|
|
219
155
|
}
|
|
220
|
-
|
|
221
156
|
return options;
|
|
222
157
|
}
|
|
223
|
-
|
|
224
158
|
var BugsHelper = /*#__PURE__*/function () {
|
|
225
159
|
function BugsHelper(options) {
|
|
226
160
|
_classCallCheck(this, BugsHelper);
|
|
227
|
-
|
|
228
161
|
_defineProperty(this, "options", void 0);
|
|
229
|
-
|
|
230
162
|
_defineProperty(this, "bugs", void 0);
|
|
231
|
-
|
|
232
163
|
this.options = options;
|
|
233
164
|
this.bugs = new _bugs.SchemaBugs(this.options);
|
|
234
165
|
}
|
|
235
|
-
|
|
236
166
|
_createClass(BugsHelper, [{
|
|
237
167
|
key: "check",
|
|
238
168
|
value: function () {
|
|
239
169
|
var _check = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
240
170
|
var analysis, _iterator, _step, file, content;
|
|
241
|
-
|
|
242
171
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
243
172
|
while (1) {
|
|
244
173
|
switch (_context.prev = _context.next) {
|
|
@@ -246,69 +175,51 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
246
175
|
analysis = {};
|
|
247
176
|
_context.next = 3;
|
|
248
177
|
return this.bugs.preCheck();
|
|
249
|
-
|
|
250
178
|
case 3:
|
|
251
179
|
if (this.options.verbose) console.log("check ".concat(this.options.data));
|
|
252
180
|
_iterator = _createForOfIteratorHelper((0, _file_systems.getFiles)([this.options.data]));
|
|
253
181
|
_context.prev = 5;
|
|
254
|
-
|
|
255
182
|
_iterator.s();
|
|
256
|
-
|
|
257
183
|
case 7:
|
|
258
184
|
if ((_step = _iterator.n()).done) {
|
|
259
185
|
_context.next = 15;
|
|
260
186
|
break;
|
|
261
187
|
}
|
|
262
|
-
|
|
263
188
|
file = _step.value;
|
|
264
189
|
content = (0, _file_systems.load)(file);
|
|
265
190
|
_context.next = 12;
|
|
266
191
|
return this.bugs.check(content, file);
|
|
267
|
-
|
|
268
192
|
case 12:
|
|
269
193
|
analysis[file] = _context.sent;
|
|
270
|
-
|
|
271
194
|
case 13:
|
|
272
195
|
_context.next = 7;
|
|
273
196
|
break;
|
|
274
|
-
|
|
275
197
|
case 15:
|
|
276
198
|
_context.next = 20;
|
|
277
199
|
break;
|
|
278
|
-
|
|
279
200
|
case 17:
|
|
280
201
|
_context.prev = 17;
|
|
281
202
|
_context.t0 = _context["catch"](5);
|
|
282
|
-
|
|
283
203
|
_iterator.e(_context.t0);
|
|
284
|
-
|
|
285
204
|
case 20:
|
|
286
205
|
_context.prev = 20;
|
|
287
|
-
|
|
288
206
|
_iterator.f();
|
|
289
|
-
|
|
290
207
|
return _context.finish(20);
|
|
291
|
-
|
|
292
208
|
case 23:
|
|
293
209
|
_context.next = 25;
|
|
294
210
|
return this.bugs.postCheck(analysis);
|
|
295
|
-
|
|
296
211
|
case 25:
|
|
297
212
|
_context.next = 27;
|
|
298
213
|
return this.show(analysis);
|
|
299
|
-
|
|
300
214
|
case 27:
|
|
301
215
|
if (!this.options.output) {
|
|
302
216
|
_context.next = 30;
|
|
303
217
|
break;
|
|
304
218
|
}
|
|
305
|
-
|
|
306
219
|
_context.next = 30;
|
|
307
220
|
return this.store(analysis);
|
|
308
|
-
|
|
309
221
|
case 30:
|
|
310
222
|
return _context.abrupt("return", 0);
|
|
311
|
-
|
|
312
223
|
case 31:
|
|
313
224
|
case "end":
|
|
314
225
|
return _context.stop();
|
|
@@ -316,11 +227,9 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
316
227
|
}
|
|
317
228
|
}, _callee, this, [[5, 17, 20, 23]]);
|
|
318
229
|
}));
|
|
319
|
-
|
|
320
230
|
function check() {
|
|
321
231
|
return _check.apply(this, arguments);
|
|
322
232
|
}
|
|
323
|
-
|
|
324
233
|
return check;
|
|
325
234
|
}()
|
|
326
235
|
}, {
|
|
@@ -328,7 +237,6 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
328
237
|
value: function () {
|
|
329
238
|
var _show = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(analysis) {
|
|
330
239
|
var _i, _Object$keys, filename, bug, _i2, _Object$keys2, name, result, log;
|
|
331
|
-
|
|
332
240
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
333
241
|
while (1) {
|
|
334
242
|
switch (_context2.prev = _context2.next) {
|
|
@@ -336,20 +244,16 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
336
244
|
for (_i = 0, _Object$keys = Object.keys(analysis); _i < _Object$keys.length; _i++) {
|
|
337
245
|
filename = _Object$keys[_i];
|
|
338
246
|
bug = analysis[filename];
|
|
339
|
-
|
|
340
247
|
for (_i2 = 0, _Object$keys2 = Object.keys(bug); _i2 < _Object$keys2.length; _i2++) {
|
|
341
248
|
name = _Object$keys2[_i2];
|
|
342
249
|
result = bug[name];
|
|
343
|
-
|
|
344
250
|
if (result != null) {
|
|
345
251
|
log = void 0;
|
|
346
|
-
|
|
347
252
|
if (result["status"] == "needs-fixing") {
|
|
348
253
|
log = console.error;
|
|
349
254
|
} else if (this.options.verbose) {
|
|
350
255
|
log = console.log;
|
|
351
256
|
}
|
|
352
|
-
|
|
353
257
|
if (log != undefined) {
|
|
354
258
|
log("".concat(name, " finds ").concat(filename, " ").concat(result["status"]));
|
|
355
259
|
log(result["info"].join("\n"));
|
|
@@ -357,7 +261,6 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
357
261
|
}
|
|
358
262
|
}
|
|
359
263
|
}
|
|
360
|
-
|
|
361
264
|
case 1:
|
|
362
265
|
case "end":
|
|
363
266
|
return _context2.stop();
|
|
@@ -365,11 +268,9 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
365
268
|
}
|
|
366
269
|
}, _callee2, this);
|
|
367
270
|
}));
|
|
368
|
-
|
|
369
271
|
function show(_x) {
|
|
370
272
|
return _show.apply(this, arguments);
|
|
371
273
|
}
|
|
372
|
-
|
|
373
274
|
return show;
|
|
374
275
|
}()
|
|
375
276
|
}, {
|
|
@@ -377,32 +278,26 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
377
278
|
value: function () {
|
|
378
279
|
var _store = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(analysis) {
|
|
379
280
|
var name2reports, _i3, _Object$keys3, filename, bug, _i4, _Object$keys4, name, _i5, _Object$keys5, _name, reports, n, lines, status2lines, _i6, _Object$keys6, _filename, report, status, l, _iterator2, _step2, info, _i7, _arr, _arr$_i, _status, label, output;
|
|
380
|
-
|
|
381
281
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
382
282
|
while (1) {
|
|
383
283
|
switch (_context3.prev = _context3.next) {
|
|
384
284
|
case 0:
|
|
385
285
|
name2reports = {};
|
|
386
|
-
|
|
387
286
|
for (_i3 = 0, _Object$keys3 = Object.keys(analysis); _i3 < _Object$keys3.length; _i3++) {
|
|
388
287
|
filename = _Object$keys3[_i3];
|
|
389
288
|
bug = analysis[filename];
|
|
390
|
-
|
|
391
289
|
for (_i4 = 0, _Object$keys4 = Object.keys(bug); _i4 < _Object$keys4.length; _i4++) {
|
|
392
290
|
name = _Object$keys4[_i4];
|
|
393
291
|
if (!(name in name2reports)) name2reports[name] = {};
|
|
394
292
|
name2reports[name][filename] = bug[name];
|
|
395
293
|
}
|
|
396
294
|
}
|
|
397
|
-
|
|
398
295
|
_i5 = 0, _Object$keys5 = Object.keys(name2reports);
|
|
399
|
-
|
|
400
296
|
case 3:
|
|
401
297
|
if (!(_i5 < _Object$keys5.length)) {
|
|
402
298
|
_context3.next = 30;
|
|
403
299
|
break;
|
|
404
300
|
}
|
|
405
|
-
|
|
406
301
|
_name = _Object$keys5[_i5];
|
|
407
302
|
reports = name2reports[_name];
|
|
408
303
|
n = _name.split("-")[1];
|
|
@@ -413,30 +308,24 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
413
308
|
"already-fixed": []
|
|
414
309
|
};
|
|
415
310
|
_i6 = 0, _Object$keys6 = Object.keys(reports);
|
|
416
|
-
|
|
417
311
|
case 10:
|
|
418
312
|
if (!(_i6 < _Object$keys6.length)) {
|
|
419
313
|
_context3.next = 24;
|
|
420
314
|
break;
|
|
421
315
|
}
|
|
422
|
-
|
|
423
316
|
_filename = _Object$keys6[_i6];
|
|
424
317
|
report = reports[_filename];
|
|
425
|
-
|
|
426
318
|
if (!(report == null || report["status"] == "ok")) {
|
|
427
319
|
_context3.next = 15;
|
|
428
320
|
break;
|
|
429
321
|
}
|
|
430
|
-
|
|
431
322
|
return _context3.abrupt("continue", 21);
|
|
432
|
-
|
|
433
323
|
case 15:
|
|
434
324
|
if (!(report["status"] in status2lines)) console.error("".concat(_filename, " status ").concat(report["status"], " unknown"));
|
|
435
325
|
status = report["status"];
|
|
436
326
|
l = status2lines[status];
|
|
437
327
|
if (status == "will-be-fixed") l.push("* ".concat((0, _datasets.diffUpstream)(_filename)));else l.push("* ".concat((0, _datasets.masterUrl)(_filename)));
|
|
438
328
|
_iterator2 = _createForOfIteratorHelper(report["info"]);
|
|
439
|
-
|
|
440
329
|
try {
|
|
441
330
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
442
331
|
info = _step2.value;
|
|
@@ -447,30 +336,24 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
447
336
|
} finally {
|
|
448
337
|
_iterator2.f();
|
|
449
338
|
}
|
|
450
|
-
|
|
451
339
|
case 21:
|
|
452
340
|
_i6++;
|
|
453
341
|
_context3.next = 10;
|
|
454
342
|
break;
|
|
455
|
-
|
|
456
343
|
case 24:
|
|
457
344
|
for (_i7 = 0, _arr = [["needs-fixing", "The following files must be fixed"], ["already-fixed", "The following files no longer need a fix"], ["will-be-fixed", "The following files have been successfully fixed"]]; _i7 < _arr.length; _i7++) {
|
|
458
345
|
_arr$_i = _slicedToArray(_arr[_i7], 2), _status = _arr$_i[0], label = _arr$_i[1];
|
|
459
346
|
lines.push("### ".concat(label));
|
|
460
347
|
lines = lines.concat(status2lines[_status]);
|
|
461
348
|
}
|
|
462
|
-
|
|
463
349
|
output = "".concat(this.options.output, "/").concat(_name, ".md");
|
|
464
|
-
|
|
465
350
|
_fsExtra["default"].writeFileSync(output, lines.join("\n"), {
|
|
466
351
|
encoding: "utf8"
|
|
467
352
|
});
|
|
468
|
-
|
|
469
353
|
case 27:
|
|
470
354
|
_i5++;
|
|
471
355
|
_context3.next = 3;
|
|
472
356
|
break;
|
|
473
|
-
|
|
474
357
|
case 30:
|
|
475
358
|
case "end":
|
|
476
359
|
return _context3.stop();
|
|
@@ -478,11 +361,9 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
478
361
|
}
|
|
479
362
|
}, _callee3, this);
|
|
480
363
|
}));
|
|
481
|
-
|
|
482
364
|
function store(_x2) {
|
|
483
365
|
return _store.apply(this, arguments);
|
|
484
366
|
}
|
|
485
|
-
|
|
486
367
|
return store;
|
|
487
368
|
}()
|
|
488
369
|
}, {
|
|
@@ -495,14 +376,11 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
495
376
|
case 0:
|
|
496
377
|
_context4.next = 2;
|
|
497
378
|
return this.bugs.preFix();
|
|
498
|
-
|
|
499
379
|
case 2:
|
|
500
380
|
_context4.next = 4;
|
|
501
381
|
return this.bugs.fix((0, _file_systems.getFiles)([this.options.data]));
|
|
502
|
-
|
|
503
382
|
case 4:
|
|
504
383
|
return _context4.abrupt("return", 0);
|
|
505
|
-
|
|
506
384
|
case 5:
|
|
507
385
|
case "end":
|
|
508
386
|
return _context4.stop();
|
|
@@ -510,11 +388,9 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
510
388
|
}
|
|
511
389
|
}, _callee4, this);
|
|
512
390
|
}));
|
|
513
|
-
|
|
514
391
|
function fix() {
|
|
515
392
|
return _fix.apply(this, arguments);
|
|
516
393
|
}
|
|
517
|
-
|
|
518
394
|
return fix;
|
|
519
395
|
}()
|
|
520
396
|
}, {
|
|
@@ -529,12 +405,9 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
529
405
|
_context5.next = 4;
|
|
530
406
|
break;
|
|
531
407
|
}
|
|
532
|
-
|
|
533
408
|
return _context5.abrupt("return", this.check());
|
|
534
|
-
|
|
535
409
|
case 4:
|
|
536
410
|
return _context5.abrupt("return", this.fix());
|
|
537
|
-
|
|
538
411
|
case 5:
|
|
539
412
|
case "end":
|
|
540
413
|
return _context5.stop();
|
|
@@ -542,24 +415,18 @@ var BugsHelper = /*#__PURE__*/function () {
|
|
|
542
415
|
}
|
|
543
416
|
}, _callee5, this);
|
|
544
417
|
}));
|
|
545
|
-
|
|
546
418
|
function main() {
|
|
547
419
|
return _main.apply(this, arguments);
|
|
548
420
|
}
|
|
549
|
-
|
|
550
421
|
return main;
|
|
551
422
|
}()
|
|
552
423
|
}]);
|
|
553
|
-
|
|
554
424
|
return BugsHelper;
|
|
555
425
|
}();
|
|
556
|
-
|
|
557
426
|
exports.BugsHelper = BugsHelper;
|
|
558
|
-
|
|
559
427
|
function checkoutFix(_x3) {
|
|
560
428
|
return _checkoutFix.apply(this, arguments);
|
|
561
429
|
}
|
|
562
|
-
|
|
563
430
|
function _checkoutFix() {
|
|
564
431
|
_checkoutFix = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(options) {
|
|
565
432
|
var c, v;
|
|
@@ -568,14 +435,11 @@ function _checkoutFix() {
|
|
|
568
435
|
switch (_context6.prev = _context6.next) {
|
|
569
436
|
case 0:
|
|
570
437
|
c = options.commit;
|
|
571
|
-
|
|
572
438
|
if (!(c == undefined)) {
|
|
573
439
|
_context6.next = 3;
|
|
574
440
|
break;
|
|
575
441
|
}
|
|
576
|
-
|
|
577
442
|
return _context6.abrupt("return");
|
|
578
|
-
|
|
579
443
|
case 3:
|
|
580
444
|
v = options.verbose;
|
|
581
445
|
git.run(c, "checkout --quiet master", v);
|
|
@@ -585,7 +449,6 @@ function _checkoutFix() {
|
|
|
585
449
|
git.run(c, "merge --no-ff -m 'Merge upstream' upstream/uid", v);
|
|
586
450
|
if (/bugfixes/.test(git.run(c, "branch", v))) git.run(c, "branch -D bugfixes", v);
|
|
587
451
|
git.run(c, "checkout --quiet -b bugfixes", v);
|
|
588
|
-
|
|
589
452
|
case 11:
|
|
590
453
|
case "end":
|
|
591
454
|
return _context6.stop();
|
|
@@ -595,11 +458,9 @@ function _checkoutFix() {
|
|
|
595
458
|
}));
|
|
596
459
|
return _checkoutFix.apply(this, arguments);
|
|
597
460
|
}
|
|
598
|
-
|
|
599
461
|
function mergeFix(_x4) {
|
|
600
462
|
return _mergeFix.apply(this, arguments);
|
|
601
463
|
}
|
|
602
|
-
|
|
603
464
|
function _mergeFix() {
|
|
604
465
|
_mergeFix = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(options) {
|
|
605
466
|
var c, v;
|
|
@@ -608,14 +469,11 @@ function _mergeFix() {
|
|
|
608
469
|
switch (_context7.prev = _context7.next) {
|
|
609
470
|
case 0:
|
|
610
471
|
c = options.commit;
|
|
611
|
-
|
|
612
472
|
if (!(c == undefined)) {
|
|
613
473
|
_context7.next = 3;
|
|
614
474
|
break;
|
|
615
475
|
}
|
|
616
|
-
|
|
617
476
|
return _context7.abrupt("return");
|
|
618
|
-
|
|
619
477
|
case 3:
|
|
620
478
|
v = options.verbose;
|
|
621
479
|
git.run(c, "checkout --quiet tmp", v);
|
|
@@ -624,7 +482,6 @@ function _mergeFix() {
|
|
|
624
482
|
git.run(c, "checkout --quiet master", v);
|
|
625
483
|
if (!git.test(c, "diff --quiet tmp master", v)) git.run(c, "merge --ff-only tmp", v);
|
|
626
484
|
git.run(c, "branch -D tmp", v);
|
|
627
|
-
|
|
628
485
|
case 10:
|
|
629
486
|
case "end":
|
|
630
487
|
return _context7.stop();
|
|
@@ -634,72 +491,55 @@ function _mergeFix() {
|
|
|
634
491
|
}));
|
|
635
492
|
return _mergeFix.apply(this, arguments);
|
|
636
493
|
}
|
|
637
|
-
|
|
638
494
|
function main(_x5) {
|
|
639
495
|
return _main2.apply(this, arguments);
|
|
640
496
|
}
|
|
641
497
|
/* istanbul ignore if */
|
|
642
|
-
|
|
643
|
-
|
|
644
498
|
function _main2() {
|
|
645
499
|
_main2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(argv) {
|
|
646
500
|
var options, directorySchema, _iterator3, _step3, d, helper, status;
|
|
647
|
-
|
|
648
501
|
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
649
502
|
while (1) {
|
|
650
503
|
switch (_context8.prev = _context8.next) {
|
|
651
504
|
case 0:
|
|
652
505
|
options = parseArgs(argv);
|
|
653
|
-
|
|
654
506
|
if (!(options === null)) {
|
|
655
507
|
_context8.next = 3;
|
|
656
508
|
break;
|
|
657
509
|
}
|
|
658
|
-
|
|
659
510
|
return _context8.abrupt("return", 1);
|
|
660
|
-
|
|
661
511
|
case 3:
|
|
662
512
|
directorySchema = [];
|
|
663
|
-
|
|
664
513
|
if (!options.schema) {
|
|
665
514
|
_context8.next = 8;
|
|
666
515
|
break;
|
|
667
516
|
}
|
|
668
|
-
|
|
669
517
|
directorySchema = [[options.data, options.schema]];
|
|
670
518
|
_context8.next = 14;
|
|
671
519
|
break;
|
|
672
|
-
|
|
673
520
|
case 8:
|
|
674
521
|
if (!options.dataset) {
|
|
675
522
|
_context8.next = 12;
|
|
676
523
|
break;
|
|
677
524
|
}
|
|
678
|
-
|
|
679
525
|
directorySchema = (0, _datasets.datasetDirectorySchema)(options.dataset);
|
|
680
526
|
_context8.next = 14;
|
|
681
527
|
break;
|
|
682
|
-
|
|
683
528
|
case 12:
|
|
684
529
|
console.error("either --schema or --dataset is required");
|
|
685
530
|
return _context8.abrupt("return", 1);
|
|
686
|
-
|
|
687
531
|
case 14:
|
|
688
532
|
_context8.next = 16;
|
|
689
533
|
return checkoutFix(options);
|
|
690
|
-
|
|
691
534
|
case 16:
|
|
692
535
|
_iterator3 = _createForOfIteratorHelper(directorySchema);
|
|
693
536
|
_context8.prev = 17;
|
|
694
|
-
|
|
695
537
|
_iterator3.s();
|
|
696
|
-
|
|
697
538
|
case 19:
|
|
698
539
|
if ((_step3 = _iterator3.n()).done) {
|
|
699
540
|
_context8.next = 42;
|
|
700
541
|
break;
|
|
701
542
|
}
|
|
702
|
-
|
|
703
543
|
d = _step3.value;
|
|
704
544
|
options.schema = d[1];
|
|
705
545
|
options.data = d[0];
|
|
@@ -709,64 +549,46 @@ function _main2() {
|
|
|
709
549
|
helper = new BugsHelper(options);
|
|
710
550
|
_context8.next = 34;
|
|
711
551
|
break;
|
|
712
|
-
|
|
713
552
|
case 29:
|
|
714
553
|
_context8.prev = 29;
|
|
715
554
|
_context8.t0 = _context8["catch"](25);
|
|
716
|
-
|
|
717
555
|
if (_context8.t0 instanceof _file_systems.GetFileNotFoundError) {
|
|
718
556
|
_context8.next = 33;
|
|
719
557
|
break;
|
|
720
558
|
}
|
|
721
|
-
|
|
722
559
|
throw _context8.t0;
|
|
723
|
-
|
|
724
560
|
case 33:
|
|
725
561
|
return _context8.abrupt("continue", 40);
|
|
726
|
-
|
|
727
562
|
case 34:
|
|
728
563
|
if (options.verbose) console.log("working on files ".concat(options.data, " with schema ").concat(options.schema));
|
|
729
564
|
_context8.next = 37;
|
|
730
565
|
return helper.main();
|
|
731
|
-
|
|
732
566
|
case 37:
|
|
733
567
|
status = _context8.sent;
|
|
734
|
-
|
|
735
568
|
if (!(status != 0)) {
|
|
736
569
|
_context8.next = 40;
|
|
737
570
|
break;
|
|
738
571
|
}
|
|
739
|
-
|
|
740
572
|
return _context8.abrupt("return", status);
|
|
741
|
-
|
|
742
573
|
case 40:
|
|
743
574
|
_context8.next = 19;
|
|
744
575
|
break;
|
|
745
|
-
|
|
746
576
|
case 42:
|
|
747
577
|
_context8.next = 47;
|
|
748
578
|
break;
|
|
749
|
-
|
|
750
579
|
case 44:
|
|
751
580
|
_context8.prev = 44;
|
|
752
581
|
_context8.t1 = _context8["catch"](17);
|
|
753
|
-
|
|
754
582
|
_iterator3.e(_context8.t1);
|
|
755
|
-
|
|
756
583
|
case 47:
|
|
757
584
|
_context8.prev = 47;
|
|
758
|
-
|
|
759
585
|
_iterator3.f();
|
|
760
|
-
|
|
761
586
|
return _context8.finish(47);
|
|
762
|
-
|
|
763
587
|
case 50:
|
|
764
588
|
_context8.next = 52;
|
|
765
589
|
return mergeFix(options);
|
|
766
|
-
|
|
767
590
|
case 52:
|
|
768
591
|
return _context8.abrupt("return", 0);
|
|
769
|
-
|
|
770
592
|
case 53:
|
|
771
593
|
case "end":
|
|
772
594
|
return _context8.stop();
|
|
@@ -776,11 +598,10 @@ function _main2() {
|
|
|
776
598
|
}));
|
|
777
599
|
return _main2.apply(this, arguments);
|
|
778
600
|
}
|
|
779
|
-
|
|
780
601
|
if (process.argv[1].endsWith("bugs_helper.ts")) main(process.argv).then(function (status) {
|
|
781
602
|
process.exit(status);
|
|
782
603
|
})["catch"](function (error) {
|
|
783
604
|
console.error(error);
|
|
784
605
|
process.exit(1);
|
|
785
606
|
});
|
|
786
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0T3B0aW9uIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJnZXREYXRhc2V0cyIsImdldFNjaGVtYXMiLCJCb29sZWFuIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJkYXRhc2V0IiwidmFsaWREYXRhc2V0IiwiY29uc29sZSIsImVycm9yIiwiaGVscCIsInNjaGVtYSIsImluY2x1ZGVzIiwiY29tbWl0IiwiZnMiLCJleGlzdHNTeW5jIiwiZGVidWciLCJ2ZXJib3NlIiwidXNhZ2UiLCJjb21tYW5kTGluZVVzYWdlIiwid2FybiIsIkJ1Z3NIZWxwZXIiLCJidWdzIiwiU2NoZW1hQnVncyIsImFuYWx5c2lzIiwicHJlQ2hlY2siLCJsb2ciLCJkYXRhIiwiZ2V0RmlsZXMiLCJmaWxlIiwibG9hZCIsImNoZWNrIiwicG9zdENoZWNrIiwic2hvdyIsIm91dHB1dCIsInN0b3JlIiwiT2JqZWN0Iiwia2V5cyIsImZpbGVuYW1lIiwiYnVnIiwicmVzdWx0IiwidW5kZWZpbmVkIiwiam9pbiIsIm5hbWUycmVwb3J0cyIsInJlcG9ydHMiLCJuIiwic3BsaXQiLCJsaW5lcyIsIk51bWJlciIsInN0YXR1czJsaW5lcyIsInJlcG9ydCIsInN0YXR1cyIsImwiLCJwdXNoIiwiZGlmZlVwc3RyZWFtIiwibWFzdGVyVXJsIiwiaW5mbyIsImxhYmVsIiwiY29uY2F0Iiwid3JpdGVGaWxlU3luYyIsImVuY29kaW5nIiwicHJlRml4IiwiZml4IiwiY2hlY2tvdXRGaXgiLCJjIiwidiIsImdpdCIsInJ1biIsInRlc3QiLCJtZXJnZUZpeCIsIm1haW4iLCJkaXJlY3RvcnlTY2hlbWEiLCJkYXRhc2V0RGlyZWN0b3J5U2NoZW1hIiwiZCIsImhlbHBlciIsIkdldEZpbGVOb3RGb3VuZEVycm9yIiwicHJvY2VzcyIsImVuZHNXaXRoIiwidGhlbiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9idWdzX2hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBjb21tYW5kTGluZVVzYWdlIGZyb20gXCJjb21tYW5kLWxpbmUtdXNhZ2VcIlxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMsIEdldEZpbGVOb3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgeyBTY2hlbWFCdWdzIH0gZnJvbSBcIi4uLy4uL3NyYy9idWdzXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vLi4vc3JjL2dpdFwiXG5pbXBvcnQge1xuICB2YWxpZERhdGFzZXQsXG4gIGdldERhdGFzZXRzLFxuICBnZXRTY2hlbWFzLFxuICBkYXRhc2V0RGlyZWN0b3J5U2NoZW1hLFxuICBkaWZmVXBzdHJlYW0sXG4gIG1hc3RlclVybCxcbn0gZnJvbSBcIi4uLy4uL3NyYy9kYXRhc2V0c1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJwYXRobmFtZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGRhdGFzZXRcIixcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBuYW1lOiBcImRhdGFcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgSFRNTCBjb21wdGVzIHJlbmR1cyBkZSBzZWFuY2VcIixcbiAgICAgIG5hbWU6IFwiY3JcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3RvcnkgdG8gY29tbWl0XCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwib25seSBjb25zaWRlciB0aGlzIGJ1Z1wiLFxuICAgICAgbmFtZTogXCJidWdcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGNoZWNrIG91dHB1dHMgd2lsbCBiZSBzdG9yZWRcIixcbiAgICAgIG5hbWU6IFwib3V0cHV0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogYGRhdGFzZXQgKHBvc3NpYmxlIHZhbHVlcyBtdXN0IGluY2x1ZGUgZXhhY3RseSBvbmUgb2YgJHtnZXREYXRhc2V0cygpfSlgLFxuICAgICAgbmFtZTogXCJkYXRhc2V0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogYHNjaGVtYSAocG9zc2libGUgdmFsdWVzIGFyZSAke2dldFNjaGVtYXMoKX0pYCxcbiAgICAgIG5hbWU6IFwic2NoZW1hXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJkaXJlY3RvcnkgaW4gd2hpY2ggYnVncyBhcmUgZm91bmQgKGRlZmF1bHQgLilcIixcbiAgICAgIG5hbWU6IFwiYnVncy1kaXJcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImluY3JlYXNlIHZlcmJvc2l0eVwiLFxuICAgICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwiZGVidWcgaW5mb3JtYXRpb25cIixcbiAgICAgIG5hbWU6IFwiZGVidWdcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJjaGVja1wiLFxuICAgICAgbmFtZTogXCJjaGVja1wiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImZpeFwiLFxuICAgICAgbmFtZTogXCJmaXhcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImhlbHBcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlByaW50IHRoaXMgdXNhZ2UgZ3VpZGUuXCIsXG4gICAgfSxcbiAgXVxuICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiQ3Jvc3MgY2hlY2sgZGF0YSBjb25zaXN0ZW5jeSBhbmQgZml4IHByb2JsZW1zXCIsXG4gICAgICBjb250ZW50OiBcIlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVhZGVyOiBcIk9wdGlvbnNcIixcbiAgICAgIG9wdGlvbkxpc3Q6IG9wdGlvbnNEZWZpbml0aW9ucyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcblxuICBpZiAob3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgaWYgKCF2YWxpZERhdGFzZXQob3B0aW9ucy5kYXRhc2V0KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgLS1kYXRhc2V0ICR7b3B0aW9ucy5kYXRhc2V0fWApXG4gICAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2NoZW1hKSB7XG4gICAgaWYgKCFnZXRTY2hlbWFzKCkuaW5jbHVkZXMob3B0aW9ucy5zY2hlbWEpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAtLXNjaGVtYSAke29wdGlvbnMuc2NoZW1hfWApXG4gICAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG9wdGlvbnMuY29tbWl0KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtvcHRpb25zLmNvbW1pdH0gZG9lcyBub3QgZXhpc3RgKVxuICAgICAgb3B0aW9ucy5oZWxwID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLmRlYnVnKSBvcHRpb25zLnZlcmJvc2UgPSB0cnVlXG5cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZXhwb3J0IGNsYXNzIEJ1Z3NIZWxwZXIge1xuICBvcHRpb25zOiBhbnlcbiAgYnVnczogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuYnVncyA9IG5ldyBTY2hlbWFCdWdzKHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIGFzeW5jIGNoZWNrKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgYW5hbHlzaXM6IGFueSA9IHt9XG4gICAgYXdhaXQgdGhpcy5idWdzLnByZUNoZWNrKClcbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcmJvc2UpIGNvbnNvbGUubG9nKGBjaGVjayAke3RoaXMub3B0aW9ucy5kYXRhfWApXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGdldEZpbGVzKFt0aGlzLm9wdGlvbnMuZGF0YV0pKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gbG9hZChmaWxlKVxuICAgICAgYW5hbHlzaXNbZmlsZV0gPSBhd2FpdCB0aGlzLmJ1Z3MuY2hlY2soY29udGVudCwgZmlsZSlcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5idWdzLnBvc3RDaGVjayhhbmFseXNpcylcbiAgICBhd2FpdCB0aGlzLnNob3coYW5hbHlzaXMpXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRwdXQpIGF3YWl0IHRoaXMuc3RvcmUoYW5hbHlzaXMpXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGFzeW5jIHNob3coYW5hbHlzaXM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgT2JqZWN0LmtleXMoYW5hbHlzaXMpKSB7XG4gICAgICBjb25zdCBidWcgPSBhbmFseXNpc1tmaWxlbmFtZV1cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhidWcpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1Z1tuYW1lXVxuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICBsZXQgbG9nXG4gICAgICAgICAgaWYgKHJlc3VsdFtcInN0YXR1c1wiXSA9PSBcIm5lZWRzLWZpeGluZ1wiKSB7XG4gICAgICAgICAgICBsb2cgPSBjb25zb2xlLmVycm9yXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nID0gY29uc29sZS5sb2dcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxvZyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvZyhgJHtuYW1lfSBmaW5kcyAke2ZpbGVuYW1lfSAke3Jlc3VsdFtcInN0YXR1c1wiXX1gKVxuICAgICAgICAgICAgbG9nKHJlc3VsdFtcImluZm9cIl0uam9pbihcIlxcblwiKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9yZShhbmFseXNpczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmFtZTJyZXBvcnRzOiBhbnkgPSB7fVxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgT2JqZWN0LmtleXMoYW5hbHlzaXMpKSB7XG4gICAgICBjb25zdCBidWcgPSBhbmFseXNpc1tmaWxlbmFtZV1cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhidWcpKSB7XG4gICAgICAgIGlmICghKG5hbWUgaW4gbmFtZTJyZXBvcnRzKSkgbmFtZTJyZXBvcnRzW25hbWVdID0ge31cbiAgICAgICAgbmFtZTJyZXBvcnRzW25hbWVdW2ZpbGVuYW1lXSA9IGJ1Z1tuYW1lXVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMobmFtZTJyZXBvcnRzKSkge1xuICAgICAgY29uc3QgcmVwb3J0cyA9IG5hbWUycmVwb3J0c1tuYW1lXVxuICAgICAgY29uc3QgbiA9IG5hbWUuc3BsaXQoXCItXCIpWzFdXG4gICAgICBsZXQgbGluZXM6IGFueSA9IFtcbiAgICAgICAgYCMjIEJ1ZyBbJHtuYW1lfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvdHJpY290ZXVzZXMtYXNzZW1ibGVlLXFhL2lzc3Vlcy8ke051bWJlcihcbiAgICAgICAgICBuLFxuICAgICAgICApfSlgLFxuICAgICAgICBgVGhpcyByZXBvcnQgd2FzIGNyZWF0ZWQgYnkgdGhlICoqY2hlY2sqKiBmdW5jdGlvbiBvZiBbJHtuYW1lfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvdHJpY290ZXVzZXMtYXNzZW1ibGVlLy0vYmxvYi9tYXN0ZXIvc3JjL2J1Z3MvJHtuYW1lfS50cykuYCxcbiAgICAgIF1cbiAgICAgIGNvbnN0IHN0YXR1czJsaW5lczogYW55ID0ge1xuICAgICAgICBcIm5lZWRzLWZpeGluZ1wiOiBbXSxcbiAgICAgICAgXCJ3aWxsLWJlLWZpeGVkXCI6IFtdLFxuICAgICAgICBcImFscmVhZHktZml4ZWRcIjogW10sXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIE9iamVjdC5rZXlzKHJlcG9ydHMpKSB7XG4gICAgICAgIGNvbnN0IHJlcG9ydCA9IHJlcG9ydHNbZmlsZW5hbWVdXG4gICAgICAgIGlmIChyZXBvcnQgPT0gbnVsbCB8fCByZXBvcnRbXCJzdGF0dXNcIl0gPT0gXCJva1wiKSBjb250aW51ZVxuICAgICAgICBpZiAoIShyZXBvcnRbXCJzdGF0dXNcIl0gaW4gc3RhdHVzMmxpbmVzKSlcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGAke2ZpbGVuYW1lfSBzdGF0dXMgJHtyZXBvcnRbXCJzdGF0dXNcIl19IHVua25vd25gKVxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXBvcnRbXCJzdGF0dXNcIl1cbiAgICAgICAgbGV0IGwgPSBzdGF0dXMybGluZXNbc3RhdHVzXVxuICAgICAgICBpZiAoc3RhdHVzID09IFwid2lsbC1iZS1maXhlZFwiKSBsLnB1c2goYCogJHtkaWZmVXBzdHJlYW0oZmlsZW5hbWUpfWApXG4gICAgICAgIGVsc2UgbC5wdXNoKGAqICR7bWFzdGVyVXJsKGZpbGVuYW1lKX1gKVxuICAgICAgICBmb3IgKGNvbnN0IGluZm8gb2YgcmVwb3J0W1wiaW5mb1wiXSkgbC5wdXNoKGAgICogJHtpbmZvfWApXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtzdGF0dXMsIGxhYmVsXSBvZiBbXG4gICAgICAgIFtcIm5lZWRzLWZpeGluZ1wiLCBcIlRoZSBmb2xsb3dpbmcgZmlsZXMgbXVzdCBiZSBmaXhlZFwiXSxcbiAgICAgICAgW1wiYWxyZWFkeS1maXhlZFwiLCBcIlRoZSBmb2xsb3dpbmcgZmlsZXMgbm8gbG9uZ2VyIG5lZWQgYSBmaXhcIl0sXG4gICAgICAgIFtcIndpbGwtYmUtZml4ZWRcIiwgXCJUaGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgZml4ZWRcIl0sXG4gICAgICBdKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCMjIyAke2xhYmVsfWApXG4gICAgICAgIGxpbmVzID0gbGluZXMuY29uY2F0KHN0YXR1czJsaW5lc1tzdGF0dXNdKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3V0cHV0ID0gYCR7dGhpcy5vcHRpb25zLm91dHB1dH0vJHtuYW1lfS5tZGBcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMob3V0cHV0LCBsaW5lcy5qb2luKFwiXFxuXCIpLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZml4KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgYXdhaXQgdGhpcy5idWdzLnByZUZpeCgpXG4gICAgYXdhaXQgdGhpcy5idWdzLmZpeChnZXRGaWxlcyhbdGhpcy5vcHRpb25zLmRhdGFdKSlcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgYXN5bmMgbWFpbigpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2hlY2spIHJldHVybiB0aGlzLmNoZWNrKClcbiAgICBlbHNlIHJldHVybiB0aGlzLmZpeCgpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrb3V0Rml4KG9wdGlvbnM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjID0gb3B0aW9ucy5jb21taXRcbiAgaWYgKGMgPT0gdW5kZWZpbmVkKSByZXR1cm5cbiAgY29uc3QgdiA9IG9wdGlvbnMudmVyYm9zZVxuICBnaXQucnVuKGMsIFwiY2hlY2tvdXQgLS1xdWlldCBtYXN0ZXJcIiwgdilcbiAgaWYgKC90bXAvLnRlc3QoZ2l0LnJ1bihjLCBcImJyYW5jaFwiLCB2KSkpIGdpdC5ydW4oYywgXCJicmFuY2ggLUQgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJjaGVja291dCAtLXF1aWV0IC1iIHRtcCBtYXN0ZXJcIiwgdilcbiAgaWYgKC9NZXJnZSBidWdmaXhlcy8udGVzdChnaXQucnVuKGMsIFwibG9nIC0tb25lbGluZSAtMVwiLCB2KSkpXG4gICAgZ2l0LnJ1bihjLCBcInJldmVydCAtLW1haW5saW5lIDEgLS1uby1lZGl0IEhFQURcIiwgdilcbiAgZ2l0LnJ1bihjLCBcIm1lcmdlIC0tbm8tZmYgLW0gJ01lcmdlIHVwc3RyZWFtJyB1cHN0cmVhbS91aWRcIiwgdilcbiAgaWYgKC9idWdmaXhlcy8udGVzdChnaXQucnVuKGMsIFwiYnJhbmNoXCIsIHYpKSlcbiAgICBnaXQucnVuKGMsIFwiYnJhbmNoIC1EIGJ1Z2ZpeGVzXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJjaGVja291dCAtLXF1aWV0IC1iIGJ1Z2ZpeGVzXCIsIHYpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZXJnZUZpeChvcHRpb25zOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IG9wdGlvbnMuY29tbWl0XG4gIGlmIChjID09IHVuZGVmaW5lZCkgcmV0dXJuXG4gIGNvbnN0IHYgPSBvcHRpb25zLnZlcmJvc2VcbiAgZ2l0LnJ1bihjLCBcImNoZWNrb3V0IC0tcXVpZXQgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJtZXJnZSAtLW5vLWZmIC1tICdNZXJnZSBidWdmaXhlcycgYnVnZml4ZXNcIiwgdilcbiAgZ2l0LnJ1bihjLCBcImJyYW5jaCAtRCBidWdmaXhlc1wiLCB2KVxuICBnaXQucnVuKGMsIFwiY2hlY2tvdXQgLS1xdWlldCBtYXN0ZXJcIiwgdilcbiAgaWYgKCFnaXQudGVzdChjLCBcImRpZmYgLS1xdWlldCB0bXAgbWFzdGVyXCIsIHYpKVxuICAgIGdpdC5ydW4oYywgXCJtZXJnZSAtLWZmLW9ubHkgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJicmFuY2ggLUQgdG1wXCIsIHYpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHJldHVybiAxXG4gIGxldCBkaXJlY3RvcnlTY2hlbWEgPSBbXVxuICBpZiAob3B0aW9ucy5zY2hlbWEpIHtcbiAgICBkaXJlY3RvcnlTY2hlbWEgPSBbW29wdGlvbnMuZGF0YSwgb3B0aW9ucy5zY2hlbWFdXVxuICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YXNldCkge1xuICAgIGRpcmVjdG9yeVNjaGVtYSA9IGRhdGFzZXREaXJlY3RvcnlTY2hlbWEob3B0aW9ucy5kYXRhc2V0KVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJlaXRoZXIgLS1zY2hlbWEgb3IgLS1kYXRhc2V0IGlzIHJlcXVpcmVkXCIpXG4gICAgcmV0dXJuIDFcbiAgfVxuICBhd2FpdCBjaGVja291dEZpeChvcHRpb25zKVxuICBmb3IgKGNvbnN0IGQgb2YgZGlyZWN0b3J5U2NoZW1hKSB7XG4gICAgb3B0aW9ucy5zY2hlbWEgPSBkWzFdXG4gICAgb3B0aW9ucy5kYXRhID0gZFswXVxuICAgIGlmIChvcHRpb25zLmRlYnVnKVxuICAgICAgY29uc29sZS5sb2coYHdvcmtpbmcgb24gJHtvcHRpb25zLmRhdGF9IHdpdGggc2NoZW1hICR7b3B0aW9ucy5zY2hlbWF9YClcbiAgICBsZXQgaGVscGVyXG4gICAgdHJ5IHtcbiAgICAgIGhlbHBlciA9IG5ldyBCdWdzSGVscGVyKG9wdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIEdldEZpbGVOb3RGb3VuZEVycm9yKSkge1xuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKVxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGB3b3JraW5nIG9uIGZpbGVzICR7b3B0aW9ucy5kYXRhfSB3aXRoIHNjaGVtYSAke29wdGlvbnMuc2NoZW1hfWAsXG4gICAgICApXG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgaGVscGVyLm1haW4oKVxuICAgIGlmIChzdGF0dXMgIT0gMCkgcmV0dXJuIHN0YXR1c1xuICB9XG4gIGF3YWl0IG1lcmdlRml4KG9wdGlvbnMpXG4gIHJldHVybiAwXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcImJ1Z3NfaGVscGVyLnRzXCIpKVxuICBtYWluKHByb2Nlc3MuYXJndilcbiAgICAudGhlbigoc3RhdHVzKSA9PiB7XG4gICAgICBwcm9jZXNzLmV4aXQoc3RhdHVzKVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OytDQUxBLG9KOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVNBLFNBQVQsQ0FBbUJDLElBQW5CLEVBQXdDO0VBQ3RDLElBQU1DLGtCQUFrQixHQUFHLENBQ3pCO0lBQ0VDLFdBQVcsRUFBRSxrREFEZjtJQUVFQyxhQUFhLEVBQUUsSUFGakI7SUFHRUMsSUFBSSxFQUFFLE1BSFI7SUFJRUMsSUFBSSxFQUFFQztFQUpSLENBRHlCLEVBT3pCO0lBQ0VKLFdBQVcsRUFDVCx3RUFGSjtJQUdFRSxJQUFJLEVBQUUsSUFIUjtJQUlFQyxJQUFJLEVBQUVDO0VBSlIsQ0FQeUIsRUFhekI7SUFDRUosV0FBVyxFQUFFLHFDQURmO0lBRUVFLElBQUksRUFBRSxRQUZSO0lBR0VDLElBQUksRUFBRUM7RUFIUixDQWJ5QixFQWtCekI7SUFDRUosV0FBVyxFQUFFLHdCQURmO0lBRUVFLElBQUksRUFBRSxLQUZSO0lBR0VDLElBQUks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
|
|
607
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0T3B0aW9uIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJnZXREYXRhc2V0cyIsImdldFNjaGVtYXMiLCJCb29sZWFuIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJkYXRhc2V0IiwidmFsaWREYXRhc2V0IiwiY29uc29sZSIsImVycm9yIiwiaGVscCIsInNjaGVtYSIsImluY2x1ZGVzIiwiY29tbWl0IiwiZnMiLCJleGlzdHNTeW5jIiwiZGVidWciLCJ2ZXJib3NlIiwidXNhZ2UiLCJjb21tYW5kTGluZVVzYWdlIiwid2FybiIsIkJ1Z3NIZWxwZXIiLCJidWdzIiwiU2NoZW1hQnVncyIsImFuYWx5c2lzIiwicHJlQ2hlY2siLCJsb2ciLCJkYXRhIiwiZ2V0RmlsZXMiLCJmaWxlIiwibG9hZCIsImNoZWNrIiwicG9zdENoZWNrIiwic2hvdyIsIm91dHB1dCIsInN0b3JlIiwiT2JqZWN0Iiwia2V5cyIsImZpbGVuYW1lIiwiYnVnIiwicmVzdWx0IiwidW5kZWZpbmVkIiwiam9pbiIsIm5hbWUycmVwb3J0cyIsInJlcG9ydHMiLCJuIiwic3BsaXQiLCJsaW5lcyIsIk51bWJlciIsInN0YXR1czJsaW5lcyIsInJlcG9ydCIsInN0YXR1cyIsImwiLCJwdXNoIiwiZGlmZlVwc3RyZWFtIiwibWFzdGVyVXJsIiwiaW5mbyIsImxhYmVsIiwiY29uY2F0Iiwid3JpdGVGaWxlU3luYyIsImVuY29kaW5nIiwicHJlRml4IiwiZml4IiwiY2hlY2tvdXRGaXgiLCJjIiwidiIsImdpdCIsInJ1biIsInRlc3QiLCJtZXJnZUZpeCIsIm1haW4iLCJkaXJlY3RvcnlTY2hlbWEiLCJkYXRhc2V0RGlyZWN0b3J5U2NoZW1hIiwiZCIsImhlbHBlciIsIkdldEZpbGVOb3RGb3VuZEVycm9yIiwicHJvY2VzcyIsImVuZHNXaXRoIiwidGhlbiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9idWdzX2hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBjb21tYW5kTGluZVVzYWdlIGZyb20gXCJjb21tYW5kLWxpbmUtdXNhZ2VcIlxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMsIEdldEZpbGVOb3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgeyBTY2hlbWFCdWdzIH0gZnJvbSBcIi4uLy4uL3NyYy9idWdzXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vLi4vc3JjL2dpdFwiXG5pbXBvcnQge1xuICB2YWxpZERhdGFzZXQsXG4gIGdldERhdGFzZXRzLFxuICBnZXRTY2hlbWFzLFxuICBkYXRhc2V0RGlyZWN0b3J5U2NoZW1hLFxuICBkaWZmVXBzdHJlYW0sXG4gIG1hc3RlclVybCxcbn0gZnJvbSBcIi4uLy4uL3NyYy9kYXRhc2V0c1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJwYXRobmFtZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGRhdGFzZXRcIixcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBuYW1lOiBcImRhdGFcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgSFRNTCBjb21wdGVzIHJlbmR1cyBkZSBzZWFuY2VcIixcbiAgICAgIG5hbWU6IFwiY3JcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3RvcnkgdG8gY29tbWl0XCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwib25seSBjb25zaWRlciB0aGlzIGJ1Z1wiLFxuICAgICAgbmFtZTogXCJidWdcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGNoZWNrIG91dHB1dHMgd2lsbCBiZSBzdG9yZWRcIixcbiAgICAgIG5hbWU6IFwib3V0cHV0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogYGRhdGFzZXQgKHBvc3NpYmxlIHZhbHVlcyBtdXN0IGluY2x1ZGUgZXhhY3RseSBvbmUgb2YgJHtnZXREYXRhc2V0cygpfSlgLFxuICAgICAgbmFtZTogXCJkYXRhc2V0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogYHNjaGVtYSAocG9zc2libGUgdmFsdWVzIGFyZSAke2dldFNjaGVtYXMoKX0pYCxcbiAgICAgIG5hbWU6IFwic2NoZW1hXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJkaXJlY3RvcnkgaW4gd2hpY2ggYnVncyBhcmUgZm91bmQgKGRlZmF1bHQgLilcIixcbiAgICAgIG5hbWU6IFwiYnVncy1kaXJcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImluY3JlYXNlIHZlcmJvc2l0eVwiLFxuICAgICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwiZGVidWcgaW5mb3JtYXRpb25cIixcbiAgICAgIG5hbWU6IFwiZGVidWdcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJjaGVja1wiLFxuICAgICAgbmFtZTogXCJjaGVja1wiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImZpeFwiLFxuICAgICAgbmFtZTogXCJmaXhcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImhlbHBcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlByaW50IHRoaXMgdXNhZ2UgZ3VpZGUuXCIsXG4gICAgfSxcbiAgXVxuICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiQ3Jvc3MgY2hlY2sgZGF0YSBjb25zaXN0ZW5jeSBhbmQgZml4IHByb2JsZW1zXCIsXG4gICAgICBjb250ZW50OiBcIlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVhZGVyOiBcIk9wdGlvbnNcIixcbiAgICAgIG9wdGlvbkxpc3Q6IG9wdGlvbnNEZWZpbml0aW9ucyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcblxuICBpZiAob3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgaWYgKCF2YWxpZERhdGFzZXQob3B0aW9ucy5kYXRhc2V0KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgLS1kYXRhc2V0ICR7b3B0aW9ucy5kYXRhc2V0fWApXG4gICAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2NoZW1hKSB7XG4gICAgaWYgKCFnZXRTY2hlbWFzKCkuaW5jbHVkZXMob3B0aW9ucy5zY2hlbWEpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAtLXNjaGVtYSAke29wdGlvbnMuc2NoZW1hfWApXG4gICAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG9wdGlvbnMuY29tbWl0KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtvcHRpb25zLmNvbW1pdH0gZG9lcyBub3QgZXhpc3RgKVxuICAgICAgb3B0aW9ucy5oZWxwID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLmRlYnVnKSBvcHRpb25zLnZlcmJvc2UgPSB0cnVlXG5cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZXhwb3J0IGNsYXNzIEJ1Z3NIZWxwZXIge1xuICBvcHRpb25zOiBhbnlcbiAgYnVnczogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuYnVncyA9IG5ldyBTY2hlbWFCdWdzKHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIGFzeW5jIGNoZWNrKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgYW5hbHlzaXM6IGFueSA9IHt9XG4gICAgYXdhaXQgdGhpcy5idWdzLnByZUNoZWNrKClcbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcmJvc2UpIGNvbnNvbGUubG9nKGBjaGVjayAke3RoaXMub3B0aW9ucy5kYXRhfWApXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGdldEZpbGVzKFt0aGlzLm9wdGlvbnMuZGF0YV0pKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gbG9hZChmaWxlKVxuICAgICAgYW5hbHlzaXNbZmlsZV0gPSBhd2FpdCB0aGlzLmJ1Z3MuY2hlY2soY29udGVudCwgZmlsZSlcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5idWdzLnBvc3RDaGVjayhhbmFseXNpcylcbiAgICBhd2FpdCB0aGlzLnNob3coYW5hbHlzaXMpXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRwdXQpIGF3YWl0IHRoaXMuc3RvcmUoYW5hbHlzaXMpXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGFzeW5jIHNob3coYW5hbHlzaXM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgT2JqZWN0LmtleXMoYW5hbHlzaXMpKSB7XG4gICAgICBjb25zdCBidWcgPSBhbmFseXNpc1tmaWxlbmFtZV1cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhidWcpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1Z1tuYW1lXVxuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICBsZXQgbG9nXG4gICAgICAgICAgaWYgKHJlc3VsdFtcInN0YXR1c1wiXSA9PSBcIm5lZWRzLWZpeGluZ1wiKSB7XG4gICAgICAgICAgICBsb2cgPSBjb25zb2xlLmVycm9yXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nID0gY29uc29sZS5sb2dcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxvZyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvZyhgJHtuYW1lfSBmaW5kcyAke2ZpbGVuYW1lfSAke3Jlc3VsdFtcInN0YXR1c1wiXX1gKVxuICAgICAgICAgICAgbG9nKHJlc3VsdFtcImluZm9cIl0uam9pbihcIlxcblwiKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9yZShhbmFseXNpczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmFtZTJyZXBvcnRzOiBhbnkgPSB7fVxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgT2JqZWN0LmtleXMoYW5hbHlzaXMpKSB7XG4gICAgICBjb25zdCBidWcgPSBhbmFseXNpc1tmaWxlbmFtZV1cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhidWcpKSB7XG4gICAgICAgIGlmICghKG5hbWUgaW4gbmFtZTJyZXBvcnRzKSkgbmFtZTJyZXBvcnRzW25hbWVdID0ge31cbiAgICAgICAgbmFtZTJyZXBvcnRzW25hbWVdW2ZpbGVuYW1lXSA9IGJ1Z1tuYW1lXVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMobmFtZTJyZXBvcnRzKSkge1xuICAgICAgY29uc3QgcmVwb3J0cyA9IG5hbWUycmVwb3J0c1tuYW1lXVxuICAgICAgY29uc3QgbiA9IG5hbWUuc3BsaXQoXCItXCIpWzFdXG4gICAgICBsZXQgbGluZXM6IGFueSA9IFtcbiAgICAgICAgYCMjIEJ1ZyBbJHtuYW1lfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvdHJpY290ZXVzZXMtYXNzZW1ibGVlLXFhL2lzc3Vlcy8ke051bWJlcihcbiAgICAgICAgICBuLFxuICAgICAgICApfSlgLFxuICAgICAgICBgVGhpcyByZXBvcnQgd2FzIGNyZWF0ZWQgYnkgdGhlICoqY2hlY2sqKiBmdW5jdGlvbiBvZiBbJHtuYW1lfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvdHJpY290ZXVzZXMtYXNzZW1ibGVlLy0vYmxvYi9tYXN0ZXIvc3JjL2J1Z3MvJHtuYW1lfS50cykuYCxcbiAgICAgIF1cbiAgICAgIGNvbnN0IHN0YXR1czJsaW5lczogYW55ID0ge1xuICAgICAgICBcIm5lZWRzLWZpeGluZ1wiOiBbXSxcbiAgICAgICAgXCJ3aWxsLWJlLWZpeGVkXCI6IFtdLFxuICAgICAgICBcImFscmVhZHktZml4ZWRcIjogW10sXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIE9iamVjdC5rZXlzKHJlcG9ydHMpKSB7XG4gICAgICAgIGNvbnN0IHJlcG9ydCA9IHJlcG9ydHNbZmlsZW5hbWVdXG4gICAgICAgIGlmIChyZXBvcnQgPT0gbnVsbCB8fCByZXBvcnRbXCJzdGF0dXNcIl0gPT0gXCJva1wiKSBjb250aW51ZVxuICAgICAgICBpZiAoIShyZXBvcnRbXCJzdGF0dXNcIl0gaW4gc3RhdHVzMmxpbmVzKSlcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGAke2ZpbGVuYW1lfSBzdGF0dXMgJHtyZXBvcnRbXCJzdGF0dXNcIl19IHVua25vd25gKVxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXBvcnRbXCJzdGF0dXNcIl1cbiAgICAgICAgbGV0IGwgPSBzdGF0dXMybGluZXNbc3RhdHVzXVxuICAgICAgICBpZiAoc3RhdHVzID09IFwid2lsbC1iZS1maXhlZFwiKSBsLnB1c2goYCogJHtkaWZmVXBzdHJlYW0oZmlsZW5hbWUpfWApXG4gICAgICAgIGVsc2UgbC5wdXNoKGAqICR7bWFzdGVyVXJsKGZpbGVuYW1lKX1gKVxuICAgICAgICBmb3IgKGNvbnN0IGluZm8gb2YgcmVwb3J0W1wiaW5mb1wiXSkgbC5wdXNoKGAgICogJHtpbmZvfWApXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtzdGF0dXMsIGxhYmVsXSBvZiBbXG4gICAgICAgIFtcIm5lZWRzLWZpeGluZ1wiLCBcIlRoZSBmb2xsb3dpbmcgZmlsZXMgbXVzdCBiZSBmaXhlZFwiXSxcbiAgICAgICAgW1wiYWxyZWFkeS1maXhlZFwiLCBcIlRoZSBmb2xsb3dpbmcgZmlsZXMgbm8gbG9uZ2VyIG5lZWQgYSBmaXhcIl0sXG4gICAgICAgIFtcIndpbGwtYmUtZml4ZWRcIiwgXCJUaGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgZml4ZWRcIl0sXG4gICAgICBdKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCMjIyAke2xhYmVsfWApXG4gICAgICAgIGxpbmVzID0gbGluZXMuY29uY2F0KHN0YXR1czJsaW5lc1tzdGF0dXNdKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3V0cHV0ID0gYCR7dGhpcy5vcHRpb25zLm91dHB1dH0vJHtuYW1lfS5tZGBcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMob3V0cHV0LCBsaW5lcy5qb2luKFwiXFxuXCIpLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZml4KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgYXdhaXQgdGhpcy5idWdzLnByZUZpeCgpXG4gICAgYXdhaXQgdGhpcy5idWdzLmZpeChnZXRGaWxlcyhbdGhpcy5vcHRpb25zLmRhdGFdKSlcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgYXN5bmMgbWFpbigpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2hlY2spIHJldHVybiB0aGlzLmNoZWNrKClcbiAgICBlbHNlIHJldHVybiB0aGlzLmZpeCgpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrb3V0Rml4KG9wdGlvbnM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjID0gb3B0aW9ucy5jb21taXRcbiAgaWYgKGMgPT0gdW5kZWZpbmVkKSByZXR1cm5cbiAgY29uc3QgdiA9IG9wdGlvbnMudmVyYm9zZVxuICBnaXQucnVuKGMsIFwiY2hlY2tvdXQgLS1xdWlldCBtYXN0ZXJcIiwgdilcbiAgaWYgKC90bXAvLnRlc3QoZ2l0LnJ1bihjLCBcImJyYW5jaFwiLCB2KSkpIGdpdC5ydW4oYywgXCJicmFuY2ggLUQgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJjaGVja291dCAtLXF1aWV0IC1iIHRtcCBtYXN0ZXJcIiwgdilcbiAgaWYgKC9NZXJnZSBidWdmaXhlcy8udGVzdChnaXQucnVuKGMsIFwibG9nIC0tb25lbGluZSAtMVwiLCB2KSkpXG4gICAgZ2l0LnJ1bihjLCBcInJldmVydCAtLW1haW5saW5lIDEgLS1uby1lZGl0IEhFQURcIiwgdilcbiAgZ2l0LnJ1bihjLCBcIm1lcmdlIC0tbm8tZmYgLW0gJ01lcmdlIHVwc3RyZWFtJyB1cHN0cmVhbS91aWRcIiwgdilcbiAgaWYgKC9idWdmaXhlcy8udGVzdChnaXQucnVuKGMsIFwiYnJhbmNoXCIsIHYpKSlcbiAgICBnaXQucnVuKGMsIFwiYnJhbmNoIC1EIGJ1Z2ZpeGVzXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJjaGVja291dCAtLXF1aWV0IC1iIGJ1Z2ZpeGVzXCIsIHYpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZXJnZUZpeChvcHRpb25zOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IG9wdGlvbnMuY29tbWl0XG4gIGlmIChjID09IHVuZGVmaW5lZCkgcmV0dXJuXG4gIGNvbnN0IHYgPSBvcHRpb25zLnZlcmJvc2VcbiAgZ2l0LnJ1bihjLCBcImNoZWNrb3V0IC0tcXVpZXQgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJtZXJnZSAtLW5vLWZmIC1tICdNZXJnZSBidWdmaXhlcycgYnVnZml4ZXNcIiwgdilcbiAgZ2l0LnJ1bihjLCBcImJyYW5jaCAtRCBidWdmaXhlc1wiLCB2KVxuICBnaXQucnVuKGMsIFwiY2hlY2tvdXQgLS1xdWlldCBtYXN0ZXJcIiwgdilcbiAgaWYgKCFnaXQudGVzdChjLCBcImRpZmYgLS1xdWlldCB0bXAgbWFzdGVyXCIsIHYpKVxuICAgIGdpdC5ydW4oYywgXCJtZXJnZSAtLWZmLW9ubHkgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJicmFuY2ggLUQgdG1wXCIsIHYpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHJldHVybiAxXG4gIGxldCBkaXJlY3RvcnlTY2hlbWEgPSBbXVxuICBpZiAob3B0aW9ucy5zY2hlbWEpIHtcbiAgICBkaXJlY3RvcnlTY2hlbWEgPSBbW29wdGlvbnMuZGF0YSwgb3B0aW9ucy5zY2hlbWFdXVxuICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YXNldCkge1xuICAgIGRpcmVjdG9yeVNjaGVtYSA9IGRhdGFzZXREaXJlY3RvcnlTY2hlbWEob3B0aW9ucy5kYXRhc2V0KVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJlaXRoZXIgLS1zY2hlbWEgb3IgLS1kYXRhc2V0IGlzIHJlcXVpcmVkXCIpXG4gICAgcmV0dXJuIDFcbiAgfVxuICBhd2FpdCBjaGVja291dEZpeChvcHRpb25zKVxuICBmb3IgKGNvbnN0IGQgb2YgZGlyZWN0b3J5U2NoZW1hKSB7XG4gICAgb3B0aW9ucy5zY2hlbWEgPSBkWzFdXG4gICAgb3B0aW9ucy5kYXRhID0gZFswXVxuICAgIGlmIChvcHRpb25zLmRlYnVnKVxuICAgICAgY29uc29sZS5sb2coYHdvcmtpbmcgb24gJHtvcHRpb25zLmRhdGF9IHdpdGggc2NoZW1hICR7b3B0aW9ucy5zY2hlbWF9YClcbiAgICBsZXQgaGVscGVyXG4gICAgdHJ5IHtcbiAgICAgIGhlbHBlciA9IG5ldyBCdWdzSGVscGVyKG9wdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIEdldEZpbGVOb3RGb3VuZEVycm9yKSkge1xuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKVxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGB3b3JraW5nIG9uIGZpbGVzICR7b3B0aW9ucy5kYXRhfSB3aXRoIHNjaGVtYSAke29wdGlvbnMuc2NoZW1hfWAsXG4gICAgICApXG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgaGVscGVyLm1haW4oKVxuICAgIGlmIChzdGF0dXMgIT0gMCkgcmV0dXJuIHN0YXR1c1xuICB9XG4gIGF3YWl0IG1lcmdlRml4KG9wdGlvbnMpXG4gIHJldHVybiAwXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcImJ1Z3NfaGVscGVyLnRzXCIpKVxuICBtYWluKHByb2Nlc3MuYXJndilcbiAgICAudGhlbigoc3RhdHVzKSA9PiB7XG4gICAgICBwcm9jZXNzLmV4aXQoc3RhdHVzKVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU8yQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLCtDQVozQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBLFNBQVNBLFNBQVMsQ0FBQ0MsSUFBYyxFQUFPO0VBQ3RDLElBQU1DLGtCQUFrQixHQUFHLENBQ3pCO0lBQ0VDLFdBQVcsRUFBRSxrREFBa0Q7SUFDL0RDLGFBQWEsRUFBRSxJQUFJO0lBQ25CQyxJQUFJLEVBQUUsTUFBTTtJQUNaQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VKLFdBQVcsRUFDVCx3RUFBd0U7SUFDMUVFLElBQUksRUFBRSxJQUFJO0lBQ1ZDLElBQUksRUFBRUM7RUFDUixDQUFDLEVBQ0Q7SUFDRUosV0FBVyxFQUFFLHFDQUFxQztJQUNsREUsSUFBSSxFQUFFLFFBQVE7SUFDZEMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFDRDtJQUNFSixXQUFXLEVBQUUsd0JBQXdCO0lBQ3JDRSxJQUFJLEVBQUUsS0FBSztJQUNYQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VKLFdBQVcsRUFDVCxrRUFBa0U7SUFDcEVFLElBQUksRUFBRSxRQUFRO0lBQ2RDLElBQUksRUFBRUM7RUFDUixDQUFDLEVBQ0Q7SUFDRUosV0FBVyxpRUFBMEQsSUFBQUsscUJBQVcsR0FBRSxNQUFHO0lBQ3JGSCxJQUFJLEVBQUUsU0FBUztJQUNmQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VKLFdBQVcsd0NBQWlDLElBQUFNLG9CQUFVLEdBQUUsTUFBRztJQUMzREosSUFBSSxFQUFFLFFBQVE7SUFDZEMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFDRDtJQUNFSixXQUFXLEVBQUUsK0NBQStDO0lBQzVERSxJQUFJLEVBQUUsVUFBVTtJQUNoQkMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFDRDtJQUNFSixXQUFXLEVBQUUsb0JBQW9CO0lBQ2pDRSxJQUFJLEVBQUUsU0FBUztJQUNmQyxJQUFJLEVBQUVJO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VQLFdBQVcsRUFBRSxtQkFBbUI7SUFDaENFLElBQUksRUFBRSxPQUFPO0lBQ2JDLElBQUksRUFBRUk7RUFDUixDQUFDLEVBQ0Q7SUFDRVAsV0FBVyxFQUFFLE9BQU87SUFDcEJFLElBQUksRUFBRSxPQUFPO0lBQ2JDLElBQUksRUFBRUk7RUFDUixDQUFDLEVBQ0Q7SUFDRVAsV0FBVyxFQUFFLEtBQUs7SUFDbEJFLElBQUksRUFBRSxLQUFLO0lBQ1hDLElBQUksRUFBRUk7RUFDUixDQUFDLEVBQ0Q7SUFDRUwsSUFBSSxFQUFFLE1BQU07SUFDWkYsV0FBVyxFQUFFO0VBQ2YsQ0FBQyxDQUNGO0VBQ0QsSUFBTVEsUUFBUSxHQUFHLENBQ2Y7SUFDRUMsTUFBTSxFQUFFLCtDQUErQztJQUN2REMsT0FBTyxFQUFFO0VBQ1gsQ0FBQyxFQUNEO0lBQ0VELE1BQU0sRUFBRSxTQUFTO0lBQ2pCRSxVQUFVLEVBQUVaO0VBQ2QsQ0FBQyxDQUNGO0VBQ0QsSUFBTWEsT0FBTyxHQUFHLElBQUFDLDJCQUFlLEVBQUNkLGtCQUFrQixFQUFFO0lBQ2xERCxJQUFJLEVBQUVBO0VBQ1IsQ0FBQyxDQUFDO0VBRUYsSUFBSWMsT0FBTyxDQUFDRSxPQUFPLEVBQUU7SUFDbkIsSUFBSSxDQUFDLElBQUFDLHNCQUFZLEVBQUNILE9BQU8sQ0FBQ0UsT0FBTyxDQUFDLEVBQUU7TUFDbENFLE9BQU8sQ0FBQ0MsS0FBSyxxQkFBY0wsT0FBTyxDQUFDRSxPQUFPLEVBQUc7TUFDN0NGLE9BQU8sQ0FBQ00sSUFBSSxHQUFHLElBQUk7SUFDckI7RUFDRjtFQUVBLElBQUlOLE9BQU8sQ0FBQ08sTUFBTSxFQUFFO0lBQ2xCLElBQUksQ0FBQyxJQUFBYixvQkFBVSxHQUFFLENBQUNjLFFBQVEsQ0FBQ1IsT0FBTyxDQUFDTyxNQUFNLENBQUMsRUFBRTtNQUMxQ0gsT0FBTyxDQUFDQyxLQUFLLG9CQUFhTCxPQUFPLENBQUNPLE1BQU0sRUFBRztNQUMzQ1AsT0FBTyxDQUFDTSxJQUFJLEdBQUcsSUFBSTtJQUNyQjtFQUNGO0VBRUEsSUFBSU4sT0FBTyxDQUFDUyxNQUFNLEVBQUU7SUFDbEIsSUFBSSxDQUFDQyxtQkFBRSxDQUFDQyxVQUFVLENBQUNYLE9BQU8sQ0FBQ1MsTUFBTSxDQUFDLEVBQUU7TUFDbENMLE9BQU8sQ0FBQ0MsS0FBSyxXQUFJTCxPQUFPLENBQUNTLE1BQU0scUJBQWtCO01BQ2pEVCxPQUFPLENBQUNNLElBQUksR0FBRyxJQUFJO0lBQ3JCO0VBQ0Y7RUFFQSxJQUFJTixPQUFPLENBQUNZLEtBQUssRUFBRVosT0FBTyxDQUFDYSxPQUFPLEdBQUcsSUFBSTtFQUV6QyxJQUFJLE1BQU0sSUFBSWIsT0FBTyxFQUFFO0lBQ3JCLElBQU1jLEtBQUssR0FBRyxJQUFBQyw0QkFBZ0IsRUFBQ25CLFFBQVEsQ0FBQztJQUN4Q1EsT0FBTyxDQUFDWSxJQUFJLENBQUNGLEtBQUssQ0FBQztJQUNuQixPQUFPLElBQUk7RUFDYjtFQUNBLE9BQU9kLE9BQU87QUFDaEI7QUFBQyxJQUVZaUIsVUFBVTtFQUlyQixvQkFBWWpCLE9BQVksRUFBRTtJQUFBO0lBQUE7SUFBQTtJQUN4QixJQUFJLENBQUNBLE9BQU8sR0FBR0EsT0FBTztJQUN0QixJQUFJLENBQUNrQixJQUFJLEdBQUcsSUFBSUMsZ0JBQVUsQ0FBQyxJQUFJLENBQUNuQixPQUFPLENBQUM7RUFDMUM7RUFBQztJQUFBO0lBQUE7TUFBQSx3RUFFRDtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQ1FvQixRQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUFBO2dCQUFBLE9BQ2xCLElBQUksQ0FBQ0YsSUFBSSxDQUFDRyxRQUFRLEVBQUU7Y0FBQTtnQkFDMUIsSUFBSSxJQUFJLENBQUNyQixPQUFPLENBQUNhLE9BQU8sRUFBRVQsT0FBTyxDQUFDa0IsR0FBRyxpQkFBVSxJQUFJLENBQUN0QixPQUFPLENBQUN1QixJQUFJLEVBQUc7Z0JBQUEsdUNBQ2hELElBQUFDLHNCQUFRLEVBQUMsQ0FBQyxJQUFJLENBQUN4QixPQUFPLENBQUN1QixJQUFJLENBQUMsQ0FBQztnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFyQ0UsSUFBSTtnQkFDUDNCLE9BQU8sR0FBRyxJQUFBNEIsa0JBQUksRUFBQ0QsSUFBSSxDQUFDO2dCQUFBO2dCQUFBLE9BQ0gsSUFBSSxDQUFDUCxJQUFJLENBQUNTLEtBQUssQ0FBQzdCLE9BQU8sRUFBRTJCLElBQUksQ0FBQztjQUFBO2dCQUFyREwsUUFBUSxDQUFDSyxJQUFJLENBQUM7Y0FBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBLE9BRVYsSUFBSSxDQUFDUCxJQUFJLENBQUNVLFNBQVMsQ0FBQ1IsUUFBUSxDQUFDO2NBQUE7Z0JBQUE7Z0JBQUEsT0FDN0IsSUFBSSxDQUFDUyxJQUFJLENBQUNULFFBQVEsQ0FBQztjQUFBO2dCQUFBLEtBQ3JCLElBQUksQ0FBQ3BCLE9BQU8sQ0FBQzhCLE1BQU07a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUEsT0FBUSxJQUFJLENBQUNDLEtBQUssQ0FBQ1gsUUFBUSxDQUFDO2NBQUE7Z0JBQUEsaUNBQzVDLENBQUM7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUEsQ0FDVDtNQUFBO1FBQUE7TUFBQTtNQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7TUFBQSx1RUFFRCxrQkFBV0EsUUFBYTtRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQ3RCLDRCQUF1QlksTUFBTSxDQUFDQyxJQUFJLENBQUNiLFFBQVEsQ0FBQyxrQ0FBRTtrQkFBbkNjLFFBQVE7a0JBQ1hDLEdBQUcsR0FBR2YsUUFBUSxDQUFDYyxRQUFRLENBQUM7a0JBQzlCLDhCQUFtQkYsTUFBTSxDQUFDQyxJQUFJLENBQUNFLEdBQUcsQ0FBQyxxQ0FBRTtvQkFBMUI3QyxJQUFJO29CQUNQOEMsTUFBTSxHQUFHRCxHQUFHLENBQUM3QyxJQUFJLENBQUM7b0JBQ3hCLElBQUk4QyxNQUFNLElBQUksSUFBSSxFQUFFO3NCQUNkZCxHQUFHO3NCQUNQLElBQUljLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxjQUFjLEVBQUU7d0JBQ3RDZCxHQUFHLEdBQUdsQixPQUFPLENBQUNDLEtBQUs7c0JBQ3JCLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ0wsT0FBTyxDQUFDYSxPQUFPLEVBQUU7d0JBQy9CUyxHQUFHLEdBQUdsQixPQUFPLENBQUNrQixHQUFHO3NCQUNuQjtzQkFDQSxJQUFJQSxHQUFHLElBQUllLFNBQVMsRUFBRTt3QkFDcEJmLEdBQUcsV0FBSWhDLElBQUksb0JBQVU0QyxRQUFRLGNBQUlFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRzt3QkFDcERkLEdBQUcsQ0FBQ2MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7c0JBQ2hDO29CQUNGO2tCQUNGO2dCQUNGO2NBQUM7Y0FBQTtnQkFBQTtZQUFBO1VBQUE7UUFBQTtNQUFBLENBQ0Y7TUFBQTtRQUFBO01BQUE7TUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO01BQUEsd0VBRUQsa0JBQVlsQixRQUFhO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFDakJtQixZQUFpQixHQUFHLENBQUMsQ0FBQztnQkFDNUIsOEJBQXVCUCxNQUFNLENBQUNDLElBQUksQ0FBQ2IsUUFBUSxDQUFDLHFDQUFFO2tCQUFuQ2MsUUFBUTtrQkFDWEMsR0FBRyxHQUFHZixRQUFRLENBQUNjLFFBQVEsQ0FBQztrQkFDOUIsOEJBQW1CRixNQUFNLENBQUNDLElBQUksQ0FBQ0UsR0FBRyxDQUFDLHFDQUFFO29CQUExQjdDLElBQUk7b0JBQ2IsSUFBSSxFQUFFQSxJQUFJLElBQUlpRCxZQUFZLENBQUMsRUFBRUEsWUFBWSxDQUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNwRGlELFlBQVksQ0FBQ2pELElBQUksQ0FBQyxDQUFDNEMsUUFBUSxDQUFDLEdBQUdDLEdBQUcsQ0FBQzdDLElBQUksQ0FBQztrQkFDMUM7Z0JBQ0Y7Z0JBQUMseUJBQ2tCMEMsTUFBTSxDQUFDQyxJQUFJLENBQUNNLFlBQVksQ0FBQztjQUFBO2dCQUFBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFqQ2pELEtBQUk7Z0JBQ1BrRCxPQUFPLEdBQUdELFlBQVksQ0FBQ2pELEtBQUksQ0FBQztnQkFDNUJtRCxDQUFDLEdBQUduRCxLQUFJLENBQUNvRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QkMsS0FBVSxHQUFHLG1CQUNKckQsS0FBSSxtRkFBeUVzRCxNQUFNLENBQzVGSCxDQUFDLENBQ0Ysd0VBQ3dEbkQsS0FBSSxnR0FBc0ZBLEtBQUksV0FDeEo7Z0JBQ0t1RCxZQUFpQixHQUFHO2tCQUN4QixjQUFjLEVBQUUsRUFBRTtrQkFDbEIsZUFBZSxFQUFFLEVBQUU7a0JBQ25CLGVBQWUsRUFBRTtnQkFDbkIsQ0FBQztnQkFBQSx5QkFDc0JiLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDTyxPQUFPLENBQUM7Y0FBQTtnQkFBQTtrQkFBQTtrQkFBQTtnQkFBQTtnQkFBaENOLFNBQVE7Z0JBQ1hZLE1BQU0sR0FBR04sT0FBTyxDQUFDTixTQUFRLENBQUM7Z0JBQUEsTUFDNUJZLE1BQU0sSUFBSSxJQUFJLElBQUlBLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQzlDLElBQUksRUFBRUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJRCxZQUFZLENBQUMsRUFDckN6QyxPQUFPLENBQUNDLEtBQUssV0FBSTZCLFNBQVEscUJBQVdZLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBVztnQkFDM0RDLE1BQU0sR0FBR0QsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDM0JFLENBQUMsR0FBR0gsWUFBWSxDQUFDRSxNQUFNLENBQUM7Z0JBQzVCLElBQUlBLE1BQU0sSUFBSSxlQUFlLEVBQUVDLENBQUMsQ0FBQ0MsSUFBSSxhQUFNLElBQUFDLHNCQUFZLEVBQUNoQixTQUFRLENBQUMsRUFBRyxNQUMvRGMsQ0FBQyxDQUFDQyxJQUFJLGFBQU0sSUFBQUUsbUJBQVMsRUFBQ2pCLFNBQVEsQ0FBQyxFQUFHO2dCQUFBLHdDQUNwQlksTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFBQTtrQkFBakMsdURBQW1DO29CQUF4Qk0sSUFBSTtvQkFBb0JKLENBQUMsQ0FBQ0MsSUFBSSxlQUFRRyxJQUFJLEVBQUc7a0JBQUQ7Z0JBQUM7a0JBQUE7Z0JBQUE7a0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUUxRCxxQkFBOEIsQ0FDNUIsQ0FBQyxjQUFjLEVBQUUsbUNBQW1DLENBQUMsRUFDckQsQ0FBQyxlQUFlLEVBQUUsMENBQTBDLENBQUMsRUFDN0QsQ0FBQyxlQUFlLEVBQUUsa0RBQWtELENBQUMsQ0FDdEUsNEJBQUU7a0JBQUEsd0NBSlNMLE9BQU0sZUFBRU0sS0FBSztrQkFLdkJWLEtBQUssQ0FBQ00sSUFBSSxlQUFRSSxLQUFLLEVBQUc7a0JBQzFCVixLQUFLLEdBQUdBLEtBQUssQ0FBQ1csTUFBTSxDQUFDVCxZQUFZLENBQUNFLE9BQU0sQ0FBQyxDQUFDO2dCQUM1QztnQkFDTWpCLE1BQU0sYUFBTSxJQUFJLENBQUM5QixPQUFPLENBQUM4QixNQUFNLGNBQUl4QyxLQUFJO2dCQUM3Q29CLG1CQUFFLENBQUM2QyxhQUFhLENBQUN6QixNQUFNLEVBQUVhLEtBQUssQ0FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2tCQUN6Q2tCLFFBQVEsRUFBRTtnQkFDWixDQUFDLENBQUM7Y0FBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQSxDQUVMO01BQUE7UUFBQTtNQUFBO01BQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtNQUFBLHNFQUVEO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUE7Z0JBQUEsT0FDUSxJQUFJLENBQUN0QyxJQUFJLENBQUN1QyxNQUFNLEVBQUU7Y0FBQTtnQkFBQTtnQkFBQSxPQUNsQixJQUFJLENBQUN2QyxJQUFJLENBQUN3QyxHQUFHLENBQUMsSUFBQWxDLHNCQUFRLEVBQUMsQ0FBQyxJQUFJLENBQUN4QixPQUFPLENBQUN1QixJQUFJLENBQUMsQ0FBQyxDQUFDO2NBQUE7Z0JBQUEsa0NBQzNDLENBQUM7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUEsQ0FDVDtNQUFBO1FBQUE7TUFBQTtNQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7TUFBQSx1RUFFRDtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLEtBQ00sSUFBSSxDQUFDdkIsT0FBTyxDQUFDMkIsS0FBSztrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQSxrQ0FBUyxJQUFJLENBQUNBLEtBQUssRUFBRTtjQUFBO2dCQUFBLGtDQUMvQixJQUFJLENBQUMrQixHQUFHLEVBQUU7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUEsQ0FDdkI7TUFBQTtRQUFBO01BQUE7TUFBQTtJQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7QUFBQSxTQUdtQkMsV0FBVztFQUFBO0FBQUE7QUFBQTtFQUFBLDBFQUExQixrQkFBMkIzRCxPQUFZO0lBQUE7SUFBQTtNQUFBO1FBQUE7VUFBQTtZQUN0QzRELENBQUMsR0FBRzVELE9BQU8sQ0FBQ1MsTUFBTTtZQUFBLE1BQ3BCbUQsQ0FBQyxJQUFJdkIsU0FBUztjQUFBO2NBQUE7WUFBQTtZQUFBO1VBQUE7WUFDWndCLENBQUMsR0FBRzdELE9BQU8sQ0FBQ2EsT0FBTztZQUN6QmlELEdBQUcsQ0FBQ0MsR0FBRyxDQUFDSCxDQUFDLEVBQUUseUJBQXlCLEVBQUVDLENBQUMsQ0FBQztZQUN4QyxJQUFJLEtBQUssQ0FBQ0csSUFBSSxDQUFDRixHQUFHLENBQUNDLEdBQUcsQ0FBQ0gsQ0FBQyxFQUFFLFFBQVEsRUFBRUMsQ0FBQyxDQUFDLENBQUMsRUFBRUMsR0FBRyxDQUFDQyxHQUFHLENBQUNILENBQUMsRUFBRSxlQUFlLEVBQUVDLENBQUMsQ0FBQztZQUN2RUMsR0FBRyxDQUFDQyxHQUFHLENBQUNILENBQUMsRUFBRSxnQ0FBZ0MsRUFBRUMsQ0FBQyxDQUFDO1lBQy9DLElBQUksZ0JBQWdCLENBQUNHLElBQUksQ0FBQ0YsR0FBRyxDQUFDQyxHQUFHLENBQUNILENBQUMsRUFBRSxrQkFBa0IsRUFBRUMsQ0FBQyxDQUFDLENBQUMsRUFDMURDLEdBQUcsQ0FBQ0MsR0FBRyxDQUFDSCxDQUFDLEVBQUUsb0NBQW9DLEVBQUVDLENBQUMsQ0FBQztZQUNyREMsR0FBRyxDQUFDQyxHQUFHLENBQUNILENBQUMsRUFBRSxnREFBZ0QsRUFBRUMsQ0FBQyxDQUFDO1lBQy9ELElBQUksVUFBVSxDQUFDRyxJQUFJLENBQUNGLEdBQUcsQ0FBQ0MsR0FBRyxDQUFDSCxDQUFDLEVBQUUsUUFBUSxFQUFFQyxDQUFDLENBQUMsQ0FBQyxFQUMxQ0MsR0FBRyxDQUFDQyxHQUFHLENBQUNILENBQUMsRUFBRSxvQkFBb0IsRUFBRUMsQ0FBQyxDQUFDO1lBQ3JDQyxHQUFHLENBQUNDLEdBQUcsQ0FBQ0gsQ0FBQyxFQUFFLDhCQUE4QixFQUFFQyxDQUFDLENBQUM7VUFBQTtVQUFBO1lBQUE7UUFBQTtNQUFBO0lBQUE7RUFBQSxDQUM5QztFQUFBO0FBQUE7QUFBQSxTQUVxQkksUUFBUTtFQUFBO0FBQUE7QUFBQTtFQUFBLHVFQUF2QixrQkFBd0JqRSxPQUFZO0lBQUE7SUFBQTtNQUFBO1FBQUE7VUFBQTtZQUNuQzRELENBQUMsR0FBRzVELE9BQU8sQ0FBQ1MsTUFBTTtZQUFBLE1BQ3BCbUQsQ0FBQyxJQUFJdkIsU0FBUztjQUFBO2NBQUE7WUFBQTtZQUFBO1VBQUE7WUFDWndCLENBQUMsR0FBRzdELE9BQU8sQ0FBQ2EsT0FBTztZQUN6QmlELEdBQUcsQ0FBQ0MsR0FBRyxDQUFDSCxDQUFDLEVBQUUsc0JBQXNCLEVBQUVDLENBQUMsQ0FBQztZQUNyQ0MsR0FBRyxDQUFDQyxHQUFHLENBQUNILENBQUMsRUFBRSw0Q0FBNEMsRUFBRUMsQ0FBQyxDQUFDO1lBQzNEQyxHQUFHLENBQUNDLEdBQUcsQ0FBQ0gsQ0FBQyxFQUFFLG9CQUFvQixFQUFFQyxDQUFDLENBQUM7WUFDbkNDLEdBQUcsQ0FBQ0MsR0FBRyxDQUFDSCxDQUFDLEVBQUUseUJBQXlCLEVBQUVDLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUNDLEdBQUcsQ0FBQ0UsSUFBSSxDQUFDSixDQUFDLEVBQUUseUJBQXlCLEVBQUVDLENBQUMsQ0FBQyxFQUM1Q0MsR0FBRyxDQUFDQyxHQUFHLENBQUNILENBQUMsRUFBRSxxQkFBcUIsRUFBRUMsQ0FBQyxDQUFDO1lBQ3RDQyxHQUFHLENBQUNDLEdBQUcsQ0FBQ0gsQ0FBQyxFQUFFLGVBQWUsRUFBRUMsQ0FBQyxDQUFDO1VBQUE7VUFBQTtZQUFBO1FBQUE7TUFBQTtJQUFBO0VBQUEsQ0FDL0I7RUFBQTtBQUFBO0FBQUEsU0FFcUJLLElBQUk7RUFBQTtBQUFBO0FBc0MxQjtBQUFBO0VBQUEsb0VBdENPLGtCQUFvQmhGLElBQVM7SUFBQTtJQUFBO01BQUE7UUFBQTtVQUFBO1lBQzVCYyxPQUFPLEdBQUdmLFNBQVMsQ0FBQ0MsSUFBSSxDQUFDO1lBQUEsTUFDM0JjLE9BQU8sS0FBSyxJQUFJO2NBQUE7Y0FBQTtZQUFBO1lBQUEsa0NBQVMsQ0FBQztVQUFBO1lBQzFCbUUsZUFBZSxHQUFHLEVBQUU7WUFBQSxLQUNwQm5FLE9BQU8sQ0FBQ08sTUFBTTtjQUFBO2NBQUE7WUFBQTtZQUNoQjRELGVBQWUsR0FBRyxDQUFDLENBQUNuRSxPQUFPLENBQUN1QixJQUFJLEVBQUV2QixPQUFPLENBQUNPLE1BQU0sQ0FBQyxDQUFDO1lBQUE7WUFBQTtVQUFBO1lBQUEsS0FDekNQLE9BQU8sQ0FBQ0UsT0FBTztjQUFBO2NBQUE7WUFBQTtZQUN4QmlFLGVBQWUsR0FBRyxJQUFBQyxnQ0FBc0IsRUFBQ3BFLE9BQU8sQ0FBQ0UsT0FBTyxDQUFDO1lBQUE7WUFBQTtVQUFBO1lBRXpERSxPQUFPLENBQUNDLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQztZQUFBLGtDQUNsRCxDQUFDO1VBQUE7WUFBQTtZQUFBLE9BRUpzRCxXQUFXLENBQUMzRCxPQUFPLENBQUM7VUFBQTtZQUFBLHdDQUNWbUUsZUFBZTtZQUFBO1lBQUE7VUFBQTtZQUFBO2NBQUE7Y0FBQTtZQUFBO1lBQXBCRSxDQUFDO1lBQ1ZyRSxPQUFPLENBQUNPLE1BQU0sR0FBRzhELENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckJyRSxPQUFPLENBQUN1QixJQUFJLEdBQUc4QyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLElBQUlyRSxPQUFPLENBQUNZLEtBQUssRUFDZlIsT0FBTyxDQUFDa0IsR0FBRyxzQkFBZXRCLE9BQU8sQ0FBQ3VCLElBQUksMEJBQWdCdkIsT0FBTyxDQUFDTyxNQUFNLEVBQUc7WUFDckUrRCxNQUFNO1lBQUE7WUFFUkEsTUFBTSxHQUFHLElBQUlyRCxVQUFVLENBQUNqQixPQUFPLENBQUM7WUFBQTtZQUFBO1VBQUE7WUFBQTtZQUFBO1lBQUEsSUFFMUIsd0JBQWF1RSxrQ0FBb0I7Y0FBQTtjQUFBO1lBQUE7WUFBQTtVQUFBO1lBQUE7VUFBQTtZQUt6QyxJQUFJdkUsT0FBTyxDQUFDYSxPQUFPLEVBQ2pCVCxPQUFPLENBQUNrQixHQUFHLDRCQUNXdEIsT0FBTyxDQUFDdUIsSUFBSSwwQkFBZ0J2QixPQUFPLENBQUNPLE1BQU0sRUFDL0Q7WUFBQTtZQUFBLE9BQ2tCK0QsTUFBTSxDQUFDSixJQUFJLEVBQUU7VUFBQTtZQUE1Qm5CLE1BQU07WUFBQSxNQUNSQSxNQUFNLElBQUksQ0FBQztjQUFBO2NBQUE7WUFBQTtZQUFBLGtDQUFTQSxNQUFNO1VBQUE7WUFBQTtZQUFBO1VBQUE7WUFBQTtZQUFBO1VBQUE7WUFBQTtZQUFBO1lBQUE7VUFBQTtZQUFBO1lBQUE7WUFBQTtVQUFBO1lBQUE7WUFBQSxPQUUxQmtCLFFBQVEsQ0FBQ2pFLE9BQU8sQ0FBQztVQUFBO1lBQUEsa0NBQ2hCLENBQUM7VUFBQTtVQUFBO1lBQUE7UUFBQTtNQUFBO0lBQUE7RUFBQSxDQUNUO0VBQUE7QUFBQTtBQUdELElBQUl3RSxPQUFPLENBQUN0RixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUN1RixRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFDNUNQLElBQUksQ0FBQ00sT0FBTyxDQUFDdEYsSUFBSSxDQUFDLENBQ2Z3RixJQUFJLENBQUMsVUFBQzNCLE1BQU0sRUFBSztFQUNoQnlCLE9BQU8sQ0FBQ0csSUFBSSxDQUFDNUIsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxTQUNJLENBQUMsVUFBQzFDLEtBQUssRUFBSztFQUNoQkQsT0FBTyxDQUFDQyxLQUFLLENBQUNBLEtBQUssQ0FBQztFQUNwQm1FLE9BQU8sQ0FBQ0csSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUMifQ==
|