@libs-ui/services-grid-layout 0.2.357-20 → 0.2.357-21

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.
@@ -1,5 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { uuid } from '@libs-ui/utils';
3
+ import { resolveCollisionsAndInsert } from './defines/collision.define';
3
4
  import * as i0 from "@angular/core";
4
5
  /**
5
6
  * Thao tác trên cây khối: tìm, thêm, xoá, dồn khít, chặn lồng cấp quá sâu.
@@ -53,6 +54,24 @@ export class LibsUiGridLayoutTreeService {
53
54
  // Trả về khối vừa tạo để nơi dùng biết `id` thư viện vừa sinh.
54
55
  return node;
55
56
  }
57
+ /**
58
+ * Thêm khối vào vị trí (x, y) cụ thể và tự động đẩy các khối va chạm xuống dưới.
59
+ */
60
+ insertWithCollision(root, parentId, item, targetCol = 0, targetRow = 0) {
61
+ const targetParent = parentId ? this.findById(root, parentId) : root;
62
+ if (!targetParent) {
63
+ return undefined;
64
+ }
65
+ targetParent.children = targetParent.children ?? [];
66
+ const node = {
67
+ ...item,
68
+ id: item.id ?? uuid(),
69
+ x: targetCol,
70
+ y: targetRow,
71
+ };
72
+ resolveCollisionsAndInsert(targetParent.children, node);
73
+ return node;
74
+ }
56
75
  /** Xoá một khối khỏi cây. Không cho xoá gốc. */
57
76
  removeById(root, id) {
58
77
  if (root.id === id) {
@@ -177,4 +196,4 @@ export class LibsUiGridLayoutTreeService {
177
196
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiGridLayoutTreeService, decorators: [{
178
197
  type: Injectable
179
198
  }] });
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvdHJlZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUd0Qzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QyxRQUFRLENBQUMsSUFBdUIsRUFBRSxFQUFVO1FBQzFDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7WUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFdkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUF1QixFQUFFLEVBQVU7UUFDNUMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFekMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixPQUFPLEtBQUssQ0FBQztZQUNmLENB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QyxHQUFHLENBQUMsQ0FBQztZQUV0RCxJQUFJLFdBQVcsSUFBSSxjQUFjLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzlDLFVBQVUsSUFBSSxDQUFDLENBQUM7Z0JBRWhCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDeEMsVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDL0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsQ0FBQztnQkFFRCxTQUFTO1lBQ1gsQ0FBQztZQUVELFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNuRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUV2QixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQWtDO1FBQ3BELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7d0dBaE5VLDJCQUEyQjs0R0FBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRfZ3JpZExheW91dF9uZXdOb2RlLCBUX2dyaWRMYXlvdXRfbm9kZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoYW8gdMOhYyB0csOqbiBjw6J5IGto4buRaTogdMOsbSwgdGjDqm0sIHhvw6EsIGThu5NuIGtow610LCBjaOG6t24gbOG7k25nIGPhuqVwIHF1w6Egc8OidS5cbiAqXG4gKiDwn5S0IE7hu5hJIELhu5ggdGjGsCB2aeG7h24g4oCUIGtow7RuZyB4deG6pXQgcmEgbmdvw6BpLiBOxqFpIGTDuW5nIMSRaSBxdWEgYExpYnNVaUdyaWRMYXlvdXRTZXJ2aWNlYCwg4bufIMSRw7MgbeG7l2lcbiAqIHRoYW8gdMOhYyBz4butYSBi4buRIGPhu6VjIHbhu6thIHbhur0gbOG6oWkgduG7q2EgYuG6r24gYG91dENoYW5nZWAgxJHDum5nIE3hu5hUIGzhuqduLiBDw6FjIGjDoG0g4bufIMSRw6J5IGPhu5EgdMOsbmggS0jDlE5HIHThu7FcbiAqIHbhur0gbOG6oWk6IMSR4buDIGNow7puZyB04buxIGfhu41pIHRow6wgbeG7l2kgdGhhbyB0w6FjIHbhur0gaGFpIGzGsOG7o3QgdsOgIGLhuq9uIGhhaSBz4buxIGtp4buHbiAobmfGsOG7nWkgZMO5bmcgY2jhu5F0XG4gKiAyOC8wOC8yMDI2OiBcIsSR4bq3dCDEkcO6bmcgY8OhYyDEkWnhu4NtIG3DoCBsw6BtIGNobyBsYXlvdXQgY8OzIHRo4buDIHRoYXkgxJHhu5VpIHRow7RpXCIpLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlIHtcbiAgZmluZEJ5SWQobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKG5vZGUuaWQgPT09IGlkKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kQnlJZChjaGlsZCwgaWQpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmaW5kUGFyZW50KG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBpZDogc3RyaW5nKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgaWYgKGNoaWxkLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRQYXJlbnQoY2hpbGQsIGlkKTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRow6ptIGto4buRaSB2w6BvIGN14buRaSBt4buZdCBjb250YWluZXIuIFRoxrAgdmnhu4duIHThu7Egc2luaCBgaWRgIHbDoCB04buxIMSR4bq3dCBgeGAgwrcgYHlgIHh14buRbmcgaMOgbmcgdHLhu5FuZy5cbiAgICpcbiAgICogQHJldHVybnMga2jhu5FpIHbhu6thIHThuqFvIChrw6htIGBpZGAgduG7q2Egc2luaCksIGhv4bq3YyBgdW5kZWZpbmVkYCBraGkga2jDtG5nIHTDrG0gdGjhuqV5IGNvbnRhaW5lci5cbiAgICovXG4gIGFkZENoaWxkKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLCBwYXJlbnRJZDogc3RyaW5nLCBpdGVtOiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmZpbmRCeUlkKHJvb3QsIHBhcmVudElkKTtcblxuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHBhcmVudC5jaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbiA/PyBbXTtcbiAgICAvLyDwn5S0IFRoxrAgdmnhu4duIHThu7Egc2luaCBgaWRgLiDEkMOieSBsw6AgbcOjIG3DoXkgZMO5bmcgxJHhu4MgdHJhIGPhu6l1LCBraMO0bmcgcGjhuqNpIHRo4bupIG5nxrDhu51pIGTDuW5nIG5naMSpIHJhIOKAlFxuICAgIC8vIGLhuq90IGjhu40gdOG7sSDEkeG6t3QgbMOgIG3hu51pIGjhu40gdOG6oW8gdHLDuW5nLCBtw6AgdHLDuW5nIGlkIHRow6wgYGZpbmRCeUlkYCB0cuG6oyBuaOG6p20ga2jhu5FpIHbDoCBj4bqjIGPDonkgaOG7j25nXG4gICAgLy8gaW0gbOG6t25nIChuZ8aw4budaSBkw7luZyBjaOG7kXQgMjgvMDgvMjAyNikuXG4gICAgY29uc3Qgbm9kZTogVF9ncmlkTGF5b3V0X25vZGUgPSB7IC4uLml0ZW0sIGlkOiBpdGVtLmlkID8/IHV1aWQoKSwgeDogMCwgeTogdGhpcy5uZXh0RnJlZVJvdyhwYXJlbnQuY2hpbGRyZW4pIH07XG5cbiAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcblxuICAgIC8vIFRy4bqjIHbhu4Ega2jhu5FpIHbhu6thIHThuqFvIMSR4buDIG7GoWkgZMO5bmcgYmnhur90IGBpZGAgdGjGsCB2aeG7h24gduG7q2Egc2luaC5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8qKiBYb8OhIG3hu5l0IGto4buRaSBraOG7j2kgY8OieS4gS2jDtG5nIGNobyB4b8OhIGfhu5FjLiAqL1xuICByZW1vdmVCeUlkKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLCBpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHJvb3QuaWQgPT09IGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50KHJvb3QsIGlkKTtcblxuICAgIGlmICghcGFyZW50Py5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHBhcmVudC5jaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbi5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IGlkKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENodXnhu4NuIG3hu5l0IGto4buRaSDEkcahbiB0aMOgbmggQ09OVEFJTkVSOiBu4buZaSBkdW5nIGPFqSB0cuG7nyB0aMOgbmgga2jhu5FpIGNvbiDEkeG6p3UgdGnDqm4uXG4gICAqXG4gICAqIEtow7RuZyBt4bqldCBk4buvIGxp4buHdSDigJQgYGRhdGFgIGPhu6dhIGto4buRaSDEkcaw4bujYyBtYW5nIHRoZW8geHXhu5FuZyBraOG7kWkgY29uLlxuICAgKlxuICAgKiBAcmV0dXJucyBgZmFsc2VgIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkga2jhu5FpLCBob+G6t2Mga2jhu5FpIMSRw6MgbMOgIGNvbnRhaW5lciBy4buTaS5cbiAgICovXG4gIHRvQ29udGFpbmVyKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLCBpZDogc3RyaW5nLCBjb2xDb3VudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZEJ5SWQocm9vdCwgaWQpO1xuXG4gICAgaWYgKCFub2RlIHx8IChub2RlLmNoaWxkcmVuPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbm9kZS5jaGlsZHJlbiA9IFt7IC4uLm5vZGUsIGlkOiB1dWlkKCksIHg6IDAsIHk6IDAsIGNvbHM6IGNvbENvdW50LCByb3dzOiA0LCBjaGlsZHJlbjogW10gfV07XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaHV54buDbiBt4buZdCBDT05UQUlORVIgduG7gSBraOG7kWkgxJHGoW46IGPDoWMga2jhu5FpIGNvbiDEkcaw4bujYyBOw4JORyBsw6puIGPhuqVwIHRyw6puLCBraMO0bmcgYuG7iyB4b8OhLlxuICAgKlxuICAgKiBAcmV0dXJucyBgZmFsc2VgIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkga2jhu5FpLCBob+G6t2Mga2jhu5FpIHbhu5FuIGtow7RuZyBwaOG6o2kgY29udGFpbmVyLlxuICAgKi9cbiAgdG9TaW5nbGUocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kQnlJZChyb290LCBpZCk7XG5cbiAgICBpZiAoIW5vZGUgfHwgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudChyb290LCBpZCk7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgIHBhcmVudD8uY2hpbGRyZW4/LnB1c2goeyAuLi5jaGlsZCwgY29sczogbm9kZS5jb2xzLCByb3dzOiAyIH0pO1xuICAgIH1cblxuICAgIG5vZGUuY2hpbGRyZW4gPSBbXTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEzDoG0gcGjhurNuZyBt4buNaSBjb250YWluZXIgbOG7k25nIHbGsOG7o3QgdHLhuqduLlxuICAgKlxuICAgKiDwn5S0IEPhuqduIHRoaeG6v3QgdsOsIGLhu5EgY+G7pWMgxJDDgyBMxq9VIGtow7RuZyDEkWkgcXVhIGx14bqtdCBjaOG6t24gbsOgbyBj4bunYSBnaWFvIGRp4buHbi4gTeG7mXQgYuG6o24gbMawdSBjxakg4oCUIHNpbmhcbiAgICogdHLGsOG7m2Mga2hpIGPDsyB0cuG6p24sIGhv4bq3YyBkbyB0aGFvIHTDoWMgbOG7l2kg4oCUIHbhuqtuIG7huqFwIHRo4bqzbmcgdsOgbyB2w6AgaGnhu4duIGNvbnRhaW5lciBs4buTbmcgY29udGFpbmVyLlxuICAgKiBDb250YWluZXIgdsaw4bujdCB0cuG6p24gYuG7iyBo4bqhIHRow6BuaCBraOG7kWkgdGjGsOG7nW5nLCBjb24gY+G7p2EgbsOzIG7Dom5nIGzDqm4gY+G6pXAgdHLDqm46IEtIw5RORyBt4bqldCBk4buvIGxp4buHdS5cbiAgICpcbiAgICogQHJldHVybnMgc+G7kSBjb250YWluZXIgxJHDoyBsw6BtIHBo4bqzbmdcbiAgICovXG4gIGZsYXR0ZW5PdmVyRGVwdGhDb250YWluZXJzKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBtYXhEZXB0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy53YWxrRmxhdHRlbihub2RlLCAwLCBtYXhEZXB0aCk7XG4gIH1cblxuICAvKipcbiAgICogROG7k24ga2jhu5FpIGtow610IGzDqm4gdHLDqm4gdGhlbyB0aOG7qSB04buxIMSR4buNYywgbOG6pXAgaOG6v3QgY2jhu5cgdHLhu5FuZy5cbiAgICpcbiAgICog8J+UtCBLSMOUTkcgc+G7rWEgYG5vZGUucm93c2AgY+G7p2EgY29udGFpbmVyLiBDaGnhu4F1IGNhbyBjb250YWluZXIgdMOtbmggdGhlbyDEkcahbiB24buLIGjDoG5nIGPhu6dhIGzGsOG7m2kgQ0hBLFxuICAgKiBjw7JuIGBjdXJyZW50Um93YCDEkeG6v20gdGhlbyDEkcahbiB24buLIGjDoG5nIGPhu6dhIGzGsOG7m2kgQ09OIOKAlCB0cuG7mW4gaGFpIHRoYW5nIMSRbyBsw6AgY29udGFpbmVyIHBow6xuaCBsw6puXG4gICAqIGfhuqVwIG3huqV5IGzhuqduLlxuICAgKi9cbiAgY29tcGFjdChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgY29sQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMud2Fsa0NvbXBhY3Qobm9kZSwgY29sQ291bnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWxrQ29tcGFjdChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgY29sQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcblxuICAgIGlmICghY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluUmVhZGluZ09yZGVyID0gWy4uLmNoaWxkcmVuXS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkgfHwgYS54IC0gYi54KTtcbiAgICBsZXQgY3VycmVudFJvdyA9IDA7XG4gICAgbGV0IHVzZWRDb2xzID0gMDtcbiAgICBsZXQgdGFsbGVzdEluUm93ID0gMDtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpblJlYWRpbmdPcmRlcikge1xuICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbihpdGVtLmNvbHMsIGNvbENvdW50KTtcblxuICAgICAgaWYgKHVzZWRDb2xzID4gMCAmJiB1c2VkQ29scyArIHdpZHRoID4gY29sQ291bnQpIHtcbiAgICAgICAgY3VycmVudFJvdyArPSB0YWxsZXN0SW5Sb3c7XG4gICAgICAgIHVzZWRDb2xzID0gMDtcbiAgICAgICAgdGFsbGVzdEluUm93ID0gMDtcbiAgICAgIH1cblxuICAgICAgaXRlbS54ID0gdXNlZENvbHM7XG4gICAgICBpdGVtLnkgPSBjdXJyZW50Um93O1xuICAgICAgaXRlbS5jb2xzID0gd2lkdGg7XG4gICAgICB1c2VkQ29scyArPSB3aWR0aDtcbiAgICAgIHRhbGxlc3RJblJvdyA9IE1hdGgubWF4KHRhbGxlc3RJblJvdywgaXRlbS5yb3dzKTtcblxuICAgICAgaWYgKChpdGVtLmNoaWxkcmVuPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICAgIHRoaXMud2Fsa0NvbXBhY3QoaXRlbSwgY29sQ291bnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd2Fsa0ZsYXR0ZW4obm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGNvbnRhaW5lckRlcHRoOiBudW1iZXIsIG1heERlcHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcblxuICAgIGlmICghY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgbGV0IGZpeGVkQ291bnQgPSAwO1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8VF9ncmlkTGF5b3V0X25vZGU+ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBpc0NvbnRhaW5lciA9IChjaGlsZC5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMDtcblxuICAgICAgaWYgKGlzQ29udGFpbmVyICYmIGNvbnRhaW5lckRlcHRoID49IG1heERlcHRoKSB7XG4gICAgICAgIGZpeGVkQ291bnQgKz0gMTtcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgICAgICBmaXhlZENvdW50ICs9IHRoaXMud2Fsa0ZsYXR0ZW4oaXRlbSwgY29udGFpbmVyRGVwdGgsIG1heERlcHRoKTtcbiAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmaXhlZENvdW50ICs9IHRoaXMud2Fsa0ZsYXR0ZW4oY2hpbGQsIGlzQ29udGFpbmVyID8gY29udGFpbmVyRGVwdGggKyAxIDogY29udGFpbmVyRGVwdGgsIG1heERlcHRoKTtcbiAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKTtcbiAgICB9XG5cbiAgICBub2RlLmNoaWxkcmVuID0gcmVzdWx0O1xuXG4gICAgcmV0dXJuIGZpeGVkQ291bnQ7XG4gIH1cblxuICBwcml2YXRlIG5leHRGcmVlUm93KGNoaWxkcmVuOiBBcnJheTxUX2dyaWRMYXlvdXRfbm9kZT4pOiBudW1iZXIge1xuICAgIHJldHVybiBjaGlsZHJlbi5yZWR1Y2UoKG1heCwgY2hpbGQpID0+IE1hdGgubWF4KG1heCwgY2hpbGQueSArIGNoaWxkLnJvd3MpLCAwKTtcbiAgfVxufVxuIl19
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvdHJlZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUV4RTs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QyxRQUFRLENBQUMsSUFBdUIsRUFBRSxFQUFVO1FBQzFDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7WUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFdkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUF1QixFQUFFLEVBQVU7UUFDNUMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFekMsSUFB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QUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNuRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUV2QixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQWtDO1FBQ3BELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7d0dBN09VLDJCQUEyQjs0R0FBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRfZ3JpZExheW91dF9uZXdOb2RlLCBUX2dyaWRMYXlvdXRfbm9kZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcmVzb2x2ZUNvbGxpc2lvbnNBbmRJbnNlcnQgfSBmcm9tICcuL2RlZmluZXMvY29sbGlzaW9uLmRlZmluZSc7XG5cbi8qKlxuICogVGhhbyB0w6FjIHRyw6puIGPDonkga2jhu5FpOiB0w6xtLCB0aMOqbSwgeG/DoSwgZOG7k24ga2jDrXQsIGNo4bq3biBs4buTbmcgY+G6pXAgcXXDoSBzw6J1LlxuICpcbiAqIPCflLQgTuG7mEkgQuG7mCB0aMawIHZp4buHbiDigJQga2jDtG5nIHh14bqldCByYSBuZ2/DoGkuIE7GoWkgZMO5bmcgxJFpIHF1YSBgTGlic1VpR3JpZExheW91dFNlcnZpY2VgLCDhu58gxJHDsyBt4buXaVxuICogdGhhbyB0w6FjIHPhu61hIGLhu5EgY+G7pWMgduG7q2EgduG6vSBs4bqhaSB24burYSBi4bqvbiBgb3V0Q2hhbmdlYCDEkcO6bmcgTeG7mFQgbOG6p24uIEPDoWMgaMOgbSDhu58gxJHDonkgY+G7kSB0w6xuaCBLSMOUTkcgdOG7sVxuICogduG6vSBs4bqhaTogxJHhu4MgY2jDum5nIHThu7EgZ+G7jWkgdGjDrCBt4buXaSB0aGFvIHTDoWMgduG6vSBoYWkgbMaw4bujdCB2w6AgYuG6r24gaGFpIHPhu7Ega2nhu4duIChuZ8aw4budaSBkw7luZyBjaOG7kXRcbiAqIDI4LzA4LzIwMjY6IFwixJHhurd0IMSRw7puZyBjw6FjIMSRaeG7g20gbcOgIGzDoG0gY2hvIGxheW91dCBjw7MgdGjhu4MgdGhheSDEkeG7lWkgdGjDtGlcIikuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMaWJzVWlHcmlkTGF5b3V0VHJlZVNlcnZpY2Uge1xuICBmaW5kQnlJZChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgaWQ6IHN0cmluZyk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobm9kZS5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRCeUlkKGNoaWxkLCBpZCk7XG5cbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZpbmRQYXJlbnQobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuID8/IFtdKSB7XG4gICAgICBpZiAoY2hpbGQuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFBhcmVudChjaGlsZCwgaWQpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGjDqm0ga2jhu5FpIHbDoG8gY3Xhu5FpIG3hu5l0IGNvbnRhaW5lci4gVGjGsCB2aeG7h24gdOG7sSBzaW5oIGBpZGAgdsOgIHThu7EgxJHhurd0IGB4YCDCtyBgeWAgeHXhu5FuZyBow6BuZyB0cuG7kW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyBraOG7kWkgduG7q2EgdOG6oW8gKGvDqG0gYGlkYCB24burYSBzaW5oKSwgaG/hurdjIGB1bmRlZmluZWRgIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkgY29udGFpbmVyLlxuICAgKi9cbiAgYWRkQ2hpbGQocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIHBhcmVudElkOiBzdHJpbmcsIGl0ZW06IFRfZ3JpZExheW91dF9uZXdOb2RlKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZEJ5SWQocm9vdCwgcGFyZW50SWQpO1xuXG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcGFyZW50LmNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuID8/IFtdO1xuICAgIC8vIPCflLQgVGjGsCB2aeG7h24gdOG7sSBzaW5oIGBpZGAuIMSQw6J5IGzDoCBtw6MgbcOheSBkw7luZyDEkeG7gyB0cmEgY+G7qXUsIGtow7RuZyBwaOG6o2kgdGjhu6kgbmfGsOG7nWkgZMO5bmcgbmdoxKkgcmEg4oCUXG4gICAgLy8gYuG6r3QgaOG7jSB04buxIMSR4bq3dCBsw6AgbeG7nWkgaOG7jSB04bqhbyB0csO5bmcsIG3DoCB0csO5bmcgaWQgdGjDrCBgZmluZEJ5SWRgIHRy4bqjIG5o4bqnbSBraOG7kWkgdsOgIGPhuqMgY8OieSBo4buPbmdcbiAgICAvLyBpbSBs4bq3bmcgKG5nxrDhu51pIGTDuW5nIGNo4buRdCAyOC8wOC8yMDI2KS5cbiAgICBjb25zdCBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSA9IHsgLi4uaXRlbSwgaWQ6IGl0ZW0uaWQgPz8gdXVpZCgpLCB4OiAwLCB5OiB0aGlzLm5leHRGcmVlUm93KHBhcmVudC5jaGlsZHJlbikgfTtcblxuICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuXG4gICAgLy8gVHLhuqMgduG7gSBraOG7kWkgduG7q2EgdOG6oW8gxJHhu4MgbsahaSBkw7luZyBiaeG6v3QgYGlkYCB0aMawIHZp4buHbiB24burYSBzaW5oLlxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRow6ptIGto4buRaSB2w6BvIHbhu4sgdHLDrSAoeCwgeSkgY+G7pSB0aOG7gyB2w6AgdOG7sSDEkeG7mW5nIMSR4bqpeSBjw6FjIGto4buRaSB2YSBjaOG6oW0geHXhu5FuZyBkxrDhu5tpLlxuICAgKi9cbiAgaW5zZXJ0V2l0aENvbGxpc2lvbihcbiAgICByb290OiBUX2dyaWRMYXlvdXRfbm9kZSxcbiAgICBwYXJlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGl0ZW06IFRfZ3JpZExheW91dF9uZXdOb2RlLFxuICAgIHRhcmdldENvbCA9IDAsXG4gICAgdGFyZ2V0Um93ID0gMCxcbiAgKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHBhcmVudElkID8gdGhpcy5maW5kQnlJZChyb290LCBwYXJlbnRJZCkgOiByb290O1xuXG4gICAgaWYgKCF0YXJnZXRQYXJlbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGFyZ2V0UGFyZW50LmNoaWxkcmVuID0gdGFyZ2V0UGFyZW50LmNoaWxkcmVuID8/IFtdO1xuICAgIGNvbnN0IG5vZGU6IFRfZ3JpZExheW91dF9ub2RlID0ge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGlkOiBpdGVtLmlkID8/IHV1aWQoKSxcbiAgICAgIHg6IHRhcmdldENvbCxcbiAgICAgIHk6IHRhcmdldFJvdyxcbiAgICB9O1xuXG4gICAgcmVzb2x2ZUNvbGxpc2lvbnNBbmRJbnNlcnQodGFyZ2V0UGFyZW50LmNoaWxkcmVuLCBub2RlKTtcblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLyoqIFhvw6EgbeG7mXQga2jhu5FpIGto4buPaSBjw6J5LiBLaMO0bmcgY2hvIHhvw6EgZ+G7kWMuICovXG4gIHJlbW92ZUJ5SWQocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAocm9vdC5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQocm9vdCwgaWQpO1xuXG4gICAgaWYgKCFwYXJlbnQ/LmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcGFyZW50LmNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCAhPT0gaWQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2h1eeG7g24gbeG7mXQga2jhu5FpIMSRxqFuIHRow6BuaCBDT05UQUlORVI6IG7hu5lpIGR1bmcgY8WpIHRy4bufIHRow6BuaCBraOG7kWkgY29uIMSR4bqndSB0acOqbi5cbiAgICpcbiAgICogS2jDtG5nIG3huqV0IGThu68gbGnhu4d1IOKAlCBgZGF0YWAgY+G7p2Ega2jhu5FpIMSRxrDhu6NjIG1hbmcgdGhlbyB4deG7kW5nIGto4buRaSBjb24uXG4gICAqXG4gICAqIEByZXR1cm5zIGBmYWxzZWAga2hpIGtow7RuZyB0w6xtIHRo4bqleSBraOG7kWksIGhv4bq3YyBraOG7kWkgxJHDoyBsw6AgY29udGFpbmVyIHLhu5NpLlxuICAgKi9cbiAgdG9Db250YWluZXIocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcsIGNvbENvdW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kQnlJZChyb290LCBpZCk7XG5cbiAgICBpZiAoIW5vZGUgfHwgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBub2RlLmNoaWxkcmVuID0gW3sgLi4ubm9kZSwgaWQ6IHV1aWQoKSwgeDogMCwgeTogMCwgY29sczogY29sQ291bnQsIHJvd3M6IDQsIGNoaWxkcmVuOiBbXSB9XTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENodXnhu4NuIG3hu5l0IENPTlRBSU5FUiB24buBIGto4buRaSDEkcahbjogY8OhYyBraOG7kWkgY29uIMSRxrDhu6NjIE7Dgk5HIGzDqm4gY+G6pXAgdHLDqm4sIGtow7RuZyBi4buLIHhvw6EuXG4gICAqXG4gICAqIEByZXR1cm5zIGBmYWxzZWAga2hpIGtow7RuZyB0w6xtIHRo4bqleSBraOG7kWksIGhv4bq3YyBraOG7kWkgduG7kW4ga2jDtG5nIHBo4bqjaSBjb250YWluZXIuXG4gICAqL1xuICB0b1NpbmdsZShyb290OiBUX2dyaWRMYXlvdXRfbm9kZSwgaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmRCeUlkKHJvb3QsIGlkKTtcblxuICAgIGlmICghbm9kZSB8fCAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50KHJvb3QsIGlkKTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgcGFyZW50Py5jaGlsZHJlbj8ucHVzaCh7IC4uLmNoaWxkLCBjb2xzOiBub2RlLmNvbHMsIHJvd3M6IDIgfSk7XG4gICAgfVxuXG4gICAgbm9kZS5jaGlsZHJlbiA9IFtdO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogTMOgbSBwaOG6s25nIG3hu41pIGNvbnRhaW5lciBs4buTbmcgdsaw4bujdCB0cuG6p24uXG4gICAqXG4gICAqIPCflLQgQ+G6p24gdGhp4bq/dCB2w6wgYuG7kSBj4bulYyDEkMODIEzGr1Uga2jDtG5nIMSRaSBxdWEgbHXhuq10IGNo4bq3biBuw6BvIGPhu6dhIGdpYW8gZGnhu4duLiBN4buZdCBi4bqjbiBsxrB1IGPFqSDigJQgc2luaFxuICAgKiB0csaw4bubYyBraGkgY8OzIHRy4bqnbiwgaG/hurdjIGRvIHRoYW8gdMOhYyBs4buXaSDigJQgduG6q24gbuG6oXAgdGjhurNuZyB2w6BvIHbDoCBoaeG7h24gY29udGFpbmVyIGzhu5NuZyBjb250YWluZXIuXG4gICAqIENvbnRhaW5lciB2xrDhu6N0IHRy4bqnbiBi4buLIGjhuqEgdGjDoG5oIGto4buRaSB0aMaw4budbmcsIGNvbiBj4bunYSBuw7MgbsOibmcgbMOqbiBj4bqlcCB0csOqbjogS0jDlE5HIG3huqV0IGThu68gbGnhu4d1LlxuICAgKlxuICAgKiBAcmV0dXJucyBz4buRIGNvbnRhaW5lciDEkcOjIGzDoG0gcGjhurNuZ1xuICAgKi9cbiAgZmxhdHRlbk92ZXJEZXB0aENvbnRhaW5lcnMobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIG1heERlcHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLndhbGtGbGF0dGVuKG5vZGUsIDAsIG1heERlcHRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBE4buTbiBraOG7kWkga2jDrXQgbMOqbiB0csOqbiB0aGVvIHRo4bupIHThu7EgxJHhu41jLCBs4bqlcCBo4bq/dCBjaOG7lyB0cuG7kW5nLlxuICAgKlxuICAgKiDwn5S0IEtIw5RORyBz4butYSBgbm9kZS5yb3dzYCBj4bunYSBjb250YWluZXIuIENoaeG7gXUgY2FvIGNvbnRhaW5lciB0w61uaCB0aGVvIMSRxqFuIHbhu4sgaMOgbmcgY+G7p2EgbMaw4bubaSBDSEEsXG4gICAqIGPDsm4gYGN1cnJlbnRSb3dgIMSR4bq/bSB0aGVvIMSRxqFuIHbhu4sgaMOgbmcgY+G7p2EgbMaw4bubaSBDT04g4oCUIHRy4buZbiBoYWkgdGhhbmcgxJFvIGzDoCBjb250YWluZXIgcGjDrG5oIGzDqm5cbiAgICogZ+G6pXAgbeG6pXkgbOG6p24uXG4gICAqL1xuICBjb21wYWN0KG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBjb2xDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy53YWxrQ29tcGFjdChub2RlLCBjb2xDb3VudCk7XG4gIH1cblxuICBwcml2YXRlIHdhbGtDb21wYWN0KG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBjb2xDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuXG4gICAgaWYgKCFjaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5SZWFkaW5nT3JkZXIgPSBbLi4uY2hpbGRyZW5dLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSB8fCBhLnggLSBiLngpO1xuICAgIGxldCBjdXJyZW50Um93ID0gMDtcbiAgICBsZXQgdXNlZENvbHMgPSAwO1xuICAgIGxldCB0YWxsZXN0SW5Sb3cgPSAwO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGluUmVhZGluZ09yZGVyKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWluKGl0ZW0uY29scywgY29sQ291bnQpO1xuXG4gICAgICBpZiAodXNlZENvbHMgPiAwICYmIHVzZWRDb2xzICsgd2lkdGggPiBjb2xDb3VudCkge1xuICAgICAgICBjdXJyZW50Um93ICs9IHRhbGxlc3RJblJvdztcbiAgICAgICAgdXNlZENvbHMgPSAwO1xuICAgICAgICB0YWxsZXN0SW5Sb3cgPSAwO1xuICAgICAgfVxuXG4gICAgICBpdGVtLnggPSB1c2VkQ29scztcbiAgICAgIGl0ZW0ueSA9IGN1cnJlbnRSb3c7XG4gICAgICBpdGVtLmNvbHMgPSB3aWR0aDtcbiAgICAgIHVzZWRDb2xzICs9IHdpZHRoO1xuICAgICAgdGFsbGVzdEluUm93ID0gTWF0aC5tYXgodGFsbGVzdEluUm93LCBpdGVtLnJvd3MpO1xuXG4gICAgICBpZiAoKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgICAgdGhpcy53YWxrQ29tcGFjdChpdGVtLCBjb2xDb3VudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3YWxrRmxhdHRlbihub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgY29udGFpbmVyRGVwdGg6IG51bWJlciwgbWF4RGVwdGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuXG4gICAgaWYgKCFjaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBsZXQgZml4ZWRDb3VudCA9IDA7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxUX2dyaWRMYXlvdXRfbm9kZT4gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IGlzQ29udGFpbmVyID0gKGNoaWxkLmNoaWxkcmVuPy5sZW5ndGggPz8gMCkgPiAwO1xuXG4gICAgICBpZiAoaXNDb250YWluZXIgJiYgY29udGFpbmVyRGVwdGggPj0gbWF4RGVwdGgpIHtcbiAgICAgICAgZml4ZWRDb3VudCArPSAxO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGlsZC5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgICAgIGZpeGVkQ291bnQgKz0gdGhpcy53YWxrRmxhdHRlbihpdGVtLCBjb250YWluZXJEZXB0aCwgbWF4RGVwdGgpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZpeGVkQ291bnQgKz0gdGhpcy53YWxrRmxhdHRlbihjaGlsZCwgaXNDb250YWluZXIgPyBjb250YWluZXJEZXB0aCArIDEgOiBjb250YWluZXJEZXB0aCwgbWF4RGVwdGgpO1xuICAgICAgcmVzdWx0LnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIG5vZGUuY2hpbGRyZW4gPSByZXN1bHQ7XG5cbiAgICByZXR1cm4gZml4ZWRDb3VudDtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dEZyZWVSb3coY2hpbGRyZW46IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPik6IG51bWJlciB7XG4gICAgcmV0dXJuIGNoaWxkcmVuLnJlZHVjZSgobWF4LCBjaGlsZCkgPT4gTWF0aC5tYXgobWF4LCBjaGlsZC55ICsgY2hpbGQucm93cyksIDApO1xuICB9XG59XG4iXX0=