@ardium-ui/ui 2.0.5 → 2.0.6
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/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +2 -2
- package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +2 -2
- package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +2 -2
- package/esm2022/lib/table/table-item-storage.mjs +2 -2
- package/fesm2022/ardium-ui-ui.mjs +1 -1
- package/fesm2022/ardium-ui-ui.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { computed, signal } from '@angular/core';
|
|
2
|
-
import resolvePath from 'resolve-object-path';
|
|
2
|
+
import { resolvePath } from 'resolve-object-path';
|
|
3
3
|
import { evaluate, isDefined, isNull } from 'simple-bool';
|
|
4
4
|
import { SortType, TablePaginationStrategy } from './table.types';
|
|
5
5
|
import { areAllDataColumns, isTableSubheader, merge2dArrays } from './utils';
|
|
@@ -561,4 +561,4 @@ export class TableItemStorage {
|
|
|
561
561
|
this._sortedItems.set([...this.items()].sort((a, b) => sortFn(a.data()[sortColumnIndex], b.data()[sortColumnIndex])));
|
|
562
562
|
}
|
|
563
563
|
}
|
|
564
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaXRlbS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS1pdGVtLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxXQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQW1CLHVCQUF1QixFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTdFLE1BQU0sT0FBTyxXQUFXO0lBd0J0QixZQUNFLFFBQWEsRUFDYixLQUFhLEVBQ2IsSUFBVyxFQUNYLFdBQThCLEVBQzlCLFFBQWlCLEVBQ2pCLElBQWEsRUFDYixPQUFPLEdBQUcsS0FBSztRQTlCQSxjQUFTLEdBQUcsTUFBTSxDQUFNLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLGFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRS9CLFdBQU0sR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV6QixhQUFRLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzFDLFlBQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTdCLFVBQUssR0FBRyxNQUFNLENBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEMsU0FBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxF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QUM7b0JBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEgsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmFsLCBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCByZXNvbHZlUGF0aCBmcm9tICdyZXNvbHZlLW9iamVjdC1wYXRoJztcclxuaW1wb3J0IHsgZXZhbHVhdGUsIGlzRGVmaW5lZCwgaXNOdWxsIH0gZnJvbSAnc2ltcGxlLWJvb2wnO1xyXG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJy4uL3R5cGVzL3V0aWxpdHkudHlwZXMnO1xyXG5pbXBvcnQgeyBTb3J0VHlwZSwgVGFibGVEYXRhQ29sdW1uLCBUYWJsZVBhZ2luYXRpb25TdHJhdGVneSwgVGFibGVTdWJoZWFkZXIgfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcclxuaW1wb3J0IHsgYXJlQWxsRGF0YUNvbHVtbnMsIGlzVGFibGVTdWJoZWFkZXIsIG1lcmdlMmRBcnJheXMgfSBmcm9tICcuL3V0aWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcmRUYWJsZVJvdyB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaXRlbURhdGEgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5IGl0ZW1EYXRhID0gdGhpcy5faXRlbURhdGEuYXNSZWFkb25seSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9pbmRleCA9IHNpZ25hbDxudW1iZXI+KC0xKTtcclxuICByZWFkb25seSBpbmRleCA9IHRoaXMuX2luZGV4LmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNFbXB0eSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgaXNFbXB0eSA9IHRoaXMuX2lzRW1wdHkuYXNSZWFkb25seSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhID0gc2lnbmFsPGFueVtdPihbXSk7XHJcbiAgcmVhZG9ubHkgZGF0YSA9IHRoaXMuX2RhdGEuYXNSZWFkb25seSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhQ29sdW1ucyA9IHNpZ25hbDxUYWJsZURhdGFDb2x1bW5bXT4oW10pO1xyXG4gIHJlYWRvbmx5IGRhdGFDb2x1bW5zID0gdGhpcy5fZGF0YUNvbHVtbnMuYXNSZWFkb25seSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9jbGFzcyA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuICByZWFkb25seSBjbGFzcyA9IHRoaXMuX2NsYXNzLmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGJvbGQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5IHNlbGVjdGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSBoaWdobGlnaHRlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaXRlbURhdGE6IGFueSxcclxuICAgIGluZGV4OiBudW1iZXIsXHJcbiAgICBkYXRhOiBhbnlbXSxcclxuICAgIGRhdGFDb2x1bW5zOiBUYWJsZURhdGFDb2x1bW5bXSxcclxuICAgIGRpc2FibGVkOiBib29sZWFuLFxyXG4gICAgYm9sZDogYm9vbGVhbixcclxuICAgIGlzRW1wdHkgPSBmYWxzZVxyXG4gICkge1xyXG4gICAgdGhpcy5faXRlbURhdGEuc2V0KGl0ZW1EYXRhKTtcclxuICAgIHRoaXMuX2luZGV4LnNldChpbmRleCk7XHJcbiAgICB0aGlzLl9kYXRhLnNldChkYXRhKTtcclxuICAgIHRoaXMuX2RhdGFDb2x1bW5zLnNldChkYXRhQ29sdW1ucyk7XHJcbiAgICB0aGlzLmRpc2FibGVkLnNldChkaXNhYmxlZCk7XHJcbiAgICB0aGlzLmJvbGQuc2V0KGJvbGQpO1xyXG4gICAgdGhpcy5faXNFbXB0eS5zZXQoaXNFbXB0eSk7XHJcbiAgfVxyXG4gIHN0YXRpYyBuZXdFbXB0eUNlbGwoaW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIG5ldyBBcmRUYWJsZVJvdyhudWxsLCBpbmRleCwgW10sIFtdLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlSXRlbVN0b3JhZ2VIb3N0RGVmYXVsdHMge1xyXG4gIHJlYWRvbmx5IHJvd0Rpc2FibGVkRnJvbTogc3RyaW5nO1xyXG4gIHJlYWRvbmx5IHJvd0JvbGRGcm9tOiBzdHJpbmc7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUl0ZW1TdG9yYWdlSG9zdCB7XHJcbiAgcmVhZG9ubHkgcm93RGlzYWJsZWRGcm9tOiBTaWduYWw8TnVsbGFibGU8c3RyaW5nPj47XHJcbiAgcmVhZG9ubHkgcm93Qm9sZEZyb206IFNpZ25hbDxOdWxsYWJsZTxzdHJpbmc+PjtcclxuICByZWFkb25seSBpbnZlcnRSb3dEaXNhYmxlZDogU2lnbmFsPE51bGxhYmxlPGJvb2xlYW4+PjtcclxuICByZWFkb25seSBpbnZlcnRSb3dCb2xkOiBTaWduYWw8TnVsbGFibGU8Ym9vbGVhbj4+O1xyXG4gIHJlYWRvbmx5IGRhdGE6IFNpZ25hbDxOdWxsYWJsZTxhbnk+PltdO1xyXG4gIHJlYWRvbmx5IERFRkFVTFRTOiBUYWJsZUl0ZW1TdG9yYWdlSG9zdERlZmF1bHRzO1xyXG4gIHJlYWRvbmx5IG1heFNlbGVjdGVkSXRlbXM6IFNpZ25hbDxOdWxsYWJsZTxudW1iZXI+PjtcclxuICByZWFkb25seSB0cmVhdERhdGFTb3VyY2VBc1N0cmluZzogU2lnbmFsPE51bGxhYmxlPGJvb2xlYW4+PjtcclxuXHJcbiAgcmVhZG9ubHkgcGFnaW5hdGVkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgcmVhZG9ubHkgcGFnaW5hdGlvblN0cmF0ZWd5OiBTaWduYWw8VGFibGVQYWdpbmF0aW9uU3RyYXRlZ3k+O1xyXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZTogU2lnbmFsPG51bWJlcj47XHJcbiAgcmVhZG9ubHkgcGFnZTogU2lnbmFsPG51bWJlcj47XHJcbn1cclxuZXhwb3J0IGNsYXNzIEhlYWRlckNlbGwge1xyXG4gIHJlYWRvbmx5IGNlbGwgPSBzaWduYWw8VGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXI+KHVuZGVmaW5lZCBhcyBhbnkpO1xyXG4gIHJlYWRvbmx5IGNvbHNwYW4gPSBzaWduYWw8bnVtYmVyPigxKTtcclxuICByZWFkb25seSByb3dzcGFuID0gc2lnbmFsPG51bWJlcj4oMSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyLCBjb2xzcGFuID0gMSwgcm93c3BhbiA9IDEpIHtcclxuICAgIHRoaXMuY2VsbC5zZXQoY2VsbCk7XHJcbiAgICB0aGlzLmNvbHNwYW4uc2V0KGNvbHNwYW4pO1xyXG4gICAgdGhpcy5yb3dzcGFuLnNldChyb3dzcGFuKTtcclxuICB9XHJcblxyXG4gIGdldCB3aWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IGNlbGwgPSB0aGlzLmNlbGwoKTtcclxuICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKGNlbGwpKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLl9nZXRXaWR0aChjZWxsLndpZHRoKTtcclxuICB9XHJcbiAgZ2V0IG1pbldpZHRoKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgY2VsbCA9IHRoaXMuY2VsbCgpO1xyXG4gICAgaWYgKGlzVGFibGVTdWJoZWFkZXIoY2VsbCkpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldFdpZHRoKGNlbGwubWluV2lkdGgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBUaHJhbnNmb3JtcyBhIG51bWVyaWMgd2lkdGggaW50byBhIENTUyBzdHJpbmcgaWYgbmVlZGVkLiBQdXJlIGZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSB3aWR0aCB0aGUgd2lkdGggdG8gYmUgY29udmVydGVkLlxyXG4gICAqIEByZXR1cm5zIFRoZSB3aWR0aCBleHByZXNzZWQgYXMgYSBDU1MtY29tcGF0aWJsZSBzdHJpbmcgb3IgbnVsbC5cclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRXaWR0aCh3aWR0aDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoIXdpZHRoKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInKSByZXR1cm4gYCR7d2lkdGh9cHhgO1xyXG4gICAgcmV0dXJuIHdpZHRoO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRhYmxlSXRlbVN0b3JhZ2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zID0gc2lnbmFsPEFyZFRhYmxlUm93W10+KFtdKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9zb3J0ZWRJdGVtcyA9IHNpZ25hbDxBcmRUYWJsZVJvd1tdPihbXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFDb2x1bW5zID0gc2lnbmFsPFRhYmxlRGF0YUNvbHVtbltdPihbXSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVhZGVyQ2VsbHMgPSBzaWduYWw8SGVhZGVyQ2VsbFtdW10+KFtdKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfYXJkUGFyZW50Q29tcDogVGFibGVJdGVtU3RvcmFnZUhvc3QpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYWxsIGl0ZW1zLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGl0ZW1zID0gdGhpcy5faXRlbXMuYXNSZWFkb25seSgpO1xyXG4gIHJlYWRvbmx5IHNvcnRlZEl0ZW1zID0gdGhpcy5fc29ydGVkSXRlbXMuYXNSZWFkb25seSgpO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgaXRlbXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBzdGF0ZS5cclxuICAgKi9cclxuICByZWFkb25seSBwYWdpbmF0ZWRJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdpbmF0ZWQoKSB8fCB0aGlzLl9hcmRQYXJlbnRDb21wLnBhZ2luYXRpb25TdHJhdGVneSgpID09PSBUYWJsZVBhZ2luYXRpb25TdHJhdGVneS5Ob29wKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnRlZEl0ZW1zKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYWdlID0gdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdlKCk7XHJcbiAgICBjb25zdCBJUFAgPSB0aGlzLl9hcmRQYXJlbnRDb21wLml0ZW1zUGVyUGFnZSgpO1xyXG4gICAgY29uc3QgaXRlbXNTdGFydCA9IChwYWdlIC0gMSkgKiBJUFA7XHJcbiAgICBjb25zdCBpdGVtc0VuZCA9IHBhZ2UgKiBJUFA7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWRJdGVtcygpLnNsaWNlKGl0ZW1zU3RhcnQsIGl0ZW1zRW5kKTtcclxuICB9KTtcclxuICAvKipcclxuICAgKiBHZXRzIGFsbCBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtcyA9IGNvbXB1dGVkPEFyZFRhYmxlUm93W10+KCgpID0+IHRoaXMuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKCkpKTtcclxuICAvKipcclxuICAgKiBHZXRzIGFsbCBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRJdGVtcyA9IGNvbXB1dGVkPEFyZFRhYmxlUm93W10+KCgpID0+IHRoaXMuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLmhpZ2hsaWdodGVkKCkpKTtcclxuICAvKipcclxuICAgKiBHZXRzIGFsbCBoaWdobGlnaHRhYmxlIGl0ZW1zLiBBbiBpdGVtIGlzIGNvbnNpZGVyZWQgaGlnaGxpZ2h0YWJsZSBpZiBpdCBpcyAqKm5vdCoqIGRpc2FibGVkLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGhpZ2hsaWdodGFibGVJdGVtcyA9IGNvbXB1dGVkPEFyZFRhYmxlUm93W10+KCgpID0+IHRoaXMuX2l0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQoKSkpO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcygpKSk7XHJcbiAgLyoqXHJcbiAgICogTWFwcyBhbiBhcnJheSBvZiBpdGVtcyBpbnRvIHRoZWlyIHZhbHVlcy5cclxuICAgKiBAcGFyYW0gaXRlbXMgVGhlIGl0ZW1zIHRvIGNvbnZlcnQgdG8gdmFsdWUuXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbSB2YWx1ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaXRlbXNUb1ZhbHVlKGl0ZW1zOiBBcmRUYWJsZVJvd1tdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uaXRlbURhdGEoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgYXQgbGVhc3Qgb25lIGl0ZW0gaXMgaGlnaGxpZ2h0ZWQsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgKi9cclxuICByZWFkb25seSBpc0FueUl0ZW1IaWdobGlnaHRlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtcygpLmxlbmd0aCA+IDApO1xyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhbnkgaXRlbSBpbiB0aGUgdGFibGUgaXMgc2VsZWN0ZWQuXHJcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgYW55IGl0ZW0gaXMgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaXNBbnlJdGVtU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkSXRlbXMoKS5sZW5ndGggPiAwKTtcclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYWxsIGl0ZW1zIGluIHRoZSB0YWJsZSBhcmUgc2VsZWN0ZWQuXHJcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgYWxsIGl0ZW1zIGFyZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICByZWFkb25seSBhcmVBbGxTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJdGVtcygpLmxlbmd0aCA9PT0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpKS5sZW5ndGgpO1xyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyZW50IGNvbXBvbmVudCBkZWZpbmVzIHRoZSBsaW1pdCBvZiBjb25jdXJyZW50bHkgc2VsZWN0YWJsZSBpdGVtcyBhbmQgdGhlIGFtb3VudCBvZiBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMgbWF0Y2hlcyB0aGF0IGxpbWl0LiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cclxuICAgKlxyXG4gICAqICoqVExEUioqOiB0cnVlIGlmIGBtYXhTZWxlY3RlZEl0ZW1zYCBpcyBkZWZpbmVkIGFuZCB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIG1hdGNoZXMgdGhhdCB2YWx1ZS5cclxuICAgKi9cclxuICByZWFkb25seSBpc0l0ZW1MaW1pdFJlYWNoZWQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBtYXggPSB0aGlzLl9hcmRQYXJlbnRDb21wLm1heFNlbGVjdGVkSXRlbXMoKTtcclxuICAgIGlmICghaXNEZWZpbmVkKG1heCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1heCA8PSB0aGlzLnNlbGVjdGVkSXRlbXMoKS5sZW5ndGg7XHJcbiAgfSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGhlYWRlciBjZWxscyBvZiB0aGUgdGFibGUuXHJcbiAgICogQHJldHVybnMgYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGVhZGVyQ2VsbHMgPSB0aGlzLl9oZWFkZXJDZWxscy5hc1JlYWRvbmx5KCk7XHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIHRoZSB0YWJsZSBoYXMgZGVmaW5lZCBjb2x1bW5zLlxyXG4gICAqIEByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB0YWJsZSBoYXMgZGVmaW5lZCBjb2x1bW5zLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGhhc0RlZmluZWRDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fZGF0YUNvbHVtbnMoKS5sZW5ndGggPiAwKTtcclxuXHJcbiAgLy8hIHNldHRpbmcgY29sdW1uc1xyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbHVtbnMgb2YgdGhlIHRhYmxlLlxyXG4gICAqIEBwYXJhbSBjb2xzIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucyBvciB0YWJsZSBzdWJoZWFkZXJzLlxyXG4gICAqL1xyXG4gIHNldENvbHVtbnMoY29sczogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXhOZXN0aW5nTGV2ZWwgPSB0aGlzLl9nZXRIZWFkZXJNYXhOZXN0aW5nKGNvbHMpO1xyXG4gICAgY29uc3QgaGVhZGVyQ2VsbHMgPSB0aGlzLl9tYXBDb2x1bW5zVG9BcnJheShjb2xzLCBtYXhOZXN0aW5nTGV2ZWwsIDApO1xyXG4gICAgdGhpcy5faGVhZGVyQ2VsbHMuc2V0KHRoaXMuX2ZpbHRlckhlYWRlckNlbGxzKGhlYWRlckNlbGxzKSk7XHJcbiAgICB0aGlzLl9kYXRhQ29sdW1ucy5zZXQodGhpcy5fZXh0cmFjdERhdGFTb3VyY2VzKGNvbHMpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmlsdGVycyBvdXQgbnVsbCB2YWx1ZXMgZnJvbSB0aGUgaGVhZGVyIGNlbGxzIGFycmF5LiBQdXJlIGZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSBjZWxscyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyBvciBudWxsIHZhbHVlcy5cclxuICAgKiBAcmV0dXJucyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyB3aXRob3V0IG51bGwgdmFsdWVzIGFuZCBlbXB0eSBhcnJheXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZmlsdGVySGVhZGVyQ2VsbHMoY2VsbHM6IChIZWFkZXJDZWxsIHwgbnVsbClbXVtdKTogSGVhZGVyQ2VsbFtdW10ge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjZWxsc1tpXSA9IGNlbGxzW2ldLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNlbGxzLmZpbHRlcihyb3cgPT4gcm93Lmxlbmd0aCkgYXMgSGVhZGVyQ2VsbFtdW107XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3RzIHRoZSBkYXRhIHNvdXJjZXMgZnJvbSB0aGUgY29sdW1ucyBhcnJheS4gUHVyZSBmdW5jdGlvbi5cclxuICAgKiBAcGFyYW0gY29scyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMgb3IgdGFibGUgc3ViaGVhZGVycy5cclxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZXh0cmFjdERhdGFTb3VyY2VzKGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSk6IFRhYmxlRGF0YUNvbHVtbltdIHtcclxuICAgIGNvbnN0IGRhdGFDb2x1bW5zOiBUYWJsZURhdGFDb2x1bW5bXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcclxuICAgICAgaWYgKCFpc1RhYmxlU3ViaGVhZGVyKGNvbCkpIHtcclxuICAgICAgICBkYXRhQ29sdW1ucy5wdXNoKGNvbCk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgZGF0YUNvbHVtbnMucHVzaCguLi50aGlzLl9leHRyYWN0RGF0YVNvdXJjZXMoY29sLmNoaWxkcmVuKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGFDb2x1bW5zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBtYXhpbXVtIG5lc3RpbmcgbGV2ZWwgb2YgdGhlIGNvbHVtbnMgYXJyYXkuIFB1cmUgZnVuY3Rpb24uXHJcbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXHJcbiAgICogQHJldHVybnMgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBhcyBhIG51bWJlci5cclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRIZWFkZXJNYXhOZXN0aW5nKGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSk6IG51bWJlciB7XHJcbiAgICBpZiAoYXJlQWxsRGF0YUNvbHVtbnMoY29scykpIHJldHVybiAxO1xyXG4gICAgbGV0IG1heCA9IDE7XHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzLmZpbHRlcih2ID0+IGlzVGFibGVTdWJoZWFkZXIodikpIGFzIFRhYmxlU3ViaGVhZGVyW10pIHtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gMSArIHRoaXMuX2dldEhlYWRlck1heE5lc3RpbmcoY29sLmNoaWxkcmVuKTtcclxuICAgICAgaWYgKGhlaWdodCA+IG1heCkgbWF4ID0gaGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWFwcyB0aGUgY29sdW1ucyB0cmVlIHRvIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIG9yIG51bGwgdmFsdWVzLiBQdXJlIGZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSBjb2xzIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucyBvciB0YWJsZSBzdWJoZWFkZXJzLlxyXG4gICAqIEBwYXJhbSBtYXhOZXN0aW5nIHRoZSBtYXhpbXVtIG5lc3RpbmcgbGV2ZWwgb2YgdGhlIGNvbHVtbnMgYXJyYXkuXHJcbiAgICogQHBhcmFtIGN1cnJlbnROZXN0aW5nIHRoZSBjdXJyZW50IG5lc3RpbmcgbGV2ZWwgb2YgdGhlIGNvbHVtbnMgYXJyYXkuXHJcbiAgICogQHJldHVybnMgYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMgb3IgbnVsbCB2YWx1ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbWFwQ29sdW1uc1RvQXJyYXkoXHJcbiAgICBjb2xzOiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10sXHJcbiAgICBtYXhOZXN0aW5nOiBudW1iZXIsXHJcbiAgICBjdXJyZW50TmVzdGluZzogbnVtYmVyXHJcbiAgKTogKEhlYWRlckNlbGwgfCBudWxsKVtdW10ge1xyXG4gICAgaWYgKGFyZUFsbERhdGFDb2x1bW5zKGNvbHMpKSB7XHJcbiAgICAgIHJldHVybiBbY29scy5tYXAoY29sID0+IG5ldyBIZWFkZXJDZWxsKGNvbCwgMSwgbWF4TmVzdGluZyAtIGN1cnJlbnROZXN0aW5nKSldO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGVhZGVyQ2VsbHM6IChIZWFkZXJDZWxsIHwgbnVsbClbXVtdID0gW1tdXTtcclxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcclxuICAgICAgaWYgKCFpc1RhYmxlU3ViaGVhZGVyKGNvbCkpIHtcclxuICAgICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG5ldyBIZWFkZXJDZWxsKGNvbCwgMSwgbWF4TmVzdGluZyAtIGN1cnJlbnROZXN0aW5nKSk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY2hpbGRDZWxsczogKEhlYWRlckNlbGwgfCBudWxsKVtdW10gPSBbW10sIC4uLnRoaXMuX21hcENvbHVtbnNUb0FycmF5KGNvbC5jaGlsZHJlbiwgbWF4TmVzdGluZywgY3VycmVudE5lc3RpbmcgKyAxKV07XHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNoaWxkQ2VsbHMubGVuZ3RoIC0gMTtcclxuICAgICAgY29uc3Qgd2lkdGggPSBjaGlsZENlbGxzWzFdLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xyXG4gICAgICAgIGhlYWRlckNlbGxzLnB1c2goW251bGxdKTtcclxuICAgICAgfVxyXG4gICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG5ldyBIZWFkZXJDZWxsKGNvbCwgd2lkdGgsIDEpKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3aWR0aCAtIDE7IGkrKykge1xyXG4gICAgICAgIGhlYWRlckNlbGxzWzBdLnB1c2gobnVsbCk7XHJcbiAgICAgIH1cclxuICAgICAgbWVyZ2UyZEFycmF5cyhoZWFkZXJDZWxscywgY2hpbGRDZWxscyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGVhZGVyQ2VsbHM7XHJcbiAgfVxyXG5cclxuICAvLyEgc2V0dGluZyBpdGVtc1xyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbXBvbmVudCdzIGl0ZW1zLiBUYWtlcyBpbnRvIGFjY291bnQgdGhlIHZhbHVlcyBkZWZpbmVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50IGZvciBgcm93RGlzYWJsZWRGcm9tYCwgYHJvd0JvbGRGcm9tYCwgYW5kIGByb3dIaWdobGlnaHRlZEZyb21gLlxyXG4gICAqIEBwYXJhbSBpdGVtcyBBbiBhcnJheSBvZiBpdGVtcyB0byBiZSBzZXQgYXMgdGhlIGNvbXBvbmVudCdzIGl0ZW1zLlxyXG4gICAqL1xyXG4gIHNldEl0ZW1zKGl0ZW1zOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmhhc0RlZmluZWRDb2x1bW5zKCkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBtYXBwZWRJdGVtcyA9IGl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5fc2V0SXRlbXNNYXBGbihpdGVtLCBpKSk7XHJcbiAgICB0aGlzLl9pdGVtcy5zZXQobWFwcGVkSXRlbXMpO1xyXG4gICAgdGhpcy5fc29ydGVkSXRlbXMuc2V0KG1hcHBlZEl0ZW1zKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWFwcyByYXcgaXRlbSBkYXRhIHRvIGFuIHtAbGluayBBcmRUYWJsZVJvd30gb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IHJhd0l0ZW1EYXRhIC0gVGhlIHJhdyBkYXRhIG9mIHRoZSBpdGVtLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgaXRlbS5cclxuICAgKiBAcmV0dXJucyB7QXJkVGFibGVSb3d9IFJldHVybnMgYW4gQXJkVGFibGVSb3cgb2JqZWN0IHdpdGggbWFwcGVkIHByb3BlcnRpZXMuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9zZXRJdGVtc01hcEZuKHJhd0l0ZW1EYXRhOiBhbnksIGluZGV4OiBudW1iZXIpOiBBcmRUYWJsZVJvdyB7XHJcbiAgICAvL2dldCBkYXRhXHJcbiAgICBjb25zdCBbZGF0YSwgZGF0YUNvbHVtbnNdID0gdGhpcy5fZ2V0Um93RGF0YShyYXdJdGVtRGF0YSwgaW5kZXgpO1xyXG5cclxuICAgIC8vZ2V0IGJvbGRcclxuICAgIGNvbnN0IHJvd0JvbGRGcm9tUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAucm93Qm9sZEZyb20oKSA/PyB0aGlzLl9hcmRQYXJlbnRDb21wLkRFRkFVTFRTLnJvd0JvbGRGcm9tO1xyXG4gICAgbGV0IGJvbGQgPSByZXNvbHZlUGF0aChyYXdJdGVtRGF0YSwgcm93Qm9sZEZyb21QYXRoKTtcclxuICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmludmVydFJvd0JvbGQoKSkge1xyXG4gICAgICBib2xkID0gIWJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy9nZXQgZGlzYWJsZWRcclxuICAgIGNvbnN0IGRpc2FibGVkUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAucm93RGlzYWJsZWRGcm9tKCkgPz8gdGhpcy5fYXJkUGFyZW50Q29tcC5ERUZBVUxUUy5yb3dEaXNhYmxlZEZyb207XHJcbiAgICBsZXQgZGlzYWJsZWQgPSBldmFsdWF0ZShyZXNvbHZlUGF0aChyYXdJdGVtRGF0YSwgZGlzYWJsZWRQYXRoKSk7XHJcbiAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC5pbnZlcnRSb3dEaXNhYmxlZCgpKSB7XHJcbiAgICAgIGRpc2FibGVkID0gIWRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgQXJkVGFibGVSb3cocmF3SXRlbURhdGEsIGluZGV4LCBkYXRhLCBkYXRhQ29sdW1ucywgZGlzYWJsZWQsIGJvbGQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgZGF0YSBmb3IgYSByb3cgYmFzZWQgb24gZGF0YSBjb2x1bW5zIGNvbmZpZ3VyYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gcmF3SXRlbURhdGEgLSBUaGUgcmF3IGRhdGEgb2YgdGhlIGl0ZW0uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBpdGVtLlxyXG4gICAqIEByZXR1cm5zIHthbnlbXX0gUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSByb3cgZGF0YS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldFJvd0RhdGEocmF3SXRlbURhdGE6IGFueSwgaW5kZXg6IG51bWJlcik6IFthbnlbXSwgVGFibGVEYXRhQ29sdW1uW11dIHtcclxuICAgIGNvbnN0IGRhdGE6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBfY29scyA9IHRoaXMuX2RhdGFDb2x1bW5zKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IF9jb2xzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFDb2x1bW4gPSBfY29sc1tpXTtcclxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGRhdGFDb2x1bW4uZGF0YVNvdXJjZTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUGF0aCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC50cmVhdERhdGFTb3VyY2VBc1N0cmluZygpKSB7XHJcbiAgICAgICAgICBkYXRhLnB1c2gocmF3SXRlbURhdGFbc291cmNlUGF0aF0pO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGEucHVzaChyZXNvbHZlUGF0aChyYXdJdGVtRGF0YSwgc291cmNlUGF0aCkpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzb3VyY2VQYXRoLnR5cGUgPT09ICdhdXRvY291bnQnKSB7XHJcbiAgICAgICAgZGF0YS5wdXNoKGluZGV4ICsgMSk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNvdXJjZVBhdGgudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgIGRhdGEucHVzaCh7IF9hcmRDaGVja2JveDogdHJ1ZSwgaW5kZXggfSk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc291cmNlU3RyaW5nID0gdHlwZW9mIHNvdXJjZVBhdGggPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoc291cmNlUGF0aCkgOiBzb3VyY2VQYXRoO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFSRC1GVDUwNTI6IFVuZXhwZWN0ZWQgZGF0YSBzb3VyY2UgXCIke3NvdXJjZVN0cmluZ31cIiBhdCBpbmRleCAke2l9LmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtkYXRhLCB0aGlzLl9kYXRhQ29sdW1ucygpXTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBpdGVtIHN0b3JhZ2UuIFNlbGVjdHMgdGhlIGNvcnJlY3QgaXRlbXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHZhbHVlcywgd2FybmluZyB0aGUgdXNlciBpZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kLlxyXG4gICAqIEBwYXJhbSBpbmRleGVzIFRoZSB2YWx1ZSBvZiB0aGUgbmdNb2RlbCB0byBzZXQuXHJcbiAgICovXHJcbiAgd3JpdGVWYWx1ZShpbmRleGVzOiBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fZm9yY2VVbnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5zZWxlY3RJdGVtKC4uLmluZGV4ZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNlbGVjdGluZyBpdGVtc1xyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhbiBpdGVtIHdpdGggdGhlIGdpdmVuIGluZGV4IGlzIHNlbGVjdGVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byBjaGVjay5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gX3RydWVfIGlmIHRoZSBpdGVtIGlzIHNlbGVjdGVkLCBvdGhlcndpc2UgX2ZhbHNlXy5cclxuICAgKi9cclxuICBpc0l0ZW1TZWxlY3RlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zKCkuc29tZShpdGVtID0+IGl0ZW0uaW5kZXgoKSA9PT0gaW5kZXgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZWxlY3RzIGFsbCBpdGVtcy5cclxuICAgKlxyXG4gICAqIEFjY291bnRzIGZvciB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQuXHJcbiAgICogQHJldHVybnMgYSB0dXBsZSBjb250YWluaW5nIHR3byBhcnJheXM6XHJcbiAgICogKiBBbiBhcnJheSBvZiBpdGVtcyBzZWxlY3RlZC5cclxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIGZhaWxlZCB0byBzZWxlY3QuXHJcbiAgICovXHJcbiAgc2VsZWN0QWxsKCk6IFthbnlbXSwgYW55W11dIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdEl0ZW0oLi4udGhpcy5faXRlbXMoKS5tYXAodiA9PiB2LmluZGV4KCkpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVW5zZWxlY3RzIGFsbCBzZWxlY3RlZCBpdGVtcy5cclxuICAgKlxyXG4gICAqIElmIHRoZSBwYXJlbnQgY29tcG9uZW50IHJlcXVpcmVzIGF0IGxlYXN0IG9uZSB2YWx1ZSB0byBiZSBzZWxlY3RlZCBhdCBhbGwgdGltZXMsIHRoZSBmaXJzdCBzZWxlY3RlZCBpdGVtcyBpcyBsZWZ0IHNlbGVjdGVkLlxyXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW1zIGNsZWFyZWQsIG1hcHBlZCB0byBvbmx5IHRoZWlyIHZhbHVlcy5cclxuICAgKi9cclxuICB1bnNlbGVjdEFsbCgpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHNlbGVjdGVkKSB7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXNUb1ZhbHVlKHNlbGVjdGVkKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVW5zZWxlY3RzIGFsbCBzZWxlY3RlZCBpdGVtcywgbm8gbWF0dGVyIHdoYXQgdGhlIGNvbXBvbmVudCBzZXR0aW5ncyBhcmUuXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbXMgY2xlYXJlZCwgbWFwcGVkIHRvIG9ubHkgdGhlaXIgdmFsdWVzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2ZvcmNlVW5zZWxlY3RBbGwoKTogYW55W10ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBzZWxlY3RlZCkge1xyXG4gICAgICBpdGVtLnNlbGVjdGVkLnNldChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zVG9WYWx1ZShzZWxlY3RlZCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdHMgb25lIG9yIG11bHRpcGxlIGl0ZW1zLlxyXG4gICAqXHJcbiAgICogQWNjb3VudHMgZm9yIHRoZSBsaW1pdCBvZiBjb25jdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMgZGVmaW5lZCBieSB0aGUgcGFyZW50IGNvbXBvbmVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpbmRleGVzIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgc2VsZWN0ZWQuXHJcbiAgICogQHJldHVybnMgYSB0dXBsZSBjb250YWluaW5nIHR3byBhcnJheXM6XHJcbiAgICogLSBBbiBhcnJheSBvZiBpdGVtcyBzZWxlY3RlZC5cclxuICAgKiAtIEFuIGFycmF5IG9mIGl0ZW1zIGZhaWxlZCB0byBzZWxlY3QuXHJcbiAgICovXHJcbiAgc2VsZWN0SXRlbSguLi5pbmRleGVzOiBudW1iZXJbXSk6IFthbnlbXSwgYW55W11dIHtcclxuICAgIGNvbnN0IGl0ZW1zVG9CZVNlbGVjdGVkID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpICYmIGluZGV4ZXMuaW5jbHVkZXMoaXRlbS5pbmRleCgpKSk7XHJcbiAgICBpZiAodGhpcy5pc0l0ZW1MaW1pdFJlYWNoZWQoKSkge1xyXG4gICAgICByZXR1cm4gW1tdLCB0aGlzLl9pdGVtc1RvVmFsdWUoaXRlbXNUb0JlU2VsZWN0ZWQpXTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaXRlbXNTZWxlY3RlZENvdW50ID0gMDtcclxuICAgIGNvbnN0IGl0ZW1zU2VsZWN0ZWQgPSBbXTtcclxuICAgIGxldCBpdGVtc0xlZnRVbnRpbExpbWl0ID0gKHRoaXMuX2FyZFBhcmVudENvbXAubWF4U2VsZWN0ZWRJdGVtcygpID8/IEluZmluaXR5KSAtIHRoaXMuc2VsZWN0ZWRJdGVtcygpLmxlbmd0aDtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtc1RvQmVTZWxlY3RlZCkge1xyXG4gICAgICBpdGVtc1NlbGVjdGVkQ291bnQrKztcclxuICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWQoKSkgY29udGludWU7XHJcbiAgICAgIGlmIChpdGVtc0xlZnRVbnRpbExpbWl0IDw9IDApIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpdGVtc0xlZnRVbnRpbExpbWl0LS07XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KHRydWUpO1xyXG4gICAgICBpdGVtc1NlbGVjdGVkLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXRlbXNGYWlsZWRUb1NlbGVjdCA9IGl0ZW1zVG9CZVNlbGVjdGVkLnNsaWNlKGl0ZW1zU2VsZWN0ZWRDb3VudCAtIDEpO1xyXG4gICAgcmV0dXJuIFt0aGlzLl9pdGVtc1RvVmFsdWUoaXRlbXNTZWxlY3RlZCksIHRoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc0ZhaWxlZFRvU2VsZWN0KV07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVuc2VsZWN0cyBvbmUgb3IgbXVsdGlwbGUgaXRlbXMuXHJcbiAgICogQHBhcmFtIGl0ZW1zIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgdW5zZWxlY3RlZC5cclxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBpdGVtcyB1bnNlbGVjdGVkLCBtYXBwZWQgdG8gb25seSB0aGVpciB2YWx1ZXMuXHJcbiAgICovXHJcbiAgdW5zZWxlY3RJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogYW55W10ge1xyXG4gICAgY29uc3QgaXRlbXNUb0JlVW5zZWxlY3RlZCA9IHRoaXMuX2l0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KCkpKTtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtc1RvQmVVbnNlbGVjdGVkKSB7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zVG9CZVVuc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgLy8hIGhpZ2hsaWdodGluZyBpdGVtc1xyXG4gIC8qKlxyXG4gICAqIFVuaGlnaGxpZ2h0cyBhbGwgY3VycmVudGx5IGhpZ2hsaWdodGVkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIHVuaGlnaGxpZ2h0QWxsKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0ZWQgPSB0aGlzLmhpZ2hsaWdodGVkSXRlbXMoKTtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBoaWdobGlnaHRlZCkge1xyXG4gICAgICBpdGVtLmhpZ2hsaWdodGVkLnNldChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgdGhlIGdpdmVuIGl0ZW0sIHdoaWxlIHVuaGlnaGxpZ2h0aW5nIGFsbCBvdGhlciBpdGVtcy4gRG9lcyBub3RoaW5nIHdoZW4gdGhlIGl0ZW0gaXMgZGlzYWJsZWQuXHJcbiAgICogQHBhcmFtIGl0ZW0gVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGJlIGhpZ2hsaWdodGVkLlxyXG4gICAqIEByZXR1cm5zIFRoZSBoaWdobGlnaHRlZCBpdGVtLlxyXG4gICAqL1xyXG4gIGhpZ2hsaWdodFNpbmdsZUl0ZW0oaW5kZXg6IG51bWJlcik6IEFyZFRhYmxlUm93IHwgbnVsbCB7XHJcbiAgICB0aGlzLnVuaGlnaGxpZ2h0QWxsKCk7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGluZGV4KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyBhbGwgZ2l2ZW4gaXRlbXMuXHJcbiAgICogQHBhcmFtIGl0ZW1zIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgaGlnaGxpZ2h0ZWQuXHJcbiAgICogQHJldHVybnMgVGhlIGxhc3QgaGlnaGxpZ2h0ZWQgaXRlbS5cclxuICAgKi9cclxuICBoaWdobGlnaHRJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogQXJkVGFibGVSb3cge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+IGluZGV4ZXMuaW5jbHVkZXMoaXRlbS5pbmRleCgpKSk7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaXRlbS5oaWdobGlnaHRlZC5zZXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXMubGFzdCgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVbmhpZ2hsaWdodHMgYWxsIGdpdmVuIGl0ZW1zLlxyXG4gICAqIEBwYXJhbSBpdGVtcyBBIHJlc3Qgb3BlcmF0b3IgYXJyYXkgb2YgaXRlbSBpbmRleGVzIHRvIGJlIHVuaGlnaGxpZ2h0ZWQuXHJcbiAgICovXHJcbiAgdW5oaWdobGlnaHRJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2l0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KCkpKTtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xyXG4gICAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uaGlnaGxpZ2h0ZWQoKSkgcmV0dXJuO1xyXG5cclxuICAgICAgaXRlbS5oaWdobGlnaHRlZC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIHRoZSBmaXJzdCBpdGVtIG91dCBvZiBhbGwgaXRlbXMuXHJcbiAgICogQHJldHVybnMgVGhlIGhpZ2hsaWdodGVkIGl0ZW0uXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0Rmlyc3RJdGVtKCk6IEFyZFRhYmxlUm93IHwgbnVsbCB7XHJcbiAgICB0aGlzLnVuaGlnaGxpZ2h0QWxsKCk7XHJcblxyXG4gICAgY29uc3QgaXRlbVRvSGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHRhYmxlSXRlbXMoKS5maXJzdCgpLmluZGV4KCk7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgdGhlIGxhc3QgaXRlbSBvdXQgb2YgYWxsIGl0ZW1zLlxyXG4gICAqIEByZXR1cm5zIFRoZSBoaWdobGlnaHRlZCBpdGVtLlxyXG4gICAqL1xyXG4gIGhpZ2hsaWdodExhc3RJdGVtKCk6IEFyZFRhYmxlUm93IHwgbnVsbCB7XHJcbiAgICB0aGlzLnVuaGlnaGxpZ2h0QWxsKCk7XHJcblxyXG4gICAgY29uc3QgaXRlbVRvSGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHRhYmxlSXRlbXMoKS5sYXN0KCkuaW5kZXgoKTtcclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaXRlbVRvSGlnaGxpZ2h0KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyBhbGwgbm9uLWRpc2FibGVkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIGhpZ2hsaWdodEFsbEl0ZW1zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaXRlbXNUb0hpZ2hsaWdodCA9IHRoaXMuaGlnaGxpZ2h0YWJsZUl0ZW1zKCkubWFwKHYgPT4gdi5pbmRleCgpKTtcclxuICAgIHRoaXMuaGlnaGxpZ2h0SXRlbSguLi5pdGVtc1RvSGlnaGxpZ2h0KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyB0aGUgbmV4dCBub24tZGlzYWJsZWQgaXRlbSBkZWZpbmVkIGJ5IHRoZSBvZmZzZXQgYW1vdW50LlxyXG4gICAqXHJcbiAgICogSWYgYGhhc1NoaWZ0YCBpcyBzZXQgdG8gdHJ1ZSwgYWxsIG9yaWdpbmFsbHkgaGlnaGxpZ2h0ZWQgaXRlbXMgYXJlIGtlcHQuIE90aGVyd2lzZSwgYWxsIG9yaWdpbmFsIGl0ZW1zIGFyZSB1bnNlbGVjdGVkLlxyXG4gICAqIEBwYXJhbSBvZmZzZXQgVGhlIGFtb3VudCBvZiBpdGVtcyB0byBvZmZzZXQgdGhlIGhpZ2hsaWdodCBieS5cclxuICAgKiBAcGFyYW0gaGFzU2hpZnQgV2hldGhlciB0aGUgdXNlciBoYXMgdGhlIHNoaWZ0IGtleSBwcmVzc2VkLlxyXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIGhpZ2hsaWdodGVkLlxyXG4gICAqL1xyXG4gIGhpZ2hsaWdodE5leHRJdGVtKG9mZnNldDogbnVtYmVyLCBoYXNTaGlmdD86IGJvb2xlYW4pOiBBcmRUYWJsZVJvdyB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmlzQW55SXRlbUhpZ2hsaWdodGVkKCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0Rmlyc3RJdGVtKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjdXJyZW50SXRlbSA9IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtcygpLmxhc3QoKTtcclxuICAgIGNvbnN0IGl0ZW1zV2l0aG91dERpc2FibGVkID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoXHJcbiAgICAgIGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQoKSAmJiAoIXRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKCkgfHwgaXRlbS5zZWxlY3RlZCgpKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGN1cnJlbnRJbmRleEluSXRlbXMgPSBpdGVtc1dpdGhvdXREaXNhYmxlZC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmluZGV4KCkgPT09IGN1cnJlbnRJdGVtLmluZGV4KCkpO1xyXG5cclxuICAgIGxldCBuZXh0SXRlbUluZGV4ID0gY3VycmVudEluZGV4SW5JdGVtcyArIG9mZnNldDtcclxuICAgIGlmIChuZXh0SXRlbUluZGV4ID49IGl0ZW1zV2l0aG91dERpc2FibGVkLmxlbmd0aCkge1xyXG4gICAgICBuZXh0SXRlbUluZGV4IC09IGl0ZW1zV2l0aG91dERpc2FibGVkLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGlmIChuZXh0SXRlbUluZGV4IDwgMCkge1xyXG4gICAgICBuZXh0SXRlbUluZGV4ICs9IGl0ZW1zV2l0aG91dERpc2FibGVkLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW1Ub0hpZ2hsaWdodCA9IGl0ZW1zV2l0aG91dERpc2FibGVkW25leHRJdGVtSW5kZXhdO1xyXG5cclxuICAgIGlmIChoYXNTaGlmdCkge1xyXG4gICAgICBpZiAoaXRlbVRvSGlnaGxpZ2h0LmhpZ2hsaWdodGVkKCkpIHtcclxuICAgICAgICB0aGlzLnVuaGlnaGxpZ2h0SXRlbShuZXh0SXRlbUluZGV4KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKG5leHRJdGVtSW5kZXgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0U2luZ2xlSXRlbShuZXh0SXRlbUluZGV4KTtcclxuICB9XHJcblxyXG4gIC8vISBzb3J0aW5nXHJcbiAgcHJpdmF0ZSBfY3VycmVudFNvcnRDb2x1bW46IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2N1cnJlbnRTb3J0VHlwZTogU29ydFR5cGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgdG9nZ2xlQ3VycmVudFNvcnRDb2x1bW4oY29sdW1uOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uKSB7XHJcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50U29ydFR5cGUgPT09IFNvcnRUeXBlLkFzY2VuZGluZykge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IFNvcnRUeXBlLkRlc2NlbmRpbmc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gU29ydFR5cGUuQXNjZW5kaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2dlbmVyYXRlU29ydGVkUm93cyh0cnVlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XHJcbiAgICB0aGlzLl9jdXJyZW50U29ydFR5cGUgPSBTb3J0VHlwZS5Bc2NlbmRpbmc7XHJcbiAgICB0aGlzLl9nZW5lcmF0ZVNvcnRlZFJvd3MoKTtcclxuICB9XHJcbiAgcmVzZXRTb3J0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPSBudWxsO1xyXG4gICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gbnVsbDtcclxuICAgIHRoaXMuX3NvcnRlZEl0ZW1zLnNldChbLi4udGhpcy5pdGVtcygpXSk7XHJcbiAgfVxyXG4gIGdldENvbHVtblNvcnRUeXBlKGNvbHVtbjogbnVtYmVyKTogU29ydFR5cGUgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U29ydFR5cGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVTb3J0ZWRSb3dzKGp1c3RSZXZlcnNlPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGp1c3RSZXZlcnNlKSB7XHJcbiAgICAgIHRoaXMuX3NvcnRlZEl0ZW1zKCkucmV2ZXJzZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzb3J0Q29sdW1uSW5kZXggPSB0aGlzLl9jdXJyZW50U29ydENvbHVtbjtcclxuICAgIGlmIChpc051bGwoc29ydENvbHVtbkluZGV4KSB8fCAhdGhpcy5fY3VycmVudFNvcnRUeXBlKSB7XHJcbiAgICAgIHRoaXMuX3NvcnRlZEl0ZW1zLnNldCh0aGlzLml0ZW1zKCkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzb3J0Q29sdW1uID0gdGhpcy5fZGF0YUNvbHVtbnMoKVtzb3J0Q29sdW1uSW5kZXhdO1xyXG4gICAgaWYgKCFzb3J0Q29sdW1uKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQVJELUlTNTA1OTogRW5jb3VudGVyZWQgYW4gaXNzdWUgaW4gPGFyZC10YWJsZT46IGNvdWxkIG5vdCBmaW5kIHRoZSBjb2x1bW4gd2l0aCBpbmRleCAke3NvcnRDb2x1bW5JbmRleH0uIFRoaXMgaXMgbW9zdCBsaWtlbHkgYW4gQXJkaXVtIFVJIGJ1ZywgcGxlYXNlIHJlcG9ydCBpdCB0byB0aGUgY3JlYXRvcnMuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9PT0gU29ydFR5cGUuQXNjZW5kaW5nID8gMSA6IC0xO1xyXG4gICAgY29uc3Qgc29ydEZuID1cclxuICAgICAgc29ydENvbHVtbi5zb3J0Rm4gPz9cclxuICAgICAgKChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gZGlyZWN0aW9uO1xyXG4gICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xICogZGlyZWN0aW9uO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zb3J0ZWRJdGVtcy5zZXQoWy4uLnRoaXMuaXRlbXMoKV0uc29ydCgoYSwgYikgPT4gc29ydEZuKGEuZGF0YSgpW3NvcnRDb2x1bW5JbmRleF0sIGIuZGF0YSgpW3NvcnRDb2x1bW5JbmRleF0pKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
564
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaXRlbS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS1pdGVtLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxRCxPQUFPLEVBQUUsUUFBUSxFQUFtQix1QkFBdUIsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3RSxNQUFNLE9BQU8sV0FBVztJQXdCdEIsWUFDRSxRQUFhLEVBQ2IsS0FBYSxFQUNiLElBQVcsRUFDWCxXQUE4QixFQUM5QixRQUFpQixFQUNqQixJQUFhLEVBQ2IsT0FBTyxHQUFHLEtBQUs7UUE5QkEsY0FBUyxHQUFHLE1BQU0sQ0FBTSxTQUFTLENBQUMsQ0FBQztRQUMzQyxhQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixXQUFNLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFekIsYUFBUSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMxQyxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU3QixVQUFLLEdBQUcsTUFBTSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLFNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxD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QUMsR0FBRyxDQUFDO29CQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO2dCQUNqQyxPQUFPLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyByZXNvbHZlUGF0aCB9IGZyb20gJ3Jlc29sdmUtb2JqZWN0LXBhdGgnO1xyXG5pbXBvcnQgeyBldmFsdWF0ZSwgaXNEZWZpbmVkLCBpc051bGwgfSBmcm9tICdzaW1wbGUtYm9vbCc7XHJcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZXMvdXRpbGl0eS50eXBlcyc7XHJcbmltcG9ydCB7IFNvcnRUeXBlLCBUYWJsZURhdGFDb2x1bW4sIFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5LCBUYWJsZVN1YmhlYWRlciB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xyXG5pbXBvcnQgeyBhcmVBbGxEYXRhQ29sdW1ucywgaXNUYWJsZVN1YmhlYWRlciwgbWVyZ2UyZEFycmF5cyB9IGZyb20gJy4vdXRpbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFyZFRhYmxlUm93IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtRGF0YSA9IHNpZ25hbDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgaXRlbURhdGEgPSB0aGlzLl9pdGVtRGF0YS5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xyXG4gIHJlYWRvbmx5IGluZGV4ID0gdGhpcy5faW5kZXguYXNSZWFkb25seSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9pc0VtcHR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSBpc0VtcHR5ID0gdGhpcy5faXNFbXB0eS5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEgPSBzaWduYWw8YW55W10+KFtdKTtcclxuICByZWFkb25seSBkYXRhID0gdGhpcy5fZGF0YS5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFDb2x1bW5zID0gc2lnbmFsPFRhYmxlRGF0YUNvbHVtbltdPihbXSk7XHJcbiAgcmVhZG9ubHkgZGF0YUNvbHVtbnMgPSB0aGlzLl9kYXRhQ29sdW1ucy5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsYXNzID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG4gIHJlYWRvbmx5IGNsYXNzID0gdGhpcy5fY2xhc3MuYXNSZWFkb25seSgpO1xyXG5cclxuICByZWFkb25seSBkaXNhYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgYm9sZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgc2VsZWN0ZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGhpZ2hsaWdodGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBpdGVtRGF0YTogYW55LFxyXG4gICAgaW5kZXg6IG51bWJlcixcclxuICAgIGRhdGE6IGFueVtdLFxyXG4gICAgZGF0YUNvbHVtbnM6IFRhYmxlRGF0YUNvbHVtbltdLFxyXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW4sXHJcbiAgICBib2xkOiBib29sZWFuLFxyXG4gICAgaXNFbXB0eSA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9pdGVtRGF0YS5zZXQoaXRlbURhdGEpO1xyXG4gICAgdGhpcy5faW5kZXguc2V0KGluZGV4KTtcclxuICAgIHRoaXMuX2RhdGEuc2V0KGRhdGEpO1xyXG4gICAgdGhpcy5fZGF0YUNvbHVtbnMuc2V0KGRhdGFDb2x1bW5zKTtcclxuICAgIHRoaXMuZGlzYWJsZWQuc2V0KGRpc2FibGVkKTtcclxuICAgIHRoaXMuYm9sZC5zZXQoYm9sZCk7XHJcbiAgICB0aGlzLl9pc0VtcHR5LnNldChpc0VtcHR5KTtcclxuICB9XHJcbiAgc3RhdGljIG5ld0VtcHR5Q2VsbChpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gbmV3IEFyZFRhYmxlUm93KG51bGwsIGluZGV4LCBbXSwgW10sIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVJdGVtU3RvcmFnZUhvc3REZWZhdWx0cyB7XHJcbiAgcmVhZG9ubHkgcm93RGlzYWJsZWRGcm9tOiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgcm93Qm9sZEZyb206IHN0cmluZztcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlSXRlbVN0b3JhZ2VIb3N0IHtcclxuICByZWFkb25seSByb3dEaXNhYmxlZEZyb206IFNpZ25hbDxOdWxsYWJsZTxzdHJpbmc+PjtcclxuICByZWFkb25seSByb3dCb2xkRnJvbTogU2lnbmFsPE51bGxhYmxlPHN0cmluZz4+O1xyXG4gIHJlYWRvbmx5IGludmVydFJvd0Rpc2FibGVkOiBTaWduYWw8TnVsbGFibGU8Ym9vbGVhbj4+O1xyXG4gIHJlYWRvbmx5IGludmVydFJvd0JvbGQ6IFNpZ25hbDxOdWxsYWJsZTxib29sZWFuPj47XHJcbiAgcmVhZG9ubHkgZGF0YTogU2lnbmFsPE51bGxhYmxlPGFueT4+W107XHJcbiAgcmVhZG9ubHkgREVGQVVMVFM6IFRhYmxlSXRlbVN0b3JhZ2VIb3N0RGVmYXVsdHM7XHJcbiAgcmVhZG9ubHkgbWF4U2VsZWN0ZWRJdGVtczogU2lnbmFsPE51bGxhYmxlPG51bWJlcj4+O1xyXG4gIHJlYWRvbmx5IHRyZWF0RGF0YVNvdXJjZUFzU3RyaW5nOiBTaWduYWw8TnVsbGFibGU8Ym9vbGVhbj4+O1xyXG5cclxuICByZWFkb25seSBwYWdpbmF0ZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICByZWFkb25seSBwYWdpbmF0aW9uU3RyYXRlZ3k6IFNpZ25hbDxUYWJsZVBhZ2luYXRpb25TdHJhdGVneT47XHJcbiAgcmVhZG9ubHkgaXRlbXNQZXJQYWdlOiBTaWduYWw8bnVtYmVyPjtcclxuICByZWFkb25seSBwYWdlOiBTaWduYWw8bnVtYmVyPjtcclxufVxyXG5leHBvcnQgY2xhc3MgSGVhZGVyQ2VsbCB7XHJcbiAgcmVhZG9ubHkgY2VsbCA9IHNpZ25hbDxUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcj4odW5kZWZpbmVkIGFzIGFueSk7XHJcbiAgcmVhZG9ubHkgY29sc3BhbiA9IHNpZ25hbDxudW1iZXI+KDEpO1xyXG4gIHJlYWRvbmx5IHJvd3NwYW4gPSBzaWduYWw8bnVtYmVyPigxKTtcclxuXHJcbiAgY29uc3RydWN0b3IoY2VsbDogVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIsIGNvbHNwYW4gPSAxLCByb3dzcGFuID0gMSkge1xyXG4gICAgdGhpcy5jZWxsLnNldChjZWxsKTtcclxuICAgIHRoaXMuY29sc3Bhbi5zZXQoY29sc3Bhbik7XHJcbiAgICB0aGlzLnJvd3NwYW4uc2V0KHJvd3NwYW4pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdpZHRoKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgY2VsbCA9IHRoaXMuY2VsbCgpO1xyXG4gICAgaWYgKGlzVGFibGVTdWJoZWFkZXIoY2VsbCkpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldFdpZHRoKGNlbGwud2lkdGgpO1xyXG4gIH1cclxuICBnZXQgbWluV2lkdGgoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjZWxsID0gdGhpcy5jZWxsKCk7XHJcbiAgICBpZiAoaXNUYWJsZVN1YmhlYWRlcihjZWxsKSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0V2lkdGgoY2VsbC5taW5XaWR0aCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRocmFuc2Zvcm1zIGEgbnVtZXJpYyB3aWR0aCBpbnRvIGEgQ1NTIHN0cmluZyBpZiBuZWVkZWQuIFB1cmUgZnVuY3Rpb24uXHJcbiAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCB0byBiZSBjb252ZXJ0ZWQuXHJcbiAgICogQHJldHVybnMgVGhlIHdpZHRoIGV4cHJlc3NlZCBhcyBhIENTUy1jb21wYXRpYmxlIHN0cmluZyBvciBudWxsLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldFdpZHRoKHdpZHRoOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghd2lkdGgpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiB3aWR0aCA9PT0gJ251bWJlcicpIHJldHVybiBgJHt3aWR0aH1weGA7XHJcbiAgICByZXR1cm4gd2lkdGg7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGFibGVJdGVtU3RvcmFnZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaXRlbXMgPSBzaWduYWw8QXJkVGFibGVSb3dbXT4oW10pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NvcnRlZEl0ZW1zID0gc2lnbmFsPEFyZFRhYmxlUm93W10+KFtdKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YUNvbHVtbnMgPSBzaWduYWw8VGFibGVEYXRhQ29sdW1uW10+KFtdKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9oZWFkZXJDZWxscyA9IHNpZ25hbDxIZWFkZXJDZWxsW11bXT4oW10pO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9hcmRQYXJlbnRDb21wOiBUYWJsZUl0ZW1TdG9yYWdlSG9zdCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbGwgaXRlbXMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaXRlbXMgPSB0aGlzLl9pdGVtcy5hc1JlYWRvbmx5KCk7XHJcbiAgcmVhZG9ubHkgc29ydGVkSXRlbXMgPSB0aGlzLl9zb3J0ZWRJdGVtcy5hc1JlYWRvbmx5KCk7XHJcbiAgLyoqXHJcbiAgICogR2V0cyBpdGVtcyBiYXNlZCBvbiB0aGUgY3VycmVudCBwYWdpbmF0aW9uIHN0YXRlLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHBhZ2luYXRlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLl9hcmRQYXJlbnRDb21wLnBhZ2luYXRlZCgpIHx8IHRoaXMuX2FyZFBhcmVudENvbXAucGFnaW5hdGlvblN0cmF0ZWd5KCkgPT09IFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5Lk5vb3ApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc29ydGVkSXRlbXMoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLl9hcmRQYXJlbnRDb21wLnBhZ2UoKTtcclxuICAgIGNvbnN0IElQUCA9IHRoaXMuX2FyZFBhcmVudENvbXAuaXRlbXNQZXJQYWdlKCk7XHJcbiAgICBjb25zdCBpdGVtc1N0YXJ0ID0gKHBhZ2UgLSAxKSAqIElQUDtcclxuICAgIGNvbnN0IGl0ZW1zRW5kID0gcGFnZSAqIElQUDtcclxuICAgIHJldHVybiB0aGlzLnNvcnRlZEl0ZW1zKCkuc2xpY2UoaXRlbXNTdGFydCwgaXRlbXNFbmQpO1xyXG4gIH0pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgYWxsIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcy5cclxuICAgKi9cclxuICByZWFkb25seSBzZWxlY3RlZEl0ZW1zID0gY29tcHV0ZWQ8QXJkVGFibGVSb3dbXT4oKCkgPT4gdGhpcy5pdGVtcygpLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQoKSkpO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgYWxsIGN1cnJlbnRseSBoaWdobGlnaHRlZCBpdGVtcy5cclxuICAgKi9cclxuICByZWFkb25seSBoaWdobGlnaHRlZEl0ZW1zID0gY29tcHV0ZWQ8QXJkVGFibGVSb3dbXT4oKCkgPT4gdGhpcy5pdGVtcygpLmZpbHRlcihpdGVtID0+IGl0ZW0uaGlnaGxpZ2h0ZWQoKSkpO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgYWxsIGhpZ2hsaWdodGFibGUgaXRlbXMuIEFuIGl0ZW0gaXMgY29uc2lkZXJlZCBoaWdobGlnaHRhYmxlIGlmIGl0IGlzICoqbm90KiogZGlzYWJsZWQuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGlnaGxpZ2h0YWJsZUl0ZW1zID0gY29tcHV0ZWQ8QXJkVGFibGVSb3dbXT4oKCkgPT4gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpKSk7XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgdmFsdWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9pdGVtc1RvVmFsdWUodGhpcy5zZWxlY3RlZEl0ZW1zKCkpKTtcclxuICAvKipcclxuICAgKiBNYXBzIGFuIGFycmF5IG9mIGl0ZW1zIGludG8gdGhlaXIgdmFsdWVzLlxyXG4gICAqIEBwYXJhbSBpdGVtcyBUaGUgaXRlbXMgdG8gY29udmVydCB0byB2YWx1ZS5cclxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBpdGVtIHZhbHVlcy5cclxuICAgKi9cclxuICBwcml2YXRlIF9pdGVtc1RvVmFsdWUoaXRlbXM6IEFyZFRhYmxlUm93W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pdGVtRGF0YSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgaXRlbSBpcyBoaWdobGlnaHRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGlzQW55SXRlbUhpZ2hsaWdodGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5oaWdobGlnaHRlZEl0ZW1zKCkubGVuZ3RoID4gMCk7XHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGFueSBpdGVtIGluIHRoZSB0YWJsZSBpcyBzZWxlY3RlZC5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiBhbnkgaXRlbSBpcyBzZWxlY3RlZC5cclxuICAgKi9cclxuICByZWFkb25seSBpc0FueUl0ZW1TZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJdGVtcygpLmxlbmd0aCA+IDApO1xyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhbGwgaXRlbXMgaW4gdGhlIHRhYmxlIGFyZSBzZWxlY3RlZC5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiBhbGwgaXRlbXMgYXJlIHNlbGVjdGVkLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGFyZUFsbFNlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEl0ZW1zKCkubGVuZ3RoID09PSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKCkpLmxlbmd0aCk7XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJlbnQgY29tcG9uZW50IGRlZmluZXMgdGhlIGxpbWl0IG9mIGNvbmN1cnJlbnRseSBzZWxlY3RhYmxlIGl0ZW1zIGFuZCB0aGUgYW1vdW50IG9mIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcyBtYXRjaGVzIHRoYXQgbGltaXQuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxyXG4gICAqXHJcbiAgICogKipUTERSKio6IHRydWUgaWYgYG1heFNlbGVjdGVkSXRlbXNgIGlzIGRlZmluZWQgYW5kIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgbWF0Y2hlcyB0aGF0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGlzSXRlbUxpbWl0UmVhY2hlZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IG1heCA9IHRoaXMuX2FyZFBhcmVudENvbXAubWF4U2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgaWYgKCFpc0RlZmluZWQobWF4KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF4IDw9IHRoaXMuc2VsZWN0ZWRJdGVtcygpLmxlbmd0aDtcclxuICB9KTtcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaGVhZGVyIGNlbGxzIG9mIHRoZSB0YWJsZS5cclxuICAgKiBAcmV0dXJucyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscy5cclxuICAgKi9cclxuICByZWFkb25seSBoZWFkZXJDZWxscyA9IHRoaXMuX2hlYWRlckNlbGxzLmFzUmVhZG9ubHkoKTtcclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgdGhlIHRhYmxlIGhhcyBkZWZpbmVkIGNvbHVtbnMuXHJcbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHRhYmxlIGhhcyBkZWZpbmVkIGNvbHVtbnMuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGFzRGVmaW5lZENvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9kYXRhQ29sdW1ucygpLmxlbmd0aCA+IDApO1xyXG5cclxuICAvLyEgc2V0dGluZyBjb2x1bW5zXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgY29sdW1ucyBvZiB0aGUgdGFibGUuXHJcbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXHJcbiAgICovXHJcbiAgc2V0Q29sdW1ucyhjb2xzOiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IG1heE5lc3RpbmdMZXZlbCA9IHRoaXMuX2dldEhlYWRlck1heE5lc3RpbmcoY29scyk7XHJcbiAgICBjb25zdCBoZWFkZXJDZWxscyA9IHRoaXMuX21hcENvbHVtbnNUb0FycmF5KGNvbHMsIG1heE5lc3RpbmdMZXZlbCwgMCk7XHJcbiAgICB0aGlzLl9oZWFkZXJDZWxscy5zZXQodGhpcy5fZmlsdGVySGVhZGVyQ2VsbHMoaGVhZGVyQ2VsbHMpKTtcclxuICAgIHRoaXMuX2RhdGFDb2x1bW5zLnNldCh0aGlzLl9leHRyYWN0RGF0YVNvdXJjZXMoY29scykpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBGaWx0ZXJzIG91dCBudWxsIHZhbHVlcyBmcm9tIHRoZSBoZWFkZXIgY2VsbHMgYXJyYXkuIFB1cmUgZnVuY3Rpb24uXHJcbiAgICogQHBhcmFtIGNlbGxzIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIG9yIG51bGwgdmFsdWVzLlxyXG4gICAqIEByZXR1cm5zIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIHdpdGhvdXQgbnVsbCB2YWx1ZXMgYW5kIGVtcHR5IGFycmF5cy5cclxuICAgKi9cclxuICBwcml2YXRlIF9maWx0ZXJIZWFkZXJDZWxscyhjZWxsczogKEhlYWRlckNlbGwgfCBudWxsKVtdW10pOiBIZWFkZXJDZWxsW11bXSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNlbGxzW2ldID0gY2VsbHNbaV0uZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2VsbHMuZmlsdGVyKHJvdyA9PiByb3cubGVuZ3RoKSBhcyBIZWFkZXJDZWxsW11bXTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdHMgdGhlIGRhdGEgc291cmNlcyBmcm9tIHRoZSBjb2x1bW5zIGFycmF5LiBQdXJlIGZ1bmN0aW9uLlxyXG4gICAqIEBwYXJhbSBjb2xzIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucyBvciB0YWJsZSBzdWJoZWFkZXJzLlxyXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucy5cclxuICAgKi9cclxuICBwcml2YXRlIF9leHRyYWN0RGF0YVNvdXJjZXMoY29sczogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdKTogVGFibGVEYXRhQ29sdW1uW10ge1xyXG4gICAgY29uc3QgZGF0YUNvbHVtbnM6IFRhYmxlRGF0YUNvbHVtbltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xyXG4gICAgICBpZiAoIWlzVGFibGVTdWJoZWFkZXIoY29sKSkge1xyXG4gICAgICAgIGRhdGFDb2x1bW5zLnB1c2goY29sKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBkYXRhQ29sdW1ucy5wdXNoKC4uLnRoaXMuX2V4dHJhY3REYXRhU291cmNlcyhjb2wuY2hpbGRyZW4pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YUNvbHVtbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS4gUHVyZSBmdW5jdGlvbi5cclxuICAgKiBAcGFyYW0gY29scyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMgb3IgdGFibGUgc3ViaGVhZGVycy5cclxuICAgKiBAcmV0dXJucyB0aGUgbWF4aW11bSBuZXN0aW5nIGxldmVsIGFzIGEgbnVtYmVyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEhlYWRlck1heE5lc3RpbmcoY29sczogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdKTogbnVtYmVyIHtcclxuICAgIGlmIChhcmVBbGxEYXRhQ29sdW1ucyhjb2xzKSkgcmV0dXJuIDE7XHJcbiAgICBsZXQgbWF4ID0gMTtcclxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMuZmlsdGVyKHYgPT4gaXNUYWJsZVN1YmhlYWRlcih2KSkgYXMgVGFibGVTdWJoZWFkZXJbXSkge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSAxICsgdGhpcy5fZ2V0SGVhZGVyTWF4TmVzdGluZyhjb2wuY2hpbGRyZW4pO1xyXG4gICAgICBpZiAoaGVpZ2h0ID4gbWF4KSBtYXggPSBoZWlnaHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNYXBzIHRoZSBjb2x1bW5zIHRyZWUgdG8gYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMgb3IgbnVsbCB2YWx1ZXMuIFB1cmUgZnVuY3Rpb24uXHJcbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXHJcbiAgICogQHBhcmFtIG1heE5lc3RpbmcgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS5cclxuICAgKiBAcGFyYW0gY3VycmVudE5lc3RpbmcgdGhlIGN1cnJlbnQgbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS5cclxuICAgKiBAcmV0dXJucyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyBvciBudWxsIHZhbHVlcy5cclxuICAgKi9cclxuICBwcml2YXRlIF9tYXBDb2x1bW5zVG9BcnJheShcclxuICAgIGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSxcclxuICAgIG1heE5lc3Rpbmc6IG51bWJlcixcclxuICAgIGN1cnJlbnROZXN0aW5nOiBudW1iZXJcclxuICApOiAoSGVhZGVyQ2VsbCB8IG51bGwpW11bXSB7XHJcbiAgICBpZiAoYXJlQWxsRGF0YUNvbHVtbnMoY29scykpIHtcclxuICAgICAgcmV0dXJuIFtjb2xzLm1hcChjb2wgPT4gbmV3IEhlYWRlckNlbGwoY29sLCAxLCBtYXhOZXN0aW5nIC0gY3VycmVudE5lc3RpbmcpKV07XHJcbiAgICB9XHJcbiAgICBjb25zdCBoZWFkZXJDZWxsczogKEhlYWRlckNlbGwgfCBudWxsKVtdW10gPSBbW11dO1xyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xyXG4gICAgICBpZiAoIWlzVGFibGVTdWJoZWFkZXIoY29sKSkge1xyXG4gICAgICAgIGhlYWRlckNlbGxzWzBdLnB1c2gobmV3IEhlYWRlckNlbGwoY29sLCAxLCBtYXhOZXN0aW5nIC0gY3VycmVudE5lc3RpbmcpKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjaGlsZENlbGxzOiAoSGVhZGVyQ2VsbCB8IG51bGwpW11bXSA9IFtbXSwgLi4udGhpcy5fbWFwQ29sdW1uc1RvQXJyYXkoY29sLmNoaWxkcmVuLCBtYXhOZXN0aW5nLCBjdXJyZW50TmVzdGluZyArIDEpXTtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2hpbGRDZWxscy5sZW5ndGggLSAxO1xyXG4gICAgICBjb25zdCB3aWR0aCA9IGNoaWxkQ2VsbHNbMV0ubGVuZ3RoO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XHJcbiAgICAgICAgaGVhZGVyQ2VsbHMucHVzaChbbnVsbF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGhlYWRlckNlbGxzWzBdLnB1c2gobmV3IEhlYWRlckNlbGwoY29sLCB3aWR0aCwgMSkpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgaGVhZGVyQ2VsbHNbMF0ucHVzaChudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBtZXJnZTJkQXJyYXlzKGhlYWRlckNlbGxzLCBjaGlsZENlbGxzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBoZWFkZXJDZWxscztcclxuICB9XHJcblxyXG4gIC8vISBzZXR0aW5nIGl0ZW1zXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgY29tcG9uZW50J3MgaXRlbXMuIFRha2VzIGludG8gYWNjb3VudCB0aGUgdmFsdWVzIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQgZm9yIGByb3dEaXNhYmxlZEZyb21gLCBgcm93Qm9sZEZyb21gLCBhbmQgYHJvd0hpZ2hsaWdodGVkRnJvbWAuXHJcbiAgICogQHBhcmFtIGl0ZW1zIEFuIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHNldCBhcyB0aGUgY29tcG9uZW50J3MgaXRlbXMuXHJcbiAgICovXHJcbiAgc2V0SXRlbXMoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGFzRGVmaW5lZENvbHVtbnMoKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG1hcHBlZEl0ZW1zID0gaXRlbXMubWFwKChpdGVtLCBpKSA9PiB0aGlzLl9zZXRJdGVtc01hcEZuKGl0ZW0sIGkpKTtcclxuICAgIHRoaXMuX2l0ZW1zLnNldChtYXBwZWRJdGVtcyk7XHJcbiAgICB0aGlzLl9zb3J0ZWRJdGVtcy5zZXQobWFwcGVkSXRlbXMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNYXBzIHJhdyBpdGVtIGRhdGEgdG8gYW4ge0BsaW5rIEFyZFRhYmxlUm93fSBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gcmF3SXRlbURhdGEgLSBUaGUgcmF3IGRhdGEgb2YgdGhlIGl0ZW0uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBpdGVtLlxyXG4gICAqIEByZXR1cm5zIHtBcmRUYWJsZVJvd30gUmV0dXJucyBhbiBBcmRUYWJsZVJvdyBvYmplY3Qgd2l0aCBtYXBwZWQgcHJvcGVydGllcy5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NldEl0ZW1zTWFwRm4ocmF3SXRlbURhdGE6IGFueSwgaW5kZXg6IG51bWJlcik6IEFyZFRhYmxlUm93IHtcclxuICAgIC8vZ2V0IGRhdGFcclxuICAgIGNvbnN0IFtkYXRhLCBkYXRhQ29sdW1uc10gPSB0aGlzLl9nZXRSb3dEYXRhKHJhd0l0ZW1EYXRhLCBpbmRleCk7XHJcblxyXG4gICAgLy9nZXQgYm9sZFxyXG4gICAgY29uc3Qgcm93Qm9sZEZyb21QYXRoID0gdGhpcy5fYXJkUGFyZW50Q29tcC5yb3dCb2xkRnJvbSgpID8/IHRoaXMuX2FyZFBhcmVudENvbXAuREVGQVVMVFMucm93Qm9sZEZyb207XHJcbiAgICBsZXQgYm9sZCA9IHJlc29sdmVQYXRoKHJhd0l0ZW1EYXRhLCByb3dCb2xkRnJvbVBhdGgpO1xyXG4gICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuaW52ZXJ0Um93Qm9sZCgpKSB7XHJcbiAgICAgIGJvbGQgPSAhYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICAvL2dldCBkaXNhYmxlZFxyXG4gICAgY29uc3QgZGlzYWJsZWRQYXRoID0gdGhpcy5fYXJkUGFyZW50Q29tcC5yb3dEaXNhYmxlZEZyb20oKSA/PyB0aGlzLl9hcmRQYXJlbnRDb21wLkRFRkFVTFRTLnJvd0Rpc2FibGVkRnJvbTtcclxuICAgIGxldCBkaXNhYmxlZCA9IGV2YWx1YXRlKHJlc29sdmVQYXRoKHJhd0l0ZW1EYXRhLCBkaXNhYmxlZFBhdGgpKTtcclxuICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmludmVydFJvd0Rpc2FibGVkKCkpIHtcclxuICAgICAgZGlzYWJsZWQgPSAhZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBBcmRUYWJsZVJvdyhyYXdJdGVtRGF0YSwgaW5kZXgsIGRhdGEsIGRhdGFDb2x1bW5zLCBkaXNhYmxlZCwgYm9sZCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBkYXRhIGZvciBhIHJvdyBiYXNlZCBvbiBkYXRhIGNvbHVtbnMgY29uZmlndXJhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSByYXdJdGVtRGF0YSAtIFRoZSByYXcgZGF0YSBvZiB0aGUgaXRlbS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0uXHJcbiAgICogQHJldHVybnMge2FueVtdfSBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHJvdyBkYXRhLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0Um93RGF0YShyYXdJdGVtRGF0YTogYW55LCBpbmRleDogbnVtYmVyKTogW2FueVtdLCBUYWJsZURhdGFDb2x1bW5bXV0ge1xyXG4gICAgY29uc3QgZGF0YTogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IF9jb2xzID0gdGhpcy5fZGF0YUNvbHVtbnMoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX2NvbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZGF0YUNvbHVtbiA9IF9jb2xzW2ldO1xyXG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gZGF0YUNvbHVtbi5kYXRhU291cmNlO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLnRyZWF0RGF0YVNvdXJjZUFzU3RyaW5nKCkpIHtcclxuICAgICAgICAgIGRhdGEucHVzaChyYXdJdGVtRGF0YVtzb3VyY2VQYXRoXSk7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YS5wdXNoKHJlc29sdmVQYXRoKHJhd0l0ZW1EYXRhLCBzb3VyY2VQYXRoKSk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNvdXJjZVBhdGgudHlwZSA9PT0gJ2F1dG9jb3VudCcpIHtcclxuICAgICAgICBkYXRhLnB1c2goaW5kZXggKyAxKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc291cmNlUGF0aC50eXBlID09PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgZGF0YS5wdXNoKHsgX2FyZENoZWNrYm94OiB0cnVlLCBpbmRleCB9KTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzb3VyY2VTdHJpbmcgPSB0eXBlb2Ygc291cmNlUGF0aCA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShzb3VyY2VQYXRoKSA6IHNvdXJjZVBhdGg7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQVJELUZUNTA1MjogVW5leHBlY3RlZCBkYXRhIHNvdXJjZSBcIiR7c291cmNlU3RyaW5nfVwiIGF0IGluZGV4ICR7aX0uYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW2RhdGEsIHRoaXMuX2RhdGFDb2x1bW5zKCldO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBXcml0ZXMgYSBuZXcgdmFsdWUgdG8gdGhlIGl0ZW0gc3RvcmFnZS4gU2VsZWN0cyB0aGUgY29ycmVjdCBpdGVtcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdmFsdWVzLCB3YXJuaW5nIHRoZSB1c2VyIGlmIHRoZSB2YWx1ZSBpcyBub3QgZm91bmQuXHJcbiAgICogQHBhcmFtIGluZGV4ZXMgVGhlIHZhbHVlIG9mIHRoZSBuZ01vZGVsIHRvIHNldC5cclxuICAgKi9cclxuICB3cml0ZVZhbHVlKGluZGV4ZXM6IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mb3JjZVVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNlbGVjdEl0ZW0oLi4uaW5kZXhlcyk7XHJcbiAgfVxyXG5cclxuICAvLyEgc2VsZWN0aW5nIGl0ZW1zXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGFuIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gaW5kZXggaXMgc2VsZWN0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGNoZWNrLlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBfdHJ1ZV8gaWYgdGhlIGl0ZW0gaXMgc2VsZWN0ZWQsIG90aGVyd2lzZSBfZmFsc2VfLlxyXG4gICAqL1xyXG4gIGlzSXRlbVNlbGVjdGVkKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMoKS5zb21lKGl0ZW0gPT4gaXRlbS5pbmRleCgpID09PSBpbmRleCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdHMgYWxsIGl0ZW1zLlxyXG4gICAqXHJcbiAgICogQWNjb3VudHMgZm9yIHRoZSBsaW1pdCBvZiBjb25jdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMgZGVmaW5lZCBieSB0aGUgcGFyZW50IGNvbXBvbmVudC5cclxuICAgKiBAcmV0dXJucyBhIHR1cGxlIGNvbnRhaW5pbmcgdHdvIGFycmF5czpcclxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIHNlbGVjdGVkLlxyXG4gICAqICogQW4gYXJyYXkgb2YgaXRlbXMgZmFpbGVkIHRvIHNlbGVjdC5cclxuICAgKi9cclxuICBzZWxlY3RBbGwoKTogW2FueVtdLCBhbnlbXV0ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0SXRlbSguLi50aGlzLl9pdGVtcygpLm1hcCh2ID0+IHYuaW5kZXgoKSkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVbnNlbGVjdHMgYWxsIHNlbGVjdGVkIGl0ZW1zLlxyXG4gICAqXHJcbiAgICogSWYgdGhlIHBhcmVudCBjb21wb25lbnQgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHZhbHVlIHRvIGJlIHNlbGVjdGVkIGF0IGFsbCB0aW1lcywgdGhlIGZpcnN0IHNlbGVjdGVkIGl0ZW1zIGlzIGxlZnQgc2VsZWN0ZWQuXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbXMgY2xlYXJlZCwgbWFwcGVkIHRvIG9ubHkgdGhlaXIgdmFsdWVzLlxyXG4gICAqL1xyXG4gIHVuc2VsZWN0QWxsKCk6IGFueVtdIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc2VsZWN0ZWQpIHtcclxuICAgICAgaXRlbS5zZWxlY3RlZC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUoc2VsZWN0ZWQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVbnNlbGVjdHMgYWxsIHNlbGVjdGVkIGl0ZW1zLCBubyBtYXR0ZXIgd2hhdCB0aGUgY29tcG9uZW50IHNldHRpbmdzIGFyZS5cclxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBpdGVtcyBjbGVhcmVkLCBtYXBwZWQgdG8gb25seSB0aGVpciB2YWx1ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZm9yY2VVbnNlbGVjdEFsbCgpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHNlbGVjdGVkKSB7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXNUb1ZhbHVlKHNlbGVjdGVkKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0cyBvbmUgb3IgbXVsdGlwbGUgaXRlbXMuXHJcbiAgICpcclxuICAgKiBBY2NvdW50cyBmb3IgdGhlIGxpbWl0IG9mIGNvbmN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcyBkZWZpbmVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGluZGV4ZXMgQSByZXN0IG9wZXJhdG9yIGFycmF5IG9mIGl0ZW0gaW5kZXhlcyB0byBiZSBzZWxlY3RlZC5cclxuICAgKiBAcmV0dXJucyBhIHR1cGxlIGNvbnRhaW5pbmcgdHdvIGFycmF5czpcclxuICAgKiAtIEFuIGFycmF5IG9mIGl0ZW1zIHNlbGVjdGVkLlxyXG4gICAqIC0gQW4gYXJyYXkgb2YgaXRlbXMgZmFpbGVkIHRvIHNlbGVjdC5cclxuICAgKi9cclxuICBzZWxlY3RJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogW2FueVtdLCBhbnlbXV0ge1xyXG4gICAgY29uc3QgaXRlbXNUb0JlU2VsZWN0ZWQgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKCkgJiYgaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KCkpKTtcclxuICAgIGlmICh0aGlzLmlzSXRlbUxpbWl0UmVhY2hlZCgpKSB7XHJcbiAgICAgIHJldHVybiBbW10sIHRoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1RvQmVTZWxlY3RlZCldO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpdGVtc1NlbGVjdGVkQ291bnQgPSAwO1xyXG4gICAgY29uc3QgaXRlbXNTZWxlY3RlZCA9IFtdO1xyXG4gICAgbGV0IGl0ZW1zTGVmdFVudGlsTGltaXQgPSAodGhpcy5fYXJkUGFyZW50Q29tcC5tYXhTZWxlY3RlZEl0ZW1zKCkgPz8gSW5maW5pdHkpIC0gdGhpcy5zZWxlY3RlZEl0ZW1zKCkubGVuZ3RoO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVNlbGVjdGVkKSB7XHJcbiAgICAgIGl0ZW1zU2VsZWN0ZWRDb3VudCsrO1xyXG4gICAgICBpZiAoaXRlbS5zZWxlY3RlZCgpKSBjb250aW51ZTtcclxuICAgICAgaWYgKGl0ZW1zTGVmdFVudGlsTGltaXQgPD0gMCkge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGl0ZW1zTGVmdFVudGlsTGltaXQtLTtcclxuICAgICAgaXRlbS5zZWxlY3RlZC5zZXQodHJ1ZSk7XHJcbiAgICAgIGl0ZW1zU2VsZWN0ZWQucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpdGVtc0ZhaWxlZFRvU2VsZWN0ID0gaXRlbXNUb0JlU2VsZWN0ZWQuc2xpY2UoaXRlbXNTZWxlY3RlZENvdW50IC0gMSk7XHJcbiAgICByZXR1cm4gW3RoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1NlbGVjdGVkKSwgdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zRmFpbGVkVG9TZWxlY3QpXTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVW5zZWxlY3RzIG9uZSBvciBtdWx0aXBsZSBpdGVtcy5cclxuICAgKiBAcGFyYW0gaXRlbXMgQSByZXN0IG9wZXJhdG9yIGFycmF5IG9mIGl0ZW0gaW5kZXhlcyB0byBiZSB1bnNlbGVjdGVkLlxyXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW1zIHVuc2VsZWN0ZWQsIG1hcHBlZCB0byBvbmx5IHRoZWlyIHZhbHVlcy5cclxuICAgKi9cclxuICB1bnNlbGVjdEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiBhbnlbXSB7XHJcbiAgICBjb25zdCBpdGVtc1RvQmVVbnNlbGVjdGVkID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpbmRleGVzLmluY2x1ZGVzKGl0ZW0uaW5kZXgoKSkpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVVuc2VsZWN0ZWQpIHtcclxuICAgICAgaXRlbS5zZWxlY3RlZC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUoaXRlbXNUb0JlVW5zZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICAvLyEgaGlnaGxpZ2h0aW5nIGl0ZW1zXHJcbiAgLyoqXHJcbiAgICogVW5oaWdobGlnaHRzIGFsbCBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgdW5oaWdobGlnaHRBbGwoKTogdm9pZCB7XHJcbiAgICBjb25zdCBoaWdobGlnaHRlZCA9IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtcygpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGhpZ2hsaWdodGVkKSB7XHJcbiAgICAgIGl0ZW0uaGlnaGxpZ2h0ZWQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyB0aGUgZ2l2ZW4gaXRlbSwgd2hpbGUgdW5oaWdobGlnaHRpbmcgYWxsIG90aGVyIGl0ZW1zLiBEb2VzIG5vdGhpbmcgd2hlbiB0aGUgaXRlbSBpcyBkaXNhYmxlZC5cclxuICAgKiBAcGFyYW0gaXRlbSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gYmUgaGlnaGxpZ2h0ZWQuXHJcbiAgICogQHJldHVybnMgVGhlIGhpZ2hsaWdodGVkIGl0ZW0uXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0U2luZ2xlSXRlbShpbmRleDogbnVtYmVyKTogQXJkVGFibGVSb3cgfCBudWxsIHtcclxuICAgIHRoaXMudW5oaWdobGlnaHRBbGwoKTtcclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaW5kZXgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIGFsbCBnaXZlbiBpdGVtcy5cclxuICAgKiBAcGFyYW0gaXRlbXMgQSByZXN0IG9wZXJhdG9yIGFycmF5IG9mIGl0ZW0gaW5kZXhlcyB0byBiZSBoaWdobGlnaHRlZC5cclxuICAgKiBAcmV0dXJucyBUaGUgbGFzdCBoaWdobGlnaHRlZCBpdGVtLlxyXG4gICAqL1xyXG4gIGhpZ2hsaWdodEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiBBcmRUYWJsZVJvdyB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2l0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KCkpKTtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xyXG4gICAgICBpdGVtLmhpZ2hsaWdodGVkLnNldCh0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtcy5sYXN0KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVuaGlnaGxpZ2h0cyBhbGwgZ2l2ZW4gaXRlbXMuXHJcbiAgICogQHBhcmFtIGl0ZW1zIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgdW5oaWdobGlnaHRlZC5cclxuICAgKi9cclxuICB1bmhpZ2hsaWdodEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpbmRleGVzLmluY2x1ZGVzKGl0ZW0uaW5kZXgoKSkpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGlmICghaXRlbSB8fCAhaXRlbS5oaWdobGlnaHRlZCgpKSByZXR1cm47XHJcblxyXG4gICAgICBpdGVtLmhpZ2hsaWdodGVkLnNldChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgdGhlIGZpcnN0IGl0ZW0gb3V0IG9mIGFsbCBpdGVtcy5cclxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cclxuICAgKi9cclxuICBoaWdobGlnaHRGaXJzdEl0ZW0oKTogQXJkVGFibGVSb3cgfCBudWxsIHtcclxuICAgIHRoaXMudW5oaWdobGlnaHRBbGwoKTtcclxuXHJcbiAgICBjb25zdCBpdGVtVG9IaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodGFibGVJdGVtcygpLmZpcnN0KCkuaW5kZXgoKTtcclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaXRlbVRvSGlnaGxpZ2h0KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyB0aGUgbGFzdCBpdGVtIG91dCBvZiBhbGwgaXRlbXMuXHJcbiAgICogQHJldHVybnMgVGhlIGhpZ2hsaWdodGVkIGl0ZW0uXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0TGFzdEl0ZW0oKTogQXJkVGFibGVSb3cgfCBudWxsIHtcclxuICAgIHRoaXMudW5oaWdobGlnaHRBbGwoKTtcclxuXHJcbiAgICBjb25zdCBpdGVtVG9IaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodGFibGVJdGVtcygpLmxhc3QoKS5pbmRleCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SXRlbShpdGVtVG9IaWdobGlnaHQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIGFsbCBub24tZGlzYWJsZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0QWxsSXRlbXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpdGVtc1RvSGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHRhYmxlSXRlbXMoKS5tYXAodiA9PiB2LmluZGV4KCkpO1xyXG4gICAgdGhpcy5oaWdobGlnaHRJdGVtKC4uLml0ZW1zVG9IaWdobGlnaHQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIHRoZSBuZXh0IG5vbi1kaXNhYmxlZCBpdGVtIGRlZmluZWQgYnkgdGhlIG9mZnNldCBhbW91bnQuXHJcbiAgICpcclxuICAgKiBJZiBgaGFzU2hpZnRgIGlzIHNldCB0byB0cnVlLCBhbGwgb3JpZ2luYWxseSBoaWdobGlnaHRlZCBpdGVtcyBhcmUga2VwdC4gT3RoZXJ3aXNlLCBhbGwgb3JpZ2luYWwgaXRlbXMgYXJlIHVuc2VsZWN0ZWQuXHJcbiAgICogQHBhcmFtIG9mZnNldCBUaGUgYW1vdW50IG9mIGl0ZW1zIHRvIG9mZnNldCB0aGUgaGlnaGxpZ2h0IGJ5LlxyXG4gICAqIEBwYXJhbSBoYXNTaGlmdCBXaGV0aGVyIHRoZSB1c2VyIGhhcyB0aGUgc2hpZnQga2V5IHByZXNzZWQuXHJcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gaGlnaGxpZ2h0ZWQuXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0TmV4dEl0ZW0ob2Zmc2V0OiBudW1iZXIsIGhhc1NoaWZ0PzogYm9vbGVhbik6IEFyZFRhYmxlUm93IHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuaXNBbnlJdGVtSGlnaGxpZ2h0ZWQoKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5oaWdobGlnaHRlZEl0ZW1zKCkubGFzdCgpO1xyXG4gICAgY29uc3QgaXRlbXNXaXRob3V0RGlzYWJsZWQgPSB0aGlzLl9pdGVtcygpLmZpbHRlcihcclxuICAgICAgaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpICYmICghdGhpcy5pc0l0ZW1MaW1pdFJlYWNoZWQoKSB8fCBpdGVtLnNlbGVjdGVkKCkpXHJcbiAgICApO1xyXG4gICAgY29uc3QgY3VycmVudEluZGV4SW5JdGVtcyA9IGl0ZW1zV2l0aG91dERpc2FibGVkLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaW5kZXgoKSA9PT0gY3VycmVudEl0ZW0uaW5kZXgoKSk7XHJcblxyXG4gICAgbGV0IG5leHRJdGVtSW5kZXggPSBjdXJyZW50SW5kZXhJbkl0ZW1zICsgb2Zmc2V0O1xyXG4gICAgaWYgKG5leHRJdGVtSW5kZXggPj0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoKSB7XHJcbiAgICAgIG5leHRJdGVtSW5kZXggLT0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHRJdGVtSW5kZXggPCAwKSB7XHJcbiAgICAgIG5leHRJdGVtSW5kZXggKz0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbVRvSGlnaGxpZ2h0ID0gaXRlbXNXaXRob3V0RGlzYWJsZWRbbmV4dEl0ZW1JbmRleF07XHJcblxyXG4gICAgaWYgKGhhc1NoaWZ0KSB7XHJcbiAgICAgIGlmIChpdGVtVG9IaWdobGlnaHQuaGlnaGxpZ2h0ZWQoKSkge1xyXG4gICAgICAgIHRoaXMudW5oaWdobGlnaHRJdGVtKG5leHRJdGVtSW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0obmV4dEl0ZW1JbmRleCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRTaW5nbGVJdGVtKG5leHRJdGVtSW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNvcnRpbmdcclxuICBwcml2YXRlIF9jdXJyZW50U29ydENvbHVtbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY3VycmVudFNvcnRUeXBlOiBTb3J0VHlwZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICB0b2dnbGVDdXJyZW50U29ydENvbHVtbihjb2x1bW46IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4pIHtcclxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9PT0gU29ydFR5cGUuQXNjZW5kaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gU29ydFR5cGUuRGVzY2VuZGluZztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50U29ydFR5cGUgPSBTb3J0VHlwZS5Bc2NlbmRpbmc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fZ2VuZXJhdGVTb3J0ZWRSb3dzKHRydWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9IGNvbHVtbjtcclxuICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IFNvcnRUeXBlLkFzY2VuZGluZztcclxuICAgIHRoaXMuX2dlbmVyYXRlU29ydGVkUm93cygpO1xyXG4gIH1cclxuICByZXNldFNvcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9IG51bGw7XHJcbiAgICB0aGlzLl9jdXJyZW50U29ydFR5cGUgPSBudWxsO1xyXG4gICAgdGhpcy5fc29ydGVkSXRlbXMuc2V0KFsuLi50aGlzLml0ZW1zKCldKTtcclxuICB9XHJcbiAgZ2V0Q29sdW1uU29ydFR5cGUoY29sdW1uOiBudW1iZXIpOiBTb3J0VHlwZSB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTb3J0VHlwZTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBwcml2YXRlIF9nZW5lcmF0ZVNvcnRlZFJvd3MoanVzdFJldmVyc2U/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoanVzdFJldmVyc2UpIHtcclxuICAgICAgdGhpcy5fc29ydGVkSXRlbXMoKS5yZXZlcnNlKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNvcnRDb2x1bW5JbmRleCA9IHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uO1xyXG4gICAgaWYgKGlzTnVsbChzb3J0Q29sdW1uSW5kZXgpIHx8ICF0aGlzLl9jdXJyZW50U29ydFR5cGUpIHtcclxuICAgICAgdGhpcy5fc29ydGVkSXRlbXMuc2V0KHRoaXMuaXRlbXMoKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNvcnRDb2x1bW4gPSB0aGlzLl9kYXRhQ29sdW1ucygpW3NvcnRDb2x1bW5JbmRleF07XHJcbiAgICBpZiAoIXNvcnRDb2x1bW4pIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBBUkQtSVM1MDU5OiBFbmNvdW50ZXJlZCBhbiBpc3N1ZSBpbiA8YXJkLXRhYmxlPjogY291bGQgbm90IGZpbmQgdGhlIGNvbHVtbiB3aXRoIGluZGV4ICR7c29ydENvbHVtbkluZGV4fS4gVGhpcyBpcyBtb3N0IGxpa2VseSBhbiBBcmRpdW0gVUkgYnVnLCBwbGVhc2UgcmVwb3J0IGl0IHRvIHRoZSBjcmVhdG9ycy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5fY3VycmVudFNvcnRUeXBlID09PSBTb3J0VHlwZS5Bc2NlbmRpbmcgPyAxIDogLTE7XHJcbiAgICBjb25zdCBzb3J0Rm4gPVxyXG4gICAgICBzb3J0Q29sdW1uLnNvcnRGbiA/P1xyXG4gICAgICAoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiBkaXJlY3Rpb247XHJcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTEgKiBkaXJlY3Rpb247XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3NvcnRlZEl0ZW1zLnNldChbLi4udGhpcy5pdGVtcygpXS5zb3J0KChhLCBiKSA9PiBzb3J0Rm4oYS5kYXRhKClbc29ydENvbHVtbkluZGV4XSwgYi5kYXRhKClbc29ydENvbHVtbkluZGV4XSkpKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -11,7 +11,7 @@ import { Overlay, ScrollStrategyOptions, OverlayConfig, OverlayModule } from '@a
|
|
|
11
11
|
import { TemplatePortal, ComponentPortal } from '@angular/cdk/portal';
|
|
12
12
|
import { Subject, merge, takeUntil, startWith, BehaviorSubject } from 'rxjs';
|
|
13
13
|
import { isDefined, any, isPrimitive, isArray, evaluate, isObject, isPromise, isFunction, isAnyString, isNull, isNumber, isString, isRegExp } from 'simple-bool';
|
|
14
|
-
import resolvePath from 'resolve-object-path';
|
|
14
|
+
import { resolvePath } from 'resolve-object-path';
|
|
15
15
|
import { roundToPrecision, roundToMultiple } from 'more-rounding';
|
|
16
16
|
import * as Color from 'color';
|
|
17
17
|
import { keyToString } from 'key-display-names';
|