occam-languages 3.0.16 → 3.0.18
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/utilities/continuation.js +19 -4
- package/package.json +1 -1
- package/src/utilities/continuation.js +160 -67
|
@@ -73,7 +73,12 @@ function one(array, callback, ...initialArguments) {
|
|
|
73
73
|
return count === 1 ? forward(...nextArguments) : back();
|
|
74
74
|
}
|
|
75
75
|
const element = array[index];
|
|
76
|
-
return callback(element, ...initialArguments, (
|
|
76
|
+
return callback(element, ...initialArguments, (exception = null)=>{
|
|
77
|
+
if (exception !== null) {
|
|
78
|
+
return back(exception);
|
|
79
|
+
}
|
|
80
|
+
return next(index + 1, ...nextArguments);
|
|
81
|
+
}, (...callbackArguments)=>{
|
|
77
82
|
count++;
|
|
78
83
|
if (count === 2) {
|
|
79
84
|
return back();
|
|
@@ -91,7 +96,12 @@ function some(array, callback, ...initialArguments) {
|
|
|
91
96
|
return back();
|
|
92
97
|
}
|
|
93
98
|
const element = array[index];
|
|
94
|
-
return callback(element, ...initialArguments, (
|
|
99
|
+
return callback(element, ...initialArguments, (exception = null)=>{
|
|
100
|
+
if (exception !== null) {
|
|
101
|
+
return back(exception);
|
|
102
|
+
}
|
|
103
|
+
return next(index + 1);
|
|
104
|
+
}, forward);
|
|
95
105
|
}
|
|
96
106
|
const index = 0;
|
|
97
107
|
return next(index);
|
|
@@ -299,7 +309,12 @@ function resolve(arrayA, arrayB, callback, ...initialArguments) {
|
|
|
299
309
|
return nextPass(...nextElementArguments);
|
|
300
310
|
}
|
|
301
311
|
const elementA = arrayA[index];
|
|
302
|
-
return callback(elementA, ...nextElementArguments, (
|
|
312
|
+
return callback(elementA, ...nextElementArguments, (exception = null)=>{
|
|
313
|
+
if (exception !== null) {
|
|
314
|
+
return back(exception);
|
|
315
|
+
}
|
|
316
|
+
return nextElement(index + 1, success, ...nextElementArguments);
|
|
317
|
+
}, (...callbackArguments)=>{
|
|
303
318
|
const elementB = elementA; ///
|
|
304
319
|
arrayB.push(elementB);
|
|
305
320
|
return nextElement(index + 1, true, ...callbackArguments);
|
|
@@ -340,4 +355,4 @@ const _default = {
|
|
|
340
355
|
exists
|
|
341
356
|
};
|
|
342
357
|
|
|
343
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaWx0ZXI6IGFycmF5RmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiAoY291bnQgPT09IDEpID9cbiAgICAgICAgICAgICAgIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cykgOlxuICAgICAgICAgICAgICAgICBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAoKSA9PiBuZXh0KGluZGV4ICsgMSwgLi4ubmV4dEFyZ3VtZW50cyksICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgY291bnQrKztcblxuICAgICAgaWYgKGNvdW50ID09PSAyKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgbGV0IGNvdW50ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAoKSA9PiBuZXh0KGluZGV4ICsgMSksIGZvcndhcmQpO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gKGNvdW50ICE9PSAwKSA/XG4gICAgICAgICAgICAgICBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpIDpcbiAgICAgICAgICAgICAgICAgYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb3VudCsrO1xuXG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCB2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCh2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCB2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKHZhbHVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCB2YWx1ZSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGluaXRpYWxWYWx1ZSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBbXSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKHBhc3NlZCwgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIGRlbGV0ZWRFbGVtZW50cy51bnNoaWZ0KGRlbGV0ZWRFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChkZWxldGVkRWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrLCAocGFzc2VkLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGRlbGV0ZWRFbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssIChwYXNzZWQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGRlbGV0ZWRFbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2goYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYXJyYXlBTGVuZ3RoID0gYXJyYXlBLmxlbmd0aCxcbiAgICAgICAgYXJyYXlCTGVuZ3RoID0gYXJyYXlCLmxlbmd0aDtcblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICByZXR1cm4gYmFjaygpO1xuICB9XG5cbiAgY29uc3QgbGVuZ3RoID0gYXJyYXlBTGVuZ3RoLCAgLy8vXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XSxcbiAgICAgICAgICBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIGVsZW1lbnRCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgYXJyYXlBID0gWyAgLy8vXG4gICAgLi4uYXJyYXlBXG4gIF07XG5cbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGZ1bmN0aW9uIG5leHRQYXNzKC4uLm5leHRQYXNzQXJndW1lbnRzKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXlBLmxlbmd0aDsgLy8vXG5cbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0UGFzc0FyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV4dEVsZW1lbnQoaW5kZXgsIHN1Y2Nlc3MsIC4uLm5leHRFbGVtZW50QXJndW1lbnRzKSB7XG4gICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlGaWx0ZXIoYXJyYXlBLCAoZWxlbWVudEEpID0+IHtcbiAgICAgICAgICBjb25zdCBhcnJheUJJbmNsdWRlc0VsZW1lbnRBID0gYXJyYXlCLmluY2x1ZGVzKGVsZW1lbnRBKTtcblxuICAgICAgICAgIGlmICghYXJyYXlCSW5jbHVkZXNFbGVtZW50QSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV4dFBhc3MoLi4ubmV4dEVsZW1lbnRBcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5QVtpbmRleF07XG5cbiAgICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50QSwgLi4ubmV4dEVsZW1lbnRBcmd1bWVudHMsICgpID0+IG5leHRFbGVtZW50KGluZGV4ICsgMSwgc3VjY2VzcywgLi4ubmV4dEVsZW1lbnRBcmd1bWVudHMpLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50QiA9IGVsZW1lbnRBOyAgLy8vXG5cbiAgICAgICAgICBhcnJheUIucHVzaChlbGVtZW50Qik7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXggKyAxLCB0cnVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIHJldHVybiBuZXh0RWxlbWVudChpbmRleCwgc3VjY2VzcywgLi4ubmV4dFBhc3NBcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5leHRQYXNzKC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsKGNhbGxiYWNrcywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICByZXR1cm4gZXZlcnkoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGlzdHMoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBzb21lKGNhbGxiYWNrcywgKGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gIH0sIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uZSxcbiAgc29tZSxcbiAgZWFjaCxcbiAgZXZlcnksXG4gIHJlZHVjZSxcbiAgZm9yRWFjaCxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaCxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgbWF0Y2gsXG4gIHJlc29sdmUsXG4gIGFsbCxcbiAgZXhpc3RzXG59O1xuIl0sIm5hbWVzIjpbImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImVhY2giLCJldmVyeSIsImV4aXN0cyIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsIm1hdGNoIiwib25lIiwicHJ1bmUiLCJyZWR1Y2UiLCJyZXNvbHZlIiwic29tZSIsImFycmF5RmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsImZvcndhcmQiLCJwb3AiLCJiYWNrIiwibGVuZ3RoIiwiaW5kZXgiLCJuZXh0IiwibmV4dEFyZ3VtZW50cyIsImNvdW50IiwiZWxlbWVudCIsImNhbGxiYWNrQXJndW1lbnRzIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJwYXNzZWQiLCJzdGFydEluZGV4IiwiZGVsZXRlQ291bnQiLCJkZWxldGVkRWxlbWVudCIsInNwbGljZSIsInVuc2hpZnQiLCJ1bmRlZmluZWQiLCJhcnJheUEiLCJhcnJheUIiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwibmV4dFBhc3MiLCJuZXh0UGFzc0FyZ3VtZW50cyIsIm5leHRFbGVtZW50Iiwic3VjY2VzcyIsIm5leHRFbGVtZW50QXJndW1lbnRzIiwiYXJyYXlCSW5jbHVkZXNFbGVtZW50QSIsImluY2x1ZGVzIiwicHVzaCIsImNhbGxiYWNrcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBMlpnQkE7ZUFBQUE7O1FBblBBQztlQUFBQTs7UUEwQ0FDO2VBQUFBOztRQXFOaEI7ZUFBQTs7UUE5V2dCQztlQUFBQTs7UUEyQkFDO2VBQUFBOztRQTZVQUM7ZUFBQUE7O1FBekhBQztlQUFBQTs7UUFqRUFDO2VBQUFBOztRQXpHQUM7ZUFBQUE7O1FBcUJBQztlQUFBQTs7UUEwQ0FDO2VBQUFBOztRQTRJQUM7ZUFBQUE7O1FBblVBQztlQUFBQTs7UUFpUUFDO2VBQUFBOztRQTlKQUM7ZUFBQUE7O1FBNlBBQztlQUFBQTs7UUFqVUFDO2VBQUFBOzs7MkJBbkNlO0FBRS9CLE1BQU0sRUFBRVQsUUFBUVUsV0FBVyxFQUFFLEdBQUdDLHlCQUFjO0FBRXZDLFNBQVNOLElBQUlPLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUN0RCxNQUFNQyxVQUFVRCxpQkFBaUJFLEdBQUcsSUFDOUJDLE9B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
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaWx0ZXI6IGFycmF5RmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiAoY291bnQgPT09IDEpID9cbiAgICAgICAgICAgICAgIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cykgOlxuICAgICAgICAgICAgICAgICBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5pbml0aWFsQXJndW1lbnRzLFxuICAgICAgKGV4Y2VwdGlvbiA9IG51bGwpID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLm5leHRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb3VudCsrO1xuXG4gICAgICAgIGlmIChjb3VudCA9PT0gMikge1xuICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbGV0IGNvdW50ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5pbml0aWFsQXJndW1lbnRzLFxuICAgICAgKGV4Y2VwdGlvbiA9IG51bGwpID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEpO1xuICAgICAgfSxcbiAgICAgIGZvcndhcmRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gKGNvdW50ICE9PSAwKSA/XG4gICAgICAgICAgICAgICBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpIDpcbiAgICAgICAgICAgICAgICAgYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIGJhY2ssXG4gICAgICAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY291bnQrKztcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbGV0IGNvdW50ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIGJhY2ssXG4gICAgICAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZShhcnJheSwgaW5pdGlhbFZhbHVlLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIGJhY2ssXG4gICAgICAodmFsdWUsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgdmFsdWUsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGluaXRpYWxWYWx1ZSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLCBiYWNrLFxuICAgICAgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgYmFjayxcbiAgICAgICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIGJhY2ssXG4gICAgICAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIGJhY2ssXG4gICAgICAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIGJhY2ssXG4gICAgICAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IFtdLFxuICAgICAgICBpbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGRlbGV0ZWRFbGVtZW50cywgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgYmFjayxcbiAgICAgIChwYXNzZWQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChkZWxldGVkRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCAtIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWxldGVkRWxlbWVudCA9IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIGJhY2ssXG4gICAgICAocGFzc2VkLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGRlbGV0ZWRFbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICBiYWNrLFxuICAgICAgKHBhc3NlZCwgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaChhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoLFxuICAgICAgICBhcnJheUJMZW5ndGggPSBhcnJheUIubGVuZ3RoO1xuXG4gIGlmIChhcnJheUFMZW5ndGggIT09IGFycmF5Qkxlbmd0aCkge1xuICAgIHJldHVybiBiYWNrKCk7XG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBhcnJheUFMZW5ndGgsICAvLy9cbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdLFxuICAgICAgICAgIGVsZW1lbnRCID0gYXJyYXlCW2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnRBLFxuICAgICAgZWxlbWVudEIsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgYmFjayxcbiAgICAgICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgYXJyYXlBID0gWyAgLy8vXG4gICAgLi4uYXJyYXlBXG4gIF07XG5cbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGZ1bmN0aW9uIG5leHRQYXNzKC4uLm5leHRQYXNzQXJndW1lbnRzKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXlBLmxlbmd0aDsgLy8vXG5cbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0UGFzc0FyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV4dEVsZW1lbnQoaW5kZXgsIHN1Y2Nlc3MsIC4uLm5leHRFbGVtZW50QXJndW1lbnRzKSB7XG4gICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlGaWx0ZXIoYXJyYXlBLCAoZWxlbWVudEEpID0+IHtcbiAgICAgICAgICBjb25zdCBhcnJheUJJbmNsdWRlc0VsZW1lbnRBID0gYXJyYXlCLmluY2x1ZGVzKGVsZW1lbnRBKTtcblxuICAgICAgICAgIGlmICghYXJyYXlCSW5jbHVkZXNFbGVtZW50QSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV4dFBhc3MoLi4ubmV4dEVsZW1lbnRBcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5QVtpbmRleF07XG5cbiAgICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgICAgZWxlbWVudEEsXG4gICAgICAgIC4uLm5leHRFbGVtZW50QXJndW1lbnRzLFxuICAgICAgICAoZXhjZXB0aW9uID0gbnVsbCkgPT4ge1xuICAgICAgICAgIGlmIChleGNlcHRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5leHRFbGVtZW50KGluZGV4ICsgMSwgc3VjY2VzcywgLi4ubmV4dEVsZW1lbnRBcmd1bWVudHMpO1xuICAgICAgICB9LFxuICAgICAgICAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50QiA9IGVsZW1lbnRBOyAgLy8vXG5cbiAgICAgICAgICBhcnJheUIucHVzaChlbGVtZW50Qik7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXggKyAxLCB0cnVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIHJldHVybiBuZXh0RWxlbWVudChpbmRleCwgc3VjY2VzcywgLi4ubmV4dFBhc3NBcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5leHRQYXNzKC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsKGNhbGxiYWNrcywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICByZXR1cm4gZXZlcnkoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGlzdHMoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBzb21lKGNhbGxiYWNrcywgKGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gIH0sIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uZSxcbiAgc29tZSxcbiAgZWFjaCxcbiAgZXZlcnksXG4gIHJlZHVjZSxcbiAgZm9yRWFjaCxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaCxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgbWF0Y2gsXG4gIHJlc29sdmUsXG4gIGFsbCxcbiAgZXhpc3RzXG59O1xuIl0sIm5hbWVzIjpbImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImVhY2giLCJldmVyeSIsImV4aXN0cyIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsIm1hdGNoIiwib25lIiwicHJ1bmUiLCJyZWR1Y2UiLCJyZXNvbHZlIiwic29tZSIsImFycmF5RmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsImZvcndhcmQiLCJwb3AiLCJiYWNrIiwibGVuZ3RoIiwiaW5kZXgiLCJuZXh0IiwibmV4dEFyZ3VtZW50cyIsImNvdW50IiwiZWxlbWVudCIsImV4Y2VwdGlvbiIsImNhbGxiYWNrQXJndW1lbnRzIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJwYXNzZWQiLCJzdGFydEluZGV4IiwiZGVsZXRlQ291bnQiLCJkZWxldGVkRWxlbWVudCIsInNwbGljZSIsInVuc2hpZnQiLCJ1bmRlZmluZWQiLCJhcnJheUEiLCJhcnJheUIiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwibmV4dFBhc3MiLCJuZXh0UGFzc0FyZ3VtZW50cyIsIm5leHRFbGVtZW50Iiwic3VjY2VzcyIsIm5leHRFbGVtZW50QXJndW1lbnRzIiwiYXJyYXlCSW5jbHVkZXNFbGVtZW50QSIsImluY2x1ZGVzIiwicHVzaCIsImNhbGxiYWNrcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBd2ZnQkE7ZUFBQUE7O1FBalNBQztlQUFBQTs7UUFvREFDO2VBQUFBOztRQXlQaEI7ZUFBQTs7UUFyYmdCQztlQUFBQTs7UUFnQ0FDO2VBQUFBOztRQStZQUM7ZUFBQUE7O1FBOUlBQztlQUFBQTs7UUEzRUFDO2VBQUFBOztRQWpJQUM7ZUFBQUE7O1FBeUJBQztlQUFBQTs7UUFvREFDO2VBQUFBOztRQXFLQUM7ZUFBQUE7O1FBaFpBQztlQUFBQTs7UUFvVUFDO2VBQUFBOztRQWpNQUM7ZUFBQUE7O1FBZ1RBQztlQUFBQTs7UUF6WUFDO2VBQUFBOzs7MkJB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
|
package/package.json
CHANGED
|
@@ -19,15 +19,26 @@ export function one(array, callback, ...initialArguments) {
|
|
|
19
19
|
|
|
20
20
|
const element = array[index];
|
|
21
21
|
|
|
22
|
-
return callback(
|
|
23
|
-
|
|
22
|
+
return callback(
|
|
23
|
+
element,
|
|
24
|
+
...initialArguments,
|
|
25
|
+
(exception = null) => {
|
|
26
|
+
if (exception !== null) {
|
|
27
|
+
return back(exception);
|
|
28
|
+
}
|
|
24
29
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
return next(index + 1, ...nextArguments);
|
|
31
|
+
},
|
|
32
|
+
(...callbackArguments) => {
|
|
33
|
+
count++;
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
if (count === 2) {
|
|
36
|
+
return back();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return next(index + 1, ...callbackArguments);
|
|
40
|
+
}
|
|
41
|
+
);
|
|
31
42
|
}
|
|
32
43
|
|
|
33
44
|
let count = 0;
|
|
@@ -47,7 +58,18 @@ export function some(array, callback, ...initialArguments) {
|
|
|
47
58
|
|
|
48
59
|
const element = array[index];
|
|
49
60
|
|
|
50
|
-
return callback(
|
|
61
|
+
return callback(
|
|
62
|
+
element,
|
|
63
|
+
...initialArguments,
|
|
64
|
+
(exception = null) => {
|
|
65
|
+
if (exception !== null) {
|
|
66
|
+
return back(exception);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return next(index + 1);
|
|
70
|
+
},
|
|
71
|
+
forward
|
|
72
|
+
);
|
|
51
73
|
}
|
|
52
74
|
|
|
53
75
|
const index = 0;
|
|
@@ -70,11 +92,16 @@ export function each(array, callback, ...initialArguments) {
|
|
|
70
92
|
|
|
71
93
|
const element = array[index];
|
|
72
94
|
|
|
73
|
-
return callback(
|
|
74
|
-
|
|
95
|
+
return callback(
|
|
96
|
+
element,
|
|
97
|
+
...nextArguments,
|
|
98
|
+
back,
|
|
99
|
+
(...callbackArguments) => {
|
|
100
|
+
count++;
|
|
75
101
|
|
|
76
|
-
|
|
77
|
-
|
|
102
|
+
return next(index + 1, ...callbackArguments);
|
|
103
|
+
}
|
|
104
|
+
);
|
|
78
105
|
}
|
|
79
106
|
|
|
80
107
|
let count = 0;
|
|
@@ -95,9 +122,14 @@ export function every(array, callback, ...initialArguments) {
|
|
|
95
122
|
|
|
96
123
|
const element = array[index];
|
|
97
124
|
|
|
98
|
-
return callback(
|
|
99
|
-
|
|
100
|
-
|
|
125
|
+
return callback(
|
|
126
|
+
element,
|
|
127
|
+
...nextArguments,
|
|
128
|
+
back,
|
|
129
|
+
(...callbackArguments) => {
|
|
130
|
+
return next(index + 1, ...callbackArguments);
|
|
131
|
+
}
|
|
132
|
+
);
|
|
101
133
|
}
|
|
102
134
|
|
|
103
135
|
return next(index, ...initialArguments);
|
|
@@ -116,9 +148,15 @@ export function reduce(array, initialValue, callback, ...initialArguments) {
|
|
|
116
148
|
|
|
117
149
|
const element = array[index];
|
|
118
150
|
|
|
119
|
-
return callback(
|
|
120
|
-
|
|
121
|
-
|
|
151
|
+
return callback(
|
|
152
|
+
element,
|
|
153
|
+
value,
|
|
154
|
+
...nextArguments,
|
|
155
|
+
back,
|
|
156
|
+
(value, ...callbackArguments) => {
|
|
157
|
+
return next(index + 1, value, ...callbackArguments);
|
|
158
|
+
}
|
|
159
|
+
);
|
|
122
160
|
}
|
|
123
161
|
|
|
124
162
|
return next(index, initialValue, ...initialArguments);
|
|
@@ -137,9 +175,13 @@ export function forEach(array, callback, ...initialArguments) {
|
|
|
137
175
|
|
|
138
176
|
const element = array[index];
|
|
139
177
|
|
|
140
|
-
return callback(
|
|
141
|
-
|
|
142
|
-
|
|
178
|
+
return callback(
|
|
179
|
+
element,
|
|
180
|
+
...nextArguments, back,
|
|
181
|
+
(...callbackArguments) => {
|
|
182
|
+
return next(index + 1, ...callbackArguments);
|
|
183
|
+
}
|
|
184
|
+
);
|
|
143
185
|
}
|
|
144
186
|
|
|
145
187
|
return next(index, ...initialArguments);
|
|
@@ -158,9 +200,14 @@ export function forwardsEvery(array, callback, ...initialArguments) {
|
|
|
158
200
|
|
|
159
201
|
const element = array[index];
|
|
160
202
|
|
|
161
|
-
return callback(
|
|
162
|
-
|
|
163
|
-
|
|
203
|
+
return callback(
|
|
204
|
+
element,
|
|
205
|
+
...nextArguments,
|
|
206
|
+
back,
|
|
207
|
+
(...callbackArguments) => {
|
|
208
|
+
return next(index + 1, ...callbackArguments);
|
|
209
|
+
}
|
|
210
|
+
);
|
|
164
211
|
}
|
|
165
212
|
|
|
166
213
|
return next(index, ...initialArguments);
|
|
@@ -179,9 +226,14 @@ export function backwardsEvery(array, callback, ...initialArguments) {
|
|
|
179
226
|
|
|
180
227
|
const element = array[index];
|
|
181
228
|
|
|
182
|
-
return callback(
|
|
183
|
-
|
|
184
|
-
|
|
229
|
+
return callback(
|
|
230
|
+
element,
|
|
231
|
+
...nextArguments,
|
|
232
|
+
back,
|
|
233
|
+
(...callbackArguments) => {
|
|
234
|
+
return next(index - 1, ...callbackArguments);
|
|
235
|
+
}
|
|
236
|
+
);
|
|
185
237
|
}
|
|
186
238
|
|
|
187
239
|
return next(index, ...initialArguments);
|
|
@@ -200,9 +252,14 @@ export function forwardsForEach(array, callback, ...initialArguments) {
|
|
|
200
252
|
|
|
201
253
|
const element = array[index];
|
|
202
254
|
|
|
203
|
-
return callback(
|
|
204
|
-
|
|
205
|
-
|
|
255
|
+
return callback(
|
|
256
|
+
element,
|
|
257
|
+
...nextArguments,
|
|
258
|
+
back,
|
|
259
|
+
(...callbackArguments) => {
|
|
260
|
+
return next(index + 1, ...callbackArguments);
|
|
261
|
+
}
|
|
262
|
+
);
|
|
206
263
|
}
|
|
207
264
|
|
|
208
265
|
return next(index, ...initialArguments);
|
|
@@ -221,9 +278,14 @@ export function backwardsForEach(array, callback, ...initialArguments) {
|
|
|
221
278
|
|
|
222
279
|
const element = array[index];
|
|
223
280
|
|
|
224
|
-
return callback(
|
|
225
|
-
|
|
226
|
-
|
|
281
|
+
return callback(
|
|
282
|
+
element,
|
|
283
|
+
...nextArguments,
|
|
284
|
+
back,
|
|
285
|
+
(...callbackArguments) => {
|
|
286
|
+
return next(index - 1, ...callbackArguments);
|
|
287
|
+
}
|
|
288
|
+
);
|
|
227
289
|
}
|
|
228
290
|
|
|
229
291
|
return next(index, ...initialArguments);
|
|
@@ -243,19 +305,24 @@ export function filter(array, callback, ...initialArguments) {
|
|
|
243
305
|
|
|
244
306
|
const element = array[index];
|
|
245
307
|
|
|
246
|
-
return callback(
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
308
|
+
return callback(
|
|
309
|
+
element,
|
|
310
|
+
...nextArguments,
|
|
311
|
+
back,
|
|
312
|
+
(passed, ...callbackArguments) => {
|
|
313
|
+
if (!passed) {
|
|
314
|
+
const startIndex = index, ///
|
|
315
|
+
deleteCount = 1,
|
|
316
|
+
deletedElement = element; ///
|
|
251
317
|
|
|
252
|
-
|
|
318
|
+
array.splice(startIndex, deleteCount);
|
|
253
319
|
|
|
254
|
-
|
|
255
|
-
|
|
320
|
+
deletedElements.unshift(deletedElement);
|
|
321
|
+
}
|
|
256
322
|
|
|
257
|
-
|
|
258
|
-
|
|
323
|
+
return next(index - 1, ...callbackArguments);
|
|
324
|
+
}
|
|
325
|
+
);
|
|
259
326
|
}
|
|
260
327
|
|
|
261
328
|
return next(index, ...initialArguments);
|
|
@@ -276,19 +343,24 @@ export function prune(array, callback, ...initialArguments) {
|
|
|
276
343
|
|
|
277
344
|
const element = array[index];
|
|
278
345
|
|
|
279
|
-
return callback(
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
346
|
+
return callback(
|
|
347
|
+
element,
|
|
348
|
+
...nextArguments,
|
|
349
|
+
back,
|
|
350
|
+
(passed, ...callbackArguments) => {
|
|
351
|
+
if (!passed) {
|
|
352
|
+
const startIndex = index, ///
|
|
353
|
+
deleteCount = 1,
|
|
354
|
+
deletedElement = element; ///
|
|
284
355
|
|
|
285
|
-
|
|
356
|
+
array.splice(startIndex, deleteCount);
|
|
286
357
|
|
|
287
|
-
|
|
288
|
-
|
|
358
|
+
return forward(deletedElement, ...callbackArguments);
|
|
359
|
+
}
|
|
289
360
|
|
|
290
|
-
|
|
291
|
-
|
|
361
|
+
return next(index + 1, ...callbackArguments);
|
|
362
|
+
}
|
|
363
|
+
);
|
|
292
364
|
}
|
|
293
365
|
|
|
294
366
|
return next(index, ...initialArguments);
|
|
@@ -309,19 +381,24 @@ export function extract(array, callback, ...initialArguments) {
|
|
|
309
381
|
|
|
310
382
|
const element = array[index];
|
|
311
383
|
|
|
312
|
-
return callback(
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
384
|
+
return callback(
|
|
385
|
+
element,
|
|
386
|
+
...nextArguments,
|
|
387
|
+
back,
|
|
388
|
+
(passed, ...callbackArguments) => {
|
|
389
|
+
if (passed) {
|
|
390
|
+
const startIndex = index, ///
|
|
391
|
+
deleteCount = 1,
|
|
392
|
+
deletedElement = element; ///
|
|
317
393
|
|
|
318
|
-
|
|
394
|
+
array.splice(startIndex, deleteCount);
|
|
319
395
|
|
|
320
|
-
|
|
321
|
-
|
|
396
|
+
return forward(deletedElement, ...callbackArguments);
|
|
397
|
+
}
|
|
322
398
|
|
|
323
|
-
|
|
324
|
-
|
|
399
|
+
return next(index + 1, ...callbackArguments);
|
|
400
|
+
}
|
|
401
|
+
);
|
|
325
402
|
}
|
|
326
403
|
|
|
327
404
|
return next(index, ...initialArguments);
|
|
@@ -348,9 +425,15 @@ export function match(arrayA, arrayB, callback, ...initialArguments) {
|
|
|
348
425
|
const elementA = arrayA[index],
|
|
349
426
|
elementB = arrayB[index];
|
|
350
427
|
|
|
351
|
-
return callback(
|
|
352
|
-
|
|
353
|
-
|
|
428
|
+
return callback(
|
|
429
|
+
elementA,
|
|
430
|
+
elementB,
|
|
431
|
+
...nextArguments,
|
|
432
|
+
back,
|
|
433
|
+
(...callbackArguments) => {
|
|
434
|
+
return next(index + 1, ...callbackArguments);
|
|
435
|
+
}
|
|
436
|
+
);
|
|
354
437
|
}
|
|
355
438
|
|
|
356
439
|
return next(index, ...initialArguments);
|
|
@@ -390,7 +473,17 @@ export function resolve(arrayA, arrayB, callback, ...initialArguments) {
|
|
|
390
473
|
|
|
391
474
|
const elementA = arrayA[index];
|
|
392
475
|
|
|
393
|
-
return callback(
|
|
476
|
+
return callback(
|
|
477
|
+
elementA,
|
|
478
|
+
...nextElementArguments,
|
|
479
|
+
(exception = null) => {
|
|
480
|
+
if (exception !== null) {
|
|
481
|
+
return back(exception);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
return nextElement(index + 1, success, ...nextElementArguments);
|
|
485
|
+
},
|
|
486
|
+
(...callbackArguments) => {
|
|
394
487
|
const elementB = elementA; ///
|
|
395
488
|
|
|
396
489
|
arrayB.push(elementB);
|