@churchillliving/se-ui-toolkit 6.53.2 → 6.53.4
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/bundles/churchillliving-se-ui-toolkit.umd.js +8 -2
- package/bundles/churchillliving-se-ui-toolkit.umd.js.map +1 -1
- package/churchillliving-se-ui-toolkit.metadata.json +1 -1
- package/esm2015/lib/components/base/grid/grid.component.js +8 -2
- package/esm2015/lib/components/base/grid/grid.component.ngfactory.js +1 -1
- package/esm2015/lib/components/base/grid/grid.component.ngsummary.json +1 -1
- package/esm2015/lib/services/grid.service.js +2 -2
- package/fesm2015/churchillliving-se-ui-toolkit.js +8 -2
- package/fesm2015/churchillliving-se-ui-toolkit.js.map +1 -1
- package/lib/components/base/grid/grid.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -939,7 +939,7 @@ export class GridService {
|
|
|
939
939
|
setGridRowPropValue(row, props, columns = []) {
|
|
940
940
|
props === null || props === void 0 ? void 0 : props.forEach((prop) => {
|
|
941
941
|
var _a, _b, _c, _d;
|
|
942
|
-
if (prop.propName && (prop.propValue || prop.propValue === false) && prop.field) {
|
|
942
|
+
if (prop.propName && (prop.propValue || prop.propValue === false || prop.propValue === '') && prop.field) {
|
|
943
943
|
const fieldName = (_a = Object.keys(row)) === null || _a === void 0 ? void 0 : _a.find((key) => { var _a; return (key === null || key === void 0 ? void 0 : key.toLowerCase()) === ((_a = prop === null || prop === void 0 ? void 0 : prop.field) === null || _a === void 0 ? void 0 : _a.toLowerCase()); });
|
|
944
944
|
if (fieldName) {
|
|
945
945
|
if ((_b = row[fieldName]) === null || _b === void 0 ? void 0 : _b.action) {
|
|
@@ -982,4 +982,4 @@ GridService.ctorParameters = () => [
|
|
|
982
982
|
{ type: AlertService },
|
|
983
983
|
{ type: RequestService }
|
|
984
984
|
];
|
|
985
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUlyQixlQUFlLEVBS2YsY0FBYyxHQUtmLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7OztBQU9uRCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUNTLFFBQWtCLEVBQ2pCLGdCQUFrQyxFQUNsQyxlQUErQixFQUMvQixZQUF5QixFQUN6QixjQUE4QjtRQUovQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVJ4Qyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0IscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBQzFCLHFCQUFnQixHQUFXLEtBQUssQ0FBQztJQU9uQyxDQUFDO0lBRU47Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxLQUFvQixF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LEtBQUssRUFBQyxFQUFDLENBQUM7aUJBQ3pJO2dCQUFBLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUEseUNBQXlDO0lBQ3pDLGdCQUFnQixDQUFDLE9BQU87UUFDdkIsSUFBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFDO1lBQ3JCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRTtnQkFDckIsSUFBRyxHQUFHLENBQUMsU0FBUyxFQUFDO29CQUNmLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUN6QjtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzs7O1lBaG5DRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTVCUSxRQUFRO1lBb0JSLGdCQUFnQjtZQURoQixlQUFlO1lBRGYsWUFBWTtZQUlaLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExhenlMb2FkRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IElEcm9wRG93blJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBFR3JpZFNvcnREaXJlY3Rpb24sXHJcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxyXG4gIElHbG9iYWxGaWx0ZXIsXHJcbiAgSUdyaWRGaWx0ZXIsXHJcbiAgSUdyaWRTb3J0LFxyXG4gIEVHcmlkQ29sdW1uVHlwZSxcclxuICBhZGRDb2x1bW4sXHJcbiAgYWRkRmlsdGVyQ29sdW1uLFxyXG4gIGFkZEdsb2JhbEZpbHRlcixcclxuICBJR3JpZENvbHVtbixcclxuICBFR3JpZFZhbGlkYXRvcixcclxuICBJR3JpZFByb3AsXHJcbiAgSUdyaWRQcm9wRmlsdGVyLFxyXG4gIElHcmlkUm93UHJvcCxcclxuICBJR3JpZFJlcG9ydEJ0bixcclxufSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4vYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4vZHJvcGRvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IEh5cGVybGlua1NlcnZpY2UgfSBmcm9tICcuL2h5cGVybGluay5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4vdXRpbGl0aWVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4vcmVxdWVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JpZFNlcnZpY2Uge1xyXG4gIHNvZnRDYWNoaW5nRmlsdGVyczogYW55ID0ge307XHJcbiAgYXBwbHlGaWx0ZXJFdmVudDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGNvbHVtbkZvY3VzZWRPdXQ6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRhdGVwaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZTogSHlwZXJsaW5rU2VydmljZSxcclxuICAgIHByaXZhdGUgZHJvcGRvd25TZXJ2aWNlOkRyb3Bkb3duU2VydmljZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOkFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICogUmVjZWl2ZXMgbGF6eSBldmVudCBhbmQgcmV0dXJucyBhZnRlciBwcm9wZXIgbWFwcGluZ1xyXG4gICAqL1xyXG4gIGdldEdyaWRGaWx0ZXJzKGV2ZW50OiBMYXp5TG9hZEV2ZW50LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XHJcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5tYXBGaWx0ZXJzKGV2ZW50LCBjb2x1bW5zKTtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gZmlsdGVyc1xyXG4gICAqIFJlY2VpdmVzIGZpbHRlcnMgYW5kIHJldHVybnMgYXJyYXkgYWZ0ZXIgcmVtb3ZpbmcgZHVwbGljYXRlc1xyXG4gICAqIGFuZCBjcmVhdGluZyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIGZvciBzYW1lIGZpbHRlcnNcclxuICAgKi9cclxuICBoYW5kbGVNdWx0aUZpbHRlckZpZWxkKGZpbHRlcnM6IElHcmlkRmlsdGVyW10pOiBJR3JpZEZpbHRlcltdIHtcclxuICAgIHJldHVybiBmaWx0ZXJzXHJcbiAgICAgIC5tYXAoKHgsIGksIGFycikgPT5cclxuICAgICAgICBhcnIuc29tZSgoeSwgaWR4KSA9PiB5LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGkgIT09IGlkeClcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAuLi54LFxyXG4gICAgICAgICAgICB2YWx1ZTogYXJyXHJcbiAgICAgICAgICAgICAgLmZpbHRlcigoeikgPT4gei5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0geC5maWVsZD8udG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgICAubWFwKChhKSA9PiBhLnZhbHVlKVxyXG4gICAgICAgICAgICAgIC5qb2luKCksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHhcclxuICAgICAgKVxyXG4gICAgICAuZmlsdGVyKChmLCBpLCBhcnIpID0+IGFyci5maW5kSW5kZXgoKHgpID0+IHgudmFsdWUgPT09IGYudmFsdWUpID09PSBpKTtcclxuICB9XHJcblxyXG4gIC8vIFByZXBhcmUgYmFzaWMgZ3JpZCBmaWx0ZXJzXHJcbiAgcHJlcGFyZUJhc2ljRmlsdGVycyhcclxuICAgIGV2ZW50OiBMYXp5TG9hZEV2ZW50LFxyXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXVxyXG4gICk6IElHcmlkRmlsdGVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgZmlsdGVycyBoYXMgdmFsdWVzIHRoZW4gY29udmVydHMgZ2xvYmFsIGZpbHRlciB2YWx1ZXMgdHlwZSBpbnRvIElHcmlkRmlsdGVyLlxyXG4gICAqL1xyXG4gIHByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xyXG4gICAgY29uc3QgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xyXG5cclxuICAgIGdsb2JhbEZpbHRlcnM/LmZvckVhY2goKGZpbHRlcjogSUdsb2JhbEZpbHRlcikgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKCh0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGZpbHRlci52YWx1ZSkpICYmXHJcbiAgICAgICAgICBmaWx0ZXIudmFsdWUubGVuZ3RoKSB8fFxyXG4gICAgICAgICh0eXBlb2YgZmlsdGVyLnZhbHVlICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSAmJlxyXG4gICAgICAgICAgZmlsdGVyLnZhbHVlKSB8fFxyXG4gICAgICAgICh0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnYm9vbGVhbicgJiYgZmlsdGVyLnZhbHVlICE9PSBudWxsKSB8fFxyXG4gICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0VcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UgJiYgZmlsdGVyLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnfCcpKSB7XHJcbiAgICAgICAgICAvLyBhZGQgZmlsdGVyIGZvciBzdGFydCBkYXRlXHJcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xyXG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIpLFxyXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2d0ZScsXHJcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3IgPyBmaWx0ZXIub3BlcmF0b3IgOiAnYW5kJyxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyKSxcclxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBhZGQgZmlsdGVyIGZvciBlbmQgZGF0ZVxyXG4gICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyLCBmYWxzZSksXHJcbiAgICAgICAgICAgIG1hdGNoTW9kZTogZmlsdGVyLm1hdGNoTW9kZSA/IGZpbHRlci5tYXRjaE1vZGUgOiAnbHRlJyxcclxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIsIGZhbHNlKSxcclxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYoZmlsdGVyLnR5cGUgIT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xyXG4gICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyKSxcclxuICAgICAgICAgICAgbWF0Y2hNb2RlOlxyXG4gICAgICAgICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1RcclxuICAgICAgICAgICAgICAgID8gJ2luJ1xyXG4gICAgICAgICAgICAgICAgOiBmaWx0ZXIubWF0Y2hNb2RlLFxyXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEdsb2JhbEZpbHRlclZhbHVlKGZpbHRlciksXHJcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBnbG9iYWxEYXRhO1xyXG4gIH1cclxuXHJcbiAgc2V0R2xvYmFsRmlsdGVyRmllbGQoXHJcbiAgICBmaWx0ZXI6IGFueSxcclxuICAgIGlzU3RhcnREYXRlOiBib29sZWFuID0gdHJ1ZVxyXG4gICk6IHN0cmluZyB7XHJcbiAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xyXG4gICAgICBpZiAoaXNTdGFydERhdGUpIHtcclxuICAgICAgICByZXR1cm4gZmlsdGVyLmZyb21GaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmlsdGVyLnRvRmllbGQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXIuZmllbGQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgZ2xvYmFsIGZpbHRlciB2YWx1ZVxyXG4gIHNldEdsb2JhbEZpbHRlclZhbHVlKFxyXG4gICAgZmlsdGVyOiBJR2xvYmFsRmlsdGVyLFxyXG4gICAgaXNTdGFydERhdGU6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xyXG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVDpcclxuICAgICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSBhcyBhbnlbXSkuam9pbignLCcpO1xyXG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjpcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGZpbHRlci52YWx1ZSBhcyBEYXRlKTtcclxuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0U6XHJcbiAgICAgICAgbGV0IGRhdGVWYWx1ZXM6IHN0cmluZ1tdID0gZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgICA/IGZpbHRlci52YWx1ZS50b1N0cmluZygpLnNwbGl0KCd8JylcclxuICAgICAgICAgIDogW107XHJcbiAgICAgICAgaWYgKGRhdGVWYWx1ZXMgJiYgZGF0ZVZhbHVlcy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgbGV0IGRhdGVWYWx1ZTogRGF0ZSA9IGlzU3RhcnREYXRlXHJcbiAgICAgICAgICAgID8gbmV3IERhdGUoZGF0ZVZhbHVlc1swXSlcclxuICAgICAgICAgICAgOiBuZXcgRGF0ZShkYXRlVmFsdWVzWzFdKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZGF0ZVZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g6XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlIGFzIHN0cmluZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrVmFsaWRpdHkoY29sdW1uczogSUdyaWRDb2x1bW5bXSwgcm93OiBhbnkpe1xyXG4gICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgY29sdW1ucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS52YWxpZGF0aW9ucyAmJiAhaXRlbS5kaXNhYmxlZCkge1xyXG4gICAgICAgIGl0ZW0uZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgICAgICAgaXRlbS5pc3ZhbGlkID0gdHJ1ZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0udmFsaWRhdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IG1pbk1heFZhbGlkRGF0ZSA9IHV0aWxpdGllcy5jYWxlbmRlck1pbk1heFZhbHVlKGl0ZW0sIHJvd1tpdGVtLmZpZWxkXSwgaSk7XHJcbiAgICAgICAgICBjb25zdCB2YWxpZCA9IGl0ZW0udmFsaWRhdGlvbnMgJiYgaXRlbS5oZWFkZXJcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlJFUVVJUkVEICYmXHJcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgIWl0ZW0uaGlkZGVuICYmXHJcbiAgICAgICAgICAgIHZhbGlkXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNWYWxpZCA9IHJvd1tpdGVtLmZpZWxkXVxyXG4gICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYCR7dmFsaWR9IGlzIHJlcXVpcmVkYCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXHJcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NSU5MRU5HVEggJiZcclxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPVxyXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBgTWluaW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gY2hhcmFjdGVycyByZXF1aXJlZGBcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWExFTkdUSCAmJlxyXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNWYWxpZCA9XHJcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cclxuICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGBNYXhpbXVtICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufSBjaGFyYWN0ZXJzIHJlcXVpcmVkYFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxyXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUlOSU1VTSAmJlxyXG4gICAgICAgICAgICBpc1ZhbGlkXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYoaXRlbS50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSl7XHJcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IG1pbk1heFZhbGlkRGF0ZSA9PT0gJ21pbmltdW0nID8gdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYE1pbmltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YCkgOiB0cnVlO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihyb3dbaXRlbS5maWVsZF0gPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pe1xyXG4gICAgICAgICAgICBpc1ZhbGlkID1cclxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiYgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgYE1pbmltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWElNVU0gJiZcclxuICAgICAgICAgICAgaXNWYWxpZCBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZihpdGVtLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKXtcclxuICAgICAgICAgICAgICBpc1ZhbGlkID0gbWluTWF4VmFsaWREYXRlID09PSAnZ3JlYXRlcicgPyB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gKSA6IHRydWU7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHJvd1tpdGVtLmZpZWxkXSA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbil7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPVxyXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBgTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxyXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUEFUVEVSTiAmJlxyXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdLm1hdGNoKGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbilcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID1cclxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiYgcm93W2l0ZW0uZmllbGRdLm1hdGNoKGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbilcclxuICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk5VTUVSSUMgJiZcclxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXS50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKSQvKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPVxyXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0ubWF0Y2goL14oMHxbMS05XVxcZCopJC8pXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBgRW50ZXIgJHtpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGV9IGZvciAke3ZhbGlkfWBcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlBIT05FICYmXHJcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHNdKyQvKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPVxyXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHNdKyQvKVxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxyXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuREVDSU1BTCAmJlxyXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKShcXC5cXGQrKT8kLylcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID1cclxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiYgcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKDB8WzEtOV1cXGQqKShcXC5cXGQrKT8kLylcclxuICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGBFbnRlciAke2l0ZW0udmFsaWRhdGlvbnNbaV0udHlwZX0gZm9yICR7dmFsaWR9YFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxyXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuRU1BSUwgJiZcclxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kLylcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID1cclxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goXHJcbiAgICAgICAgICAgICAgICAvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kL1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpc1ZhbGlkO1xyXG4gIH1cclxuXHJcbiAgc2V0RXJyb3JNZXNzYWdlKGl0ZW06IElHcmlkQ29sdW1uLCBlcnJvck1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaXRlbS5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XHJcbiAgICBpdGVtLmlzdmFsaWQgPSBmYWxzZTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIHNldCBiYXNpYyBmaWx0ZXIgdmFsdWVcclxuICBzZXRCYXNpY0ZpbHRlclZhbHVlKGZpbHRlcjogYW55KTogYW55IHtcclxuICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZmlsdGVyKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXIgPyAxIDogMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBwYXJhbVxyXG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgc29ydCBhcnJheVxyXG4gICAqL1xyXG4gIGdldEdyaWRTb3J0cyhcclxuICAgIHsgbXVsdGlTb3J0TWV0YSB9OiBMYXp5TG9hZEV2ZW50LFxyXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXVxyXG4gICk6IElHcmlkU29ydFtdIHtcclxuICAgIHJldHVybiAobXVsdGlTb3J0TWV0YSB8fCBbXSkubWFwKCh7IGZpZWxkLCBvcmRlciB9LCBpKTogYW55ID0+ICh7XHJcbiAgICAgIGZpZWxkLFxyXG4gICAgICBkaXJlY3Rpb246IG9yZGVyID4gMCA/IEVHcmlkU29ydERpcmVjdGlvbi5BU0MgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQyxcclxuICAgICAgcHJpb3JpdHk6IGkgKyAxLFxyXG4gICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKiBIYW5kbGVzIGRlZmF1bHQgYW5kIGxvb2t1cCBmaWx0ZXJzXHJcbiAgICovXHJcbiAgbWFwRmlsdGVycyhldmVudDogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XHJcbiAgICBjb25zdCBmaWx0ZXJzOiBJR3JpZEZpbHRlcltdID0gW107XHJcbiAgICBPYmplY3QuZW50cmllcyhldmVudC5maWx0ZXJzKS5mb3JFYWNoKChbZmllbGQsIHZhbHVlXTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICh2YWx1ZSBhcyBJR3JpZEZpbHRlcltdKS5mb3JFYWNoKFxyXG4gICAgICAgICAgKHsgbWF0Y2hNb2RlLCBvcGVyYXRvciwgdmFsdWU6IGZpbHRlciB9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGUsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEJhc2ljRmlsdGVyVmFsdWUoZmlsdGVyKSxcclxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSAhPT0gJycpIHtcclxuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogJ2VxdWFscycsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUgPyAxIDogMCxcclxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6ICdlcXVhbCcsXHJcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcclxuICAgICAgICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWUgaW5zdGFuY2VvZiBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZS52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWUudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgKHZhbHVlLnZhbHVlIHx8IFtdKS5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHgudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgcGFnZSBudW1iZXJcclxuICAgKi9cclxuICBnZXRHcmlkUGFnaW5hdGlvbihldmVudDogYW55KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpc05hTihldmVudC5maXJzdCAvIGV2ZW50LnJvd3MpID8gMSA6IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cyArIDE7XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgZm9ybWF0dGVkIGRhdGVcclxuICBnZXRGb3JtYXR0ZWREYXRlKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShgJHt2YWx1ZX0gWmApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIHNpbXBsZSBncmlkIGNvbHVtbiB3aXRob3V0XHJcbiAgYWRkQ29sdW1uKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcclxuICAgIGlmKGNvbHVtbkluZm8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKXtcclxuICAgICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsIDogJ2xhYmVsJztcclxuICAgICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlIDogJ3ZhbHVlJztcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRDb2x1bW4gPSB7XHJcbiAgICAgIGFsbG93U2VhcmNoOiBjb2x1bW5JbmZvLmFsbG93U2VhcmNoLFxyXG4gICAgICBmaWVsZDogY29sdW1uSW5mby5maWVsZCxcclxuICAgICAgaGVhZGVyOiBjb2x1bW5JbmZvLmhlYWRlcixcclxuICAgICAgc3R5bGU6IGNvbHVtbkluZm8uc3R5bGUsXHJcbiAgICAgIHR5cGU6IGNvbHVtbkluZm8udHlwZSxcclxuICAgICAgZm9ybWF0OiBjb2x1bW5JbmZvLmZvcm1hdCxcclxuICAgICAgZGF0YTogY29sdW1uSW5mby5kYXRhLFxyXG4gICAgICBmaWx0ZXJpbmc6IGNvbHVtbkluZm8uZmlsdGVyaW5nLFxyXG4gICAgICBoaWRkZW46IGNvbHVtbkluZm8uaGlkZGVuLFxyXG4gICAgICBzb3J0aW5nOiBjb2x1bW5JbmZvLnNvcnRpbmcsXHJcbiAgICAgIGZpbHRlcjogY29sdW1uSW5mby5maWx0ZXIsXHJcbiAgICAgIGh5cGVybGluazogY29sdW1uSW5mby5oeXBlcmxpbmssXHJcbiAgICAgIHRhYmxlQWxpYXM6IGNvbHVtbkluZm8udGFibGVBbGlhcyxcclxuICAgICAgbGlua0lkOiBjb2x1bW5JbmZvLmxpbmtJZCxcclxuICAgICAgbWludXRlc0ludGVydmFsOiBjb2x1bW5JbmZvLm1pbnV0ZXNJbnRlcnZhbCxcclxuICAgICAgcGFyYW1zOiBjb2x1bW5JbmZvLnBhcmFtcyxcclxuICAgICAgc2hvd09wdGlvbjogY29sdW1uSW5mby5zaG93T3B0aW9uLFxyXG4gICAgICBkaXNwbGF5VGV4dDogY29sdW1uSW5mby5kaXNwbGF5VGV4dCxcclxuICAgICAgdGFyZ2V0OiBjb2x1bW5JbmZvLnRhcmdldCxcclxuICAgICAgZGlzYWJsZWQ6IGNvbHVtbkluZm8uZGlzYWJsZWQsXHJcbiAgICAgIGFsbG93U2F2ZTogY29sdW1uSW5mby5hbGxvd1NhdmUsXHJcbiAgICAgIGVkaXRhYmxlOiBjb2x1bW5JbmZvLmVkaXRhYmxlLCAgXHJcbiAgICAgIGVkaXRMaW5rOiBjb2x1bW5JbmZvLmVkaXRMaW5rLFxyXG4gICAgICBzYXZlQXNTdHJpbmc6IGNvbHVtbkluZm8uc2F2ZUFzU3RyaW5nLFxyXG4gICAgICBjb21wb25lbnQ6IGNvbHVtbkluZm8uY29tcG9uZW50LFxyXG4gICAgICBvbkNsaWNrOiBjb2x1bW5JbmZvLm9uQ2xpY2ssXHJcbiAgICAgIG9uUmV0dXJuOiBjb2x1bW5JbmZvLm9uUmV0dXJuLFxyXG4gICAgICBvbkZvY3VzT3V0OiBjb2x1bW5JbmZvLm9uRm9jdXNPdXQsXHJcbiAgICAgIG9uQ2hhbmdlOiBjb2x1bW5JbmZvLm9uQ2hhbmdlLFxyXG4gICAgICBhZ2dyZWdhdGU6IGNvbHVtbkluZm8uYWdncmVnYXRlLFxyXG4gICAgICBmb3JtYXR0ZXI6IGNvbHVtbkluZm8uZm9ybWF0dGVyLFxyXG4gICAgICBwZXJtaXNzaW9uczogY29sdW1uSW5mby5wZXJtaXNzaW9ucyxcclxuICAgICAgb3B0aW9uTGFiZWw6IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwsXHJcbiAgICAgIG9wdGlvblZhbHVlOiBjb2x1bW5JbmZvLm9wdGlvblZhbHVlLFxyXG4gICAgICBkcm9wRG93blByb3A6IGNvbHVtbkluZm8uZHJvcERvd25Qcm9wLFxyXG4gICAgICBzaG93VGltZTogY29sdW1uSW5mby5zaG93VGltZSxcclxuICAgICAgdGltZU9ubHk6IGNvbHVtbkluZm8udGltZU9ubHksXHJcbiAgICAgIGxvb2t1cENvbnRyb2w6IGNvbHVtbkluZm8ubG9va3VwQ29udHJvbCxcclxuICAgICAgZGlzcGxheUZpZWxkOiBjb2x1bW5JbmZvLmRpc3BsYXlGaWVsZCxcclxuICAgICAgaWNvbjogIGNvbHVtbkluZm8uaWNvbixcclxuICAgICAgY29sb3I6IGNvbHVtbkluZm8uY29sb3IsXHJcbiAgICAgIGlkOiBjb2x1bW5JbmZvLmlkLFxyXG4gICAgICB2YWx1ZTogY29sdW1uSW5mby52YWx1ZSxcclxuICAgICAgdmFsaWRhdGlvbnM6IGNvbHVtbkluZm8udmFsaWRhdGlvbnMsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfVxyXG4gIFxyXG4gIC8vIEFkZGluZyBSZXBvcnQgQnV0dG9uIEZ1bmN0aW9uIGZvciBHcmlkXHJcbiAgYWRkUmVwb3J0QnRuKGNvbHVtbkluZm86IElHcmlkUmVwb3J0QnRuKXsgIFxyXG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLlJFUE9SVDtcclxuICAgIHJldHVybiBjb2x1bW5JbmZvO1xyXG59XHJcblxyXG4gIC8vIGFkZCBzaW1wbGUgaW5wdXQgZ3JpZCBjb2x1bW5cclxuICBhZGRJbnB1dENvbHVtbihcclxuICAgIGZpbHRlckNvbHVtbkluZm86IGFkZENvbHVtbixcclxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcclxuICAgICAgZmlsdGVyQ29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihmaWx0ZXJDb2x1bW5JbmZvKSB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGZpbHRlckNvbHVtbkluZm8pO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIHNpbXBsZSBudW1lcmljIGdyaWQgY29sdW1uIHdpdGhvdXRcclxuICBhZGROdW1lcmljQ29sdW1uKFxyXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxyXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcclxuICApOiBJR3JpZENvbHVtbiB7XHJcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xyXG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xyXG4gICAgfVxyXG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUM7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgc2ltcGxlIGNhbGVuZGFyIGdyaWQgY29sdW1uIHdpdGhvdXRcclxuICBhZGRDYWxlbmRhckNvbHVtbihcclxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcclxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcclxuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUiwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xyXG4gICAgfVxyXG4gICAgY29sdW1uSW5mby50eXBlPSBjb2x1bW5JbmZvLnR5cGUgPyBjb2x1bW5JbmZvLnR5cGUgOiBFR3JpZENvbHVtblR5cGUuREFURTtcclxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcclxuICB9XHJcblxyXG4gIC8vIGFkZCBzaW1wbGUgYm9vbGVhbiBncmlkIGNvbHVtbiB3aXRob3V0XHJcbiAgYWRkQm9vbGVhbkNvbHVtbihcclxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcclxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcclxuICAgICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4sXHJcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0geyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1gsIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbykgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcclxuICB9XHJcblxyXG4gIC8vIGFkZCBMb29rVXAgRmllbGQgZm9yIEdyaWRcclxuICAgIGFkZExvb2tVcENvbHVtbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4sIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcclxuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQsIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbykgfTtcclxuICAgIH1cclxuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQ7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgQnV0dG9uIGZvciBncmlkIGNvbHVtblxyXG4gIGFkZEJ1dHRvbkNvbHVtbihcclxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcclxuICApOiBJR3JpZENvbHVtbiB7XHJcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQUREX0JVVFRPTjtcclxuICAgIGlmICghY29sdW1uSW5mby5maWVsZCkge1xyXG4gICAgICBjb2x1bW5JbmZvLmZpZWxkID0gY29sdW1uSW5mby52YWx1ZSA/IGNvbHVtbkluZm8udmFsdWUgOiBjb2x1bW5JbmZvLmljb247XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XHJcbiAgfVxyXG5cclxuICAgIC8vIGFkZCBBdXRvQ29tcGxldGUgZm9yIGdyaWQgY29sdW1uXHJcbiAgICBhZGRBdXRvQ29tcGxldGUoY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFO1xyXG4gICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VhcmNoIEF1dG9Db21wbGV0ZSBEYXRhIGZvciBHcmlkXHJcbiAgICBnZXRBdXRvQ29tcGxldGVEYXRhKGNvbHVtbj86IGFueSwgdW5pcXVlS2V5Pzogc3RyaW5nLCBmaWx0ZXJzPzogYW55W10pOiBhbnkge1xyXG4gICAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlLmdldDxhbnlbXSwgYW55PignL0RhdGEvRmV0Y2gnLCB7IHVuaXF1ZUtleTogdW5pcXVlS2V5LCBmaWx0ZXJzfSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KT0+e1xyXG4gICAgICAgIGNvbHVtbi5kYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gIC8vIGFkZCBzaW1wbGUgZHJvcGRvd24gZ3JpZCBjb2x1bW4gd2l0aG91dFxyXG4gIGFkZERyb3Bkb3duQ29sdW1uKFxyXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxyXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XHJcbiAgKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOO1xyXG4gICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsIDogJ2xhYmVsJztcclxuICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZSA6ICd2YWx1ZSc7XHJcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xyXG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOLFxyXG4gICAgICAgICBkYXRhOiAhY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhICYmICFkcm9wRG93blByb3AgJiYgY29sdW1uSW5mby5kYXRhID8gIGNvbHVtbkluZm8uZGF0YSA6IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSA/IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSA6IFtdLCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XHJcbiAgICB9XHJcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XHJcbiAgICAgIGNvbHVtbkluZm8uZHJvcERvd25Qcm9wID0gZHJvcERvd25Qcm9wO1xyXG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcclxuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XHJcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xyXG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xyXG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXREcm9wZG93bkRhdGEoXHJcbiAgICAgICAgICBjb2x1bW5JbmZvLFxyXG4gICAgICAgICAgdW5pcXVlS2V5LFxyXG4gICAgICAgICAgdmFsdWVQcm9wLFxyXG4gICAgICAgICAgbGFiZWxQcm9wLFxyXG4gICAgICAgICAgZmlsdGVyc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcclxuICAgIH1cclxuICB9XHJcbi8vIGFkZCBNdWx0aVNlbGVjdERyb3BEb3duIGdyaWQgY29sdW1uXHJcbmFkZE11bHRpU2VsZWN0RHJvcERvd25Db2x1bW4oXHJcbiAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlLFxyXG4gIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcclxuKTogSUdyaWRDb2x1bW4gIHtcclxuICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbCA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgOiAnbGFiZWwnO1xyXG4gIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZSA6ICd2YWx1ZSc7XHJcbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUO1xyXG4gIGlmIChzaG93RmlsdGVyKSB7XHJcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNULFxyXG4gICAgICAgZGF0YTogIWNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSAmJiAhbXVsdGlTZWxlY3RQcm9wICYmIGNvbHVtbkluZm8uZGF0YSA/ICBjb2x1bW5JbmZvLmRhdGEgOiBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgPyBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgOiBbXSwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xyXG4gIH1cclxuICBpZiAobXVsdGlTZWxlY3RQcm9wKSB7XHJcbiAgICBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCA9IG11bHRpU2VsZWN0UHJvcDtcclxuICAgIGxldCB1bmlxdWVLZXkgPSBtdWx0aVNlbGVjdFByb3AudW5pcXVlS2V5O1xyXG4gICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XHJcbiAgICBsZXQgbGFiZWxQcm9wID0gbXVsdGlTZWxlY3RQcm9wLmxhYmVsUHJvcDtcclxuICAgIGxldCBmaWx0ZXJzID0gbXVsdGlTZWxlY3RQcm9wLmZpbHRlcnM7XHJcbiAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcGRvd25EYXRhKFxyXG4gICAgICAgIGNvbHVtbkluZm8sXHJcbiAgICAgICAgdW5pcXVlS2V5LFxyXG4gICAgICAgIHZhbHVlUHJvcCxcclxuICAgICAgICBsYWJlbFByb3AsXHJcbiAgICAgICAgZmlsdGVyc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XHJcbiAgfVxyXG59XHJcblxyXG4gIHNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm86IGFkZENvbHVtbil7XHJcbiAgICBpZihjb2x1bW5JbmZvLmZpbHRlciAmJiBjb2x1bW5JbmZvLmZpbHRlci5zaG93RmlsdGVyKXtcclxuICAgICAgcmV0dXJuIHRydWU7IFxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERyb3Bkb3duRGF0YShcclxuICAgIGNvbHVtbjogSUdyaWRDb2x1bW4sXHJcbiAgICB1bmlxdWVLZXk6IHN0cmluZyxcclxuICAgIHZhbHVlUHJvcDogc3RyaW5nLFxyXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXHJcbiAgICBmaWx0ZXJzOiBhbnlbXSxcclxuICAgIHJvdz86IHtba2V5OiBzdHJpbmddOiBhbnl9XHJcbiAgKTogUHJvbWlzZSA8YW55PiB8IGFueXtcclxuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxyXG4gICAgICAuc2V0RHJvcERvd25MaXN0KHVuaXF1ZUtleSwgdmFsdWVQcm9wLCBsYWJlbFByb3AsIGZpbHRlcnMpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmKHJvdyl7XHJcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfZGF0YSddID0gcmVzO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgY29sdW1uLmRhdGE9cmVzO1xyXG4gICAgICAgICAgaWYoY29sdW1uLmZpbHRlciAmJiBjb2x1bW4uZmlsdGVyLnR5cGUgPT09IFwiZHJvcGRvd25cIil7XHJcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXIuZGF0YSA9IHJlcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbik7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXHJcbiAgYWRkRmlsdGVyQ29sdW1uKGZpbHRlckNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcclxuICAgIGNvbnN0IGNvbHVtbjogYW55ID0ge1xyXG4gICAgICBmaWVsZDogZmlsdGVyQ29sdW1uSW5mby5maWVsZCxcclxuICAgICAgaGVhZGVyOiBmaWx0ZXJDb2x1bW5JbmZvLmhlYWRlcixcclxuICAgICAgZmlsdGVyOiB7IHR5cGU6IGZpbHRlckNvbHVtbkluZm8uZmlsdGVyIH0sXHJcbiAgICAgIGZpbHRlcmluZzogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXJpbmcsXHJcbiAgICAgIGhpZGRlbjogZmlsdGVyQ29sdW1uSW5mby5oaWRkZW4sXHJcbiAgICAgIHN0eWxlOiBmaWx0ZXJDb2x1bW5JbmZvLnN0eWxlLFxyXG4gICAgICB0YWJsZUFsaWFzOiBmaWx0ZXJDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXHJcbiAgICAgIHBlcm1pc3Npb25zOiBmaWx0ZXJDb2x1bW5JbmZvLnBlcm1pc3Npb25zXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgZGF0ZSBncmlkIGNvbHVtbiB3aXRoIGJ1aWx0LWluIGZpbHRlclxyXG4gIGFkZERhdGVDb2x1bW4oZGF0ZUNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcclxuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRDb2x1bW4gPSB7XHJcbiAgICAgIGZpZWxkOiBkYXRlQ29sdW1uSW5mby5maWVsZCxcclxuICAgICAgaGVhZGVyOiBkYXRlQ29sdW1uSW5mby5oZWFkZXIsXHJcbiAgICAgIHR5cGU6IGRhdGVDb2x1bW5JbmZvLnR5cGUgPyBkYXRlQ29sdW1uSW5mby50eXBlIDogRUdyaWRDb2x1bW5UeXBlLkRBVEUsXHJcbiAgICAgIGZpbHRlcmluZzogZGF0ZUNvbHVtbkluZm8uZmlsdGVyaW5nLFxyXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSIH0sXHJcbiAgICAgIGZvcm1hdDogZGF0ZUNvbHVtbkluZm8uZm9ybWF0LFxyXG4gICAgICBzdHlsZTogZGF0ZUNvbHVtbkluZm8uc3R5bGUsXHJcbiAgICAgIHRhYmxlQWxpYXM6IGRhdGVDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXHJcbiAgICAgIGRpc2FibGVkOiBkYXRlQ29sdW1uSW5mby5kaXNhYmxlZCxcclxuICAgICAgYWxsb3dTYXZlOiBkYXRlQ29sdW1uSW5mby5hbGxvd1NhdmUsXHJcbiAgICAgIHBlcm1pc3Npb25zOiBkYXRlQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcclxuICAgICAgY29tcG9uZW50OiBkYXRlQ29sdW1uSW5mby5jb21wb25lbnQsXHJcbiAgICAgIHNob3dUaW1lOiBkYXRlQ29sdW1uSW5mby5zaG93VGltZSxcclxuICAgICAgdGltZU9ubHk6IGRhdGVDb2x1bW5JbmZvLnRpbWVPbmx5LFxyXG4gICAgICBkYXRhOiBkYXRlQ29sdW1uSW5mby5kYXRhLFxyXG4gICAgICBoaWRkZW46IGRhdGVDb2x1bW5JbmZvLmhpZGRlbixcclxuICAgIH07XHJcbiAgICByZXR1cm4gY29sdW1uO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9va1VwRmlsdGVyKGNvbHVtbjogYW55LCBkaWFsb2dTZXJ2aWNlOiBhbnkpIHtcclxuICAgIGlmIChjb2x1bW4ubG9va3VwQ29udHJvbCkge1xyXG4gICAgICBsZXQgZGF0YVZhbHVlOiBhbnlbXT0gW107XHJcbiAgICAgICBsZXQgZGF0YUtleTogYW55W10gPSBbXTtcclxuICAgICAgIGxldCBkYXRhID0gY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGE7XHJcbiAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XHJcbiAgICAgIGlmIChkYXRhICYmIGtleXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGFba2V5XS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykpIHtcclxuICAgICAgICAgICAgZGF0YVZhbHVlLnVuc2hpZnQoZGF0YVtrZXldKTtcclxuICAgICAgICAgICAgZGF0YUtleS51bnNoaWZ0KGtleSk7XHJcbiAgICAgICAgICAgIGRhdGFba2V5XSA9ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlZiA9IGRpYWxvZ1NlcnZpY2Uub3BlbihcclxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5jb21wb25lbnQsXHJcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuZGF0YVxyXG4gICAgICApO1xyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoZGF0YUtleT8ubGVuZ3RoID4gMCAmJiBkYXRhVmFsdWU/Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBkYXRhS2V5LmZvckVhY2goKGtleSxrZXlJbmRleCk9PntcclxuICAgICAgICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsdWUsIHZhbHVlSW5kZXgpPT57XHJcbiAgICAgICAgICAgICAgICBpZihrZXlJbmRleCA9PT0gdmFsdWVJbmRleCl7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvb2tVcF9maWx0ZXInKT8uZm9jdXMoKTtcclxuICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sdW1uLmZpZWxkO1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPXV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcclxuICAgICAgICAgICAgICBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgY29sdW1uPy5sb29rdXBDb250cm9sLFxyXG4gICAgICAgICAgICAgIHJlc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb2x1bW4udmFsdWUgPSB2YWx1ZT8udmFsdWUgPyB2YWx1ZS52YWx1ZSA6IHJlc1tmaWVsZC50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgICh7IGVycm9yIH06YW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU2V0IEh5cGVybGluayBmaWVsZCBhcyBhIHBhcmFtIFZhbHVlXHJcbiAgc2V0RmllbGRBc0xpbmtQYXJhbShjb2x1bW5zOiBhbnksIGZpZWxkOiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgIGlmKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwICYmIGZpZWxkICYmIHJlc3BvbnNlLnJlY29yZHMgJiYgcmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwKXtcclxuICAgICAgICB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3JkcykuZm9yRWFjaCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4OiBhbnkpPT4geC5maWVsZCA9PT0gZmllbGQpO1xyXG4gICAgICAgICAgIGlmKG9iaiAmJiBvYmoucGFyYW1zKXtcclxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iai5wYXJhbXMpXHJcbiAgICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5OiBhbnkpPT57XHJcbiAgICAgICAgICAgICAgICBpZihvYmoucGFyYW1zW2tleV0gJiYgb2JqLnBhcmFtc1trZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gb2JqLnBhcmFtc1trZXldLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBvYmoucGFyYW1zW2tleV0gPSByZXNbdmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhc0FueUxpbmtDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbHVtbnMgJiYgY29sdW1ucy5zb21lKCh4KSA9PiB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHwgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHwgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHwgXHJcbiAgICAoeC5saW5rSWQgJiYgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQpKTtcclxuICB9XHJcblxyXG4gIHNldEh5cGVybGlua3MoZmV0Y2hSZXNwb25zZTogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogYW55IHtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKT0+e1xyXG4gICAgICBpZihjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJiAhY29sdW1uLmRhdGEpe1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGBcIkRhdGFcIiBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZvciBcIiR7Y29sdW1uLmhlYWRlcn1cIiBjb2x1bW5gKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGxldCByZWNvcmRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBkYXRhID0gZmV0Y2hSZXNwb25zZSAmJiBmZXRjaFJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMCA/IHRoaXMuc2V0RGF0YUZpZWxkcyhmZXRjaFJlc3BvbnNlLnJlY29yZHMpIDogW107XHJcbiAgICBsZXQgbmV3Um93OmFueTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oeXBlcmxpbmtTZXJ2aWNlXHJcbiAgICAgIC5hZGRIeXBlcmxpbmtzKGNvbHVtbnMpLnRoZW4oKGxpbmtzUmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICAgICBuZXdSb3cgPSB7IC4uLnJvdyB9O1xyXG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xyXG4gICAgICAgICAgICAgIGlmKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKXtcclxuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZCArICdfb2JqJztcclxuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xyXG4gICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxyXG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cclxuICAgICAgICAgICAgICAgICAgOiByb3dbY29sLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgICAgICAgICAgICBpZihjb2wuZm9ybWF0ICYmIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShuZXdSb3dbZmllbGRdLmRpc3BsYXlUZXh0LGNvbC5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sLmRhdGEgJiYgY29sLmRhdGEuZGF0YSl7XHJcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlhbG9nRGF0YSA9IHV0aWxpdGllcy5maW5kS2V5c0FuZFZhbHVlKGNvbC5kYXRhLmRhdGEscm93KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGlua3NSZXNwb25zZS5mb3JFYWNoKChsaW5rUmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8IGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUKSAmJlxyXG4gICAgICAgICAgICAgICAgICBjb2wubGlua0lkICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbC5wYXJhbXMgJiZcclxuICAgICAgICAgICAgICAgICAgY29sLmxpbmtJZCA9PT0gbGlua1Jlc3BvbnNlLmxpbmtJZFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbUtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoY29sLnBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rOiBhbnkgPSB1dGlsaXRpZXMuc2V0SHlwZXJsaW5rKFxyXG4gICAgICAgICAgICAgICAgICBrZXlzLFxyXG4gICAgICAgICAgICAgICAgICByb3csXHJcbiAgICAgICAgICAgICAgICAgIGxpbmtSZXNwb25zZS51cmwsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtS2V5cyxcclxuICAgICAgICAgICAgICAgICAgY29sLnBhcmFtc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBjb2wuZmllbGQgKyAnX29iaic7XHJcbiAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdID0geyAuLi5jb2wgfTtcclxuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uaHlwZXJsaW5rID0gbGluaztcclxuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcclxuICAgICAgICAgICAgICAgICAgPyByb3dbY29sLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldXHJcbiAgICAgICAgICAgICAgICAgIDogcm93W2NvbC5maWVsZC50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZWNvcmRzLnB1c2gobmV3Um93KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVjb3JkcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXHJcbiAgYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xyXG4gICAgY29uc3QgY29sdW1uOiBhZGRHbG9iYWxGaWx0ZXIgPSB7XHJcbiAgICAgIGZpZWxkOiBnbG9iZWxGaWx0ZXJJbmZvLmZpZWxkLFxyXG4gICAgICBkaXNwbGF5VGV4dDogZ2xvYmVsRmlsdGVySW5mby5kaXNwbGF5VGV4dCxcclxuICAgICAgdmFsaWRhdGlvbnM6IGdsb2JlbEZpbHRlckluZm8udmFsaWRhdGlvbnMsXHJcbiAgICAgIHR5cGU6IGdsb2JlbEZpbHRlckluZm8udHlwZSxcclxuICAgICAgZGF0YTogZ2xvYmVsRmlsdGVySW5mby5kYXRhLFxyXG4gICAgICB2YWx1ZTogZ2xvYmVsRmlsdGVySW5mby52YWx1ZSxcclxuICAgICAgdmFsdWVUd286IGdsb2JlbEZpbHRlckluZm8udmFsdWVUd28sXHJcbiAgICAgIG1hdGNoTW9kZTogZ2xvYmVsRmlsdGVySW5mby5tYXRjaE1vZGUsXHJcbiAgICAgIG9wZXJhdG9yOiBnbG9iZWxGaWx0ZXJJbmZvLm9wZXJhdG9yLFxyXG4gICAgICB0YWJsZUFsaWFzOiBnbG9iZWxGaWx0ZXJJbmZvLnRhYmxlQWxpYXMsXHJcbiAgICAgIG9wdGlvbkxhYmVsOiBnbG9iZWxGaWx0ZXJJbmZvLm9wdGlvbkxhYmVsLFxyXG4gICAgICBvcHRpb25WYWx1ZTogZ2xvYmVsRmlsdGVySW5mby5vcHRpb25WYWx1ZSxcclxuICAgICAgb25Gb2N1c091dDogZ2xvYmVsRmlsdGVySW5mby5vbkZvY3VzT3V0LFxyXG4gICAgICBmaWx0ZXJpbmc6IGdsb2JlbEZpbHRlckluZm8uZmlsdGVyaW5nLFxyXG4gICAgICBjb2x1bW46IGdsb2JlbEZpbHRlckluZm8uY29sdW1uLFxyXG4gICAgICBkYXlSYW5nZTogZ2xvYmVsRmlsdGVySW5mby5kYXlSYW5nZSxcclxuICAgICAgZnJvbUZpZWxkOiBnbG9iZWxGaWx0ZXJJbmZvLmZyb21GaWVsZCxcclxuICAgICAgdG9GaWVsZDpnbG9iZWxGaWx0ZXJJbmZvLnRvRmllbGQsXHJcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdsb2JlbEZpbHRlckluZm8ubG9va3VwQ29udHJvbCxcclxuICAgICAgYWxsb3dTZWFyY2g6IGdsb2JlbEZpbHRlckluZm8uYWxsb3dTZWFyY2gsXHJcbiAgICAgIGRpc2FibGVkOiBnbG9iZWxGaWx0ZXJJbmZvLmRpc2FibGVkLFxyXG4gICAgICBoaWRkZW46IGdsb2JlbEZpbHRlckluZm8uaGlkZGVuLFxyXG4gICAgICBsYWJlbFRleHQ6IGdsb2JlbEZpbHRlckluZm8ubGFiZWxUZXh0LFxyXG4gICAgICBwcmVmaXg6IGdsb2JlbEZpbHRlckluZm8ucHJlZml4LFxyXG4gICAgICBjb2xvcjogZ2xvYmVsRmlsdGVySW5mby5jb2xvcixcclxuICAgICAgZm9ybWF0OiBnbG9iZWxGaWx0ZXJJbmZvLmZvcm1hdCxcclxuICAgIH07XHJcbiAgICByZXR1cm4gY29sdW1uO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIGdsb2JhbCBpbnB1dCBmaWx0ZXJcclxuICBhZGRHbG9iYWxJbnB1dEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcclxuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVDtcclxuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcclxuICB9XHJcblxyXG4gIC8vIGFkZCBnbG9iYWwgZHJvcGRvd24gZmlsdGVyXHJcbiAgYWRkR2xvYmFsRHJvcGRvd25GaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogSUdsb2JhbEZpbHRlciwgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdCk6IGFueSB7XHJcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV047XHJcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XHJcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xyXG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcclxuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XHJcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XHJcbiAgICAgIGxldCBzb3J0cz0gZHJvcERvd25Qcm9wLnNvcnRzO1xyXG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXHJcbiAgICAgICAgICBnbG9iZWxGaWx0ZXJJbmZvLFxyXG4gICAgICAgICAgdW5pcXVlS2V5LFxyXG4gICAgICAgICAgdmFsdWVQcm9wLFxyXG4gICAgICAgICAgbGFiZWxQcm9wLFxyXG4gICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgIHNvcnRzXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNle1xyXG4gICAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gICAvLyBhZGQgZ2xvYmFsIE11bHRpU2VsZWN0IGRyb3Bkb3duIGZpbHRlclxyXG4gICBhZGRHbG9iYWxNdWx0aVNlbGVjdERyb3BEb3duRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3QpOiBhbnkge1xyXG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUO1xyXG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xyXG4gICAgICBsZXQgdW5pcXVlS2V5ID0gbXVsdGlTZWxlY3RQcm9wLnVuaXF1ZUtleTtcclxuICAgICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XHJcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xyXG4gICAgICBsZXQgZmlsdGVycyA9IG11bHRpU2VsZWN0UHJvcC5maWx0ZXJzO1xyXG4gICAgICBsZXQgc29ydHMgPSBtdWx0aVNlbGVjdFByb3Auc29ydHM7XHJcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcclxuICAgICAgICAgIGdsb2JlbEZpbHRlckluZm8sXHJcbiAgICAgICAgICB1bmlxdWVLZXksXHJcbiAgICAgICAgICB2YWx1ZVByb3AsXHJcbiAgICAgICAgICBsYWJlbFByb3AsXHJcbiAgICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgICAgc29ydHNcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2V7XHJcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgXHJcblxyXG5cclxuICBnZXREcm9wZG93bkRhdGEoXHJcbiAgICBmaWVsZEluZm86IGFueSxcclxuICAgIHVuaXF1ZUtleTogc3RyaW5nLFxyXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXHJcbiAgICBsYWJlbFByb3A6IHN0cmluZyxcclxuICAgIGZpbHRlcnM6IGFueSxcclxuICAgIHNvcnRzOiBJR3JpZFNvcnRbXSA9IFtdXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blNlcnZpY2VcclxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzICxzb3J0cylcclxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgZmllbGRJbmZvLmRhdGEgPSByZXM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuIC8vIGFkZCBnbG9iYWwgZmlsdGVyIFNwYWNlIEZpZWxkXHJcbiBhZGRHbG9iYWxGaWx0ZXJTcGFjZUZpZWxkKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xyXG4gIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5TUEFDRVI7XHJcbiAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xyXG59XHJcblxyXG4gIC8vIGFkZCBnbG9iYWwgYm9vbGVhbiBmaWx0ZXJcclxuICBhZGRHbG9iYWxCb29sZWFuRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xyXG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxyXG4gIGFkZFJhbmdlRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xyXG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFO1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxyXG4gIGFkZEdsb2JhbERhdGVSYW5nZUZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcclxuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFO1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xyXG4gIH1cclxuICAvLyBhZGQgTnVtZXJpYyBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcclxuICBhZGRHbG9iYWxOdW1lcmljUmFuZ2VGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XHJcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ19SQU5HRTtcclxuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcclxuICB9XHJcbiAgLy8gYWRkIE51bWVyaWMgaW5wdXQgZm9yIGdsb2JhbCBGaWx0ZXJcclxuICBhZGRHbG9iYWxOdW1lcmljSW5wdXQoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKXtcclxuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQ7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgTG9va1VwIEZpZWxkIGZvciBnbG9iYWwgRmlsdGVyXHJcbiAgYWRkR2xvYmFsTG9va3VwRmlsdGVyIChnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcclxuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQ7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XHJcbiAgfVxyXG5cclxuICBzZXREYXRhRmllbGRzKHJlc3BvbnNlOiBhbnksIGRhdGFLZXk6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYoT2JqZWN0LmtleXMoeCA/PyB7fSk/Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0OmFueSA9IE9iamVjdC5rZXlzKHgpPy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoeyAuLi5wcmV2LCBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSB9KSxcclxuICAgICAgICAgICAge31cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoZGF0YUtleSAmJiBkYXRhS2V5Lmxlbmd0aCA+IDAgJiYgIU9iamVjdC5rZXlzKHJlc3VsdCk/LmluY2x1ZGVzKGRhdGFLZXkpKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICByZXN1bHRbZGF0YUtleV0gPSBpbmRleDtcclxuICAgICAgICAgIH1cclxuICBcclxuICAgICAgICAgIGRhdGEucHVzaChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHNldENvbHVtbkZpZWxkcyhjb2x1bW5zOiBhbnlbXSkge1xyXG4gICAgbGV0IGNvbHVtbjogYW55ID0gW107XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29sdW1ucy5tYXAoKGNvbDogYW55KSA9PiB7XHJcbiAgICAgICAgY29sdW1uLnB1c2goeyAuLi5jb2wsIGZpZWxkOiBjb2w/LmZpZWxkPy50b0xvd2VyQ2FzZSgpIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGNvbHVtbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNoYW5nZSBsaW5rSWQgaW4gZWRpdCBtb2RlLCBpZiBjaGFuZ2VMaW5rIGlzIHRydWUgdGhlbiBpdCBjaGFuZ2UgdGhlIGVkaXRlZCByb3cgaHlwZXJsaW5rIHZhbHVlXHJcbiAgc2V0TGlua0lkKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOnN0cmluZywgbGlua0lkOiBzdHJpbmcsIHJlY29yZDogYW55LCB1c2VyczogYW55LCAgcGFyYW1zOmFueSA9IG51bGwsIGNoYW5nZUxpbms6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGNvbHVtbi5saW5rSWQgPSBsaW5rSWQ7XHJcbiAgICAgICAgICBpZihwYXJhbXMpe1xyXG4gICAgICAgICAgICBjb2x1bW4ucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgICB0aGlzLnNldEh5cGVybGlua3Moe3JlY29yZHM6IFtyZWNvcmRdfSwgY29sdW1ucykudGhlbigocmVzOiBhbnkpPT57XHJcbiAgICAgICAgaWYoY2hhbmdlTGluayl7XHJcbiAgICAgICAgICBkZWxldGUgcmVzWzBdW2ZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXTtcclxuICAgICAgICAgIGxldCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleCgoaTphbnkpPT4gaVtmaWVsZC50b0xvd2VyQ2FzZSgpXSA9PT0gcmVjb3JkW2ZpZWxkLnRvTG93ZXJDYXNlKCldKTtcclxuICAgICAgICAgIGlmKGluZGV4ICE9PSAtMSl7XHJcbiAgICAgICAgICAgIGlmKHVzZXJzW2luZGV4XVtmaWVsZCsnX29iaiddKXtcclxuICAgICAgICAgICAgICB1c2Vyc1tpbmRleF1bZmllbGQrJ19vYmonXS5oeXBlcmxpbmsgPSByZXNbMF1bZmllbGQrJ19vYmonXS5oeXBlcmxpbms7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIHNldCBncmlkIGRhdGEgYW5kIHNldCBzZWxlY3RlZCByb3cgYmFzZWQgb24gc2VsZWN0aW9uIHZhbHVlXHJcbiAgc2V0RGF0YVdpdGhTZWxlY3RlZFJvdyhyZWNvcmRzOiBhbnksIGNvbmZpZ0RhdGE6IGFueSkge1xyXG4gICAgaWYgKGNvbmZpZ0RhdGE/LnNlbGVjdGVkVmFsdWUgJiYgY29uZmlnRGF0YS5kYXRhLnNlbGVjdGlvbikge1xyXG4gICAgICByZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocmVjb3JkKT8uZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IGNvbmZpZ0RhdGEuc2VsZWN0ZWRWYWx1ZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGlmKGNvbmZpZ0RhdGEuZGF0YS52YWx1ZSAmJiByZWNvcmRba2V5XSA9PT0gY29uZmlnRGF0YS5kYXRhLnZhbHVlKXtcclxuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHJlY29yZFtrZXldID09PSBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVjb3JkcztcclxuICB9XHJcblxyXG4gIHNldFRhYmxlQWxpYXMoZmllbGQ6IHN0cmluZywgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xyXG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChcclxuICAgICAgICAoeDogYW55KSA9PiB4LmZpZWxkLnRvTG93ZXJDYXNlKCkgPT0gZmllbGQudG9Mb3dlckNhc2UoKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKGNvbHVtbiAhPSBudWxsICYmIGNvbHVtbi50YWJsZUFsaWFzICYmIGNvbHVtbi50YWJsZUFsaWFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gY29sdW1uLnRhYmxlQWxpYXM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzZXRHcmlkUHJvcFZhbHVlcyhcclxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sXHJcbiAgICBwcm9wczogSUdyaWRQcm9wW10sXHJcbiAgICBmaWx0ZXI/OiBJR3JpZFByb3BGaWx0ZXIsXHJcbiAgICByZWNvcmRzPzogYW55W10sXHJcbiAgKSB7XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDAgJiYgcHJvcHMgJiYgcHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgaXNNYXRjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIGlmIChmaWx0ZXIgJiYgZmlsdGVyLmZpZWxkICYmIHJlY29yZHMgJiYgcmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaXNNYXRjaGVkID0gcmVjb3Jkcy5zb21lKCh4KSA9PiB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIoeClbZmlsdGVyLmZpZWxkLnRvTG93ZXJDYXNlKCldID09PSBmaWx0ZXIudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgICAgcHJvcHMubWFwKChwcm9wOiBJR3JpZFByb3ApID0+IHtcclxuICAgICAgICAgIGxldCBjb2w6IGFueSA9IHt9O1xyXG4gICAgICAgICAgaWYgKHByb3AuZmllbGQgJiYgIWlzTWF0Y2hlZCAmJiAhZmlsdGVyPy5maWVsZCkge1xyXG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaGVkKSB7XHJcbiAgICAgICAgICAgIGlmKHByb3AuZmllbGQpe1xyXG4gICAgICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmlsdGVyPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2wgJiYgY29sLmhhc093blByb3BlcnR5KHByb3AubmFtZSkpIHtcclxuICAgICAgICAgICAgY29sW3Byb3AubmFtZV0gPSBwcm9wLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc2V0IGdyaWQgcm93IHByb3BWYWx1ZXNcclxuICBzZXRHcmlkUm93UHJvcFZhbHVlKHJvdzoge1trZXk6IHN0cmluZ106IGFueX0sIHByb3BzOiBJR3JpZFJvd1Byb3BbXSwgY29sdW1uczpJR3JpZENvbHVtbltdID0gW10pe1xyXG4gICAgcHJvcHM/LmZvckVhY2goKHByb3ApPT57XHJcbiAgICAgIGlmKHByb3AucHJvcE5hbWUgJiYgKHByb3AucHJvcFZhbHVlIHx8IHByb3AucHJvcFZhbHVlID09PSBmYWxzZSkgJiYgcHJvcC5maWVsZCl7XHJcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KT0+IGtleT8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIGlmKGZpZWxkTmFtZSl7XHJcbiAgICAgICAgICBpZihyb3dbZmllbGROYW1lXT8uYWN0aW9uKXtcclxuICAgICAgICAgICAgcm93W2ZpZWxkTmFtZV0uYWN0aW9uID0gT2JqZWN0LmFzc2lnbihyb3dbZmllbGROYW1lXT8uYWN0aW9uLCB7W3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZX0pO1xyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJvd1tmaWVsZE5hbWVdID0ge3RleHQ6IHJvd1tmaWVsZE5hbWVdLCBhY3Rpb246IHtbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlLCBmaWVsZDogZmllbGROYW1lfX07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmKGNvbHVtbnM/LnNvbWUoKGNvbHVtbik9PiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKSl7XHJcbiAgICAgICAgICByb3dbcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKV0gPSB7dGV4dDogcm93W3Byb3AuZmllbGRdLGV4dHJhRmllbGQ6IHRydWUsIGFjdGlvbjoge1twcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUsIGZpZWxkOiBwcm9wLmZpZWxkfX07XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcm93O1xyXG4gIH1cclxuXHJcbiAgIC8vIHJlbW92ZSB0aGUgcm93QWN0aW9ucyBmcm9tIHRoZSByZWNvcmRzXHJcbiAgIHJlbW92ZVJvd0FjdGlvbnMocmVjb3Jkcyl7XHJcbiAgICBpZihyZWNvcmRzPy5sZW5ndGggPiAwKXtcclxuICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyb3cpPT57XHJcbiAgICAgICAgaWYocm93LnJvd0FjdGlvbil7XHJcbiAgICAgICAgICBkZWxldGUgcm93Wydyb3dBY3Rpb24nXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVjb3JkcztcclxuICB9XHJcbn0iXX0=
|
|
985
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUlyQixlQUFlLEVBS2YsY0FBYyxHQUtmLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7OztBQU9uRCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUNTLFFBQWtCLEVBQ2pCLGdCQUFrQyxFQUNsQyxlQUErQixFQUMvQixZQUF5QixFQUN6QixjQUE4QjtRQUovQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVJ4Qyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0IscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBQzFCLHFCQUFnQixHQUFXLEtBQUssQ0FBQztJQU9uQyxDQUFDO0lBRU47Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxLQUFvQixF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LFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBQyxFQUFDLENBQUM7aUJBQ3pJO2dCQUFBLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUEseUNBQXlDO0lBQ3pDLGdCQUFnQixDQUFDLE9BQU87UUFDdkIsSUFBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFDO1lBQ3JCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRTtnQkFDckIsSUFBRyxHQUFHLENBQUMsU0FBUyxFQUFDO29CQUNmLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUN6QjtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzs7O1lBaG5DRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTVCUSxRQUFRO1lBb0JSLGdCQUFnQjtZQURoQixlQUFlO1lBRGYsWUFBWTtZQUlaLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExhenlMb2FkRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IElEcm9wRG93blJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBFR3JpZFNvcnREaXJlY3Rpb24sXHJcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxyXG4gIElHbG9iYWxGaWx0ZXIsXHJcbiAgSUdyaWRGaWx0ZXIsXHJcbiAgSUdyaWRTb3J0LFxyXG4gIEVHcmlkQ29sdW1uVHlwZSxcclxuICBhZGRDb2x1bW4sXHJcbiAgYWRkRmlsdGVyQ29sdW1uLFxyXG4gIGFkZEdsb2JhbEZpbHRlcixcclxuICBJR3JpZENvbHVtbixcclxuICBFR3JpZFZhbGlkYXRvcixcclxuICBJR3JpZFByb3AsXHJcbiAgSUdyaWRQcm9wRmlsdGVyLFxyXG4gIElHcmlkUm93UHJvcCxcclxuICBJR3JpZFJlcG9ydEJ0bixcclxufSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4vYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4vZHJvcGRvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IEh5cGVybGlua1NlcnZpY2UgfSBmcm9tICcuL2h5cGVybGluay5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4vdXRpbGl0aWVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4vcmVxdWVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JpZFNlcnZpY2Uge1xyXG4gIHNvZnRDYWNoaW5nRmlsdGVyczogYW55ID0ge307XHJcbiAgYXBwbHlGaWx0ZXJFdmVudDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGNvbHVtbkZvY3VzZWRPdXQ6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRhdGVwaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZTogSHlwZXJsaW5rU2VydmljZSxcclxuICAgIHByaXZhdGUgZHJvcGRvd25TZXJ2aWNlOkRyb3Bkb3duU2VydmljZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOkFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICogUmVjZWl2ZXMgbGF6eSBldmVudCBhbmQgcmV0dXJucyBhZnRlciBwcm9wZXIgbWFwcGluZ1xyXG4gICAqL1xyXG4gIGdldEdyaWRGaWx0ZXJzKGV2ZW50OiBMYXp5TG9hZEV2ZW50LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XHJcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5tYXBGaWx0ZXJzKGV2ZW50LCBjb2x1bW5zKTtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gZmlsdGVyc1xyXG4gICAqIFJlY2VpdmVzIGZpbHRlcnMgYW5kIHJldHVybnMgYXJyYXkgYWZ0ZXIgcmVtb3ZpbmcgZHVwbGljYXRlc1xyXG4gICAqIGFuZCBjcmVhdGluZyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIGZvciBzYW1lIGZpbHRlcnNcclxuICAgKi9cclxuICBoYW5kbGVNdWx0aUZpbHRlckZpZWxkKGZpbHRlcnM6IElHcmlkRmlsdGVyW10pOiBJR3JpZEZpbHRlcltdIHtcclxuICAgIHJldHVybiBmaWx0ZXJzXHJcbiAgICAgIC5tYXAoKHgsIGksIGFycikgPT5cclxuICAgICAgICBhcnIuc29tZSgoeSwgaWR4KSA9PiB5LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGkgIT09IGlkeClcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAuLi54LFxyXG4gICAgICAgICAgICB2YWx1ZTogYXJyXHJcbiAgICAgICAgICAgICAgLmZpbHRlcigoeikgPT4gei5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0geC5maWVsZD8udG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgICAubWFwKChhKSA9PiBhLnZhbHVlKVxyXG4gICAgICAgICAgICAgIC5qb2luKCksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHhcclxuICAgICAgKVxyXG4gICAgICAuZmlsdGVyKChmLCBpLCBhcnIpID0+IGFyci5maW5kSW5kZXgoKHgpID0+IHgudmFsdWUgPT09IGYudmFsdWUpID09PSBpKTtcclxuICB9XHJcblxyXG4gIC8vIFByZXBhcmUgYmFzaWMgZ3JpZCBmaWx0ZXJzXHJcbiAgcHJlcGFyZUJhc2ljRmlsdGVycyhcclxuICAgIGV2ZW50OiBMYXp5TG9hZEV2ZW50LFxyXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXVxyXG4gICk6IElHcmlkRmlsdGVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgZmlsdGVycyBoYXMgdmFsdWVzIHRoZW4gY29udmVydHMgZ2xvYmFsIGZpbHRlciB2YWx1ZXMgdHlwZSBpbnRvIElHcmlkRmlsdGVyLlxyXG4gICAqL1xyXG4gIHByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xyXG4gICAgY29uc3QgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xyXG5cclxuICAgIGdsb2JhbEZpbHRlcnM/LmZvckVhY2goKGZpbHRlcjogSUdsb2JhbEZpbHRlcikgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKCh0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGZpbHRlci52YWx1ZSkpICYmXHJcbiAgICAgICAgICBmaWx0ZXIudmFsdWUubGVuZ3RoKSB8fFxyXG4gICAgICAgICh0eXBlb2YgZmlsdGVyLnZhbHVlICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSAmJlxyXG4gICAgICAgICAgZmlsdGVyLnZhbHVlKSB8fFxyXG4gICAgICAgICh0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnYm9vbGVhbicgJiYgZmlsdGVyLnZhbHVlICE9PSBudWxsKSB8fFxyXG4gICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0VcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UgJiYgZmlsdGVyLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnfCcpKSB7XHJcbiAgICAgICAgICAvLyBhZGQgZmlsdGVyIGZvciBzdGFydCBkYXRlXHJcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xyXG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIpLFxyXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2d0ZScsXHJcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3IgPyBmaWx0ZXIub3BlcmF0b3IgOiAnYW5kJyxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyKSxcclxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBhZGQgZmlsdGVyIGZvciBlbmQgZGF0ZVxyXG4gICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyLCBmYWxzZSksXHJcbiAgICAgICAgICAgIG1hdGNoTW9kZTogZmlsdGVyLm1hdGNoTW9kZSA/IGZpbHRlci5tYXRjaE1vZGUgOiAnbHRlJyxcclxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIsIGZhbHNlKSxcclxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYoZmlsdGVyLnR5cGUgIT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xyXG4gICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyKSxcclxuICAgICAgICAgICAgbWF0Y2hNb2RlOlxyXG4gICAgICAgICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1RcclxuICAgICAgICAgICAgICAgID8gJ2luJ1xyXG4gICAgICAgICAgICAgICAgOiBmaWx0ZXIubWF0Y2hNb2RlLFxyXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEdsb2JhbEZpbHRlclZhbHVlKGZpbHRlciksXHJcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBnbG9iYWxEYXRhO1xyXG4gIH1cclxuXHJcbiAgc2V0R2xvYmFsRmlsdGVyRmllbGQoXHJcbiAgICBmaWx0ZXI6IGFueSxcclxuICAgIGlzU3RhcnREYXRlOiBib29sZWFuID0gdHJ1ZVxyXG4gICk6IHN0cmluZyB7XHJcbiAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xyXG4gICAgICBpZiAoaXNTdGFydERhdGUpIHtcclxuICAgICAgICByZXR1cm4gZmlsdGVyLmZyb21GaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmlsdGVyLnRvRmllbGQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXIuZmllbGQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgZ2xvYmFsIGZpbHRlciB2YWx1ZVxyXG4gIHNldEdsb2JhbEZpbHRlclZhbHVlKFxyXG4gICAgZmlsdGVyOiBJR2xvYmFsRmlsdGVyLFxyXG4gICAgaXNTdGFydERhdGU6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xyXG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVDpcclxuICAgICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSBhcyBhbnlbXSkuam9pbignLCcpO1xyXG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjpcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGZpbHRlci52YWx1ZSBhcyBEYXRlKTtcclxuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0U6XHJcbiAgICAgICAgbGV0IGRhdGVWYWx1ZXM6IHN0cmluZ1tdID0gZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgICA/IGZpbHRlci52YWx1ZS50b1N0cmluZygpLnNwbGl0KCd8JylcclxuICAgICAgICAgIDogW107XHJcbiAgICAgICAgaWYgKGRhdGVWYWx1ZXMgJiYgZGF0ZVZhbHVlcy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgbGV0IGRhdGVWYWx1ZTogRGF0ZSA9IGlzU3RhcnREYXRlXHJcbiAgICAgICAgICAgID8gbmV3IERhdGUoZGF0ZVZhbHVlc1swXSlcclxuICAgICAgICAgICAgOiBuZXcgRGF0ZShkYXRlVmFsdWVzWzFdKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZGF0ZVZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g6XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlIGFzIHN0cmluZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrVmFsaWRpdHkoY29sdW1uczogSUdyaWRDb2x1bW5bXSwgcm93OiBhbnkpe1xyXG4gICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgY29sdW1ucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS52YWxpZGF0aW9ucyAmJiAhaXRlbS5kaXNhYmxlZCkge1xyXG4gICAgICAgIGl0ZW0uZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgICAgICAgaXRlbS5pc3ZhbGlkID0gdHJ1ZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0udmFsaWRhdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IG1pbk1heFZhbGlkRGF0ZSA9IHV0aWxpdGllcy5jYWxlbmRlck1pbk1heFZhbHVlKGl0ZW0sIHJvd1tpdGVtLmZpZWxkXSwgaSk7XHJcbiAgICAgICAgICBjb25zdCB2YWxpZCA9IGl0ZW0udmFsaWRhdGlvbnMgJiYgaXRlbS5oZWFkZXJcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlJFUVVJUkVEICYmXHJcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgIWl0ZW0uaGlkZGVuICYmXHJcbiAgICAgICAgICAgIHZhbGlkXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNWYWxpZCA9IHJvd1tpdGVtLmZpZWxkXVxyXG4gICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYCR7dmFsaWR9IGlzIHJlcXVpcmVkYCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXHJcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NSU5MRU5HVEggJiZcclxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPVxyXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBgTWluaW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gY2hhcmFjdGVycyByZXF1aXJlZGBcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWExFTkdUSCAmJlxyXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNWYWxpZCA9XHJcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cclxuICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGBNYXhpbXVtICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufSBjaGFyYWN0ZXJzIHJlcXVpcmVkYFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxyXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUlOSU1VTSAmJlxyXG4gICAgICAgICAgICBpc1ZhbGlkXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYoaXRlbS50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSl7XHJcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IG1pbk1heFZhbGlkRGF0ZSA9PT0gJ21pbmltdW0nID8gdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYE1pbmltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YCkgOiB0cnVlO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihyb3dbaXRlbS5maWVsZF0gPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pe1xyXG4gICAgICAgICAgICBpc1ZhbGlkID1cclxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiYgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgYE1pbmltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWElNVU0gJiZcclxuICAgICAgICAgICAgaXNWYWxpZCBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZihpdGVtLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKXtcclxuICAgICAgICAgICAgICBpc1ZhbGlkID0gbWluTWF4VmFsaWREYXRlID09PSAnZ3JlYXRlcicgPyB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gKSA6IHRydWU7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHJvd1tpdGVtLmZpZWxkXSA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbil7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPVxyXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBgTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxyXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUEFUVEVSTiAmJlxyXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdLm1hdGNoKGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbilcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID1cclxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiYgcm93W2l0ZW0uZmllbGRdLm1hdGNoKGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbilcclxuICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk5VTUVSSUMgJiZcclxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXS50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKSQvKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPVxyXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0ubWF0Y2goL14oMHxbMS05XVxcZCopJC8pXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBgRW50ZXIgJHtpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGV9IGZvciAke3ZhbGlkfWBcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlBIT05FICYmXHJcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHNdKyQvKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPVxyXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHNdKyQvKVxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxyXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuREVDSU1BTCAmJlxyXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKShcXC5cXGQrKT8kLylcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID1cclxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiYgcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKDB8WzEtOV1cXGQqKShcXC5cXGQrKT8kLylcclxuICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGBFbnRlciAke2l0ZW0udmFsaWRhdGlvbnNbaV0udHlwZX0gZm9yICR7dmFsaWR9YFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxyXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuRU1BSUwgJiZcclxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kLylcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID1cclxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcclxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goXHJcbiAgICAgICAgICAgICAgICAvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kL1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpc1ZhbGlkO1xyXG4gIH1cclxuXHJcbiAgc2V0RXJyb3JNZXNzYWdlKGl0ZW06IElHcmlkQ29sdW1uLCBlcnJvck1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaXRlbS5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XHJcbiAgICBpdGVtLmlzdmFsaWQgPSBmYWxzZTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIHNldCBiYXNpYyBmaWx0ZXIgdmFsdWVcclxuICBzZXRCYXNpY0ZpbHRlclZhbHVlKGZpbHRlcjogYW55KTogYW55IHtcclxuICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZmlsdGVyKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXIgPyAxIDogMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBwYXJhbVxyXG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgc29ydCBhcnJheVxyXG4gICAqL1xyXG4gIGdldEdyaWRTb3J0cyhcclxuICAgIHsgbXVsdGlTb3J0TWV0YSB9OiBMYXp5TG9hZEV2ZW50LFxyXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXVxyXG4gICk6IElHcmlkU29ydFtdIHtcclxuICAgIHJldHVybiAobXVsdGlTb3J0TWV0YSB8fCBbXSkubWFwKCh7IGZpZWxkLCBvcmRlciB9LCBpKTogYW55ID0+ICh7XHJcbiAgICAgIGZpZWxkLFxyXG4gICAgICBkaXJlY3Rpb246IG9yZGVyID4gMCA/IEVHcmlkU29ydERpcmVjdGlvbi5BU0MgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQyxcclxuICAgICAgcHJpb3JpdHk6IGkgKyAxLFxyXG4gICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKiBIYW5kbGVzIGRlZmF1bHQgYW5kIGxvb2t1cCBmaWx0ZXJzXHJcbiAgICovXHJcbiAgbWFwRmlsdGVycyhldmVudDogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XHJcbiAgICBjb25zdCBmaWx0ZXJzOiBJR3JpZEZpbHRlcltdID0gW107XHJcbiAgICBPYmplY3QuZW50cmllcyhldmVudC5maWx0ZXJzKS5mb3JFYWNoKChbZmllbGQsIHZhbHVlXTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICh2YWx1ZSBhcyBJR3JpZEZpbHRlcltdKS5mb3JFYWNoKFxyXG4gICAgICAgICAgKHsgbWF0Y2hNb2RlLCBvcGVyYXRvciwgdmFsdWU6IGZpbHRlciB9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGUsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEJhc2ljRmlsdGVyVmFsdWUoZmlsdGVyKSxcclxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSAhPT0gJycpIHtcclxuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogJ2VxdWFscycsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUgPyAxIDogMCxcclxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxyXG4gICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6ICdlcXVhbCcsXHJcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcclxuICAgICAgICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWUgaW5zdGFuY2VvZiBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZS52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWUudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgKHZhbHVlLnZhbHVlIHx8IFtdKS5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHgudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgcGFnZSBudW1iZXJcclxuICAgKi9cclxuICBnZXRHcmlkUGFnaW5hdGlvbihldmVudDogYW55KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpc05hTihldmVudC5maXJzdCAvIGV2ZW50LnJvd3MpID8gMSA6IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cyArIDE7XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgZm9ybWF0dGVkIGRhdGVcclxuICBnZXRGb3JtYXR0ZWREYXRlKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShgJHt2YWx1ZX0gWmApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIHNpbXBsZSBncmlkIGNvbHVtbiB3aXRob3V0XHJcbiAgYWRkQ29sdW1uKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcclxuICAgIGlmKGNvbHVtbkluZm8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKXtcclxuICAgICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsIDogJ2xhYmVsJztcclxuICAgICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlIDogJ3ZhbHVlJztcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRDb2x1bW4gPSB7XHJcbiAgICAgIGFsbG93U2VhcmNoOiBjb2x1bW5JbmZvLmFsbG93U2VhcmNoLFxyXG4gICAgICBmaWVsZDogY29sdW1uSW5mby5maWVsZCxcclxuICAgICAgaGVhZGVyOiBjb2x1bW5JbmZvLmhlYWRlcixcclxuICAgICAgc3R5bGU6IGNvbHVtbkluZm8uc3R5bGUsXHJcbiAgICAgIHR5cGU6IGNvbHVtbkluZm8udHlwZSxcclxuICAgICAgZm9ybWF0OiBjb2x1bW5JbmZvLmZvcm1hdCxcclxuICAgICAgZGF0YTogY29sdW1uSW5mby5kYXRhLFxyXG4gICAgICBmaWx0ZXJpbmc6IGNvbHVtbkluZm8uZmlsdGVyaW5nLFxyXG4gICAgICBoaWRkZW46IGNvbHVtbkluZm8uaGlkZGVuLFxyXG4gICAgICBzb3J0aW5nOiBjb2x1bW5JbmZvLnNvcnRpbmcsXHJcbiAgICAgIGZpbHRlcjogY29sdW1uSW5mby5maWx0ZXIsXHJcbiAgICAgIGh5cGVybGluazogY29sdW1uSW5mby5oeXBlcmxpbmssXHJcbiAgICAgIHRhYmxlQWxpYXM6IGNvbHVtbkluZm8udGFibGVBbGlhcyxcclxuICAgICAgbGlua0lkOiBjb2x1bW5JbmZvLmxpbmtJZCxcclxuICAgICAgbWludXRlc0ludGVydmFsOiBjb2x1bW5JbmZvLm1pbnV0ZXNJbnRlcnZhbCxcclxuICAgICAgcGFyYW1zOiBjb2x1bW5JbmZvLnBhcmFtcyxcclxuICAgICAgc2hvd09wdGlvbjogY29sdW1uSW5mby5zaG93T3B0aW9uLFxyXG4gICAgICBkaXNwbGF5VGV4dDogY29sdW1uSW5mby5kaXNwbGF5VGV4dCxcclxuICAgICAgdGFyZ2V0OiBjb2x1bW5JbmZvLnRhcmdldCxcclxuICAgICAgZGlzYWJsZWQ6IGNvbHVtbkluZm8uZGlzYWJsZWQsXHJcbiAgICAgIGFsbG93U2F2ZTogY29sdW1uSW5mby5hbGxvd1NhdmUsXHJcbiAgICAgIGVkaXRhYmxlOiBjb2x1bW5JbmZvLmVkaXRhYmxlLCAgXHJcbiAgICAgIGVkaXRMaW5rOiBjb2x1bW5JbmZvLmVkaXRMaW5rLFxyXG4gICAgICBzYXZlQXNTdHJpbmc6IGNvbHVtbkluZm8uc2F2ZUFzU3RyaW5nLFxyXG4gICAgICBjb21wb25lbnQ6IGNvbHVtbkluZm8uY29tcG9uZW50LFxyXG4gICAgICBvbkNsaWNrOiBjb2x1bW5JbmZvLm9uQ2xpY2ssXHJcbiAgICAgIG9uUmV0dXJuOiBjb2x1bW5JbmZvLm9uUmV0dXJuLFxyXG4gICAgICBvbkZvY3VzT3V0OiBjb2x1bW5JbmZvLm9uRm9jdXNPdXQsXHJcbiAgICAgIG9uQ2hhbmdlOiBjb2x1bW5JbmZvLm9uQ2hhbmdlLFxyXG4gICAgICBhZ2dyZWdhdGU6IGNvbHVtbkluZm8uYWdncmVnYXRlLFxyXG4gICAgICBmb3JtYXR0ZXI6IGNvbHVtbkluZm8uZm9ybWF0dGVyLFxyXG4gICAgICBwZXJtaXNzaW9uczogY29sdW1uSW5mby5wZXJtaXNzaW9ucyxcclxuICAgICAgb3B0aW9uTGFiZWw6IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwsXHJcbiAgICAgIG9wdGlvblZhbHVlOiBjb2x1bW5JbmZvLm9wdGlvblZhbHVlLFxyXG4gICAgICBkcm9wRG93blByb3A6IGNvbHVtbkluZm8uZHJvcERvd25Qcm9wLFxyXG4gICAgICBzaG93VGltZTogY29sdW1uSW5mby5zaG93VGltZSxcclxuICAgICAgdGltZU9ubHk6IGNvbHVtbkluZm8udGltZU9ubHksXHJcbiAgICAgIGxvb2t1cENvbnRyb2w6IGNvbHVtbkluZm8ubG9va3VwQ29udHJvbCxcclxuICAgICAgZGlzcGxheUZpZWxkOiBjb2x1bW5JbmZvLmRpc3BsYXlGaWVsZCxcclxuICAgICAgaWNvbjogIGNvbHVtbkluZm8uaWNvbixcclxuICAgICAgY29sb3I6IGNvbHVtbkluZm8uY29sb3IsXHJcbiAgICAgIGlkOiBjb2x1bW5JbmZvLmlkLFxyXG4gICAgICB2YWx1ZTogY29sdW1uSW5mby52YWx1ZSxcclxuICAgICAgdmFsaWRhdGlvbnM6IGNvbHVtbkluZm8udmFsaWRhdGlvbnMsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfVxyXG4gIFxyXG4gIC8vIEFkZGluZyBSZXBvcnQgQnV0dG9uIEZ1bmN0aW9uIGZvciBHcmlkXHJcbiAgYWRkUmVwb3J0QnRuKGNvbHVtbkluZm86IElHcmlkUmVwb3J0QnRuKXsgIFxyXG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLlJFUE9SVDtcclxuICAgIHJldHVybiBjb2x1bW5JbmZvO1xyXG59XHJcblxyXG4gIC8vIGFkZCBzaW1wbGUgaW5wdXQgZ3JpZCBjb2x1bW5cclxuICBhZGRJbnB1dENvbHVtbihcclxuICAgIGZpbHRlckNvbHVtbkluZm86IGFkZENvbHVtbixcclxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcclxuICAgICAgZmlsdGVyQ29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihmaWx0ZXJDb2x1bW5JbmZvKSB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGZpbHRlckNvbHVtbkluZm8pO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIHNpbXBsZSBudW1lcmljIGdyaWQgY29sdW1uIHdpdGhvdXRcclxuICBhZGROdW1lcmljQ29sdW1uKFxyXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxyXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcclxuICApOiBJR3JpZENvbHVtbiB7XHJcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xyXG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xyXG4gICAgfVxyXG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUM7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgc2ltcGxlIGNhbGVuZGFyIGdyaWQgY29sdW1uIHdpdGhvdXRcclxuICBhZGRDYWxlbmRhckNvbHVtbihcclxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcclxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcclxuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUiwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xyXG4gICAgfVxyXG4gICAgY29sdW1uSW5mby50eXBlPSBjb2x1bW5JbmZvLnR5cGUgPyBjb2x1bW5JbmZvLnR5cGUgOiBFR3JpZENvbHVtblR5cGUuREFURTtcclxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcclxuICB9XHJcblxyXG4gIC8vIGFkZCBzaW1wbGUgYm9vbGVhbiBncmlkIGNvbHVtbiB3aXRob3V0XHJcbiAgYWRkQm9vbGVhbkNvbHVtbihcclxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcclxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcclxuICAgICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4sXHJcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0geyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1gsIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbykgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcclxuICB9XHJcblxyXG4gIC8vIGFkZCBMb29rVXAgRmllbGQgZm9yIEdyaWRcclxuICAgIGFkZExvb2tVcENvbHVtbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4sIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcclxuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQsIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbykgfTtcclxuICAgIH1cclxuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQ7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgQnV0dG9uIGZvciBncmlkIGNvbHVtblxyXG4gIGFkZEJ1dHRvbkNvbHVtbihcclxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcclxuICApOiBJR3JpZENvbHVtbiB7XHJcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQUREX0JVVFRPTjtcclxuICAgIGlmICghY29sdW1uSW5mby5maWVsZCkge1xyXG4gICAgICBjb2x1bW5JbmZvLmZpZWxkID0gY29sdW1uSW5mby52YWx1ZSA/IGNvbHVtbkluZm8udmFsdWUgOiBjb2x1bW5JbmZvLmljb247XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XHJcbiAgfVxyXG5cclxuICAgIC8vIGFkZCBBdXRvQ29tcGxldGUgZm9yIGdyaWQgY29sdW1uXHJcbiAgICBhZGRBdXRvQ29tcGxldGUoY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFO1xyXG4gICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VhcmNoIEF1dG9Db21wbGV0ZSBEYXRhIGZvciBHcmlkXHJcbiAgICBnZXRBdXRvQ29tcGxldGVEYXRhKGNvbHVtbj86IGFueSwgdW5pcXVlS2V5Pzogc3RyaW5nLCBmaWx0ZXJzPzogYW55W10pOiBhbnkge1xyXG4gICAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlLmdldDxhbnlbXSwgYW55PignL0RhdGEvRmV0Y2gnLCB7IHVuaXF1ZUtleTogdW5pcXVlS2V5LCBmaWx0ZXJzfSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KT0+e1xyXG4gICAgICAgIGNvbHVtbi5kYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gIC8vIGFkZCBzaW1wbGUgZHJvcGRvd24gZ3JpZCBjb2x1bW4gd2l0aG91dFxyXG4gIGFkZERyb3Bkb3duQ29sdW1uKFxyXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxyXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XHJcbiAgKTogSUdyaWRDb2x1bW4ge1xyXG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOO1xyXG4gICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsIDogJ2xhYmVsJztcclxuICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZSA6ICd2YWx1ZSc7XHJcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xyXG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOLFxyXG4gICAgICAgICBkYXRhOiAhY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhICYmICFkcm9wRG93blByb3AgJiYgY29sdW1uSW5mby5kYXRhID8gIGNvbHVtbkluZm8uZGF0YSA6IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSA/IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSA6IFtdLCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XHJcbiAgICB9XHJcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XHJcbiAgICAgIGNvbHVtbkluZm8uZHJvcERvd25Qcm9wID0gZHJvcERvd25Qcm9wO1xyXG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcclxuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XHJcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xyXG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xyXG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXREcm9wZG93bkRhdGEoXHJcbiAgICAgICAgICBjb2x1bW5JbmZvLFxyXG4gICAgICAgICAgdW5pcXVlS2V5LFxyXG4gICAgICAgICAgdmFsdWVQcm9wLFxyXG4gICAgICAgICAgbGFiZWxQcm9wLFxyXG4gICAgICAgICAgZmlsdGVyc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcclxuICAgIH1cclxuICB9XHJcbi8vIGFkZCBNdWx0aVNlbGVjdERyb3BEb3duIGdyaWQgY29sdW1uXHJcbmFkZE11bHRpU2VsZWN0RHJvcERvd25Db2x1bW4oXHJcbiAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlLFxyXG4gIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcclxuKTogSUdyaWRDb2x1bW4gIHtcclxuICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbCA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgOiAnbGFiZWwnO1xyXG4gIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZSA6ICd2YWx1ZSc7XHJcbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUO1xyXG4gIGlmIChzaG93RmlsdGVyKSB7XHJcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNULFxyXG4gICAgICAgZGF0YTogIWNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSAmJiAhbXVsdGlTZWxlY3RQcm9wICYmIGNvbHVtbkluZm8uZGF0YSA/ICBjb2x1bW5JbmZvLmRhdGEgOiBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgPyBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgOiBbXSwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xyXG4gIH1cclxuICBpZiAobXVsdGlTZWxlY3RQcm9wKSB7XHJcbiAgICBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCA9IG11bHRpU2VsZWN0UHJvcDtcclxuICAgIGxldCB1bmlxdWVLZXkgPSBtdWx0aVNlbGVjdFByb3AudW5pcXVlS2V5O1xyXG4gICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XHJcbiAgICBsZXQgbGFiZWxQcm9wID0gbXVsdGlTZWxlY3RQcm9wLmxhYmVsUHJvcDtcclxuICAgIGxldCBmaWx0ZXJzID0gbXVsdGlTZWxlY3RQcm9wLmZpbHRlcnM7XHJcbiAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcGRvd25EYXRhKFxyXG4gICAgICAgIGNvbHVtbkluZm8sXHJcbiAgICAgICAgdW5pcXVlS2V5LFxyXG4gICAgICAgIHZhbHVlUHJvcCxcclxuICAgICAgICBsYWJlbFByb3AsXHJcbiAgICAgICAgZmlsdGVyc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XHJcbiAgfVxyXG59XHJcblxyXG4gIHNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm86IGFkZENvbHVtbil7XHJcbiAgICBpZihjb2x1bW5JbmZvLmZpbHRlciAmJiBjb2x1bW5JbmZvLmZpbHRlci5zaG93RmlsdGVyKXtcclxuICAgICAgcmV0dXJuIHRydWU7IFxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERyb3Bkb3duRGF0YShcclxuICAgIGNvbHVtbjogSUdyaWRDb2x1bW4sXHJcbiAgICB1bmlxdWVLZXk6IHN0cmluZyxcclxuICAgIHZhbHVlUHJvcDogc3RyaW5nLFxyXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXHJcbiAgICBmaWx0ZXJzOiBhbnlbXSxcclxuICAgIHJvdz86IHtba2V5OiBzdHJpbmddOiBhbnl9XHJcbiAgKTogUHJvbWlzZSA8YW55PiB8IGFueXtcclxuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxyXG4gICAgICAuc2V0RHJvcERvd25MaXN0KHVuaXF1ZUtleSwgdmFsdWVQcm9wLCBsYWJlbFByb3AsIGZpbHRlcnMpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmKHJvdyl7XHJcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfZGF0YSddID0gcmVzO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgY29sdW1uLmRhdGE9cmVzO1xyXG4gICAgICAgICAgaWYoY29sdW1uLmZpbHRlciAmJiBjb2x1bW4uZmlsdGVyLnR5cGUgPT09IFwiZHJvcGRvd25cIil7XHJcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXIuZGF0YSA9IHJlcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbik7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXHJcbiAgYWRkRmlsdGVyQ29sdW1uKGZpbHRlckNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcclxuICAgIGNvbnN0IGNvbHVtbjogYW55ID0ge1xyXG4gICAgICBmaWVsZDogZmlsdGVyQ29sdW1uSW5mby5maWVsZCxcclxuICAgICAgaGVhZGVyOiBmaWx0ZXJDb2x1bW5JbmZvLmhlYWRlcixcclxuICAgICAgZmlsdGVyOiB7IHR5cGU6IGZpbHRlckNvbHVtbkluZm8uZmlsdGVyIH0sXHJcbiAgICAgIGZpbHRlcmluZzogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXJpbmcsXHJcbiAgICAgIGhpZGRlbjogZmlsdGVyQ29sdW1uSW5mby5oaWRkZW4sXHJcbiAgICAgIHN0eWxlOiBmaWx0ZXJDb2x1bW5JbmZvLnN0eWxlLFxyXG4gICAgICB0YWJsZUFsaWFzOiBmaWx0ZXJDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXHJcbiAgICAgIHBlcm1pc3Npb25zOiBmaWx0ZXJDb2x1bW5JbmZvLnBlcm1pc3Npb25zXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgZGF0ZSBncmlkIGNvbHVtbiB3aXRoIGJ1aWx0LWluIGZpbHRlclxyXG4gIGFkZERhdGVDb2x1bW4oZGF0ZUNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcclxuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRDb2x1bW4gPSB7XHJcbiAgICAgIGZpZWxkOiBkYXRlQ29sdW1uSW5mby5maWVsZCxcclxuICAgICAgaGVhZGVyOiBkYXRlQ29sdW1uSW5mby5oZWFkZXIsXHJcbiAgICAgIHR5cGU6IGRhdGVDb2x1bW5JbmZvLnR5cGUgPyBkYXRlQ29sdW1uSW5mby50eXBlIDogRUdyaWRDb2x1bW5UeXBlLkRBVEUsXHJcbiAgICAgIGZpbHRlcmluZzogZGF0ZUNvbHVtbkluZm8uZmlsdGVyaW5nLFxyXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSIH0sXHJcbiAgICAgIGZvcm1hdDogZGF0ZUNvbHVtbkluZm8uZm9ybWF0LFxyXG4gICAgICBzdHlsZTogZGF0ZUNvbHVtbkluZm8uc3R5bGUsXHJcbiAgICAgIHRhYmxlQWxpYXM6IGRhdGVDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXHJcbiAgICAgIGRpc2FibGVkOiBkYXRlQ29sdW1uSW5mby5kaXNhYmxlZCxcclxuICAgICAgYWxsb3dTYXZlOiBkYXRlQ29sdW1uSW5mby5hbGxvd1NhdmUsXHJcbiAgICAgIHBlcm1pc3Npb25zOiBkYXRlQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcclxuICAgICAgY29tcG9uZW50OiBkYXRlQ29sdW1uSW5mby5jb21wb25lbnQsXHJcbiAgICAgIHNob3dUaW1lOiBkYXRlQ29sdW1uSW5mby5zaG93VGltZSxcclxuICAgICAgdGltZU9ubHk6IGRhdGVDb2x1bW5JbmZvLnRpbWVPbmx5LFxyXG4gICAgICBkYXRhOiBkYXRlQ29sdW1uSW5mby5kYXRhLFxyXG4gICAgICBoaWRkZW46IGRhdGVDb2x1bW5JbmZvLmhpZGRlbixcclxuICAgIH07XHJcbiAgICByZXR1cm4gY29sdW1uO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9va1VwRmlsdGVyKGNvbHVtbjogYW55LCBkaWFsb2dTZXJ2aWNlOiBhbnkpIHtcclxuICAgIGlmIChjb2x1bW4ubG9va3VwQ29udHJvbCkge1xyXG4gICAgICBsZXQgZGF0YVZhbHVlOiBhbnlbXT0gW107XHJcbiAgICAgICBsZXQgZGF0YUtleTogYW55W10gPSBbXTtcclxuICAgICAgIGxldCBkYXRhID0gY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGE7XHJcbiAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XHJcbiAgICAgIGlmIChkYXRhICYmIGtleXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGFba2V5XS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykpIHtcclxuICAgICAgICAgICAgZGF0YVZhbHVlLnVuc2hpZnQoZGF0YVtrZXldKTtcclxuICAgICAgICAgICAgZGF0YUtleS51bnNoaWZ0KGtleSk7XHJcbiAgICAgICAgICAgIGRhdGFba2V5XSA9ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlZiA9IGRpYWxvZ1NlcnZpY2Uub3BlbihcclxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5jb21wb25lbnQsXHJcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuZGF0YVxyXG4gICAgICApO1xyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoZGF0YUtleT8ubGVuZ3RoID4gMCAmJiBkYXRhVmFsdWU/Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBkYXRhS2V5LmZvckVhY2goKGtleSxrZXlJbmRleCk9PntcclxuICAgICAgICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsdWUsIHZhbHVlSW5kZXgpPT57XHJcbiAgICAgICAgICAgICAgICBpZihrZXlJbmRleCA9PT0gdmFsdWVJbmRleCl7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvb2tVcF9maWx0ZXInKT8uZm9jdXMoKTtcclxuICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sdW1uLmZpZWxkO1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPXV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcclxuICAgICAgICAgICAgICBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgY29sdW1uPy5sb29rdXBDb250cm9sLFxyXG4gICAgICAgICAgICAgIHJlc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb2x1bW4udmFsdWUgPSB2YWx1ZT8udmFsdWUgPyB2YWx1ZS52YWx1ZSA6IHJlc1tmaWVsZC50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgICh7IGVycm9yIH06YW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU2V0IEh5cGVybGluayBmaWVsZCBhcyBhIHBhcmFtIFZhbHVlXHJcbiAgc2V0RmllbGRBc0xpbmtQYXJhbShjb2x1bW5zOiBhbnksIGZpZWxkOiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgIGlmKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwICYmIGZpZWxkICYmIHJlc3BvbnNlLnJlY29yZHMgJiYgcmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwKXtcclxuICAgICAgICB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3JkcykuZm9yRWFjaCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4OiBhbnkpPT4geC5maWVsZCA9PT0gZmllbGQpO1xyXG4gICAgICAgICAgIGlmKG9iaiAmJiBvYmoucGFyYW1zKXtcclxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iai5wYXJhbXMpXHJcbiAgICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5OiBhbnkpPT57XHJcbiAgICAgICAgICAgICAgICBpZihvYmoucGFyYW1zW2tleV0gJiYgb2JqLnBhcmFtc1trZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gb2JqLnBhcmFtc1trZXldLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBvYmoucGFyYW1zW2tleV0gPSByZXNbdmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhc0FueUxpbmtDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbHVtbnMgJiYgY29sdW1ucy5zb21lKCh4KSA9PiB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHwgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHwgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHwgXHJcbiAgICAoeC5saW5rSWQgJiYgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQpKTtcclxuICB9XHJcblxyXG4gIHNldEh5cGVybGlua3MoZmV0Y2hSZXNwb25zZTogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogYW55IHtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKT0+e1xyXG4gICAgICBpZihjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJiAhY29sdW1uLmRhdGEpe1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGBcIkRhdGFcIiBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZvciBcIiR7Y29sdW1uLmhlYWRlcn1cIiBjb2x1bW5gKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGxldCByZWNvcmRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBkYXRhID0gZmV0Y2hSZXNwb25zZSAmJiBmZXRjaFJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMCA/IHRoaXMuc2V0RGF0YUZpZWxkcyhmZXRjaFJlc3BvbnNlLnJlY29yZHMpIDogW107XHJcbiAgICBsZXQgbmV3Um93OmFueTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oeXBlcmxpbmtTZXJ2aWNlXHJcbiAgICAgIC5hZGRIeXBlcmxpbmtzKGNvbHVtbnMpLnRoZW4oKGxpbmtzUmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICAgICBuZXdSb3cgPSB7IC4uLnJvdyB9O1xyXG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xyXG4gICAgICAgICAgICAgIGlmKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKXtcclxuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZCArICdfb2JqJztcclxuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xyXG4gICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxyXG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cclxuICAgICAgICAgICAgICAgICAgOiByb3dbY29sLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgICAgICAgICAgICBpZihjb2wuZm9ybWF0ICYmIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShuZXdSb3dbZmllbGRdLmRpc3BsYXlUZXh0LGNvbC5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sLmRhdGEgJiYgY29sLmRhdGEuZGF0YSl7XHJcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlhbG9nRGF0YSA9IHV0aWxpdGllcy5maW5kS2V5c0FuZFZhbHVlKGNvbC5kYXRhLmRhdGEscm93KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGlua3NSZXNwb25zZS5mb3JFYWNoKChsaW5rUmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XHJcbiAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8IGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUKSAmJlxyXG4gICAgICAgICAgICAgICAgICBjb2wubGlua0lkICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbC5wYXJhbXMgJiZcclxuICAgICAgICAgICAgICAgICAgY29sLmxpbmtJZCA9PT0gbGlua1Jlc3BvbnNlLmxpbmtJZFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbUtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoY29sLnBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rOiBhbnkgPSB1dGlsaXRpZXMuc2V0SHlwZXJsaW5rKFxyXG4gICAgICAgICAgICAgICAgICBrZXlzLFxyXG4gICAgICAgICAgICAgICAgICByb3csXHJcbiAgICAgICAgICAgICAgICAgIGxpbmtSZXNwb25zZS51cmwsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtS2V5cyxcclxuICAgICAgICAgICAgICAgICAgY29sLnBhcmFtc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBjb2wuZmllbGQgKyAnX29iaic7XHJcbiAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdID0geyAuLi5jb2wgfTtcclxuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uaHlwZXJsaW5rID0gbGluaztcclxuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcclxuICAgICAgICAgICAgICAgICAgPyByb3dbY29sLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldXHJcbiAgICAgICAgICAgICAgICAgIDogcm93W2NvbC5maWVsZC50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZWNvcmRzLnB1c2gobmV3Um93KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVjb3JkcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXHJcbiAgYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xyXG4gICAgY29uc3QgY29sdW1uOiBhZGRHbG9iYWxGaWx0ZXIgPSB7XHJcbiAgICAgIGZpZWxkOiBnbG9iZWxGaWx0ZXJJbmZvLmZpZWxkLFxyXG4gICAgICBkaXNwbGF5VGV4dDogZ2xvYmVsRmlsdGVySW5mby5kaXNwbGF5VGV4dCxcclxuICAgICAgdmFsaWRhdGlvbnM6IGdsb2JlbEZpbHRlckluZm8udmFsaWRhdGlvbnMsXHJcbiAgICAgIHR5cGU6IGdsb2JlbEZpbHRlckluZm8udHlwZSxcclxuICAgICAgZGF0YTogZ2xvYmVsRmlsdGVySW5mby5kYXRhLFxyXG4gICAgICB2YWx1ZTogZ2xvYmVsRmlsdGVySW5mby52YWx1ZSxcclxuICAgICAgdmFsdWVUd286IGdsb2JlbEZpbHRlckluZm8udmFsdWVUd28sXHJcbiAgICAgIG1hdGNoTW9kZTogZ2xvYmVsRmlsdGVySW5mby5tYXRjaE1vZGUsXHJcbiAgICAgIG9wZXJhdG9yOiBnbG9iZWxGaWx0ZXJJbmZvLm9wZXJhdG9yLFxyXG4gICAgICB0YWJsZUFsaWFzOiBnbG9iZWxGaWx0ZXJJbmZvLnRhYmxlQWxpYXMsXHJcbiAgICAgIG9wdGlvbkxhYmVsOiBnbG9iZWxGaWx0ZXJJbmZvLm9wdGlvbkxhYmVsLFxyXG4gICAgICBvcHRpb25WYWx1ZTogZ2xvYmVsRmlsdGVySW5mby5vcHRpb25WYWx1ZSxcclxuICAgICAgb25Gb2N1c091dDogZ2xvYmVsRmlsdGVySW5mby5vbkZvY3VzT3V0LFxyXG4gICAgICBmaWx0ZXJpbmc6IGdsb2JlbEZpbHRlckluZm8uZmlsdGVyaW5nLFxyXG4gICAgICBjb2x1bW46IGdsb2JlbEZpbHRlckluZm8uY29sdW1uLFxyXG4gICAgICBkYXlSYW5nZTogZ2xvYmVsRmlsdGVySW5mby5kYXlSYW5nZSxcclxuICAgICAgZnJvbUZpZWxkOiBnbG9iZWxGaWx0ZXJJbmZvLmZyb21GaWVsZCxcclxuICAgICAgdG9GaWVsZDpnbG9iZWxGaWx0ZXJJbmZvLnRvRmllbGQsXHJcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdsb2JlbEZpbHRlckluZm8ubG9va3VwQ29udHJvbCxcclxuICAgICAgYWxsb3dTZWFyY2g6IGdsb2JlbEZpbHRlckluZm8uYWxsb3dTZWFyY2gsXHJcbiAgICAgIGRpc2FibGVkOiBnbG9iZWxGaWx0ZXJJbmZvLmRpc2FibGVkLFxyXG4gICAgICBoaWRkZW46IGdsb2JlbEZpbHRlckluZm8uaGlkZGVuLFxyXG4gICAgICBsYWJlbFRleHQ6IGdsb2JlbEZpbHRlckluZm8ubGFiZWxUZXh0LFxyXG4gICAgICBwcmVmaXg6IGdsb2JlbEZpbHRlckluZm8ucHJlZml4LFxyXG4gICAgICBjb2xvcjogZ2xvYmVsRmlsdGVySW5mby5jb2xvcixcclxuICAgICAgZm9ybWF0OiBnbG9iZWxGaWx0ZXJJbmZvLmZvcm1hdCxcclxuICAgIH07XHJcbiAgICByZXR1cm4gY29sdW1uO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIGdsb2JhbCBpbnB1dCBmaWx0ZXJcclxuICBhZGRHbG9iYWxJbnB1dEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcclxuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVDtcclxuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcclxuICB9XHJcblxyXG4gIC8vIGFkZCBnbG9iYWwgZHJvcGRvd24gZmlsdGVyXHJcbiAgYWRkR2xvYmFsRHJvcGRvd25GaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogSUdsb2JhbEZpbHRlciwgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdCk6IGFueSB7XHJcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV047XHJcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XHJcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xyXG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcclxuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XHJcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XHJcbiAgICAgIGxldCBzb3J0cz0gZHJvcERvd25Qcm9wLnNvcnRzO1xyXG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXHJcbiAgICAgICAgICBnbG9iZWxGaWx0ZXJJbmZvLFxyXG4gICAgICAgICAgdW5pcXVlS2V5LFxyXG4gICAgICAgICAgdmFsdWVQcm9wLFxyXG4gICAgICAgICAgbGFiZWxQcm9wLFxyXG4gICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgIHNvcnRzXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNle1xyXG4gICAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gICAvLyBhZGQgZ2xvYmFsIE11bHRpU2VsZWN0IGRyb3Bkb3duIGZpbHRlclxyXG4gICBhZGRHbG9iYWxNdWx0aVNlbGVjdERyb3BEb3duRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3QpOiBhbnkge1xyXG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUO1xyXG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xyXG4gICAgICBsZXQgdW5pcXVlS2V5ID0gbXVsdGlTZWxlY3RQcm9wLnVuaXF1ZUtleTtcclxuICAgICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XHJcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xyXG4gICAgICBsZXQgZmlsdGVycyA9IG11bHRpU2VsZWN0UHJvcC5maWx0ZXJzO1xyXG4gICAgICBsZXQgc29ydHMgPSBtdWx0aVNlbGVjdFByb3Auc29ydHM7XHJcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcclxuICAgICAgICAgIGdsb2JlbEZpbHRlckluZm8sXHJcbiAgICAgICAgICB1bmlxdWVLZXksXHJcbiAgICAgICAgICB2YWx1ZVByb3AsXHJcbiAgICAgICAgICBsYWJlbFByb3AsXHJcbiAgICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgICAgc29ydHNcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2V7XHJcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgXHJcblxyXG5cclxuICBnZXREcm9wZG93bkRhdGEoXHJcbiAgICBmaWVsZEluZm86IGFueSxcclxuICAgIHVuaXF1ZUtleTogc3RyaW5nLFxyXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXHJcbiAgICBsYWJlbFByb3A6IHN0cmluZyxcclxuICAgIGZpbHRlcnM6IGFueSxcclxuICAgIHNvcnRzOiBJR3JpZFNvcnRbXSA9IFtdXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blNlcnZpY2VcclxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzICxzb3J0cylcclxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgZmllbGRJbmZvLmRhdGEgPSByZXM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuIC8vIGFkZCBnbG9iYWwgZmlsdGVyIFNwYWNlIEZpZWxkXHJcbiBhZGRHbG9iYWxGaWx0ZXJTcGFjZUZpZWxkKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xyXG4gIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5TUEFDRVI7XHJcbiAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xyXG59XHJcblxyXG4gIC8vIGFkZCBnbG9iYWwgYm9vbGVhbiBmaWx0ZXJcclxuICBhZGRHbG9iYWxCb29sZWFuRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xyXG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxyXG4gIGFkZFJhbmdlRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xyXG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFO1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxyXG4gIGFkZEdsb2JhbERhdGVSYW5nZUZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcclxuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFO1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xyXG4gIH1cclxuICAvLyBhZGQgTnVtZXJpYyBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcclxuICBhZGRHbG9iYWxOdW1lcmljUmFuZ2VGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XHJcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ19SQU5HRTtcclxuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcclxuICB9XHJcbiAgLy8gYWRkIE51bWVyaWMgaW5wdXQgZm9yIGdsb2JhbCBGaWx0ZXJcclxuICBhZGRHbG9iYWxOdW1lcmljSW5wdXQoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKXtcclxuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQ7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgTG9va1VwIEZpZWxkIGZvciBnbG9iYWwgRmlsdGVyXHJcbiAgYWRkR2xvYmFsTG9va3VwRmlsdGVyIChnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcclxuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQ7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XHJcbiAgfVxyXG5cclxuICBzZXREYXRhRmllbGRzKHJlc3BvbnNlOiBhbnksIGRhdGFLZXk6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYoT2JqZWN0LmtleXMoeCA/PyB7fSk/Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0OmFueSA9IE9iamVjdC5rZXlzKHgpPy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoeyAuLi5wcmV2LCBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSB9KSxcclxuICAgICAgICAgICAge31cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoZGF0YUtleSAmJiBkYXRhS2V5Lmxlbmd0aCA+IDAgJiYgIU9iamVjdC5rZXlzKHJlc3VsdCk/LmluY2x1ZGVzKGRhdGFLZXkpKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICByZXN1bHRbZGF0YUtleV0gPSBpbmRleDtcclxuICAgICAgICAgIH1cclxuICBcclxuICAgICAgICAgIGRhdGEucHVzaChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHNldENvbHVtbkZpZWxkcyhjb2x1bW5zOiBhbnlbXSkge1xyXG4gICAgbGV0IGNvbHVtbjogYW55ID0gW107XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29sdW1ucy5tYXAoKGNvbDogYW55KSA9PiB7XHJcbiAgICAgICAgY29sdW1uLnB1c2goeyAuLi5jb2wsIGZpZWxkOiBjb2w/LmZpZWxkPy50b0xvd2VyQ2FzZSgpIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGNvbHVtbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNoYW5nZSBsaW5rSWQgaW4gZWRpdCBtb2RlLCBpZiBjaGFuZ2VMaW5rIGlzIHRydWUgdGhlbiBpdCBjaGFuZ2UgdGhlIGVkaXRlZCByb3cgaHlwZXJsaW5rIHZhbHVlXHJcbiAgc2V0TGlua0lkKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOnN0cmluZywgbGlua0lkOiBzdHJpbmcsIHJlY29yZDogYW55LCB1c2VyczogYW55LCAgcGFyYW1zOmFueSA9IG51bGwsIGNoYW5nZUxpbms6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGNvbHVtbi5saW5rSWQgPSBsaW5rSWQ7XHJcbiAgICAgICAgICBpZihwYXJhbXMpe1xyXG4gICAgICAgICAgICBjb2x1bW4ucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgICB0aGlzLnNldEh5cGVybGlua3Moe3JlY29yZHM6IFtyZWNvcmRdfSwgY29sdW1ucykudGhlbigocmVzOiBhbnkpPT57XHJcbiAgICAgICAgaWYoY2hhbmdlTGluayl7XHJcbiAgICAgICAgICBkZWxldGUgcmVzWzBdW2ZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXTtcclxuICAgICAgICAgIGxldCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleCgoaTphbnkpPT4gaVtmaWVsZC50b0xvd2VyQ2FzZSgpXSA9PT0gcmVjb3JkW2ZpZWxkLnRvTG93ZXJDYXNlKCldKTtcclxuICAgICAgICAgIGlmKGluZGV4ICE9PSAtMSl7XHJcbiAgICAgICAgICAgIGlmKHVzZXJzW2luZGV4XVtmaWVsZCsnX29iaiddKXtcclxuICAgICAgICAgICAgICB1c2Vyc1tpbmRleF1bZmllbGQrJ19vYmonXS5oeXBlcmxpbmsgPSByZXNbMF1bZmllbGQrJ19vYmonXS5oeXBlcmxpbms7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIHNldCBncmlkIGRhdGEgYW5kIHNldCBzZWxlY3RlZCByb3cgYmFzZWQgb24gc2VsZWN0aW9uIHZhbHVlXHJcbiAgc2V0RGF0YVdpdGhTZWxlY3RlZFJvdyhyZWNvcmRzOiBhbnksIGNvbmZpZ0RhdGE6IGFueSkge1xyXG4gICAgaWYgKGNvbmZpZ0RhdGE/LnNlbGVjdGVkVmFsdWUgJiYgY29uZmlnRGF0YS5kYXRhLnNlbGVjdGlvbikge1xyXG4gICAgICByZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocmVjb3JkKT8uZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IGNvbmZpZ0RhdGEuc2VsZWN0ZWRWYWx1ZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGlmKGNvbmZpZ0RhdGEuZGF0YS52YWx1ZSAmJiByZWNvcmRba2V5XSA9PT0gY29uZmlnRGF0YS5kYXRhLnZhbHVlKXtcclxuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHJlY29yZFtrZXldID09PSBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVjb3JkcztcclxuICB9XHJcblxyXG4gIHNldFRhYmxlQWxpYXMoZmllbGQ6IHN0cmluZywgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xyXG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChcclxuICAgICAgICAoeDogYW55KSA9PiB4LmZpZWxkLnRvTG93ZXJDYXNlKCkgPT0gZmllbGQudG9Mb3dlckNhc2UoKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKGNvbHVtbiAhPSBudWxsICYmIGNvbHVtbi50YWJsZUFsaWFzICYmIGNvbHVtbi50YWJsZUFsaWFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gY29sdW1uLnRhYmxlQWxpYXM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzZXRHcmlkUHJvcFZhbHVlcyhcclxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sXHJcbiAgICBwcm9wczogSUdyaWRQcm9wW10sXHJcbiAgICBmaWx0ZXI/OiBJR3JpZFByb3BGaWx0ZXIsXHJcbiAgICByZWNvcmRzPzogYW55W10sXHJcbiAgKSB7XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDAgJiYgcHJvcHMgJiYgcHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgaXNNYXRjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIGlmIChmaWx0ZXIgJiYgZmlsdGVyLmZpZWxkICYmIHJlY29yZHMgJiYgcmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaXNNYXRjaGVkID0gcmVjb3Jkcy5zb21lKCh4KSA9PiB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIoeClbZmlsdGVyLmZpZWxkLnRvTG93ZXJDYXNlKCldID09PSBmaWx0ZXIudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgICAgcHJvcHMubWFwKChwcm9wOiBJR3JpZFByb3ApID0+IHtcclxuICAgICAgICAgIGxldCBjb2w6IGFueSA9IHt9O1xyXG4gICAgICAgICAgaWYgKHByb3AuZmllbGQgJiYgIWlzTWF0Y2hlZCAmJiAhZmlsdGVyPy5maWVsZCkge1xyXG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaGVkKSB7XHJcbiAgICAgICAgICAgIGlmKHByb3AuZmllbGQpe1xyXG4gICAgICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmlsdGVyPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2wgJiYgY29sLmhhc093blByb3BlcnR5KHByb3AubmFtZSkpIHtcclxuICAgICAgICAgICAgY29sW3Byb3AubmFtZV0gPSBwcm9wLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc2V0IGdyaWQgcm93IHByb3BWYWx1ZXNcclxuICBzZXRHcmlkUm93UHJvcFZhbHVlKHJvdzoge1trZXk6IHN0cmluZ106IGFueX0sIHByb3BzOiBJR3JpZFJvd1Byb3BbXSwgY29sdW1uczpJR3JpZENvbHVtbltdID0gW10pe1xyXG4gICAgcHJvcHM/LmZvckVhY2goKHByb3ApPT57XHJcbiAgICAgIGlmKHByb3AucHJvcE5hbWUgJiYgKHByb3AucHJvcFZhbHVlIHx8IHByb3AucHJvcFZhbHVlID09PSBmYWxzZSB8fCBwcm9wLnByb3BWYWx1ZSA9PT0gJycpICYmIHByb3AuZmllbGQpe1xyXG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSk9PiBrZXk/LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICBpZihmaWVsZE5hbWUpe1xyXG4gICAgICAgICAgaWYocm93W2ZpZWxkTmFtZV0/LmFjdGlvbil7XHJcbiAgICAgICAgICAgIHJvd1tmaWVsZE5hbWVdLmFjdGlvbiA9IE9iamVjdC5hc3NpZ24ocm93W2ZpZWxkTmFtZV0/LmFjdGlvbiwge1twcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWV9KTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByb3dbZmllbGROYW1lXSA9IHt0ZXh0OiByb3dbZmllbGROYW1lXSwgYWN0aW9uOiB7W3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSwgZmllbGQ6IGZpZWxkTmFtZX19O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZihjb2x1bW5zPy5zb21lKChjb2x1bW4pPT4gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSkpe1xyXG4gICAgICAgICAgcm93W3Byb3AuZmllbGQ/LnRvTG93ZXJDYXNlKCldID0ge3RleHQ6IHJvd1twcm9wLmZpZWxkXSxleHRyYUZpZWxkOiB0cnVlLCBhY3Rpb246IHtbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlLCBmaWVsZDogcHJvcC5maWVsZH19O1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJvdztcclxuICB9XHJcblxyXG4gICAvLyByZW1vdmUgdGhlIHJvd0FjdGlvbnMgZnJvbSB0aGUgcmVjb3Jkc1xyXG4gICByZW1vdmVSb3dBY3Rpb25zKHJlY29yZHMpe1xyXG4gICAgaWYocmVjb3Jkcz8ubGVuZ3RoID4gMCl7XHJcbiAgICAgIHJlY29yZHMuZm9yRWFjaCgocm93KT0+e1xyXG4gICAgICAgIGlmKHJvdy5yb3dBY3Rpb24pe1xyXG4gICAgICAgICAgZGVsZXRlIHJvd1sncm93QWN0aW9uJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlY29yZHM7XHJcbiAgfVxyXG59Il19
|
|
@@ -2611,7 +2611,7 @@ class GridService {
|
|
|
2611
2611
|
setGridRowPropValue(row, props, columns = []) {
|
|
2612
2612
|
props === null || props === void 0 ? void 0 : props.forEach((prop) => {
|
|
2613
2613
|
var _a, _b, _c, _d;
|
|
2614
|
-
if (prop.propName && (prop.propValue || prop.propValue === false) && prop.field) {
|
|
2614
|
+
if (prop.propName && (prop.propValue || prop.propValue === false || prop.propValue === '') && prop.field) {
|
|
2615
2615
|
const fieldName = (_a = Object.keys(row)) === null || _a === void 0 ? void 0 : _a.find((key) => { var _a; return (key === null || key === void 0 ? void 0 : key.toLowerCase()) === ((_a = prop === null || prop === void 0 ? void 0 : prop.field) === null || _a === void 0 ? void 0 : _a.toLowerCase()); });
|
|
2616
2616
|
if (fieldName) {
|
|
2617
2617
|
if ((_b = row[fieldName]) === null || _b === void 0 ? void 0 : _b.action) {
|
|
@@ -2910,6 +2910,8 @@ class GridComponent {
|
|
|
2910
2910
|
this.useServerSideEvents = false;
|
|
2911
2911
|
// Output event to handle row click
|
|
2912
2912
|
this.onRowClick = new EventEmitter();
|
|
2913
|
+
// Output event emit when click on grid checkbox filter
|
|
2914
|
+
this.onCheckBoxFilterClick = new EventEmitter();
|
|
2913
2915
|
// Output event to handle row CheckBox
|
|
2914
2916
|
this.onRowCheckBox = new EventEmitter();
|
|
2915
2917
|
// Output event to trigger on sort change
|
|
@@ -3572,7 +3574,9 @@ class GridComponent {
|
|
|
3572
3574
|
this.onClickEvent(column, row);
|
|
3573
3575
|
setTimeout(() => {
|
|
3574
3576
|
var _a, _b, _c, _d;
|
|
3575
|
-
column.data
|
|
3577
|
+
if (column.data && column.data.data) {
|
|
3578
|
+
column.data.data = (_b = (_a = row[column.field + '_obj']) === null || _a === void 0 ? void 0 : _a.dialogData) !== null && _b !== void 0 ? _b : row[column.field + '_obj'];
|
|
3579
|
+
}
|
|
3576
3580
|
if (column.component && column.data && this.rowClickData) {
|
|
3577
3581
|
const keys = Object.keys(this.rowClickData);
|
|
3578
3582
|
column.data.data = autoSetLookupData(column.data.data, this.rowClickData);
|
|
@@ -4847,6 +4851,7 @@ class GridComponent {
|
|
|
4847
4851
|
});
|
|
4848
4852
|
}
|
|
4849
4853
|
}
|
|
4854
|
+
this.onCheckBoxFilterClick.emit(column);
|
|
4850
4855
|
}
|
|
4851
4856
|
//set header checkbox value for getting all columns on stay admin
|
|
4852
4857
|
setHeaderCheckBoxValue(value) {
|
|
@@ -4935,6 +4940,7 @@ GridComponent.propDecorators = {
|
|
|
4935
4940
|
columnActions: [{ type: Input }],
|
|
4936
4941
|
useServerSideEvents: [{ type: Input }],
|
|
4937
4942
|
onRowClick: [{ type: Output }],
|
|
4943
|
+
onCheckBoxFilterClick: [{ type: Output }],
|
|
4938
4944
|
onRowCheckBox: [{ type: Output }],
|
|
4939
4945
|
onSortChange: [{ type: Output }],
|
|
4940
4946
|
onFilterChange: [{ type: Output }],
|