jsoniq
Version:
JSONiq implementation for JavaScript
202 lines (200 loc) • 24.4 kB
JavaScript
;
var _ = require("lodash");
function load(it) {
let items = [], item;
while ((item = it.next().value) !== undefined) {
items.push(item);
}
return items;
}
exports.load = load;
function processTuples(tuples) {
let newTuples = [];
let tuple;
while ((tuple = tuples.next().value) !== undefined) {
newTuples.push(tuple);
}
//Sorting
let keys = {}, sortingKeys = [];
newTuples.forEach(tuple => {
Object.keys(tuple).filter(key => { return key.split("_")[0] === "group"; }).forEach(key => {
keys[key] = true;
});
});
sortingKeys = Object.keys(keys);
sortingKeys.sort((a, b) => {
let v1 = parseInt(a.split("_")[3], 10);
let v2 = parseInt(b.split("_")[3], 10);
if (v1 > v2) {
return 1;
}
else if (v1 === v2) {
return 0;
}
else {
return -1;
}
});
newTuples = [newTuples];
sortingKeys.reduce((done, key) => {
let ascending = key.split("_")[1] === "true";
if (done.length > 0) {
newTuples = newTuples.map(tuples => {
let result = [];
let groups = _.groupBy(tuples, tuple => {
return done.map(key => {
return "" + tuple[key];
});
});
Object.keys(groups).forEach(key => {
result.push(groups[key]);
});
return result;
})[0];
}
newTuples.forEach(tuples => {
tuples.sort((tuple1, tuple2) => {
let v1 = tuple1[key];
let v2 = tuple2[key];
let comp = ascending ? v1 > v2 : v1 < v2;
if (comp) {
return 1;
}
else if (v1 === v2) {
return 0;
}
else {
return -1;
}
});
});
done.push(key);
return done;
}, []);
return _.flatten(newTuples);
}
exports.processTuples = processTuples;
function* unary(ops, value) {
value = value.next().value;
if (ops.length === 0) {
yield value;
}
else {
if (ops[0] === "+") {
yield* unary(ops.slice(1), (function* () { yield +value; })());
}
else {
yield* unary(ops.slice(1), (function* () { yield -value; })());
}
}
}
exports.unary = unary;
function* lookup(source, target) {
let key = target.next().value;
let item;
while ((item = source.next().value) !== undefined) {
yield item[key];
}
}
exports.lookup = lookup;
function* item(items) {
for (let i = 0; i < items.length; i++) {
yield items[i];
}
}
exports.item = item;
function* comp(l, r, operator) {
var left = l.next().value;
var right = r.next().value;
if (operator === "eq") {
yield left === right;
}
else if (operator === "ne") {
yield left !== right;
}
else if (operator === "lt" || operator === "<") {
yield left < right;
}
else if (operator === "le") {
yield left <= right;
}
else if (operator === "gt" || operator === ">") {
yield left > right;
}
else if (operator === "ge") {
yield left >= right;
}
}
exports.comp = comp;
function* AdditiveIterator(left, right, isPlus) {
if (isPlus) {
yield left.next().value + right.next().value;
}
else {
yield left.next().value - right.next().value;
}
}
exports.AdditiveIterator = AdditiveIterator;
function* MultiplicativeIterator(op, l, r) {
var left = l.next().value;
var right = r.next().value;
var result;
if (op === "*") {
result = left * right;
}
else if (op === "div") {
result = left / right;
}
else if (op === "idiv") {
result = Math.floor(left / right);
}
else if (op === "mod") {
result = left % right;
}
yield result;
}
exports.MultiplicativeIterator = MultiplicativeIterator;
function* RangeIterator(l, r) {
var start = l.next().value;
var end = r.next().value;
for (var i = start; i <= end; i++) {
yield i;
}
}
exports.RangeIterator = RangeIterator;
function* SequenceIterator(its) {
var item;
for (var i = 0; i < its.length; i++) {
while ((item = its[i].next().value) !== undefined) {
yield item;
}
}
}
exports.SequenceIterator = SequenceIterator;
function* ArrayIterator(it) {
var array = [];
var item;
while ((item = it.next().value) !== undefined) {
array.push(item);
}
yield array;
}
exports.ArrayIterator = ArrayIterator;
function* ObjectIterator(its) {
var object = {};
its.forEach(it => {
var pair = it.next().value;
var items = [], item;
while ((item = pair.value.next().value) !== undefined) {
items.push(item);
}
object[pair.key] = items.length > 1 ? items : items[0];
});
yield object;
}
exports.ObjectIterator = ObjectIterator;
function* PairIterator(key, value) {
yield { key: key.next().value, value: value };
}
exports.PairIterator = PairIterator;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ydW50aW1lL1J1bnRpbWUudHMiXSwibmFtZXMiOlsibG9hZCIsInByb2Nlc3NUdXBsZXMiLCJ1bmFyeSIsImxvb2t1cCIsIml0ZW0iLCJjb21wIiwiQWRkaXRpdmVJdGVyYXRvciIsIk11bHRpcGxpY2F0aXZlSXRlcmF0b3IiLCJSYW5nZUl0ZXJhdG9yIiwiU2VxdWVuY2VJdGVyYXRvciIsIkFycmF5SXRlcmF0b3IiLCJPYmplY3RJdGVyYXRvciIsIlBhaXJJdGVyYXRvciJdLCJtYXBwaW5ncyI6IjtBQUFBLElBQVksQ0FBQyxXQUFNLFFBQVEsQ0FBQyxDQUFBO0FBRTVCLGNBQXFCLEVBQWlCO0lBQ2xDQSxJQUFJQSxLQUFLQSxHQUFHQSxFQUFFQSxFQUFFQSxJQUFJQSxDQUFDQTtJQUNyQkEsT0FBTUEsQ0FBQ0EsSUFBSUEsR0FBR0EsRUFBRUEsQ0FBQ0EsSUFBSUEsRUFBRUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsS0FBS0EsU0FBU0EsRUFBRUEsQ0FBQ0E7UUFDM0NBLEtBQUtBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO0lBQ3JCQSxDQUFDQTtJQUNEQSxNQUFNQSxDQUFDQSxLQUFLQSxDQUFDQTtBQUNqQkEsQ0FBQ0E7QUFOZSxZQUFJLE9BTW5CLENBQUE7QUFFRCx1QkFBOEIsTUFBcUI7SUFDL0NDLElBQUlBLFNBQVNBLEdBQUdBLEVBQUVBLENBQUNBO0lBQ25CQSxJQUFJQSxLQUFLQSxDQUFDQTtJQUNWQSxPQUFNQSxDQUFDQSxLQUFLQSxHQUFHQSxNQUFNQSxDQUFDQSxJQUFJQSxFQUFFQSxDQUFDQSxLQUFLQSxDQUFDQSxLQUFLQSxTQUFTQSxFQUFFQSxDQUFDQTtRQUNoREEsU0FBU0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0E7SUFDMUJBLENBQUNBO0lBQ0RBLFNBQVNBO0lBQ1RBLElBQUlBLElBQUlBLEdBQUdBLEVBQUVBLEVBQUVBLFdBQVdBLEdBQUdBLEVBQUVBLENBQUNBO0lBQ2hDQSxTQUFTQSxDQUFDQSxPQUFPQSxDQUFDQSxLQUFLQTtRQUNuQkEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsR0FBR0EsTUFBTUEsTUFBTUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsS0FBS0EsT0FBT0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0E7WUFDbkZBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO1FBQ3JCQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNQQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNIQSxXQUFXQSxHQUFHQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtJQUNoQ0EsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0E7UUFDbEJBLElBQUlBLEVBQUVBLEdBQUdBLFFBQVFBLENBQUNBLENBQUNBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBLENBQUNBO1FBQ3ZDQSxJQUFJQSxFQUFFQSxHQUFHQSxRQUFRQSxDQUFDQSxDQUFDQSxDQUFDQSxLQUFLQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUN2Q0EsRUFBRUEsQ0FBQUEsQ0FBQ0EsRUFBRUEsR0FBR0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDVEEsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDYkEsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsRUFBRUEsQ0FBQUEsQ0FBQ0EsRUFBRUEsS0FBS0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDbEJBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO1FBQ2JBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ0pBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1FBQ2RBLENBQUNBO0lBQ0xBLENBQUNBLENBQUNBLENBQUNBO0lBQ0hBLFNBQVNBLEdBQUdBLENBQUNBLFNBQVNBLENBQUNBLENBQUNBO0lBQ3hCQSxXQUFXQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxJQUFJQSxFQUFFQSxHQUFHQTtRQUN6QkEsSUFBSUEsU0FBU0EsR0FBR0EsR0FBR0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsS0FBS0EsTUFBTUEsQ0FBQ0E7UUFDN0NBLEVBQUVBLENBQUFBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1lBQ2pCQSxTQUFTQSxHQUFHQSxTQUFTQSxDQUFDQSxHQUFHQSxDQUFDQSxNQUFNQTtnQkFDNUJBLElBQUlBLE1BQU1BLEdBQUdBLEVBQUVBLENBQUNBO2dCQUNoQkEsSUFBSUEsTUFBTUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsTUFBTUEsRUFBRUEsS0FBS0E7b0JBQ2hDQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxHQUFHQTt3QkFDZkEsTUFBTUEsQ0FBQ0EsRUFBRUEsR0FBR0EsS0FBS0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7b0JBQzNCQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDUEEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ0hBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBO29CQUMzQkEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQzdCQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDSEEsTUFBTUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDbEJBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNB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LENBQUFBLENBQUNBLEVBQUVBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO1FBQ1pBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLEtBQUtBLENBQUNBO0lBQzFCQSxDQUFDQTtJQUFDQSxJQUFJQSxDQUFDQSxFQUFFQSxDQUFBQSxDQUFDQSxFQUFFQSxLQUFLQSxLQUFLQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNyQkEsTUFBTUEsR0FBR0EsSUFBSUEsR0FBR0EsS0FBS0EsQ0FBQ0E7SUFDMUJBLENBQUNBO0lBQUNBLElBQUlBLENBQUNBLEVBQUVBLENBQUFBLENBQUNBLEVBQUVBLEtBQUtBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO1FBQ3RCQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxJQUFJQSxHQUFHQSxLQUFLQSxDQUFDQSxDQUFDQTtJQUN0Q0EsQ0FBQ0E7SUFBQ0EsSUFBSUEsQ0FBQ0EsRUFBRUEsQ0FBQUEsQ0FBQ0EsRUFBRUEsS0FBS0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDckJBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLEtBQUtBLENBQUNBO0lBQzFCQSxDQUFDQTtJQUNEQSxNQUFNQSxNQUFNQSxDQUFDQTtBQUNqQkEsQ0FBQ0E7QUFkZ0IsOEJBQXNCLHlCQWN0QyxDQUFBO0FBRUQsd0JBQStCLENBQW1CLEVBQUUsQ0FBbUI7SUFDbkVDLElBQUlBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLElBQUlBLEVBQUVBLENBQUNBLEtBQUtBLENBQUNBO0lBQzNCQSxJQUFJQSxHQUFHQSxHQUFHQSxDQUFDQSxDQUFDQSxJQUFJQSxFQUFFQSxDQUFDQSxLQUFLQSxDQUFDQTtJQUN6QkEsR0FBR0EsQ0FBQUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsS0FBS0EsRUFBRUEsQ0FBQ0EsSUFBSUEsR0FBR0EsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsQ0FBQ0E7UUFDL0JBLE1BQU1BLENBQUNBLENBQUNBO0lBQ1pBLENBQUNBO0FBQ0xBLENBQUNBO0FBTmdCLHFCQUFhLGdCQU03QixDQUFBO0FBRUQsMkJBQWtDLEdBQW9CO0lBQ2xEQyxJQUFJQSxJQUFJQSxDQUFDQTtJQUNUQSxHQUFHQSxDQUFBQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxHQUFHQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQSxFQUFFQSxFQUFFQSxDQUFDQTtRQUNqQ0EsT0FBTUEsQ0FBQ0EsSUFBSUEsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsRUFBRUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsS0FBS0EsU0FBU0EsRUFBRUEsQ0FBQ0E7WUFDL0NBLE1BQU1BLElBQUlBLENBQUNBO1FBQ2ZBLENBQUNBO0lBQ0xBLENBQUNBO0FBQ0xBLENBQUNBO0FBUGdCLHdCQUFnQixtQkFPaEMsQ0FBQTtBQUVELHdCQUErQixFQUFpQjtJQUM1Q0MsSUFBSUEsS0FBS0EsR0FBR0EsRUFBRUEsQ0FBQ0E7SUFDZkEsSUFBSUEsSUFBSUEsQ0FBQ0E7SUFDVEEsT0FBTUEsQ0FBQ0EsSUFBSUEsR0FBR0EsRUFBRUEsQ0FBQ0EsSUFBSUEsRUFBRUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsS0FBS0EsU0FBU0EsRUFBRUEsQ0FBQ0E7UUFDM0NBLEtBQUtBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO0lBQ3JCQSxDQUFDQTtJQUNEQSxNQUFNQSxLQUFLQSxDQUFDQTtBQUNoQkEsQ0FBQ0E7QUFQZ0IscUJBQWEsZ0JBTzdCLENBQUE7QUFFRCx5QkFBZ0MsR0FBb0I7SUFDaERDLElBQUlBLE1BQU1BLEdBQUdBLEVBQUVBLENBQUNBO0lBQ2hCQSxHQUFHQSxDQUFDQSxPQUFPQSxDQUFDQSxFQUFFQTtRQUNWQSxJQUFJQSxJQUFJQSxHQUFHQSxFQUFFQSxDQUFDQSxJQUFJQSxFQUFFQSxDQUFDQSxLQUFLQSxDQUFDQTtRQUMzQkEsSUFBSUEsS0FBS0EsR0FBR0EsRUFBRUEsRUFBRUEsSUFBSUEsQ0FBQ0E7UUFDckJBLE9BQU1BLENBQUNBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLElBQUlBLEVBQUVBLENBQUNBLEtBQUtBLENBQUNBLEtBQUtBLFNBQVNBLEVBQUVBLENBQUNBO1lBQ25EQSxLQUFLQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUNyQkEsQ0FBQ0E7UUFDREEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsR0FBR0EsS0FBS0EsQ0FBQ0EsTUFBTUEsR0FBR0EsQ0FBQ0EsR0FBR0EsS0FBS0EsR0FBR0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7SUFDM0RBLENBQUNBLENBQUNBLENBQUNBO0lBQ0hBLE1BQU1BLE1BQU1BLENBQUNBO0FBQ2pCQSxDQUFDQTtBQVhnQixzQkFBYyxpQkFXOUIsQ0FBQTtBQUVELHVCQUE4QixHQUFrQixFQUFFLEtBQW9CO0lBQ2xFQyxNQUFNQSxFQUFFQSxHQUFHQSxFQUFFQSxHQUFHQSxDQUFDQSxJQUFJQSxFQUFFQSxDQUFDQSxLQUFLQSxFQUFFQSxLQUFLQSxFQUFFQSxLQUFLQSxFQUFFQSxDQUFDQTtBQUNsREEsQ0FBQ0E7QUFGZ0Isb0JBQVksZUFFNUIsQ0FBQSIsImZpbGUiOiJsaWIvcnVudGltZS9SdW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkKGl0OiBJdGVyYXRvcjxhbnk+KTogYW55W10ge1xuICAgIGxldCBpdGVtcyA9IFtdLCBpdGVtO1xuICAgIHdoaWxlKChpdGVtID0gaXQubmV4dCgpLnZhbHVlKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUdXBsZXModHVwbGVzOiBJdGVyYXRvcjxhbnk+KTogYW55W10ge1xuICAgIGxldCBuZXdUdXBsZXMgPSBbXTtcbiAgICBsZXQgdHVwbGU7XG4gICAgd2hpbGUoKHR1cGxlID0gdHVwbGVzLm5leHQoKS52YWx1ZSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdUdXBsZXMucHVzaCh0dXBsZSk7XG4gICAgfVxuICAgIC8vU29ydGluZ1xuICAgIGxldCBrZXlzID0ge30sIHNvcnRpbmdLZXlzID0gW107XG4gICAgbmV3VHVwbGVzLmZvckVhY2godHVwbGUgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyh0dXBsZSkuZmlsdGVyKGtleSA9PiB7IHJldHVybiBrZXkuc3BsaXQoXCJfXCIpWzBdID09PSBcImdyb3VwXCI7IH0pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGtleXNba2V5XSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHNvcnRpbmdLZXlzID0gT2JqZWN0LmtleXMoa2V5cyk7XG4gICAgc29ydGluZ0tleXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBsZXQgdjEgPSBwYXJzZUludChhLnNwbGl0KFwiX1wiKVszXSwgMTApO1xuICAgICAgICBsZXQgdjIgPSBwYXJzZUludChiLnNwbGl0KFwiX1wiKVszXSwgMTApO1xuICAgICAgICBpZih2MSA+IHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIGlmKHYxID09PSB2Mikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBuZXdUdXBsZXMgPSBbbmV3VHVwbGVzXTtcbiAgICBzb3J0aW5nS2V5cy5yZWR1Y2UoKGRvbmUsIGtleSkgPT4ge1xuICAgICAgICBsZXQgYXNjZW5kaW5nID0ga2V5LnNwbGl0KFwiX1wiKVsxXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgIGlmKGRvbmUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbmV3VHVwbGVzID0gbmV3VHVwbGVzLm1hcCh0dXBsZXMgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXBzID0gXy5ncm91cEJ5KHR1cGxlcywgdHVwbGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZS5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgdHVwbGVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdyb3Vwc1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSlbMF07XG4gICAgICAgIH1cbiAgICAgICAgbmV3VHVwbGVzLmZvckVhY2godHVwbGVzID0+IHtcbiAgICAgICAgICAgIHR1cGxlcy5zb3J0KCh0dXBsZTEsIHR1cGxlMikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB2MSA9IHR1cGxlMVtrZXldO1xuICAgICAgICAgICAgICAgIGxldCB2MiA9IHR1cGxlMltrZXldO1xuICAgICAgICAgICAgICAgIGxldCBjb21wID0gYXNjZW5kaW5nID8gdjEgPiB2MiA6IHYxIDwgdjI7XG4gICAgICAgICAgICAgICAgaWYoY29tcCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYodjEgPT09IHYyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRvbmUucHVzaChrZXkpO1xuICAgICAgICByZXR1cm4gZG9uZTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIF8uZmxhdHRlbihuZXdUdXBsZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gKnVuYXJ5KG9wczogc3RyaW5nW10sIHZhbHVlOiBJdGVyYXRvcjxhbnk+KTogSXRlcmFibGU8YW55PiB7XG4gICAgdmFsdWUgPSB2YWx1ZS5uZXh0KCkudmFsdWU7XG4gICAgaWYob3BzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZihvcHNbMF0gPT09IFwiK1wiKSB7XG4gICAgICAgICAgICB5aWVsZCAqIHVuYXJ5KG9wcy5zbGljZSgxKSwgKGZ1bmN0aW9uICooKXsgeWllbGQgKyB2YWx1ZTsgfSkoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB5aWVsZCAqIHVuYXJ5KG9wcy5zbGljZSgxKSwgKGZ1bmN0aW9uICooKXsgeWllbGQgLSB2YWx1ZTsgfSkoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAqbG9va3VwKHNvdXJjZTogSXRlcmF0b3I8e30+LCB0YXJnZXQ6IEl0ZXJhdG9yPHN0cmluZz4pOiBJdGVyYWJsZTxhbnk+IHtcbiAgICBsZXQga2V5ID0gdGFyZ2V0Lm5leHQoKS52YWx1ZTtcbiAgICBsZXQgaXRlbTtcbiAgICB3aGlsZSgoaXRlbSA9IHNvdXJjZS5uZXh0KCkudmFsdWUpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeWllbGQgaXRlbVtrZXldO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uICppdGVtKGl0ZW1zOiBhbnlbXSk6IEl0ZXJhYmxlPGFueT4ge1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB5aWVsZCBpdGVtc1tpXTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAqY29tcChsOiBJdGVyYXRvcjxhbnk+LCByOiBJdGVyYXRvcjxhbnk+LCBvcGVyYXRvcjogc3RyaW5nKTogSXRlcmF0b3I8YW55PiB7XG4gICAgdmFyIGxlZnQgPSBsLm5leHQoKS52YWx1ZTtcbiAgICB2YXIgcmlnaHQgPSByLm5leHQoKS52YWx1ZTtcbiAgICBpZihvcGVyYXRvciA9PT0gXCJlcVwiKSB7XG4gICAgICAgIHlpZWxkIGxlZnQgPT09IHJpZ2h0O1xuICAgIH0gZWxzZSBpZihvcGVyYXRvciA9PT0gXCJuZVwiKSB7XG4gICAgICAgIHlpZWxkIGxlZnQgIT09IHJpZ2h0O1xuICAgIH0gZWxzZSBpZihvcGVyYXRvciA9PT0gXCJsdFwiIHx8IG9wZXJhdG9yID09PSBcIjxcIikge1xuICAgICAgICB5aWVsZCBsZWZ0IDwgcmlnaHQ7XG4gICAgfSBlbHNlIGlmKG9wZXJhdG9yID09PSBcImxlXCIpIHtcbiAgICAgICAgeWllbGQgbGVmdCA8PSByaWdodDtcbiAgICB9IGVsc2UgaWYob3BlcmF0b3IgPT09IFwiZ3RcIiB8fCBvcGVyYXRvciA9PT0gXCI+XCIpIHtcbiAgICAgICAgeWllbGQgbGVmdCA+IHJpZ2h0O1xuICAgIH0gZWxzZSBpZihvcGVyYXRvciA9PT0gXCJnZVwiKSB7XG4gICAgICAgIHlpZWxkIGxlZnQgPj0gcmlnaHQ7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gKkFkZGl0aXZlSXRlcmF0b3IobGVmdDogSXRlcmF0b3I8bnVtYmVyPiwgcmlnaHQ6IEl0ZXJhdG9yPG51bWJlcj4sIGlzUGx1czogYm9vbGVhbik6IEl0ZXJhYmxlPG51bWJlcj4ge1xuICAgIGlmKGlzUGx1cykge1xuICAgICAgICB5aWVsZCBsZWZ0Lm5leHQoKS52YWx1ZSArIHJpZ2h0Lm5leHQoKS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB5aWVsZCBsZWZ0Lm5leHQoKS52YWx1ZSAtIHJpZ2h0Lm5leHQoKS52YWx1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAqTXVsdGlwbGljYXRpdmVJdGVyYXRvcihvcDogc3RyaW5nLCBsOiBJdGVyYXRvcjxudW1iZXI+LCByOiBJdGVyYXRvcjxudW1iZXI+KTogSXRlcmFibGU8bnVtYmVyPiB7XG4gICAgdmFyIGxlZnQgPSBsLm5leHQoKS52YWx1ZTtcbiAgICB2YXIgcmlnaHQgPSByLm5leHQoKS52YWx1ZTtcbiAgICB2YXIgcmVzdWx0OiBudW1iZXI7XG4gICAgaWYob3AgPT09IFwiKlwiKSB7XG4gICAgICAgIHJlc3VsdCA9IGxlZnQgKiByaWdodDtcbiAgICB9IGVsc2UgaWYob3AgPT09IFwiZGl2XCIpIHtcbiAgICAgICAgcmVzdWx0ID0gbGVmdCAvIHJpZ2h0O1xuICAgIH0gZWxzZSBpZihvcCA9PT0gXCJpZGl2XCIpIHtcbiAgICAgICAgcmVzdWx0ID0gTWF0aC5mbG9vcihsZWZ0IC8gcmlnaHQpO1xuICAgIH0gZWxzZSBpZihvcCA9PT0gXCJtb2RcIikge1xuICAgICAgICByZXN1bHQgPSBsZWZ0ICUgcmlnaHQ7XG4gICAgfVxuICAgIHlpZWxkIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uICpSYW5nZUl0ZXJhdG9yKGw6IEl0ZXJhdG9yPG51bWJlcj4sIHI6IEl0ZXJhdG9yPG51bWJlcj4pOiBJdGVyYWJsZTxudW1iZXI+IHtcbiAgICB2YXIgc3RhcnQgPSBsLm5leHQoKS52YWx1ZTtcbiAgICB2YXIgZW5kID0gci5uZXh0KCkudmFsdWU7XG4gICAgZm9yKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgeWllbGQgaTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAqU2VxdWVuY2VJdGVyYXRvcihpdHM6IEl0ZXJhdG9yPGFueT5bXSk6IEl0ZXJhYmxlPGFueT4ge1xuICAgIHZhciBpdGVtO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBpdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd2hpbGUoKGl0ZW0gPSBpdHNbaV0ubmV4dCgpLnZhbHVlKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB5aWVsZCBpdGVtO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gKkFycmF5SXRlcmF0b3IoaXQ6IEl0ZXJhdG9yPGFueT4pOiBJdGVyYWJsZTxhbnk+IHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgaXRlbTtcbiAgICB3aGlsZSgoaXRlbSA9IGl0Lm5leHQoKS52YWx1ZSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcnJheS5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICB5aWVsZCBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uICpPYmplY3RJdGVyYXRvcihpdHM6IEl0ZXJhdG9yPGFueT5bXSk6IEl0ZXJhYmxlPHt9PiB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIGl0cy5mb3JFYWNoKGl0ID0+IHtcbiAgICAgICAgdmFyIHBhaXIgPSBpdC5uZXh0KCkudmFsdWU7XG4gICAgICAgIHZhciBpdGVtcyA9IFtdLCBpdGVtO1xuICAgICAgICB3aGlsZSgoaXRlbSA9IHBhaXIudmFsdWUubmV4dCgpLnZhbHVlKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdFtwYWlyLmtleV0gPSBpdGVtcy5sZW5ndGggPiAxID8gaXRlbXMgOiBpdGVtc1swXTtcbiAgICB9KTtcbiAgICB5aWVsZCBvYmplY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAqUGFpckl0ZXJhdG9yKGtleTogSXRlcmF0b3I8YW55PiwgdmFsdWU6IEl0ZXJhdG9yPGFueT4pOiBJdGVyYWJsZTx7fT4ge1xuICAgIHlpZWxkIHsga2V5OiBrZXkubmV4dCgpLnZhbHVlLCB2YWx1ZTogdmFsdWUgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==