@cuby-ui/core 0.0.563 → 0.0.565
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.
|
@@ -427,7 +427,7 @@ export class CuiCombinedTextBlockTool {
|
|
|
427
427
|
return;
|
|
428
428
|
}
|
|
429
429
|
const item = this.wrapper.children.item(0);
|
|
430
|
-
const isItemEmpty = !item
|
|
430
|
+
const isItemEmpty = !item?.textContent?.length;
|
|
431
431
|
this.wrapper.dataset['empty'] = `${isItemEmpty}`;
|
|
432
432
|
}
|
|
433
433
|
getPlaceholder(config) {
|
|
@@ -437,4 +437,4 @@ export class CuiCombinedTextBlockTool {
|
|
|
437
437
|
return config.placeholder ?? DEFAULT_PLACEHOLDER;
|
|
438
438
|
}
|
|
439
439
|
}
|
|
440
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZWQtdGV4dC1ibG9jay50b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9lZGl0b3IvdG9vbHMvY29tYmluZWQtdGV4dC1ibG9jay50b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNuQixNQUFNLGNBQWMsQ0FBQztBQU90QixPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuRSxNQUFNLE9BQU8sd0JBQXdCO0lBc0JqQyxZQUFZLE9BQWdCO1FBckJYLFFBQUcsR0FBRyxNQUFNLENBQUM7UUFDYixrQkFBYSxHQUFHLEdBQUcsQ0FBQztRQUNwQiw4QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDOUIsK0JBQTBCLEdBQUcsbUJBQW1CLENBQUM7UUFFakQsbUJBQWMsR0FBRztZQUM5QixPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLElBQUk7U0FDdEIsQ0FBQztRQVFlLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTdCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQW1LbEIsd0JBQW1CLEdBQUcsQ0FBQyxJQUFZLEVBQXVCLEVBQUU7WUFDekUsSUFBSSxTQUFTLEdBQStDLElBQUksQ0FBQztZQUVqRSxPQUFPLEdBQUcsRUFBRTtnQkFDUixJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNaLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztnQkFFRCxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxl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QWMsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV0RyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRWhFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ2pGLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUMxRCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBRTlDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFrQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSw0QkFBNEIsQ0FBQztRQUN0RSxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsV0FBVyxJQUFJLG1CQUFtQixDQUFDO0lBQ3JELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHR5cGUgeyBDdWlOdWxsYWJsZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgdHlwZSB7IEFQSSwgQmxvY2tUb29sLCBCbG9ja1Rvb2xDb25zdHJ1Y3Rvck9wdGlvbnMsIFRvb2xDb25maWcgfSBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xuXG5pbXBvcnQge1xuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0ssXG4gICAgQ09NQklORURfVEVYVF9CTE9DS19BRERFRCxcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsXG4gICAgQ09NQklORURfVEVYVF9CTE9DS19QQVJULFxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfUkVNT1ZFRCxcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1VQREFURUQsXG4gICAgREVGQVVMVF9QTEFDRUhPTERFUixcbiAgICBERUZBVUxUX1JFQURPTkxZX1BMQUNFSE9MREVSLFxuICAgIFNQTElUX01BWF9MRU5HVEhcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgICBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGEsXG4gICAgQ3VpQ29tYmluZWRQYXJ0QmxvY2ssXG4gICAgQ3VpTXV0YXRpb25BY3Rpb25zLFxuICAgIEN1aU11dGF0aW9uQ2FsbGJhY2tcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUlkLCBtZXJnZVNtYWxsQ2h1bmtzLCBzcGxpdEhUTUwgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDdWlDb21iaW5lZFRleHRCbG9ja1Rvb2wgaW1wbGVtZW50cyBCbG9ja1Rvb2wge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVEFHID0gJ3NwYW4nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgREVCT1VOQ0VfVElNRSA9IDM1MDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9DSElMRF9DT1VOVF9GT1JfRU1QVFkgPSAxO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUExBQ0VIT0xERVJfQVRUUklCVVRFX05BTUUgPSAncGxhY2Vob2xkZXJBY3RpdmUnO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBtdXRhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogQVBJO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICBwcml2YXRlIHdyYXBwZXI/OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlcjtcbiAgICBwcml2YXRlIGxhc3RCbG9ja0VsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBwcml2YXRlIHNraXBOZXh0VXBkYXRlRW1pdCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogdW5rbm93bikge1xuICAgICAgICBjb25zdCBib2R5ID0gb3B0aW9ucyBhcyBCbG9ja1Rvb2xDb25zdHJ1Y3Rvck9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XG5cbiAgICAgICAgdGhpcy5yZWFkT25seSA9IGJvZHkucmVhZE9ubHk7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKGJvZHkuY29uZmlnKTtcbiAgICAgICAgdGhpcy5hcGkgPSBib2R5LmFwaTtcbiAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgaWQ6IGRhdGEuaWQgfHwgZ2VuZXJhdGVJZCgpLFxuICAgICAgICAgICAgdGV4dEJsb2NrczogZGF0YS50ZXh0QmxvY2tzIHx8IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb252ZXJ0RGVmYXVsdERhdGFUb0N1c3RvbShkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBpc0lubGluZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGlzUmVhZE9ubHlTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGVuYWJsZUxpbmVCcmVha3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCB0b29sYm94KCk6IHsgaWNvbjogc3RyaW5nOyB0aXRsZTogc3RyaW5nIH0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWNvbjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk04IDlWNy4yQzggNy4wODk1NCA4LjA4OTU0IDcgOC4yIDdMMTIgN00xNiA5VjcuMkMxNiA3LjA4OTU0IDE1LjkxMDUgNyAxNS44IDdMMTIgN00xMiA3TDEyIDE3TTEyIDE3SDEwTTEyIDE3SDE0XCI+PC9wYXRoPjwvc3ZnPicsXG4gICAgICAgICAgICB0aXRsZTogJ1RleHQnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgcGFzdGVDb25maWcoKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhZ3M6IFsnUCddXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFzdGUoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC50eXBlICE9PSAndGFnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dCA9IGV2ZW50LmRldGFpbC5kYXRhLnRleHRDb250ZW50O1xuICAgICAgICBjb25zdCBsYXN0QmxvY2tJbmRleCA9IHRoaXMuZGF0YS50ZXh0QmxvY2tzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHRoaXMuZGF0YS50ZXh0QmxvY2tzW2xhc3RCbG9ja0luZGV4XTtcbiAgICAgICAgY29uc3QgYmxvY2tJZCA9IGxhc3RCbG9jaz8uaWQgfHwgZ2VuZXJhdGVJZCgpO1xuXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnNwbGljZShsYXN0QmxvY2tJbmRleCwgMSwgdGhpcy5nZXRCbG9ja1BhcnRPYmplY3QoYmxvY2tJZCwgdGV4dCkpO1xuXG4gICAgICAgIHRoaXMuc2tpcE5leHRVcGRhdGVFbWl0ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUV4aXN0aW5nQmxvY2soYmxvY2tJZCwgdGV4dCwgQm9vbGVhbihsYXN0QmxvY2s/LmlkKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHRoaXMud3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLndyYXBwZXIuY2xhc3NMaXN0LmFkZChDT01CSU5FRF9URVhUX0JMT0NLKTtcbiAgICAgICAgdGhpcy53cmFwcGVyLmRhdGFzZXRbdGhpcy5QTEFDRUhPTERFUl9BVFRSSUJVVEVfTkFNRV0gPSB0aGlzLmFwaS5pMThuLnQodGhpcy5wbGFjZWhvbGRlcik7XG5cbiAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIuY29udGVudEVkaXRhYmxlID0gJ3RydWUnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNFbXB0eUJsb2NrID0gIXRoaXMuZGF0YS50ZXh0QmxvY2tzLmxlbmd0aDtcblxuICAgICAgICBpZiAoaXNFbXB0eUJsb2NrKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5wdXNoKHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KGdlbmVyYXRlSWQoKSwgJycpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyQmxvY2tzKHRoaXMuZGF0YS50ZXh0QmxvY2tzKTtcbiAgICAgICAgdGhpcy5jaGVja0lzRWRpdG9yRW1wdHkoKTtcblxuICAgICAgICBpZiAoIXRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRNdXRhdGlvbkNhbGxiYWNrKHRoaXMuREVCT1VOQ0VfVElNRSk7XG5cbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLm9uTXV0YXRpb25FdmVudC5iaW5kKHRoaXMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy53cmFwcGVyLCB0aGlzLm11dGF0aW9uQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG1lcmdlKGJsb2Nrc0RhdGE6IEN1aUNvbWJpbmVkUGFydEJsb2NrW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBibG9ja3NUZXh0Q29udGVudCA9ICcnO1xuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2NrcyA9IFtdO1xuXG4gICAgICAgIGJsb2Nrc0RhdGEuZm9yRWFjaCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGJsb2Nrc1RleHRDb250ZW50ICs9IGJsb2NrLmRhdGEudGV4dDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndyYXBwZXIuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMud3JhcHBlci5jaGlsZE5vZGVzLml0ZW0oaSk7XG5cbiAgICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MU3BhbkVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLS07XG4gICAgICAgICAgICBibG9ja3NUZXh0Q29udGVudCA9IG5vZGUuaW5uZXJIVE1MICsgYmxvY2tzVGV4dENvbnRlbnQ7XG4gICAgICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFydHMgPSBibG9ja3NUZXh0Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIID8gW2Jsb2Nrc1RleHRDb250ZW50XSA6IHNwbGl0SFRNTChibG9ja3NUZXh0Q29udGVudCk7XG5cbiAgICAgICAgcGFydHMuZm9yRWFjaCgocGFydDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja09iamVjdCA9IHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KGdlbmVyYXRlSWQoKSwgcGFydCk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnB1c2goYmxvY2tPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlbmRlckJsb2Nrcyh0aGlzLmRhdGEudGV4dEJsb2Nrcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoYmxvY2tDb250ZW50OiBIVE1MRWxlbWVudCk6IEN1aUNvbWJpbmVkUGFydEJsb2NrW10ge1xuICAgICAgICBjb25zdCB0ZXh0QmxvY2tzOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdID0gW107XG5cbiAgICAgICAgYmxvY2tDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5UQUcpLmZvckVhY2goKHNwYW46IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICB0ZXh0QmxvY2tzLnB1c2godGhpcy5nZXRCbG9ja1BhcnRPYmplY3Qoc3Bhbi5kYXRhc2V0Wydsb2NhbElkJ10hLCBzcGFuLmlubmVySFRNTCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGV4dEJsb2NrcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IGJsb2NrSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MuZm9yRWFjaCgoYmxvY2s6IEN1aUNvbWJpbmVkUGFydEJsb2NrKSA9PiB7XG4gICAgICAgICAgICBibG9ja0lkcy5hZGQoYmxvY2suaWQgfHwgJycpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlbW92ZUJsb2NrcyhibG9ja0lkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk11dGF0aW9uRXZlbnQoY2FsbGJhY2s6IChtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pID0+IHZvaWQsIG11dGF0aW9uTGlzdDogTXV0YXRpb25SZWNvcmRbXSk6IHZvaWQge1xuICAgICAgICBpZiAobXV0YXRpb25MaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2goKG11dGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5zZXQoZ2VuZXJhdGVJZCgpLCBtdXRhdGlvbik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5zZXQobXV0YXRpb24udGFyZ2V0LCBtdXRhdGlvbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNhbGxiYWNrKG11dGF0aW9uTGlzdCk7XG4gICAgICAgIHRoaXMuY2hlY2tJc0VkaXRvckVtcHR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRNdXRhdGlvbkNhbGxiYWNrID0gKHdhaXQ6IG51bWJlcik6IEN1aU11dGF0aW9uQ2FsbGJhY2sgPT4ge1xuICAgICAgICBsZXQgdGltZW91dElkOiBDdWlOdWxsYWJsZTxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj4gPSBudWxsO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oYW5kbGVNdXRhdGlvbnMoKSwgd2FpdCk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlTXV0YXRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdXBkYXRlZEVsZW1lbnRzLCByZW1vdmVkRWxlbWVudHNJZHMgfSA9IHRoaXMuZ2V0TXV0YXRpb25BY3Rpb25zKFsuLi50aGlzLmNoYW5nZXMudmFsdWVzKCldKTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkUGFydHMgPSB0aGlzLnRha2VTcGxpdHRlZFBhcnRzUmVzdWx0KHVwZGF0ZWRFbGVtZW50cyk7XG4gICAgICAgICAgICBjb25zdCB7IHNwbGl0dGVkUGFydHNSZXN1bHQsIHVwZGF0ZWRFbGVtZW50c1Jlc3VsdCwgcmVtb3ZlZEVsZW1lbnRzSWRzUmVzdWx0IH0gPSB0aGlzLnRha2VNZXJnZWRSZXN1bHQoXG4gICAgICAgICAgICAgICAgc3BsaXR0ZWRQYXJ0cyxcbiAgICAgICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmFkZEJsb2NrcyhzcGxpdHRlZFBhcnRzUmVzdWx0LCB1cGRhdGVkRWxlbWVudHNSZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCbG9ja3ModXBkYXRlZEVsZW1lbnRzUmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQmxvY2tzKHJlbW92ZWRFbGVtZW50c0lkc1Jlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuY2xlYXIoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmICghdGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKHRoaXMud3JhcHBlciwgdGhpcy5tdXRhdGlvbkNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRha2VNZXJnZWRSZXN1bHQoXG4gICAgICAgIHNwbGl0dGVkUGFydHM6IEhUTUxFbGVtZW50W10sXG4gICAgICAgIHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50PixcbiAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzOiBTZXQ8c3RyaW5nPlxuICAgICk6IHtcbiAgICAgICAgc3BsaXR0ZWRQYXJ0c1Jlc3VsdDogSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzUmVzdWx0OiBTZXQ8SFRNTEVsZW1lbnQ+O1xuICAgICAgICByZW1vdmVkRWxlbWVudHNJZHNSZXN1bHQ6IFNldDxzdHJpbmc+O1xuICAgIH0ge1xuICAgICAgICBjb25zdCB7IHJlbW92ZWRJZHM6IG1lcmdlUmVtb3ZlZElkcywgdXBkYXRlZEVsZW1lbnRzOiBtZXJnZVVwZGF0ZWRFbGVtZW50cyB9ID0gdGhpcy5hcHBseU1lcmdlU21hbGxDaHVua3MoKTtcblxuICAgICAgICBjb25zdCBub3RSZW1vdmVkQnlNZXJnZSA9IChlbDogSFRNTEVsZW1lbnQpID0+ICFtZXJnZVJlbW92ZWRJZHMuaGFzKGVsLmRhdGFzZXRbJ2xvY2FsSWQnXSA/PyAnJyk7XG5cbiAgICAgICAgY29uc3Qgc3BsaXR0ZWRQYXJ0c1Jlc3VsdCA9IHNwbGl0dGVkUGFydHMuZmlsdGVyKG5vdFJlbW92ZWRCeU1lcmdlKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEVsZW1lbnRzSWRzUmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KFsuLi5yZW1vdmVkRWxlbWVudHNJZHMsIC4uLm1lcmdlUmVtb3ZlZElkc10pO1xuICAgICAgICBjb25zdCB1cGRhdGVkRWxlbWVudHNSZXN1bHQgPSBuZXcgU2V0PEhUTUxFbGVtZW50PihcbiAgICAgICAgICAgIFsuLi51cGRhdGVkRWxlbWVudHMsIC4uLm1lcmdlVXBkYXRlZEVsZW1lbnRzXS5maWx0ZXIobm90UmVtb3ZlZEJ5TWVyZ2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHsgc3BsaXR0ZWRQYXJ0c1Jlc3VsdCwgdXBkYXRlZEVsZW1lbnRzUmVzdWx0LCByZW1vdmVkRWxlbWVudHNJZHNSZXN1bHQgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRha2VTcGxpdHRlZFBhcnRzUmVzdWx0KHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50Pik6IEhUTUxFbGVtZW50W10ge1xuICAgICAgICBjb25zdCBzcGxpdHRlZFBhcnRzOiBIVE1MRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50Q29udGVudDogc3RyaW5nID0gZWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHNwbGl0SFRNTChlbGVtZW50Q29udGVudCk7XG5cbiAgICAgICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0lkID0gZ2VuZXJhdGVJZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gdGhpcy5jcmVhdGVCbG9jayhibG9ja0lkLCBwYXJ0KTtcblxuICAgICAgICAgICAgICAgIHNwbGl0dGVkUGFydHMucHVzaCh0ZXh0RWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBwYXJ0c1swXTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWZ0ZXIoLi4uc3BsaXR0ZWRQYXJ0cyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzcGxpdHRlZFBhcnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlNZXJnZVNtYWxsQ2h1bmtzKCk6IHtcbiAgICAgICAgcmVtb3ZlZElkczogU2V0PHN0cmluZz47XG4gICAgICAgIHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50PjtcbiAgICB9IHtcbiAgICAgICAgY29uc3QgZW1wdHkgPSB7IHJlbW92ZWRJZHM6IG5ldyBTZXQ8c3RyaW5nPigpLCB1cGRhdGVkRWxlbWVudHM6IG5ldyBTZXQ8SFRNTEVsZW1lbnQ+KCkgfTtcblxuICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2h1bmtFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy53cmFwcGVyLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCcuJyArIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCkpO1xuICAgICAgICBjb25zdCBjaHVua0VsZW1lbnRzTWFwID0gbmV3IE1hcChjaHVua0VsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gW2VsZW1lbnQuZGF0YXNldFsnbG9jYWxJZCddISwgZWxlbWVudF0pKTtcbiAgICAgICAgY29uc3QgeyBjaHVua3MsIHJlbW92ZWRJZHMgfSA9IG1lcmdlU21hbGxDaHVua3MoXG4gICAgICAgICAgICBjaHVua0VsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogZWxlbWVudC5kYXRhc2V0Wydsb2NhbElkJ10hLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQuaW5uZXJIVE1MXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICByZW1vdmVkSWRzLmZvckVhY2goKGlkKSA9PiBjaHVua0VsZW1lbnRzTWFwLmdldChpZCk/LnJlbW92ZSgpKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkRWxlbWVudHMgPSBuZXcgU2V0PEhUTUxFbGVtZW50PigpO1xuXG4gICAgICAgIGNodW5rcy5mb3JFYWNoKChjaHVuaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNodW5rRWxlbWVudHNNYXAuZ2V0KGNodW5rLmlkKTtcblxuICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQuaW5uZXJIVE1MID09PSBjaHVuay5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGNodW5rLmNvbnRlbnQ7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMuYWRkKGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4geyByZW1vdmVkSWRzOiBuZXcgU2V0KHJlbW92ZWRJZHMpLCB1cGRhdGVkRWxlbWVudHMgfTtcbiAgICB9XG5cbiAgICAvLyBSSVAgMTMuMDEuMjAyNiAtIHByaXZhdGUgZ2V0TmV4dEluZGV4KCk6IG51bWJlclxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja1BhcnRPYmplY3QoYmxvY2tJZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBDdWlDb21iaW5lZFBhcnRCbG9jayB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogYmxvY2tJZCxcbiAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmVudElkOiB0aGlzLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNdXRhdGlvbkFjdGlvbnMobXV0YXRpb25MaXN0OiBNdXRhdGlvblJlY29yZFtdKTogQ3VpTXV0YXRpb25BY3Rpb25zIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEVsZW1lbnRzID0gbmV3IFNldDxIVE1MRWxlbWVudD4oKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEVsZW1lbnRzSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRPdXRzaWRlRWxlbWVudHM6IE5vZGVbXSA9IFtdO1xuXG4gICAgICAgIHRoaXMubGFzdEJsb2NrRWxlbWVudCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaCgobXV0YXRpb246IE11dGF0aW9uUmVjb3JkKTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVVwZGF0ZWRCbG9ja3MobXV0YXRpb24sIHVwZGF0ZWRFbGVtZW50cywgY2hhbmdlZE91dHNpZGVFbGVtZW50cyk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlbW92ZWRCbG9ja3MobXV0YXRpb24sIHJlbW92ZWRFbGVtZW50c0lkcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmxhc3RCbG9ja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RCbG9ja0VsZW1lbnQgPSB0aGlzLmxhc3RCbG9ja0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGxhc3RCbG9ja0VsZW1lbnQuYXBwZW5kKC4uLmNoYW5nZWRPdXRzaWRlRWxlbWVudHMpO1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRzLmFkZChsYXN0QmxvY2tFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRUb0Jsb2Nrc0VuZChsYXN0QmxvY2tFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMsXG4gICAgICAgICAgICByZW1vdmVkRWxlbWVudHNJZHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENhcmV0VG9CbG9ja3NFbmQoYmxvY2s6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KGJsb2NrLCBibG9jay5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlVXBkYXRlZEJsb2NrcyhcbiAgICAgICAgbXV0YXRpb246IE11dGF0aW9uUmVjb3JkLFxuICAgICAgICB1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4sXG4gICAgICAgIG91dHNpZGVDaGFuZ2VzOiBOb2RlW11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBtdXRhdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKG11dGF0aW9uLnRhcmdldC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBtdXRhdGlvbi50YXJnZXQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwYW4gPSBlbGVtZW50Py5jbG9zZXN0KCcuJyArIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHNwYW4pIHtcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50cy5hZGQoc3Bhbik7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlc091dHNpZGVCbG9jayhlbGVtZW50LCBvdXRzaWRlQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VzT3V0c2lkZUJsb2NrKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBvdXRzaWRlQ2hhbmdlczogTm9kZVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghZWxlbWVudCB8fCB0aGlzLmxhc3RCbG9ja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50ID0gYmxvY2sgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucyhDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0QmxvY2tFbGVtZW50ID0gYmxvY2tFbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRzaWRlQ2hhbmdlcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCbG9ja3Moc3BsaWNlZFBhcnRzOiBIVE1MRWxlbWVudFtdLCB1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzcGxpY2VkUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRlZEJsb2NrczogQ3VpQ29tYmluZWRQYXJ0QmxvY2tbXSA9IHNwbGljZWRQYXJ0cy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0lkID0gYmxvY2suZGF0YXNldFsnbG9jYWxJZCddO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBibG9ja0lkLFxuICAgICAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGJsb2NrLmlubmVySFRNTCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcHJldmlvdXNFbGVtZW50ID0gdXBkYXRlZEVsZW1lbnRzLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaWQgPSBwcmV2aW91c0VsZW1lbnQ/LmRhdGFzZXRbJ2xvY2FsSWQnXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIocHJldmlvdXNFbGVtZW50Py5kYXRhc2V0WydpbmRleCddKSArIDE7XG4gICAgICAgIGNvbnN0IGJsb2NrSW5kZXggPSB0aGlzLmRhdGEudGV4dEJsb2Nrcy5maW5kSW5kZXgoKGJsb2NrKSA9PiBibG9jay5pZCA9PT0gaWQpO1xuXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnNwbGljZShibG9ja0luZGV4LCAwLCAuLi5hZGRlZEJsb2Nrcyk7XG4gICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgYmxvY2tJbmRleCxcbiAgICAgICAgICAgIGJsb2NrczogYWRkZWRCbG9ja3MsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEudGV4dEJsb2Nrc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJsb2Nrcyh1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1cGRhdGVkRWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2tpcE5leHRVcGRhdGVFbWl0KSB7XG4gICAgICAgICAgICB0aGlzLnNraXBOZXh0VXBkYXRlRW1pdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cGRhdGVkQmxvY2tzID0gWy4uLnVwZGF0ZWRFbGVtZW50cy52YWx1ZXMoKV0ubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogYmxvY2suZGF0YXNldFsnbG9jYWxJZCddLFxuICAgICAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGJsb2NrLmlubmVySFRNTCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19VUERBVEVELCB1cGRhdGVkQmxvY2tzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUV4aXN0aW5nQmxvY2soYmxvY2tJZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIGlzQmxvY2tFeGlzdHM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRWxlbWVudCA9IHRoaXMud3JhcHBlci5xdWVyeVNlbGVjdG9yKGBbZGF0YS1sb2NhbC1pZD1cIiR7YmxvY2tJZH1cIl1gKTtcblxuICAgICAgICBpZiAoIWV4aXN0aW5nRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrUGFydE9iamVjdChibG9ja0lkLCB0ZXh0KTtcblxuICAgICAgICBleGlzdGluZ0VsZW1lbnQuaW5uZXJIVE1MID0gdGV4dDtcblxuICAgICAgICBpZiAoaXNCbG9ja0V4aXN0cykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19VUERBVEVELCBbYmxvY2tdKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcbiAgICAgICAgICAgICAgICBibG9ja3M6IFtibG9ja11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJlbW92ZWRCbG9ja3MobXV0YXRpb246IE11dGF0aW9uUmVjb3JkLCByZW1vdmVkRWxlbWVudHNJZHM6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBtdXRhdGlvbi5yZW1vdmVkTm9kZXMuZm9yRWFjaCgobm9kZTogTm9kZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0Wydsb2NhbElkJ107XG5cbiAgICAgICAgICAgIGlmICghYmxvY2tJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzLmFkZChibG9ja0lkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVCbG9ja3MoaWRzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICBpZiAoIWlkcy5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZW1vdmVkRWxlbWVudElkcyA9IFsuLi5pZHMudmFsdWVzKCldO1xuXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzID0gdGhpcy5kYXRhLnRleHRCbG9ja3MuZmlsdGVyKChibG9jaykgPT4gIWlkcy5oYXMoYmxvY2suaWQgfHwgJycpKTtcbiAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19SRU1PVkVELCByZW1vdmVkRWxlbWVudElkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJCbG9ja3MoYmxvY2tzOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghYmxvY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYmxvY2tzLmZvckVhY2goKGJsb2NrOiBDdWlDb21iaW5lZFBhcnRCbG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSB0aGlzLmNyZWF0ZUJsb2NrKGJsb2NrLmlkIHx8IGdlbmVyYXRlSWQoKSwgYmxvY2suZGF0YS50ZXh0KTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLndyYXBwZXIucXVlcnlTZWxlY3RvcignLicgKyBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZCh0ZXh0RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlci5yZXBsYWNlQ2hpbGRyZW4odGV4dEVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcbiAgICAgICAgICAgICAgICBibG9ja3NcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUJsb2NrKGlkOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuVEFHKTtcblxuICAgICAgICB0ZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCk7XG4gICAgICAgIHRleHRFbGVtZW50LmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgIHRleHRFbGVtZW50LmRhdGFzZXRbJ2lkJ10gPSBpZDtcbiAgICAgICAgdGV4dEVsZW1lbnQuZGF0YXNldFsnbG9jYWxJZCddID0gaWQ7XG5cbiAgICAgICAgcmV0dXJuIHRleHRFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydERlZmF1bHREYXRhVG9DdXN0b20oZGF0YTogeyB0ZXh0OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MgPSBkYXRhLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICBibG9jay5pZCA9IGdlbmVyYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBibG9jay5kYXRhLnBhcmVudElkID0gdGhpcy5kYXRhLmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEudGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChkYXRhLnRleHQpO1xuICAgICAgICBsZXQgZWxlbWVudENvbnRlbnQgPSAnJztcblxuICAgICAgICBmcmFnbWVudC5jaGlsZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250ZW50ICs9IG5vZGUudGV4dENvbnRlbnQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnRDb250ZW50ICs9IChub2RlIGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBhcnRzID0gZWxlbWVudENvbnRlbnQubGVuZ3RoIDwgU1BMSVRfTUFYX0xFTkdUSCA/IFtlbGVtZW50Q29udGVudF0gOiBzcGxpdEhUTUwoZWxlbWVudENvbnRlbnQpO1xuXG4gICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tPYmplY3QgPSB0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksIHBhcnQpO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5wdXNoKGJsb2NrT2JqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lzRWRpdG9yRW1wdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy53cmFwcGVyIHx8IHRoaXMud3JhcHBlci5jaGlsZHJlbi5sZW5ndGggPiB0aGlzLk1BWF9DSElMRF9DT1VOVF9GT1JfRU1QVFkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLndyYXBwZXIuY2hpbGRyZW4uaXRlbSgwKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgaXNJdGVtRW1wdHkgPSAhaXRlbS50ZXh0Q29udGVudD8ubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMud3JhcHBlci5kYXRhc2V0WydlbXB0eSddID0gYCR7aXNJdGVtRW1wdHl9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBsYWNlaG9sZGVyKGNvbmZpZzogVG9vbENvbmZpZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnJlYWRvbmx5UGxhY2Vob2xkZXIgPz8gREVGQVVMVF9SRUFET05MWV9QTEFDRUhPTERFUjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWcucGxhY2Vob2xkZXIgPz8gREVGQVVMVF9QTEFDRUhPTERFUjtcbiAgICB9XG59XG4iXX0=
|
|
440
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZWQtdGV4dC1ibG9jay50b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9lZGl0b3IvdG9vbHMvY29tYmluZWQtdGV4dC1ibG9jay50b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNuQixNQUFNLGNBQWMsQ0FBQztBQU90QixPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuRSxNQUFNLE9BQU8sd0JBQXdCO0lBc0JqQyxZQUFZLE9BQWdCO1FBckJYLFFBQUcsR0FBRyxNQUFNLENBQUM7UUFDYixrQkFBYSxHQUFHLEdBQUcsQ0FBQztRQUNwQiw4QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDOUIsK0JBQTBCLEdBQUcsbUJBQW1CLENBQUM7UUFFakQsbUJBQWMsR0FBRztZQUM5QixPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLElBQUk7U0FDdEIsQ0FBQztRQVFlLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTdCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQW1LbEIsd0JBQW1CLEdBQUcsQ0FBQyxJQUFZLEVBQXVCLEVBQUU7WUFDekUsSUFBSSxTQUFTLEdBQStDLElBQUksQ0FBQztZQUVqRSxPQUFPLEdBQUcsRUFBRTtnQkFDUixJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNaLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztnQkFFRCxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxl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QWMsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV0RyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRWhFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ2pGLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUMxRCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBRS9DLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFrQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSw0QkFBNEIsQ0FBQztRQUN0RSxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsV0FBVyxJQUFJLG1CQUFtQixDQUFDO0lBQ3JELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHR5cGUgeyBDdWlOdWxsYWJsZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgdHlwZSB7IEFQSSwgQmxvY2tUb29sLCBCbG9ja1Rvb2xDb25zdHJ1Y3Rvck9wdGlvbnMsIFRvb2xDb25maWcgfSBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xuXG5pbXBvcnQge1xuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0ssXG4gICAgQ09NQklORURfVEVYVF9CTE9DS19BRERFRCxcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsXG4gICAgQ09NQklORURfVEVYVF9CTE9DS19QQVJULFxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfUkVNT1ZFRCxcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1VQREFURUQsXG4gICAgREVGQVVMVF9QTEFDRUhPTERFUixcbiAgICBERUZBVUxUX1JFQURPTkxZX1BMQUNFSE9MREVSLFxuICAgIFNQTElUX01BWF9MRU5HVEhcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgICBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGEsXG4gICAgQ3VpQ29tYmluZWRQYXJ0QmxvY2ssXG4gICAgQ3VpTXV0YXRpb25BY3Rpb25zLFxuICAgIEN1aU11dGF0aW9uQ2FsbGJhY2tcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUlkLCBtZXJnZVNtYWxsQ2h1bmtzLCBzcGxpdEhUTUwgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDdWlDb21iaW5lZFRleHRCbG9ja1Rvb2wgaW1wbGVtZW50cyBCbG9ja1Rvb2wge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVEFHID0gJ3NwYW4nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgREVCT1VOQ0VfVElNRSA9IDM1MDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9DSElMRF9DT1VOVF9GT1JfRU1QVFkgPSAxO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUExBQ0VIT0xERVJfQVRUUklCVVRFX05BTUUgPSAncGxhY2Vob2xkZXJBY3RpdmUnO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBtdXRhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogQVBJO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICBwcml2YXRlIHdyYXBwZXI/OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlcjtcbiAgICBwcml2YXRlIGxhc3RCbG9ja0VsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBwcml2YXRlIHNraXBOZXh0VXBkYXRlRW1pdCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogdW5rbm93bikge1xuICAgICAgICBjb25zdCBib2R5ID0gb3B0aW9ucyBhcyBCbG9ja1Rvb2xDb25zdHJ1Y3Rvck9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XG5cbiAgICAgICAgdGhpcy5yZWFkT25seSA9IGJvZHkucmVhZE9ubHk7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKGJvZHkuY29uZmlnKTtcbiAgICAgICAgdGhpcy5hcGkgPSBib2R5LmFwaTtcbiAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgaWQ6IGRhdGEuaWQgfHwgZ2VuZXJhdGVJZCgpLFxuICAgICAgICAgICAgdGV4dEJsb2NrczogZGF0YS50ZXh0QmxvY2tzIHx8IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb252ZXJ0RGVmYXVsdERhdGFUb0N1c3RvbShkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBpc0lubGluZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGlzUmVhZE9ubHlTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGVuYWJsZUxpbmVCcmVha3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCB0b29sYm94KCk6IHsgaWNvbjogc3RyaW5nOyB0aXRsZTogc3RyaW5nIH0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWNvbjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk04IDlWNy4yQzggNy4wODk1NCA4LjA4OTU0IDcgOC4yIDdMMTIgN00xNiA5VjcuMkMxNiA3LjA4OTU0IDE1LjkxMDUgNyAxNS44IDdMMTIgN00xMiA3TDEyIDE3TTEyIDE3SDEwTTEyIDE3SDE0XCI+PC9wYXRoPjwvc3ZnPicsXG4gICAgICAgICAgICB0aXRsZTogJ1RleHQnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgcGFzdGVDb25maWcoKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhZ3M6IFsnUCddXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFzdGUoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC50eXBlICE9PSAndGFnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dCA9IGV2ZW50LmRldGFpbC5kYXRhLnRleHRDb250ZW50O1xuICAgICAgICBjb25zdCBsYXN0QmxvY2tJbmRleCA9IHRoaXMuZGF0YS50ZXh0QmxvY2tzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHRoaXMuZGF0YS50ZXh0QmxvY2tzW2xhc3RCbG9ja0luZGV4XTtcbiAgICAgICAgY29uc3QgYmxvY2tJZCA9IGxhc3RCbG9jaz8uaWQgfHwgZ2VuZXJhdGVJZCgpO1xuXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnNwbGljZShsYXN0QmxvY2tJbmRleCwgMSwgdGhpcy5nZXRCbG9ja1BhcnRPYmplY3QoYmxvY2tJZCwgdGV4dCkpO1xuXG4gICAgICAgIHRoaXMuc2tpcE5leHRVcGRhdGVFbWl0ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUV4aXN0aW5nQmxvY2soYmxvY2tJZCwgdGV4dCwgQm9vbGVhbihsYXN0QmxvY2s/LmlkKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHRoaXMud3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLndyYXBwZXIuY2xhc3NMaXN0LmFkZChDT01CSU5FRF9URVhUX0JMT0NLKTtcbiAgICAgICAgdGhpcy53cmFwcGVyLmRhdGFzZXRbdGhpcy5QTEFDRUhPTERFUl9BVFRSSUJVVEVfTkFNRV0gPSB0aGlzLmFwaS5pMThuLnQodGhpcy5wbGFjZWhvbGRlcik7XG5cbiAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIuY29udGVudEVkaXRhYmxlID0gJ3RydWUnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNFbXB0eUJsb2NrID0gIXRoaXMuZGF0YS50ZXh0QmxvY2tzLmxlbmd0aDtcblxuICAgICAgICBpZiAoaXNFbXB0eUJsb2NrKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5wdXNoKHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KGdlbmVyYXRlSWQoKSwgJycpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyQmxvY2tzKHRoaXMuZGF0YS50ZXh0QmxvY2tzKTtcbiAgICAgICAgdGhpcy5jaGVja0lzRWRpdG9yRW1wdHkoKTtcblxuICAgICAgICBpZiAoIXRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRNdXRhdGlvbkNhbGxiYWNrKHRoaXMuREVCT1VOQ0VfVElNRSk7XG5cbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLm9uTXV0YXRpb25FdmVudC5iaW5kKHRoaXMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy53cmFwcGVyLCB0aGlzLm11dGF0aW9uQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG1lcmdlKGJsb2Nrc0RhdGE6IEN1aUNvbWJpbmVkUGFydEJsb2NrW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBibG9ja3NUZXh0Q29udGVudCA9ICcnO1xuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2NrcyA9IFtdO1xuXG4gICAgICAgIGJsb2Nrc0RhdGEuZm9yRWFjaCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGJsb2Nrc1RleHRDb250ZW50ICs9IGJsb2NrLmRhdGEudGV4dDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndyYXBwZXIuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMud3JhcHBlci5jaGlsZE5vZGVzLml0ZW0oaSk7XG5cbiAgICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MU3BhbkVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLS07XG4gICAgICAgICAgICBibG9ja3NUZXh0Q29udGVudCA9IG5vZGUuaW5uZXJIVE1MICsgYmxvY2tzVGV4dENvbnRlbnQ7XG4gICAgICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFydHMgPSBibG9ja3NUZXh0Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIID8gW2Jsb2Nrc1RleHRDb250ZW50XSA6IHNwbGl0SFRNTChibG9ja3NUZXh0Q29udGVudCk7XG5cbiAgICAgICAgcGFydHMuZm9yRWFjaCgocGFydDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja09iamVjdCA9IHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KGdlbmVyYXRlSWQoKSwgcGFydCk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnB1c2goYmxvY2tPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlbmRlckJsb2Nrcyh0aGlzLmRhdGEudGV4dEJsb2Nrcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoYmxvY2tDb250ZW50OiBIVE1MRWxlbWVudCk6IEN1aUNvbWJpbmVkUGFydEJsb2NrW10ge1xuICAgICAgICBjb25zdCB0ZXh0QmxvY2tzOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdID0gW107XG5cbiAgICAgICAgYmxvY2tDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5UQUcpLmZvckVhY2goKHNwYW46IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICB0ZXh0QmxvY2tzLnB1c2godGhpcy5nZXRCbG9ja1BhcnRPYmplY3Qoc3Bhbi5kYXRhc2V0Wydsb2NhbElkJ10hLCBzcGFuLmlubmVySFRNTCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGV4dEJsb2NrcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IGJsb2NrSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MuZm9yRWFjaCgoYmxvY2s6IEN1aUNvbWJpbmVkUGFydEJsb2NrKSA9PiB7XG4gICAgICAgICAgICBibG9ja0lkcy5hZGQoYmxvY2suaWQgfHwgJycpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlbW92ZUJsb2NrcyhibG9ja0lkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk11dGF0aW9uRXZlbnQoY2FsbGJhY2s6IChtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pID0+IHZvaWQsIG11dGF0aW9uTGlzdDogTXV0YXRpb25SZWNvcmRbXSk6IHZvaWQge1xuICAgICAgICBpZiAobXV0YXRpb25MaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2goKG11dGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5zZXQoZ2VuZXJhdGVJZCgpLCBtdXRhdGlvbik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5zZXQobXV0YXRpb24udGFyZ2V0LCBtdXRhdGlvbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNhbGxiYWNrKG11dGF0aW9uTGlzdCk7XG4gICAgICAgIHRoaXMuY2hlY2tJc0VkaXRvckVtcHR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRNdXRhdGlvbkNhbGxiYWNrID0gKHdhaXQ6IG51bWJlcik6IEN1aU11dGF0aW9uQ2FsbGJhY2sgPT4ge1xuICAgICAgICBsZXQgdGltZW91dElkOiBDdWlOdWxsYWJsZTxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj4gPSBudWxsO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oYW5kbGVNdXRhdGlvbnMoKSwgd2FpdCk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlTXV0YXRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdXBkYXRlZEVsZW1lbnRzLCByZW1vdmVkRWxlbWVudHNJZHMgfSA9IHRoaXMuZ2V0TXV0YXRpb25BY3Rpb25zKFsuLi50aGlzLmNoYW5nZXMudmFsdWVzKCldKTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkUGFydHMgPSB0aGlzLnRha2VTcGxpdHRlZFBhcnRzUmVzdWx0KHVwZGF0ZWRFbGVtZW50cyk7XG4gICAgICAgICAgICBjb25zdCB7IHNwbGl0dGVkUGFydHNSZXN1bHQsIHVwZGF0ZWRFbGVtZW50c1Jlc3VsdCwgcmVtb3ZlZEVsZW1lbnRzSWRzUmVzdWx0IH0gPSB0aGlzLnRha2VNZXJnZWRSZXN1bHQoXG4gICAgICAgICAgICAgICAgc3BsaXR0ZWRQYXJ0cyxcbiAgICAgICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmFkZEJsb2NrcyhzcGxpdHRlZFBhcnRzUmVzdWx0LCB1cGRhdGVkRWxlbWVudHNSZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCbG9ja3ModXBkYXRlZEVsZW1lbnRzUmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQmxvY2tzKHJlbW92ZWRFbGVtZW50c0lkc1Jlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuY2xlYXIoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmICghdGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKHRoaXMud3JhcHBlciwgdGhpcy5tdXRhdGlvbkNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRha2VNZXJnZWRSZXN1bHQoXG4gICAgICAgIHNwbGl0dGVkUGFydHM6IEhUTUxFbGVtZW50W10sXG4gICAgICAgIHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50PixcbiAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzOiBTZXQ8c3RyaW5nPlxuICAgICk6IHtcbiAgICAgICAgc3BsaXR0ZWRQYXJ0c1Jlc3VsdDogSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzUmVzdWx0OiBTZXQ8SFRNTEVsZW1lbnQ+O1xuICAgICAgICByZW1vdmVkRWxlbWVudHNJZHNSZXN1bHQ6IFNldDxzdHJpbmc+O1xuICAgIH0ge1xuICAgICAgICBjb25zdCB7IHJlbW92ZWRJZHM6IG1lcmdlUmVtb3ZlZElkcywgdXBkYXRlZEVsZW1lbnRzOiBtZXJnZVVwZGF0ZWRFbGVtZW50cyB9ID0gdGhpcy5hcHBseU1lcmdlU21hbGxDaHVua3MoKTtcblxuICAgICAgICBjb25zdCBub3RSZW1vdmVkQnlNZXJnZSA9IChlbDogSFRNTEVsZW1lbnQpID0+ICFtZXJnZVJlbW92ZWRJZHMuaGFzKGVsLmRhdGFzZXRbJ2xvY2FsSWQnXSA/PyAnJyk7XG5cbiAgICAgICAgY29uc3Qgc3BsaXR0ZWRQYXJ0c1Jlc3VsdCA9IHNwbGl0dGVkUGFydHMuZmlsdGVyKG5vdFJlbW92ZWRCeU1lcmdlKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEVsZW1lbnRzSWRzUmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KFsuLi5yZW1vdmVkRWxlbWVudHNJZHMsIC4uLm1lcmdlUmVtb3ZlZElkc10pO1xuICAgICAgICBjb25zdCB1cGRhdGVkRWxlbWVudHNSZXN1bHQgPSBuZXcgU2V0PEhUTUxFbGVtZW50PihcbiAgICAgICAgICAgIFsuLi51cGRhdGVkRWxlbWVudHMsIC4uLm1lcmdlVXBkYXRlZEVsZW1lbnRzXS5maWx0ZXIobm90UmVtb3ZlZEJ5TWVyZ2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHsgc3BsaXR0ZWRQYXJ0c1Jlc3VsdCwgdXBkYXRlZEVsZW1lbnRzUmVzdWx0LCByZW1vdmVkRWxlbWVudHNJZHNSZXN1bHQgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRha2VTcGxpdHRlZFBhcnRzUmVzdWx0KHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50Pik6IEhUTUxFbGVtZW50W10ge1xuICAgICAgICBjb25zdCBzcGxpdHRlZFBhcnRzOiBIVE1MRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50Q29udGVudDogc3RyaW5nID0gZWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHNwbGl0SFRNTChlbGVtZW50Q29udGVudCk7XG5cbiAgICAgICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0lkID0gZ2VuZXJhdGVJZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gdGhpcy5jcmVhdGVCbG9jayhibG9ja0lkLCBwYXJ0KTtcblxuICAgICAgICAgICAgICAgIHNwbGl0dGVkUGFydHMucHVzaCh0ZXh0RWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBwYXJ0c1swXTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWZ0ZXIoLi4uc3BsaXR0ZWRQYXJ0cyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzcGxpdHRlZFBhcnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlNZXJnZVNtYWxsQ2h1bmtzKCk6IHtcbiAgICAgICAgcmVtb3ZlZElkczogU2V0PHN0cmluZz47XG4gICAgICAgIHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50PjtcbiAgICB9IHtcbiAgICAgICAgY29uc3QgZW1wdHkgPSB7IHJlbW92ZWRJZHM6IG5ldyBTZXQ8c3RyaW5nPigpLCB1cGRhdGVkRWxlbWVudHM6IG5ldyBTZXQ8SFRNTEVsZW1lbnQ+KCkgfTtcblxuICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2h1bmtFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy53cmFwcGVyLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCcuJyArIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCkpO1xuICAgICAgICBjb25zdCBjaHVua0VsZW1lbnRzTWFwID0gbmV3IE1hcChjaHVua0VsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gW2VsZW1lbnQuZGF0YXNldFsnbG9jYWxJZCddISwgZWxlbWVudF0pKTtcbiAgICAgICAgY29uc3QgeyBjaHVua3MsIHJlbW92ZWRJZHMgfSA9IG1lcmdlU21hbGxDaHVua3MoXG4gICAgICAgICAgICBjaHVua0VsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogZWxlbWVudC5kYXRhc2V0Wydsb2NhbElkJ10hLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQuaW5uZXJIVE1MXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICByZW1vdmVkSWRzLmZvckVhY2goKGlkKSA9PiBjaHVua0VsZW1lbnRzTWFwLmdldChpZCk/LnJlbW92ZSgpKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkRWxlbWVudHMgPSBuZXcgU2V0PEhUTUxFbGVtZW50PigpO1xuXG4gICAgICAgIGNodW5rcy5mb3JFYWNoKChjaHVuaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNodW5rRWxlbWVudHNNYXAuZ2V0KGNodW5rLmlkKTtcblxuICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQuaW5uZXJIVE1MID09PSBjaHVuay5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGNodW5rLmNvbnRlbnQ7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMuYWRkKGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4geyByZW1vdmVkSWRzOiBuZXcgU2V0KHJlbW92ZWRJZHMpLCB1cGRhdGVkRWxlbWVudHMgfTtcbiAgICB9XG5cbiAgICAvLyBSSVAgMTMuMDEuMjAyNiAtIHByaXZhdGUgZ2V0TmV4dEluZGV4KCk6IG51bWJlclxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja1BhcnRPYmplY3QoYmxvY2tJZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBDdWlDb21iaW5lZFBhcnRCbG9jayB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogYmxvY2tJZCxcbiAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmVudElkOiB0aGlzLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNdXRhdGlvbkFjdGlvbnMobXV0YXRpb25MaXN0OiBNdXRhdGlvblJlY29yZFtdKTogQ3VpTXV0YXRpb25BY3Rpb25zIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEVsZW1lbnRzID0gbmV3IFNldDxIVE1MRWxlbWVudD4oKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEVsZW1lbnRzSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRPdXRzaWRlRWxlbWVudHM6IE5vZGVbXSA9IFtdO1xuXG4gICAgICAgIHRoaXMubGFzdEJsb2NrRWxlbWVudCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaCgobXV0YXRpb246IE11dGF0aW9uUmVjb3JkKTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVVwZGF0ZWRCbG9ja3MobXV0YXRpb24sIHVwZGF0ZWRFbGVtZW50cywgY2hhbmdlZE91dHNpZGVFbGVtZW50cyk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlbW92ZWRCbG9ja3MobXV0YXRpb24sIHJlbW92ZWRFbGVtZW50c0lkcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmxhc3RCbG9ja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RCbG9ja0VsZW1lbnQgPSB0aGlzLmxhc3RCbG9ja0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGxhc3RCbG9ja0VsZW1lbnQuYXBwZW5kKC4uLmNoYW5nZWRPdXRzaWRlRWxlbWVudHMpO1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRzLmFkZChsYXN0QmxvY2tFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRUb0Jsb2Nrc0VuZChsYXN0QmxvY2tFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMsXG4gICAgICAgICAgICByZW1vdmVkRWxlbWVudHNJZHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENhcmV0VG9CbG9ja3NFbmQoYmxvY2s6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KGJsb2NrLCBibG9jay5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlVXBkYXRlZEJsb2NrcyhcbiAgICAgICAgbXV0YXRpb246IE11dGF0aW9uUmVjb3JkLFxuICAgICAgICB1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4sXG4gICAgICAgIG91dHNpZGVDaGFuZ2VzOiBOb2RlW11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBtdXRhdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKG11dGF0aW9uLnRhcmdldC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBtdXRhdGlvbi50YXJnZXQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwYW4gPSBlbGVtZW50Py5jbG9zZXN0KCcuJyArIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHNwYW4pIHtcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50cy5hZGQoc3Bhbik7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlc091dHNpZGVCbG9jayhlbGVtZW50LCBvdXRzaWRlQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VzT3V0c2lkZUJsb2NrKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBvdXRzaWRlQ2hhbmdlczogTm9kZVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghZWxlbWVudCB8fCB0aGlzLmxhc3RCbG9ja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50ID0gYmxvY2sgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucyhDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0QmxvY2tFbGVtZW50ID0gYmxvY2tFbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRzaWRlQ2hhbmdlcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCbG9ja3Moc3BsaWNlZFBhcnRzOiBIVE1MRWxlbWVudFtdLCB1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzcGxpY2VkUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRlZEJsb2NrczogQ3VpQ29tYmluZWRQYXJ0QmxvY2tbXSA9IHNwbGljZWRQYXJ0cy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0lkID0gYmxvY2suZGF0YXNldFsnbG9jYWxJZCddO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBibG9ja0lkLFxuICAgICAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGJsb2NrLmlubmVySFRNTCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcHJldmlvdXNFbGVtZW50ID0gdXBkYXRlZEVsZW1lbnRzLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaWQgPSBwcmV2aW91c0VsZW1lbnQ/LmRhdGFzZXRbJ2xvY2FsSWQnXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIocHJldmlvdXNFbGVtZW50Py5kYXRhc2V0WydpbmRleCddKSArIDE7XG4gICAgICAgIGNvbnN0IGJsb2NrSW5kZXggPSB0aGlzLmRhdGEudGV4dEJsb2Nrcy5maW5kSW5kZXgoKGJsb2NrKSA9PiBibG9jay5pZCA9PT0gaWQpO1xuXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnNwbGljZShibG9ja0luZGV4LCAwLCAuLi5hZGRlZEJsb2Nrcyk7XG4gICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgYmxvY2tJbmRleCxcbiAgICAgICAgICAgIGJsb2NrczogYWRkZWRCbG9ja3MsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEudGV4dEJsb2Nrc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJsb2Nrcyh1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1cGRhdGVkRWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2tpcE5leHRVcGRhdGVFbWl0KSB7XG4gICAgICAgICAgICB0aGlzLnNraXBOZXh0VXBkYXRlRW1pdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cGRhdGVkQmxvY2tzID0gWy4uLnVwZGF0ZWRFbGVtZW50cy52YWx1ZXMoKV0ubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogYmxvY2suZGF0YXNldFsnbG9jYWxJZCddLFxuICAgICAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGJsb2NrLmlubmVySFRNTCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19VUERBVEVELCB1cGRhdGVkQmxvY2tzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUV4aXN0aW5nQmxvY2soYmxvY2tJZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIGlzQmxvY2tFeGlzdHM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRWxlbWVudCA9IHRoaXMud3JhcHBlci5xdWVyeVNlbGVjdG9yKGBbZGF0YS1sb2NhbC1pZD1cIiR7YmxvY2tJZH1cIl1gKTtcblxuICAgICAgICBpZiAoIWV4aXN0aW5nRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrUGFydE9iamVjdChibG9ja0lkLCB0ZXh0KTtcblxuICAgICAgICBleGlzdGluZ0VsZW1lbnQuaW5uZXJIVE1MID0gdGV4dDtcblxuICAgICAgICBpZiAoaXNCbG9ja0V4aXN0cykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19VUERBVEVELCBbYmxvY2tdKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcbiAgICAgICAgICAgICAgICBibG9ja3M6IFtibG9ja11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJlbW92ZWRCbG9ja3MobXV0YXRpb246IE11dGF0aW9uUmVjb3JkLCByZW1vdmVkRWxlbWVudHNJZHM6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBtdXRhdGlvbi5yZW1vdmVkTm9kZXMuZm9yRWFjaCgobm9kZTogTm9kZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0Wydsb2NhbElkJ107XG5cbiAgICAgICAgICAgIGlmICghYmxvY2tJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzLmFkZChibG9ja0lkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVCbG9ja3MoaWRzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICBpZiAoIWlkcy5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZW1vdmVkRWxlbWVudElkcyA9IFsuLi5pZHMudmFsdWVzKCldO1xuXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzID0gdGhpcy5kYXRhLnRleHRCbG9ja3MuZmlsdGVyKChibG9jaykgPT4gIWlkcy5oYXMoYmxvY2suaWQgfHwgJycpKTtcbiAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19SRU1PVkVELCByZW1vdmVkRWxlbWVudElkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJCbG9ja3MoYmxvY2tzOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghYmxvY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYmxvY2tzLmZvckVhY2goKGJsb2NrOiBDdWlDb21iaW5lZFBhcnRCbG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSB0aGlzLmNyZWF0ZUJsb2NrKGJsb2NrLmlkIHx8IGdlbmVyYXRlSWQoKSwgYmxvY2suZGF0YS50ZXh0KTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLndyYXBwZXIucXVlcnlTZWxlY3RvcignLicgKyBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZCh0ZXh0RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlci5yZXBsYWNlQ2hpbGRyZW4odGV4dEVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcbiAgICAgICAgICAgICAgICBibG9ja3NcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUJsb2NrKGlkOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuVEFHKTtcblxuICAgICAgICB0ZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCk7XG4gICAgICAgIHRleHRFbGVtZW50LmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgIHRleHRFbGVtZW50LmRhdGFzZXRbJ2lkJ10gPSBpZDtcbiAgICAgICAgdGV4dEVsZW1lbnQuZGF0YXNldFsnbG9jYWxJZCddID0gaWQ7XG5cbiAgICAgICAgcmV0dXJuIHRleHRFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydERlZmF1bHREYXRhVG9DdXN0b20oZGF0YTogeyB0ZXh0OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MgPSBkYXRhLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICBibG9jay5pZCA9IGdlbmVyYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBibG9jay5kYXRhLnBhcmVudElkID0gdGhpcy5kYXRhLmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEudGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChkYXRhLnRleHQpO1xuICAgICAgICBsZXQgZWxlbWVudENvbnRlbnQgPSAnJztcblxuICAgICAgICBmcmFnbWVudC5jaGlsZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250ZW50ICs9IG5vZGUudGV4dENvbnRlbnQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnRDb250ZW50ICs9IChub2RlIGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBhcnRzID0gZWxlbWVudENvbnRlbnQubGVuZ3RoIDwgU1BMSVRfTUFYX0xFTkdUSCA/IFtlbGVtZW50Q29udGVudF0gOiBzcGxpdEhUTUwoZWxlbWVudENvbnRlbnQpO1xuXG4gICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tPYmplY3QgPSB0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksIHBhcnQpO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5wdXNoKGJsb2NrT2JqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lzRWRpdG9yRW1wdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy53cmFwcGVyIHx8IHRoaXMud3JhcHBlci5jaGlsZHJlbi5sZW5ndGggPiB0aGlzLk1BWF9DSElMRF9DT1VOVF9GT1JfRU1QVFkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLndyYXBwZXIuY2hpbGRyZW4uaXRlbSgwKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgaXNJdGVtRW1wdHkgPSAhaXRlbT8udGV4dENvbnRlbnQ/Lmxlbmd0aDtcblxuICAgICAgICB0aGlzLndyYXBwZXIuZGF0YXNldFsnZW1wdHknXSA9IGAke2lzSXRlbUVtcHR5fWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQbGFjZWhvbGRlcihjb25maWc6IFRvb2xDb25maWcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5yZWFkb25seVBsYWNlaG9sZGVyID8/IERFRkFVTFRfUkVBRE9OTFlfUExBQ0VIT0xERVI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnLnBsYWNlaG9sZGVyID8/IERFRkFVTFRfUExBQ0VIT0xERVI7XG4gICAgfVxufVxuIl19
|
|
@@ -11,7 +11,7 @@ import { __decorate, __metadata } from 'tslib';
|
|
|
11
11
|
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
12
12
|
import { trigger, transition, query, animateChild, style, animate, stagger } from '@angular/animations';
|
|
13
13
|
import { OAuthService, OAuthErrorEvent, OAuthSuccessEvent, OAuthInfoEvent, provideOAuthClient } from 'angular-oauth2-oidc';
|
|
14
|
-
import { CuiExchangeContextApiService, CuiJTextApiService, CuiTreeStructNavigatorApiService, CuiNodeChecklistApiService, CuiTreeStructApiService, CuiFrameApiService, CuiResourceApiService, UserCompanyApiService, SHARED_CONSTRUCTION_HTTP_OPTIONS, SHARED_INSTRUCTION_HTTP_OPTIONS, CuiQuantumGroupResourcesStructureApiService, ResourceContentType, CuiFactoryApiService, SeasonType, SHARED_FACTORY_HTTP_OPTIONS, UtilityApiService, CuiCriterionApiService, CuiStorageObjectType, CuiJobApiService, JobType } from '@cuby-ui/api';
|
|
14
|
+
import { CuiExchangeContextApiService, CUI_JTEXT_API_SERVICE, CuiJTextApiService, CuiTreeStructNavigatorApiService, CuiNodeChecklistApiService, CuiTreeStructApiService, CuiFrameApiService, CuiResourceApiService, UserCompanyApiService, SHARED_CONSTRUCTION_HTTP_OPTIONS, SHARED_INSTRUCTION_HTTP_OPTIONS, CuiQuantumGroupResourcesStructureApiService, ResourceContentType, CuiFactoryApiService, SeasonType, SHARED_FACTORY_HTTP_OPTIONS, UtilityApiService, CuiCriterionApiService, CuiStorageObjectType, CuiJobApiService, JobType } from '@cuby-ui/api';
|
|
15
15
|
import { HttpErrorResponse } from '@angular/common/http';
|
|
16
16
|
import * as i4 from '@jsverse/transloco';
|
|
17
17
|
import { TranslocoService, TranslocoModule, TranslocoDirective, TranslocoPipe } from '@jsverse/transloco';
|
|
@@ -5499,7 +5499,7 @@ function generateId() {
|
|
|
5499
5499
|
class CuiEditorService {
|
|
5500
5500
|
constructor() {
|
|
5501
5501
|
this.destroyRef = inject(DestroyRef);
|
|
5502
|
-
this.jtextService = inject(
|
|
5502
|
+
this.jtextService = inject(CUI_JTEXT_API_SERVICE);
|
|
5503
5503
|
}
|
|
5504
5504
|
sortEventsByTypes(events) {
|
|
5505
5505
|
const blocks = {
|
|
@@ -8168,7 +8168,7 @@ class CuiCombinedTextBlockTool {
|
|
|
8168
8168
|
return;
|
|
8169
8169
|
}
|
|
8170
8170
|
const item = this.wrapper.children.item(0);
|
|
8171
|
-
const isItemEmpty = !item
|
|
8171
|
+
const isItemEmpty = !item?.textContent?.length;
|
|
8172
8172
|
this.wrapper.dataset['empty'] = `${isItemEmpty}`;
|
|
8173
8173
|
}
|
|
8174
8174
|
getPlaceholder(config) {
|
|
@@ -8350,7 +8350,7 @@ class CuiEditorComponent {
|
|
|
8350
8350
|
this.destroy = inject(DestroyRef);
|
|
8351
8351
|
this.cuiIdService = inject(CuiIdService);
|
|
8352
8352
|
this.editorService = inject(CuiEditorService);
|
|
8353
|
-
this.jTextService = inject(
|
|
8353
|
+
this.jTextService = inject(CUI_JTEXT_API_SERVICE);
|
|
8354
8354
|
this.POOLING_DELAY = 100;
|
|
8355
8355
|
this.ELEMENT_SPACE_TO_BOTTOM = 150;
|
|
8356
8356
|
this.SCROLL_THROTTLE_TIME = 200;
|
|
@@ -8697,11 +8697,15 @@ class CuiEditorComponent {
|
|
|
8697
8697
|
this.editor.caret.focus();
|
|
8698
8698
|
}
|
|
8699
8699
|
checkIsEmpty() {
|
|
8700
|
-
const
|
|
8700
|
+
const blocksCount = this.editor.blocks?.getBlocksCount() ?? 0;
|
|
8701
|
+
if (!blocksCount) {
|
|
8702
|
+
return true;
|
|
8703
|
+
}
|
|
8701
8704
|
const REDACTOR_SELECTOR = '.codex-editor__redactor';
|
|
8702
|
-
const
|
|
8703
|
-
|
|
8704
|
-
|
|
8705
|
+
const redactorTextContent = this.editorElement
|
|
8706
|
+
.querySelector(REDACTOR_SELECTOR)
|
|
8707
|
+
?.textContent?.trim();
|
|
8708
|
+
return !redactorTextContent;
|
|
8705
8709
|
}
|
|
8706
8710
|
resetData() {
|
|
8707
8711
|
this.scrollSubscription?.unsubscribe();
|
|
@@ -8722,11 +8726,23 @@ class CuiEditorComponent {
|
|
|
8722
8726
|
this.abortController = new AbortController();
|
|
8723
8727
|
}
|
|
8724
8728
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8725
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: CuiEditorComponent, isStandalone: true, selector: "cui-editor", inputs: { editorApiId: { classPropertyName: "editorApiId", publicName: "editorApiId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, requestSize: { classPropertyName: "requestSize", publicName: "requestSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editorEmpty: "editorEmpty" }, providers: [
|
|
8729
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: CuiEditorComponent, isStandalone: true, selector: "cui-editor", inputs: { editorApiId: { classPropertyName: "editorApiId", publicName: "editorApiId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, requestSize: { classPropertyName: "requestSize", publicName: "requestSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editorEmpty: "editorEmpty" }, providers: [
|
|
8730
|
+
CuiEditorService,
|
|
8731
|
+
{
|
|
8732
|
+
provide: CUI_JTEXT_API_SERVICE,
|
|
8733
|
+
useFactory: () => inject(CUI_JTEXT_API_SERVICE, { optional: true, skipSelf: true }) ?? new CuiJTextApiService()
|
|
8734
|
+
}
|
|
8735
|
+
], viewQueries: [{ propertyName: "editorRef", first: true, predicate: ["editor"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #editor\n [id]=\"editorId\"\n data-editor\n [class._readonly]=\"config().readOnly\"\n></div>\n", styles: [":host{--textColor: var(--cui-base-900);--menuBackground: var(--cui-base-0);--menuBorder: var(--cui-base-200);--menuItemHover: var(--cui-base-10);--menuItemBackground: var(cui-base-900);--menuIconBackground: var(--cui-base-50);--menuIconHover: var(--cui-base-10);font-weight:400;font-size:14px;line-height:20px;font-family:var(--cui-main-font)}:host ::ng-deep .ce-popover{--color-background: var(--menuBackground);--color-text-primary: var(--textColor);--color-border: var(--menuBorder);--color-border-icon: var(--menuBorder);--color-background-item: var(--menuItemBackground);--color-background-item-hover: var(--menuItemHover)}:host ::ng-deep .ce-popover__search{background:var(--menuIconBackground)}:host ::ng-deep .ce-popover .ce-popover-item__icon{background:var(--menuIconBackground)}:host ::ng-deep .ce-conversion-toolbar{background-color:var(--menuBackground);border-color:var(--menuBorder)}:host ::ng-deep .ce-conversion-toolbar__tools{padding:0 6px 6px}:host ::ng-deep .ce-conversion-tool{padding:3px;border-radius:6px}:host ::ng-deep .ce-conversion-tool__icon{border:1px solid var(--menuBorder);background-color:var(--menuIconBackground);box-shadow:none}:host ::ng-deep .ce-conversion-tool:hover{background-color:var(--menuItemHover)}:host ::ng-deep .ce-conversion-tool:hover .ce-conversion-tool__icon{border-color:var(--menuIconHover)}:host ::ng-deep .combined-text-block{padding:.4em 0;line-height:1.6em;outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part{outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child,:host ::ng-deep .combined-text-block .combined-text-block-part._selected{display:list-item}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child::marker,:host ::ng-deep .combined-text-block .combined-text-block-part._selected::marker{content:\"\"}:host ::ng-deep .image-tool__image{border:1px solid var(--cui-base-200);background-color:var(--cui-base-0)}:host ::ng-deep .image-tool__image-preloader{background-color:var(--cui-base-200)}:host ::ng-deep .image-tool__image-preloader:after{border:1px solid var(--cui-base-200);border-top:1px solid var(--cui-blue-600)}:host ::ng-deep .cdx-button{border-radius:8px;border:1px solid var(--cui-base-200);color:var(--textColor);background-color:var(--cui-base-10);box-shadow:none}:host ::ng-deep .ce-inline-toolbar{border-color:var(--cui-base-100);color:var(--textColor);background-color:var(--cui-base-0)}:host ::ng-deep .ce-inline-toolbar__dropdown:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-inline-tool:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{color:var(--cui-base-500)}:host ::ng-deep .ce-toolbar__plus:hover,:host ::ng-deep .ce-toolbar__settings-btn:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__actions{right:100%}:host ::ng-deep .ce-toolbar__content{max-width:none}@media (max-width: 650px){:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{border-color:var(--menuBorder);background-color:var(--menuBackground)}:host ::ng-deep .ce-toolbar__actions{inset:0 auto auto 0}}:host ::ng-deep .ce-block--selected .ce-block__content{background-color:var(--cui-base-200)}:host ::ng-deep .ce-block__content{max-width:100%}:host ::ng-deep .ce-block:only-of-type .combined-text-block[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active);position:absolute;color:var(--cui-base-400)}:host ::ng-deep [data-editor]{padding-right:4px;width:100%;height:100%;min-height:200px;overflow:hidden auto;scrollbar-gutter:stable}:host ::ng-deep [data-editor] .codex-editor{margin-left:60px}:host ::ng-deep [data-editor] .codex-editor--narrow .ce-popover{right:auto}:host ::ng-deep [data-editor] .codex-editor__redactor{margin-right:auto;padding-bottom:260px!important}@media (max-width: 650px){:host ::ng-deep [data-editor] .codex-editor{margin-left:0}}:host ::ng-deep [data-editor]._readonly{min-height:auto}:host ::ng-deep [data-editor]._readonly .codex-editor{margin:auto}:host ::ng-deep [data-editor]._readonly .codex-editor__redactor{padding-bottom:0!important}:host ::ng-deep [data-editor]._readonly .combined-text-block{padding:0}:host ::ng-deep [data-editor] [data-item-name=move-up],:host ::ng-deep [data-editor] [data-item-name=move-down],:host ::ng-deep [data-editor] [data-tool=paragraph]{display:none}:host ::ng-deep [data-editor] *::selection{background:var(--cui-base-200)}:host ::ng-deep [data-editor] a{color:var(--cui-light-blue-600)}:host ::ng-deep .marker{cursor:pointer;text-decoration:underline;color:var(--cui-light-blue-600);background-color:transparent}:host ::ng-deep .tool-marker,:host ::ng-deep .role-marker{margin:0 5px}:host ::ng-deep .tool-marker{color:#e97c00}:host ::ng-deep .role-marker{color:#8803f1}.form{height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8726
8736
|
}
|
|
8727
8737
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiEditorComponent, decorators: [{
|
|
8728
8738
|
type: Component,
|
|
8729
|
-
args: [{ selector: 'cui-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
8739
|
+
args: [{ selector: 'cui-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
8740
|
+
CuiEditorService,
|
|
8741
|
+
{
|
|
8742
|
+
provide: CUI_JTEXT_API_SERVICE,
|
|
8743
|
+
useFactory: () => inject(CUI_JTEXT_API_SERVICE, { optional: true, skipSelf: true }) ?? new CuiJTextApiService()
|
|
8744
|
+
}
|
|
8745
|
+
], template: "<div\n #editor\n [id]=\"editorId\"\n data-editor\n [class._readonly]=\"config().readOnly\"\n></div>\n", styles: [":host{--textColor: var(--cui-base-900);--menuBackground: var(--cui-base-0);--menuBorder: var(--cui-base-200);--menuItemHover: var(--cui-base-10);--menuItemBackground: var(cui-base-900);--menuIconBackground: var(--cui-base-50);--menuIconHover: var(--cui-base-10);font-weight:400;font-size:14px;line-height:20px;font-family:var(--cui-main-font)}:host ::ng-deep .ce-popover{--color-background: var(--menuBackground);--color-text-primary: var(--textColor);--color-border: var(--menuBorder);--color-border-icon: var(--menuBorder);--color-background-item: var(--menuItemBackground);--color-background-item-hover: var(--menuItemHover)}:host ::ng-deep .ce-popover__search{background:var(--menuIconBackground)}:host ::ng-deep .ce-popover .ce-popover-item__icon{background:var(--menuIconBackground)}:host ::ng-deep .ce-conversion-toolbar{background-color:var(--menuBackground);border-color:var(--menuBorder)}:host ::ng-deep .ce-conversion-toolbar__tools{padding:0 6px 6px}:host ::ng-deep .ce-conversion-tool{padding:3px;border-radius:6px}:host ::ng-deep .ce-conversion-tool__icon{border:1px solid var(--menuBorder);background-color:var(--menuIconBackground);box-shadow:none}:host ::ng-deep .ce-conversion-tool:hover{background-color:var(--menuItemHover)}:host ::ng-deep .ce-conversion-tool:hover .ce-conversion-tool__icon{border-color:var(--menuIconHover)}:host ::ng-deep .combined-text-block{padding:.4em 0;line-height:1.6em;outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part{outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child,:host ::ng-deep .combined-text-block .combined-text-block-part._selected{display:list-item}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child::marker,:host ::ng-deep .combined-text-block .combined-text-block-part._selected::marker{content:\"\"}:host ::ng-deep .image-tool__image{border:1px solid var(--cui-base-200);background-color:var(--cui-base-0)}:host ::ng-deep .image-tool__image-preloader{background-color:var(--cui-base-200)}:host ::ng-deep .image-tool__image-preloader:after{border:1px solid var(--cui-base-200);border-top:1px solid var(--cui-blue-600)}:host ::ng-deep .cdx-button{border-radius:8px;border:1px solid var(--cui-base-200);color:var(--textColor);background-color:var(--cui-base-10);box-shadow:none}:host ::ng-deep .ce-inline-toolbar{border-color:var(--cui-base-100);color:var(--textColor);background-color:var(--cui-base-0)}:host ::ng-deep .ce-inline-toolbar__dropdown:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-inline-tool:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{color:var(--cui-base-500)}:host ::ng-deep .ce-toolbar__plus:hover,:host ::ng-deep .ce-toolbar__settings-btn:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__actions{right:100%}:host ::ng-deep .ce-toolbar__content{max-width:none}@media (max-width: 650px){:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{border-color:var(--menuBorder);background-color:var(--menuBackground)}:host ::ng-deep .ce-toolbar__actions{inset:0 auto auto 0}}:host ::ng-deep .ce-block--selected .ce-block__content{background-color:var(--cui-base-200)}:host ::ng-deep .ce-block__content{max-width:100%}:host ::ng-deep .ce-block:only-of-type .combined-text-block[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active);position:absolute;color:var(--cui-base-400)}:host ::ng-deep [data-editor]{padding-right:4px;width:100%;height:100%;min-height:200px;overflow:hidden auto;scrollbar-gutter:stable}:host ::ng-deep [data-editor] .codex-editor{margin-left:60px}:host ::ng-deep [data-editor] .codex-editor--narrow .ce-popover{right:auto}:host ::ng-deep [data-editor] .codex-editor__redactor{margin-right:auto;padding-bottom:260px!important}@media (max-width: 650px){:host ::ng-deep [data-editor] .codex-editor{margin-left:0}}:host ::ng-deep [data-editor]._readonly{min-height:auto}:host ::ng-deep [data-editor]._readonly .codex-editor{margin:auto}:host ::ng-deep [data-editor]._readonly .codex-editor__redactor{padding-bottom:0!important}:host ::ng-deep [data-editor]._readonly .combined-text-block{padding:0}:host ::ng-deep [data-editor] [data-item-name=move-up],:host ::ng-deep [data-editor] [data-item-name=move-down],:host ::ng-deep [data-editor] [data-tool=paragraph]{display:none}:host ::ng-deep [data-editor] *::selection{background:var(--cui-base-200)}:host ::ng-deep [data-editor] a{color:var(--cui-light-blue-600)}:host ::ng-deep .marker{cursor:pointer;text-decoration:underline;color:var(--cui-light-blue-600);background-color:transparent}:host ::ng-deep .tool-marker,:host ::ng-deep .role-marker{margin:0 5px}:host ::ng-deep .tool-marker{color:#e97c00}:host ::ng-deep .role-marker{color:#8803f1}.form{height:100%}\n"] }]
|
|
8730
8746
|
}], ctorParameters: () => [] });
|
|
8731
8747
|
|
|
8732
8748
|
class EditorResizeObserverDirective {
|