ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
206 lines (173 loc) • 16.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var ListNode = exports.ListNode = function ListNode(value) {
_classCallCheck(this, ListNode);
this.next = null;
this.prev = null;
this.value = value;
};
var LinkedList = exports.LinkedList = function () {
function LinkedList() {
_classCallCheck(this, LinkedList);
this.clear();
}
LinkedList.fromSlice = function fromSlice(slice) {
var list = new LinkedList();
slice.forEachNode(function (n) {
return list.append(n.clone());
});
return list;
};
LinkedList.prototype.head = function head() {
return this._head;
};
LinkedList.prototype.tail = function tail() {
return this._tail;
};
LinkedList.prototype.clear = function clear() {
this._head = this._tail = null;
};
LinkedList.prototype.isEmpty = function isEmpty() {
return this._head === null;
};
LinkedList.prototype.toArray = function toArray() {
var out = [];
this.forEachNode(function (n) {
return out.push(n);
});
return out;
};
LinkedList.prototype.splice = function splice(start, end, reference) {
var before = void 0;
if (reference === null) {
before = this._tail;
this._tail = end;
} else {
before = reference.prev;
end.next = reference;
reference.prev = end;
}
if (before) {
before.next = start;
start.prev = before;
}
};
LinkedList.prototype.nextNode = function nextNode(node) {
return node.next;
};
LinkedList.prototype.prevNode = function prevNode(node) {
return node.prev;
};
LinkedList.prototype.forEachNode = function forEachNode(callback) {
var node = this._head;
while (node !== null) {
callback(node);
node = node.next;
}
};
LinkedList.prototype.contains = function contains(needle) {
var node = this._head;
while (node !== null) {
if (node === needle) return true;
node = node.next;
}
return false;
};
LinkedList.prototype.insertBefore = function insertBefore(node) {
var reference = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
if (reference === null) return this.append(node);
if (reference.prev) reference.prev.next = node;else this._head = node;
node.prev = reference.prev;
node.next = reference;
reference.prev = node;
return node;
};
LinkedList.prototype.append = function append(node) {
var tail = this._tail;
if (tail) {
tail.next = node;
node.prev = tail;
node.next = null;
} else {
this._head = node;
}
return this._tail = node;
};
LinkedList.prototype.pop = function pop() {
if (this._tail) return this.remove(this._tail);
return null;
};
LinkedList.prototype.prepend = function prepend(node) {
if (this._head) return this.insertBefore(node, this._head);
return this._head = this._tail = node;
};
LinkedList.prototype.remove = function remove(node) {
if (node.prev) node.prev.next = node.next;else this._head = node.next;
if (node.next) node.next.prev = node.prev;else this._tail = node.prev;
return node;
};
return LinkedList;
}();
var ListSlice = exports.ListSlice = function () {
function ListSlice(head, tail) {
_classCallCheck(this, ListSlice);
this._head = head;
this._tail = tail;
}
ListSlice.toList = function toList(slice) {
var list = new LinkedList();
slice.forEachNode(function (n) {
return list.append(n.clone());
});
return list;
};
ListSlice.prototype.forEachNode = function forEachNode(callback) {
var node = this._head;
while (node !== null) {
callback(node);
node = this.nextNode(node);
}
};
ListSlice.prototype.contains = function contains(needle) {
var node = this._head;
while (node !== null) {
if (node === needle) return true;
node = node.next;
}
return false;
};
ListSlice.prototype.head = function head() {
return this._head;
};
ListSlice.prototype.tail = function tail() {
return this._tail;
};
ListSlice.prototype.toArray = function toArray() {
var out = [];
this.forEachNode(function (n) {
return out.push(n);
});
return out;
};
ListSlice.prototype.nextNode = function nextNode(node) {
if (node === this._tail) return null;
return node.next;
};
ListSlice.prototype.prevNode = function prevNode(node) {
if (node === this._head) return null;
return node.prev;
};
ListSlice.prototype.isEmpty = function isEmpty() {
return false;
};
return ListSlice;
}();
var EMPTY_SLICE = exports.EMPTY_SLICE = new ListSlice(null, null);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9saXN0LXV0aWxzLmpzIl0sIm5hbWVzIjpbIkxpc3ROb2RlIiwidmFsdWUiLCJuZXh0IiwicHJldiIsIkxpbmtlZExpc3QiLCJjbGVhciIsImZyb21TbGljZSIsInNsaWNlIiwibGlzdCIsImZvckVhY2hOb2RlIiwiYXBwZW5kIiwibiIsImNsb25lIiwiaGVhZCIsIl9oZWFkIiwidGFpbCIsIl90YWlsIiwiaXNFbXB0eSIsInRvQXJyYXkiLCJvdXQiLCJwdXNoIiwic3BsaWNlIiwic3RhcnQiLCJlbmQiLCJyZWZlcmVuY2UiLCJiZWZvcmUiLCJuZXh0Tm9kZSIsIm5vZGUiLCJwcmV2Tm9kZSIsImNhbGxiYWNrIiwiY29udGFpbnMiLCJuZWVkbGUiLCJpbnNlcnRCZWZvcmUiLCJwb3AiLCJyZW1vdmUiLCJwcmVwZW5kIiwiTGlzdFNsaWNlIiwidG9MaXN0IiwiRU1QVFlfU0xJQ0UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztJQUFhLEFBQWIsOEJBQ0ksa0JBQVksQUFBWixPQUFtQjswQkFDZjs7U0FBSyxBQUFMLE9BQVksQUFBWixBQUNBO1NBQUssQUFBTCxPQUFZLEFBQVosQUFDQTtTQUFLLEFBQUwsUUFBYSxBQUFiLEFBQ0g7QUFMTCxBQU9BO0lBQWEsQUFBYiw4Q0FDSTswQkFBYzs4QkFDVjs7YUFBSyxBQUFMLEFBQ0g7QUFITDs7ZUFJVyxBQUpYLCtCQUlxQixBQUpyQixPQUk0QixBQUNwQjtZQUFJLE9BQU8sSUFBSSxBQUFKLEFBQVgsQUFDQTtjQUFNLEFBQU4sWUFBa0IsYUFBQTttQkFBSyxLQUFLLEFBQUwsT0FBWSxFQUFFLEFBQUYsQUFBWixBQUFMO0FBQWxCLEFBQ0E7ZUFBTyxBQUFQLEFBQ0g7QUFSTDs7eUJBU0ksQUFUSix1QkFTVyxBQUNIO2VBQU8sS0FBSyxBQUFaLEFBQ0g7QUFYTDs7eUJBWUksQUFaSix1QkFZVyxBQUNIO2VBQU8sS0FBSyxBQUFaLEFBQ0g7QUFkTDs7eUJBZUksQUFmSix5QkFlWSxBQUNKO2FBQUssQUFBTCxRQUFhLEtBQUssQUFBTCxRQUFhLEFBQTFCLEFBQ0g7QUFqQkw7O3lCQWtCSSxBQWxCSiw2QkFrQmMsQUFDTjtlQUFPLEtBQUssQUFBTCxVQUFlLEFBQXRCLEFBQ0g7QUFwQkw7O3lCQXFCSSxBQXJCSiw2QkFxQmMsQUFDTjtZQUFJLE1BQU0sQUFBVixBQUNBO2FBQUssQUFBTCxZQUFpQixhQUFBO21CQUFLLElBQUksQUFBSixLQUFTLEFBQVQsQUFBTDtBQUFqQixBQUNBO2VBQU8sQUFBUCxBQUNIO0FBekJMOzt5QkEwQkksQUExQkoseUJBMEJXLEFBMUJYLE9BMEJrQixBQTFCbEIsS0EwQnVCLEFBMUJ2QixXQTBCa0MsQUFDMUI7WUFBSSxjQUFKLEFBQ0E7WUFBSSxjQUFjLEFBQWxCLE1BQXdCLEFBQ3BCO3FCQUFTLEtBQUssQUFBZCxBQUNBO2lCQUFLLEFBQUwsUUFBYSxBQUFiLEFBQ0g7QUFIRCxlQUdPLEFBQ0g7cUJBQVMsVUFBVSxBQUFuQixBQUNBO2dCQUFJLEFBQUosT0FBVyxBQUFYLEFBQ0E7c0JBQVUsQUFBVixPQUFpQixBQUFqQixBQUNIO0FBQ0Q7WUFBSSxBQUFKLFFBQVksQUFDUjttQkFBTyxBQUFQLE9BQWMsQUFBZCxBQUNBO2tCQUFNLEFBQU4sT0FBYSxBQUFiLEFBQ0g7QUFDSjtBQXhDTDs7eUJBeUNJLEFBekNKLDZCQXlDYSxBQXpDYixNQXlDbUIsQUFDWDtlQUFPLEtBQUssQUFBWixBQUNIO0FBM0NMOzt5QkE0Q0ksQUE1Q0osNkJBNENhLEFBNUNiLE1BNENtQixBQUNYO2VBQU8sS0FBSyxBQUFaLEFBQ0g7QUE5Q0w7O3lCQStDSSxBQS9DSixtQ0ErQ2dCLEFBL0NoQixVQStDMEIsQUFDbEI7WUFBSSxPQUFPLEtBQUssQUFBaEIsQUFDQTtlQUFPLFNBQVMsQUFBaEIsTUFBc0IsQUFDbEI7cUJBQVMsQUFBVCxBQUNBO21CQUFPLEtBQUssQUFBWixBQUNIO0FBQ0o7QUFyREw7O3lCQXNESSxBQXRESiw2QkFzRGEsQUF0RGIsUUFzRHFCLEFBQ2I7WUFBSSxPQUFPLEtBQUssQUFBaEIsQUFDQTtlQUFPLFNBQVMsQUFBaEIsTUFBc0IsQUFDbEI7Z0JBQUksU0FBUyxBQUFiLFFBQXFCLE9BQU8sQUFBUCxBQUNyQjttQkFBTyxLQUFLLEFBQVosQUFDSDtBQUNEO2VBQU8sQUFBUCxBQUNIO0FBN0RMOzt5QkE4REksQUE5REoscUNBOERpQixBQTlEakIsTUE4RHlDO1lBQWxCLEFBQWtCLGdGQUFOLEFBQU0sQUFDakM7O1lBQUksY0FBYyxBQUFsQixNQUF3QixPQUFPLEtBQUssQUFBTCxPQUFZLEFBQVosQUFBUCxBQUN4QjtZQUFJLFVBQVUsQUFBZCxNQUFvQixVQUFVLEFBQVYsS0FBZSxBQUFmLE9BQXNCLEFBQXRCLEFBQXBCLFVBQW9ELEtBQUssQUFBTCxRQUFhLEFBQWIsQUFDcEQ7YUFBSyxBQUFMLE9BQVksVUFBVSxBQUF0QixBQUNBO2FBQUssQUFBTCxPQUFZLEFBQVosQUFDQTtrQkFBVSxBQUFWLE9BQWlCLEFBQWpCLEFBQ0E7ZUFBTyxBQUFQLEFBQ0g7QUFyRUw7O3lCQXNFSSxBQXRFSix5QkFzRVcsQUF0RVgsTUFzRWlCLEFBQ1Q7WUFBSSxPQUFPLEtBQUssQUFBaEIsQUFDQTtZQUFJLEFBQUosTUFBVSxBQUNOO2lCQUFLLEFBQUwsT0FBWSxBQUFaLEFBQ0E7aUJBQUssQUFBTCxPQUFZLEFBQVosQUFDQTtpQkFBSyxBQUFMLE9BQVksQUFBWixBQUNIO0FBSkQsZUFJTyxBQUNIO2lCQUFLLEFBQUwsUUFBYSxBQUFiLEFBQ0g7QUFDRDtlQUFPLEtBQUssQUFBTCxRQUFhLEFBQXBCLEFBQ0g7QUFoRkw7O3lCQWlGSSxBQWpGSixxQkFpRlUsQUFDRjtZQUFJLEtBQUssQUFBVCxPQUFnQixPQUFPLEtBQUssQUFBTCxPQUFZLEtBQUssQUFBakIsQUFBUCxBQUNoQjtlQUFPLEFBQVAsQUFDSDtBQXBGTDs7eUJBcUZJLEFBckZKLDJCQXFGWSxBQXJGWixNQXFGa0IsQUFDVjtZQUFJLEtBQUssQUFBVCxPQUFnQixPQUFPLEtBQUssQUFBTCxhQUFrQixBQUFsQixNQUF3QixLQUFLLEFBQTdCLEFBQVAsQUFDaEI7ZUFBTyxLQUFLLEFBQUwsUUFBYSxLQUFLLEFBQUwsUUFBYSxBQUFqQyxBQUNIO0FBeEZMOzt5QkF5RkksQUF6RkoseUJBeUZXLEFBekZYLE1BeUZpQixBQUNUO1lBQUksS0FBSyxBQUFULE1BQWUsS0FBSyxBQUFMLEtBQVUsQUFBVixPQUFpQixLQUFLLEFBQXRCLEFBQWYsVUFBK0MsS0FBSyxBQUFMLFFBQWEsS0FBSyxBQUFsQixBQUMvQztZQUFJLEtBQUssQUFBVCxNQUFlLEtBQUssQUFBTCxLQUFVLEFBQVYsT0FBaUIsS0FBSyxBQUF0QixBQUFmLFVBQStDLEtBQUssQUFBTCxRQUFhLEtBQUssQUFBbEIsQUFDL0M7ZUFBTyxBQUFQLEFBQ0g7QUE3Rkw7O1dBQUE7QUErRkE7SUFBYSxBQUFiLDRDQUNJO3VCQUFZLEFBQVosTUFBa0IsQUFBbEIsTUFBd0I7OEJBQ3BCOzthQUFLLEFBQUwsUUFBYSxBQUFiLEFBQ0E7YUFBSyxBQUFMLFFBQWEsQUFBYixBQUNIO0FBSkw7O2NBS1csQUFMWCx5QkFLa0IsQUFMbEIsT0FLeUIsQUFDakI7WUFBSSxPQUFPLElBQUksQUFBSixBQUFYLEFBQ0E7Y0FBTSxBQUFOLFlBQWtCLGFBQUE7bUJBQUssS0FBSyxBQUFMLE9BQVksRUFBRSxBQUFGLEFBQVosQUFBTDtBQUFsQixBQUNBO2VBQU8sQUFBUCxBQUNIO0FBVEw7O3dCQVVJLEFBVkosbUNBVWdCLEFBVmhCLFVBVTBCLEFBQ2xCO1lBQUksT0FBTyxLQUFLLEFBQWhCLEFBQ0E7ZUFBTyxTQUFTLEFBQWhCLE1BQXNCLEFBQ2xCO3FCQUFTLEFBQVQsQUFDQTttQkFBTyxLQUFLLEFBQUwsU0FBYyxBQUFkLEFBQVAsQUFDSDtBQUNKO0FBaEJMOzt3QkFpQkksQUFqQkosNkJBaUJhLEFBakJiLFFBaUJxQixBQUNiO1lBQUksT0FBTyxLQUFLLEFBQWhCLEFBQ0E7ZUFBTyxTQUFTLEFBQWhCLE1BQXNCLEFBQ2xCO2dCQUFJLFNBQVMsQUFBYixRQUFxQixPQUFPLEFBQVAsQUFDckI7bUJBQU8sS0FBSyxBQUFaLEFBQ0g7QUFDRDtlQUFPLEFBQVAsQUFDSDtBQXhCTDs7d0JBeUJJLEFBekJKLHVCQXlCVyxBQUNIO2VBQU8sS0FBSyxBQUFaLEFBQ0g7QUEzQkw7O3dCQTRCSSxBQTVCSix1QkE0QlcsQUFDSDtlQUFPLEtBQUssQUFBWixBQUNIO0FBOUJMOzt3QkErQkksQUEvQkosNkJBK0JjLEFBQ047WUFBSSxNQUFNLEFBQVYsQUFDQTthQUFLLEFBQUwsWUFBaUIsYUFBQTttQkFBSyxJQUFJLEFBQUosS0FBUyxBQUFULEFBQUw7QUFBakIsQUFDQTtlQUFPLEFBQVAsQUFDSDtBQW5DTDs7d0JBb0NJLEFBcENKLDZCQW9DYSxBQXBDYixNQW9DbUIsQUFDWDtZQUFJLFNBQVMsS0FBSyxBQUFsQixPQUF5QixPQUFPLEFBQVAsQUFDekI7ZUFBTyxLQUFLLEFBQVosQUFDSDtBQXZDTDs7d0JBd0NJLEFBeENKLDZCQXdDYSxBQXhDYixNQXdDbUIsQUFDWDtZQUFJLFNBQVMsS0FBSyxBQUFsQixPQUF5QixPQUFPLEFBQVAsQUFDekI7ZUFBTyxLQUFLLEFBQVosQUFDSDtBQTNDTDs7d0JBNENJLEFBNUNKLDZCQTRDYyxBQUNOO2VBQU8sQUFBUCxBQUNIO0FBOUNMOztXQUFBO0FBZ0RBO0FBQU8sSUFBTSxvQ0FBYyxJQUFJLEFBQUosVUFBYyxBQUFkLE1BQW9CLEFBQXBCLEFBQXBCIiwiZmlsZSI6ImxpYi9saXN0LXV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIExpc3ROb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLm5leHQgPSBudWxsO1xuICAgICAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIExpbmtlZExpc3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tU2xpY2Uoc2xpY2UpIHtcbiAgICAgICAgbGV0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xuICAgICAgICBzbGljZS5mb3JFYWNoTm9kZShuID0+IGxpc3QuYXBwZW5kKG4uY2xvbmUoKSkpO1xuICAgICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG4gICAgaGVhZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWQ7XG4gICAgfVxuICAgIHRhaWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWlsO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5faGVhZCA9IHRoaXMuX3RhaWwgPSBudWxsO1xuICAgIH1cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZCA9PT0gbnVsbDtcbiAgICB9XG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgbGV0IG91dCA9IFtdO1xuICAgICAgICB0aGlzLmZvckVhY2hOb2RlKG4gPT4gb3V0LnB1c2gobikpO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBzcGxpY2Uoc3RhcnQsIGVuZCwgcmVmZXJlbmNlKSB7XG4gICAgICAgIGxldCBiZWZvcmU7XG4gICAgICAgIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGJlZm9yZSA9IHRoaXMuX3RhaWw7XG4gICAgICAgICAgICB0aGlzLl90YWlsID0gZW5kO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmVmb3JlID0gcmVmZXJlbmNlLnByZXY7XG4gICAgICAgICAgICBlbmQubmV4dCA9IHJlZmVyZW5jZTtcbiAgICAgICAgICAgIHJlZmVyZW5jZS5wcmV2ID0gZW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiZWZvcmUpIHtcbiAgICAgICAgICAgIGJlZm9yZS5uZXh0ID0gc3RhcnQ7XG4gICAgICAgICAgICBzdGFydC5wcmV2ID0gYmVmb3JlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5leHROb2RlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubmV4dDtcbiAgICB9XG4gICAgcHJldk5vZGUobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5wcmV2O1xuICAgIH1cbiAgICBmb3JFYWNoTm9kZShjYWxsYmFjaykge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuX2hlYWQ7XG4gICAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udGFpbnMobmVlZGxlKSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5faGVhZDtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChub2RlID09PSBuZWVkbGUpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGluc2VydEJlZm9yZShub2RlLCByZWZlcmVuY2UgPSBudWxsKSB7XG4gICAgICAgIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHJldHVybiB0aGlzLmFwcGVuZChub2RlKTtcbiAgICAgICAgaWYgKHJlZmVyZW5jZS5wcmV2KSByZWZlcmVuY2UucHJldi5uZXh0ID0gbm9kZTtlbHNlIHRoaXMuX2hlYWQgPSBub2RlO1xuICAgICAgICBub2RlLnByZXYgPSByZWZlcmVuY2UucHJldjtcbiAgICAgICAgbm9kZS5uZXh0ID0gcmVmZXJlbmNlO1xuICAgICAgICByZWZlcmVuY2UucHJldiA9IG5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBhcHBlbmQobm9kZSkge1xuICAgICAgICBsZXQgdGFpbCA9IHRoaXMuX3RhaWw7XG4gICAgICAgIGlmICh0YWlsKSB7XG4gICAgICAgICAgICB0YWlsLm5leHQgPSBub2RlO1xuICAgICAgICAgICAgbm9kZS5wcmV2ID0gdGFpbDtcbiAgICAgICAgICAgIG5vZGUubmV4dCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9oZWFkID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fdGFpbCA9IG5vZGU7XG4gICAgfVxuICAgIHBvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhaWwpIHJldHVybiB0aGlzLnJlbW92ZSh0aGlzLl90YWlsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHByZXBlbmQobm9kZSkge1xuICAgICAgICBpZiAodGhpcy5faGVhZCkgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG5vZGUsIHRoaXMuX2hlYWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZCA9IHRoaXMuX3RhaWwgPSBub2RlO1xuICAgIH1cbiAgICByZW1vdmUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5wcmV2KSBub2RlLnByZXYubmV4dCA9IG5vZGUubmV4dDtlbHNlIHRoaXMuX2hlYWQgPSBub2RlLm5leHQ7XG4gICAgICAgIGlmIChub2RlLm5leHQpIG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O2Vsc2UgdGhpcy5fdGFpbCA9IG5vZGUucHJldjtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIExpc3RTbGljZSB7XG4gICAgY29uc3RydWN0b3IoaGVhZCwgdGFpbCkge1xuICAgICAgICB0aGlzLl9oZWFkID0gaGVhZDtcbiAgICAgICAgdGhpcy5fdGFpbCA9IHRhaWw7XG4gICAgfVxuICAgIHN0YXRpYyB0b0xpc3Qoc2xpY2UpIHtcbiAgICAgICAgbGV0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xuICAgICAgICBzbGljZS5mb3JFYWNoTm9kZShuID0+IGxpc3QuYXBwZW5kKG4uY2xvbmUoKSkpO1xuICAgICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG4gICAgZm9yRWFjaE5vZGUoY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLl9oZWFkO1xuICAgICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICBub2RlID0gdGhpcy5uZXh0Tm9kZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb250YWlucyhuZWVkbGUpIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLl9oZWFkO1xuICAgICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG5vZGUgPT09IG5lZWRsZSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGVhZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWQ7XG4gICAgfVxuICAgIHRhaWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWlsO1xuICAgIH1cbiAgICB0b0FycmF5KCkge1xuICAgICAgICBsZXQgb3V0ID0gW107XG4gICAgICAgIHRoaXMuZm9yRWFjaE5vZGUobiA9PiBvdXQucHVzaChuKSk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIG5leHROb2RlKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IHRoaXMuX3RhaWwpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gbm9kZS5uZXh0O1xuICAgIH1cbiAgICBwcmV2Tm9kZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09PSB0aGlzLl9oZWFkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIG5vZGUucHJldjtcbiAgICB9XG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBFTVBUWV9TTElDRSA9IG5ldyBMaXN0U2xpY2UobnVsbCwgbnVsbCk7Il19