@datorama/core 21.4.0-rc.12 → 21.4.0-rc.15
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/datorama-core.umd.js +16 -24
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +1 -1
- package/bundles/datorama-core.umd.min.js.map +1 -1
- package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +12 -9
- package/esm2015/lib/grid-v2/grid-store/grid.service.js +4 -11
- package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +14 -9
- package/esm5/lib/grid-v2/grid-store/grid.service.js +4 -17
- package/fesm2015/datorama-core.js +14 -18
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +16 -24
- package/fesm5/datorama-core.js.map +1 -1
- package/lib/grid-v2/grid-store/grid.service.d.ts +0 -1
- package/package.json +1 -1
|
@@ -28,12 +28,12 @@ var mapToValue = function (_a) {
|
|
|
28
28
|
var ɵ0 = mapToValue;
|
|
29
29
|
var mapToListItem = function (val) { return ({ id: val, label: isNil(val) ? "(Empty)" : ("" + val).trim(), value: val }); };
|
|
30
30
|
var ɵ1 = mapToListItem;
|
|
31
|
-
var mapToListItemWithFormatted = function (_a) {
|
|
31
|
+
var mapToListItemWithFormatted = function (_a, key) {
|
|
32
32
|
var value = _a.value, formattedValue = _a.formattedValue;
|
|
33
33
|
return ({
|
|
34
|
-
id: value,
|
|
35
|
-
label: isNil(formattedValue) ? "(Empty)" : ("" + formattedValue).trim(),
|
|
36
|
-
value: value
|
|
34
|
+
id: key && value ? value[key] : value,
|
|
35
|
+
label: isNil(formattedValue) ? "(Empty)" : ("" + (key ? formattedValue[key] : formattedValue)).trim(),
|
|
36
|
+
value: key && value ? value[key] : value
|
|
37
37
|
});
|
|
38
38
|
};
|
|
39
39
|
var ɵ2 = mapToListItemWithFormatted;
|
|
@@ -172,15 +172,18 @@ var DatoGridFilterComponent = /** @class */ (function () {
|
|
|
172
172
|
var _this = this;
|
|
173
173
|
var _b = this.popover.data, gridService = _b.gridService, gridQuery = _b.gridQuery;
|
|
174
174
|
var _c = this.colDef, filter = _c.filter, _d = _c.filtersConfig, filtersConfig = _d === void 0 ? {} : _d, pivotValueColumn = _c.pivotValueColumn, pivotKeys = _c.pivotKeys;
|
|
175
|
+
var colDefs = gridQuery.api.columns.getAllColumns().map(function (column) { return column.getColDef(); });
|
|
175
176
|
this.colField = getColField(this.colDef);
|
|
177
|
+
var colDef = colDefs.find(function (colDef) { return colDef.field === _this.colField; });
|
|
176
178
|
this.pivotColumn = gridQuery.api.columns.getSecondaryPivotColumn(pivotKeys, pivotValueColumn);
|
|
177
179
|
if (filtersConfig.sections) {
|
|
178
180
|
this.filterSections = (_a = {}, _a[filtersConfig.sections] = true, _a);
|
|
179
181
|
}
|
|
180
182
|
this.keepPredefinedListOriginalOrder =
|
|
181
183
|
filtersConfig.keepPredefinedListOriginalOrder && !isEmpty(filtersConfig.predefinedListValues);
|
|
182
|
-
var
|
|
183
|
-
|
|
184
|
+
var colFilter = filter || colDef.filter;
|
|
185
|
+
var filterOptions = DatoGridFilterOptionsMap[colFilter];
|
|
186
|
+
this.filterType = filterOptions ? colFilter : DatoGridFilterTypes.String;
|
|
184
187
|
this.listLabelType = this.filterType.toLowerCase();
|
|
185
188
|
this.listSortByKey = this.filterType === DatoGridFilterTypes.Number && this.colDef.valueFormatter ? 'id' : 'label';
|
|
186
189
|
this.gridQuery = gridQuery;
|
|
@@ -215,9 +218,11 @@ var DatoGridFilterComponent = /** @class */ (function () {
|
|
|
215
218
|
var columnValues = this.getColumnValues();
|
|
216
219
|
this.columnValues = columnValues.map(function (_a) {
|
|
217
220
|
var value = _a.value;
|
|
218
|
-
return _this.pivotColumn ? value[_this.colField] : value;
|
|
221
|
+
return !isNil(_this.pivotColumn) && value ? value[_this.colField] : value;
|
|
222
|
+
});
|
|
223
|
+
this.listOptions = columnValues.map(function (colValue) {
|
|
224
|
+
return mapToListItemWithFormatted(colValue, !isNil(_this.pivotColumn) && _this.colField);
|
|
219
225
|
});
|
|
220
|
-
this.listOptions = columnValues.map(mapToListItemWithFormatted);
|
|
221
226
|
}
|
|
222
227
|
}
|
|
223
228
|
else {
|
|
@@ -683,4 +688,4 @@ var DatoGridFilterComponent = /** @class */ (function () {
|
|
|
683
688
|
}());
|
|
684
689
|
export { DatoGridFilterComponent };
|
|
685
690
|
export { ɵ0, ɵ1, ɵ2 };
|
|
686
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFFakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSXhELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELElBQU0sVUFBVSxHQUFHLFVBQUMsRUFBUztRQUFQLGdCQUFLO0lBQU8sT0FBQSxLQUFLO0FBQUwsQ0FBSyxDQUFDOztBQUN4QyxJQUFNLGFBQWEsR0FBRyxVQUFBLEdBQUcsSUFBSSxPQUFBLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxLQUFHLEdBQUssQ0FBQSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUExRSxDQUEwRSxDQUFDOztBQUN4RyxJQUFNLDBCQUEwQixHQUFHLFVBQUMsRUFBeUI7UUFBdkIsZ0JBQUssRUFBRSxrQ0FBYztJQUFPLE9BQUEsQ0FBQztRQUNqRSxFQUFFLEVBQUUsS0FBSztRQUNULEtBQUssRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxLQUFHLGNBQWdCLENBQUEsQ0FBQyxJQUFJLEVBQUU7UUFDckUsS0FBSyxPQUFBO0tBQ04sQ0FBQztBQUpnRSxDQUloRSxDQUFDOztBQW9CSDtJQW1DRSxpQ0FDVSxJQUFnQixFQUNoQixPQUF1QyxFQUN2QyxFQUFlLEVBQ2YsU0FBK0IsRUFDL0IsR0FBc0I7O1FBTGhDLGlCQU1JO1FBTE0sU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixZQUFPLEdBQVAsT0FBTyxDQUFnQztRQUN2QyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsY0FBUyxHQUFULFNBQVMsQ0FBc0I7UUFDL0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF2Q2hDLG9CQUFlLEdBQUcsbUJBQW1CLENBQUM7UUFFdEMsaUJBQVksR0FBd0IsRUFBRSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQWUsRUFBRSxDQUFDO1FBSTdCLG1CQUFjO1lBQ1osR0FBQyxzQkFBc0IsQ0FBQyxRQUFRLElBQUcsSUFBSTtZQUN2QyxHQUFDLHNCQUFzQixDQUFDLFdBQVcsSUFBRyxJQUFJO2dCQUMxQztRQUNGLGlCQUFZLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDO1FBRzdDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixzQkFBaUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixzQkFBaUIsR0FBaUI7WUFDaEMsSUFBSSxFQUFFLFlBQVk7WUFDbEIsT0FBTyxFQUFFLGNBQU0sT0FBQSxLQUFJLENBQUMsVUFBVSxFQUFFLEVBQWpCLENBQWlCO1lBQ2hDLFdBQVcsRUFBRSxvQkFBb0I7U0FDbEMsQ0FBQztRQUNGLGtCQUFhLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFNZCxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBVWpELENBQUM7SUFFSixzQkFBSSxtREFBYzthQUFsQjtZQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSx1REFBa0I7YUFBdEI7WUFDRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ2xDLENBQUM7OztPQUFBO0lBRUQsc0JBQUksdURBQWtCO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMzRCxDQUFDOzs7T0FBQTtJQUVELHNCQUFZLG1EQUFjO2FBQTFCO1lBQ0UsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDbkIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDbEMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUM7OztPQUFBO0lBRUQsc0JBQVksMERBQXFCO2FBQWpDO1lBQ1UsSUFBQSw4QkFBa0IsRUFBbEIsdUNBQWtCLENBQWlCO1lBQzNDLE9BQU8sYUFBYSxDQUFDLG9CQUFvQixJQUFJLE9BQU8sYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQztRQUN6RyxDQUFDOzs7T0FBQTtJQUVELHNCQUFZLHVEQUFrQjthQUE5QjtZQUNFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBQ25CLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUM7Z0JBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNqRCxDQUFDLENBQUM7UUFDTCxDQUFDOzs7T0FBQTtJQUVELHNCQUFZLG1EQUFjO2FBQTFCO1lBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQUVELHNCQUFZLGdEQUFXO2FBQXZCO1lBQ0UsSUFBTSxPQUFPLEdBQStCLEVBQUUsQ0FBQztZQUMvQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7YUFDdkM7WUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFO2dCQUNuQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzthQUMvQztZQUNELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsQ0FBQzs7O09BQUE7SUFFRCxzQkFBWSwrQ0FBVTthQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQWMsQ0FBQztRQUNwRSxDQUFDOzs7T0FBQTtJQUVELHNCQUFZLDhDQUFTO2FBQXJCO1lBQ0UsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFekQsT0FBTyxNQUFNLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hGLENBQUM7OztPQUFBO0lBRUQsc0JBQVksMkNBQU07YUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQXVCLENBQUM7UUFDbkUsQ0FBQzs7O09BQUE7SUFFRCxzQkFBWSw4Q0FBUzthQUFyQjtZQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ3JDLENBQUM7OztPQUFBO0lBRUQsMENBQVEsR0FBUjs7UUFBQSxpQkEwRUM7UUF6RU8sSUFBQSxzQkFBOEMsRUFBNUMsNEJBQVcsRUFBRSx3QkFBK0IsQ0FBQztRQUMvQyxJQUFBLGdCQUF5RSxFQUF2RSxrQkFBTSxFQUFFLHFCQUFrQixFQUFsQix1Q0FBa0IsRUFBRSxzQ0FBZ0IsRUFBRSx3QkFBeUIsQ0FBQztRQUVoRixJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUU5RixJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGNBQWMsYUFBSyxHQUFDLGFBQWEsQ0FBQyxRQUFRLElBQUcsSUFBSSxLQUFFLENBQUM7U0FDMUQ7UUFDRCxJQUFJLENBQUMsK0JBQStCO1lBQ2xDLGFBQWEsQ0FBQywrQkFBK0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNoRyxJQUFNLGFBQWEsR0FBRyx3QkFBd0IsQ0FBQyxNQUFnQixDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFFLE1BQThCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztRQUMvRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFtQixDQUFDO1FBQ3BFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ25ILElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVM7YUFDN0IsTUFBTSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxFQUFwQyxDQUFvQyxDQUFDO2FBQ3JELElBQUksQ0FDSCxHQUFHLENBQUMsVUFBQSxNQUFNO1lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRTtZQUNuQyxJQUFJLGdCQUFnQixHQUEyQixhQUFhLElBQUksMkJBQTJCLENBQUM7WUFDNUYsSUFBSSxhQUFhLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3JDLGdCQUFnQixZQUFPLGdCQUFnQixHQUFFLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUMsQ0FBQzthQUN6RztZQUNELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBQyxPQUFPLEVBQUUsRUFBRSxJQUFLLE9BQUEsQ0FBQztnQkFDckUsRUFBRSxJQUFBO2dCQUNGLE9BQU8sU0FBQTtnQkFDUCxLQUFLLEVBQUUsS0FBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBUSxLQUFJLENBQUMsVUFBVSxLQUFLLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUcsT0FBUyxDQUFDO2FBQ2pILENBQUMsRUFKb0UsQ0FJcEUsQ0FBQyxDQUFDO1NBQ0w7UUFDRCxJQUFJLGVBQWUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO1lBQ3hCLElBQUEseURBQW9CLENBQW1CO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztZQUNoRixJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO2dCQUNyRSxJQUFNLFNBQVMsR0FBRyxvQkFBZ0MsQ0FBQztnQkFDbkQsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDakQ7cUJBQU07b0JBQ0wsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBQyxFQUFTOzRCQUFQLGdCQUFLO3dCQUMzQyxPQUFPLEtBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDekQsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7aUJBQ2pFO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBTSxTQUFTLEdBQUcsb0JBQWtDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7YUFDOUI7WUFDRCxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBQyxVQUFrQjtvQkFDMUYsS0FBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztvQkFDakMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUM1QixLQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzt3QkFDekIsS0FBSSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUM7d0JBQ25DLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQzNDLEtBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7cUJBQzFCO3lCQUFNO3dCQUNMLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDdEM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCw0Q0FBVSxHQUFWO1FBQ0UsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELDhDQUFZLEdBQVo7UUFDRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbEUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNGLElBQUEsaUNBQU0sQ0FBdUI7WUFDckMsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ2IsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVyRCxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQsOENBQVksR0FBWjtRQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsaURBQWUsR0FBZixVQUFnQixLQUFhO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELDhDQUFZLEdBQVo7UUFDRSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsZ0RBQWMsR0FBZCxVQUFlLENBQVM7UUFDdEIsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2RCxPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RELENBQUM7SUFFRCxvREFBa0IsR0FBbEIsVUFBbUIsT0FBd0I7UUFDekMsSUFBTSxPQUFPLEdBQ1gsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsNkNBQVcsR0FBWDtRQUNFLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckUsQ0FBQztJQVlPLHlEQUF1QixHQUEvQixVQUNFLFdBQTJDLEVBQzNDLFVBQWtCO1FBQWxCLDJCQUFBLEVBQUEsa0JBQWtCO1FBRWxCLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLElBQU0sZ0JBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxvQkFBa0MsQ0FBQztZQUNwRixXQUFXLEdBQUcsSUFBSSxHQUFHLENBQ25CLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBQSxHQUFHO2dCQUNqQixJQUFNLElBQUksR0FBRyxnQkFBYyxDQUFDLElBQUksQ0FBQyxVQUFDLEVBQVM7d0JBQVAsZ0JBQUs7b0JBQU8sT0FBQSxLQUFLLEtBQUssR0FBRztnQkFBYixDQUFhLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDthQUFNO1lBQ0wsV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxDQUFDLFFBQVEsQ0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQTNDLENBQTJDLENBQUMsQ0FBQyxDQUFDO1NBQzVGO1FBQ0QsSUFBSSxVQUFVLEVBQUU7WUFDZCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQUMsRUFBUztvQkFBUCxnQkFBSztnQkFBTyxPQUFBLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFBdkIsQ0FBdUIsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFBLEtBQUssSUFBSSxPQUFBLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBdkIsQ0FBdUIsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTyw2Q0FBVyxHQUFuQjtRQUFBLGlCQXdCQztRQXZCTyxJQUFBLDBCQUFnRCxFQUE5QyxvQkFBTyxFQUFFLDRCQUFxQyxDQUFDO1FBQ3ZELElBQU0sTUFBTSxHQUFtQixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTVELE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUs7Z0JBQ3RHLElBQUksS0FBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDekIsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3pDO2dCQUVELE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRTtZQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLDBDQUFRLEdBQWhCO1FBQ0UsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3pGLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFDMUQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxxREFBbUIsR0FBM0IsVUFBNEIsTUFBc0I7UUFDaEQsSUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUU7WUFDbkMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDOUU7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO1lBQ2hDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSywyQ0FBUyxHQUFqQjtRQUNFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO1lBQ2hDLGFBQWEsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDaEQ7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFO1lBQ25DLGFBQWEseUJBQ1IsYUFBYSxLQUNoQixXQUFXLEVBQUU7b0JBQ1gsUUFBUSxFQUFFLGFBQWEsQ0FBQyxHQUFHO29CQUMzQixVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQ3RGLEdBQ0YsQ0FBQztZQUNGLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQXdCLENBQUM7WUFDdEUsV0FBVyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxXQUFXLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUU7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssaURBQWUsR0FBdkI7O1FBQ0UsSUFBSSxNQUFNLEdBQTZCLEVBQUUsQ0FBQztRQUMxQyxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ25DLElBQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFNLFdBQVcsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN4RixJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsSUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUcsdUVBQXVFO1FBQ3ZFLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxVQUFBLEdBQUc7Z0JBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLGtEQUFrRDtZQUNsRCxJQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QyxJQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNuRCxJQUFNLFlBQVUsR0FBRyxRQUFRLEdBQUcsV0FBVyxDQUFDO1lBQzFDLElBQU0sVUFBUSxHQUFHLFlBQVUsR0FBRyxRQUFRLENBQUM7WUFDdkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFBLEdBQUc7Z0JBQ1QsSUFBQSx1QkFBUSxDQUFTO2dCQUN6QixJQUFJLFFBQVEsSUFBSSxZQUFVLElBQUksUUFBUSxHQUFHLFVBQVEsRUFBRTtvQkFDakQsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDbkM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsMkRBQTJEO1FBQzNELElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxXQUFXLEtBQUssb0JBQW9CLENBQUMsV0FBVyxFQUFFO2dCQUNwRCxJQUFNLFdBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQXlDLENBQUM7Z0JBQ3hFLElBQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQUMsS0FBc0I7b0JBQzdFLElBQU0sY0FBYyxHQUFHLFdBQVMsQ0FBQyxDQUFDLENBQUMsV0FBUyxDQUFDLEVBQUUsS0FBSyxPQUFBLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ2hFLE9BQU8sRUFBRSxLQUFLLE9BQUEsRUFBRSxjQUFjLGdCQUFBLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUMxQztpQkFBTTtnQkFDRyxJQUFBLHdDQUFXLENBQW9CO2dCQUN2QyxJQUFNLGVBQWEseUJBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsZ0JBQzVCLElBQUksQ0FBQyxRQUFRLElBQUcsRUFBRSxXQUFXLGFBQUEsRUFBRSxNQUNqQyxDQUFDO2dCQUNGLEdBQUcsQ0FBQyxlQUFlLENBQUMsVUFBQSxHQUFHO29CQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLEVBQUUsR0FBRyxLQUFBLEVBQUUsR0FBRyxLQUFBLEVBQUUsRUFBRSxlQUFhLENBQUMsRUFBRTt3QkFDdkYsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDbkM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTywyREFBeUIsR0FBakMsVUFDRSxLQUFhLEVBQ2IsR0FBWTtJQUNaLHNFQUFzRTtJQUN0RSxTQUFrQyxFQUNsQyxHQUFZO1FBRVosSUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsNkVBQTZFO1FBQzdFLE9BQU8sRUFBRSxLQUFLLE9BQUEsRUFBRSxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLE9BQUEsRUFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BGLENBQUM7SUFFTyxzREFBb0IsR0FBNUIsVUFDRSxNQUFzQixFQUN0QixFQUE2RTtRQUYvRSxpQkF1QkM7WUFyQkcsc0JBQVEsRUFBRSwwQkFBVTtRQUV0QixJQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQUMsRUFBZTtnQkFBYixnQkFBSyxFQUFFLGNBQUk7WUFBTyxPQUFBLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUFsRCxDQUFrRCxDQUFDLENBQUM7UUFDbkgsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxXQUFXLEdBQUc7Z0JBQ25CLElBQUksRUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQThCLElBQUksbUJBQW1CLENBQUMsTUFBTTtnQkFDL0UsUUFBUSxVQUFBO2dCQUNSLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQUMsRUFBeUI7d0JBQXZCLGdCQUFLLEVBQUUsY0FBSSxFQUFFLHNCQUFRO29CQUNqRCxJQUFNLElBQUksR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssT0FBQSxFQUFFLENBQUM7b0JBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7d0JBQ2xELElBQUksTUFBTSx5QkFBUSxJQUFJLEtBQUUsUUFBUSxVQUFBLEdBQUUsQ0FBQzt3QkFDbkMsSUFBSSxLQUFJLENBQUMsVUFBVSxLQUFLLG1CQUFtQixDQUFDLElBQUksRUFBRTs0QkFDMUMsSUFBQSxVQUFpQyxFQUEvQixjQUFJLEVBQUUsVUFBeUIsQ0FBQzs0QkFDeEMsTUFBTSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQWMsRUFBRSxRQUFRLEVBQUUsRUFBWSxFQUFFLENBQUM7eUJBQ3JGO3dCQUNELE9BQU8sTUFBc0MsQ0FBQztxQkFDL0M7b0JBQ0QsT0FBTyxJQUErQixDQUFDO2dCQUN6QyxDQUFDLENBQUM7YUFDSCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRU8sa0RBQWdCLEdBQXhCLFVBQXlCLE1BQXNCLEVBQUUsT0FBNEI7UUFDM0UsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDN0MsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtnQkFDbEMsSUFBTSxTQUFTLEdBQ2IsT0FBTyxDQUFDLE1BQU0sR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQztnQkFDckcsTUFBTSxDQUFDLE9BQU8sR0FBRztvQkFDZixTQUFTLFdBQUE7b0JBQ1QsTUFBTSxFQUFFLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQztpQkFDckcsQ0FBQzthQUNIO1NBQ0Y7YUFBTTtZQUNMLElBQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sQ0FBQyxPQUFPLEdBQUc7b0JBQ2YsU0FBUyxFQUFFLG9CQUFvQixDQUFDLFdBQVc7b0JBQzNDLE1BQU0sUUFBQTtpQkFDUCxDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7SUFFTyxvREFBa0IsR0FBMUIsVUFBMkIsT0FBa0M7UUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUM1QjtRQUNELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUU7WUFDNUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUU7WUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDL0M7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU8sd0RBQXNCLEdBQTlCLFVBQStCLFdBQTBDO1FBQ3ZFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7U0FDaEM7UUFDRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ25CLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDaEMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpREFBZSxHQUF2QixVQUF3QixVQUFzRTtRQUE5RixpQkFvQkM7UUFuQkMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQUEsU0FBUztZQUNyQixJQUFBLG9DQUF5QixFQUFFLHVCQUFLLENBQWU7WUFDdkQsSUFBTSxLQUFLLEdBQUc7Z0JBQ1osSUFBSSxFQUFFO29CQUNKO3dCQUNFLEVBQUUsRUFBRSxLQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLFVBQUMsRUFBVztnQ0FBVCxvQkFBTzs0QkFBTyxPQUFBLE9BQU8sS0FBSyxjQUFjO3dCQUExQixDQUEwQixDQUFDO3dCQUN4RixPQUFPLEVBQUUsY0FBYzt3QkFDdkIsS0FBSyxFQUFFLFVBQVEsY0FBZ0I7cUJBQ2hDO2lCQUNGO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNuQyxRQUFRLEVBQUUsSUFBSTthQUNmLENBQUM7WUFDRixJQUFJLGdCQUFnQixDQUErQixTQUFTLENBQUMsRUFBRTtnQkFDN0QsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzRCxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQWUsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLFFBQWtCLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDNUc7WUFDRCxPQUFPLEtBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztTQUVLO0lBQ0csMERBQXdCLEdBQWhDO1FBQUEsaUJBMEJDO1FBekJDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWTthQUN6QixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQ2pDLEdBQUcsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQXRCLENBQXNCLENBQUMsRUFDakMsb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDO1lBQ1IsSUFBTSxZQUFZLEdBQUcsS0FBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQUMsS0FBZ0IsRUFBRSxLQUFLO2dCQUN4RSxPQUFBLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQyxLQUFzQixJQUFLLE9BQUEsQ0FBQyxFQUFFLEtBQUssT0FBQSxFQUFFLEtBQUssT0FBQSxFQUFFLENBQUMsRUFBbEIsQ0FBa0IsQ0FBQyxDQUFDO1lBQXhGLENBQXdGLENBQ3pGLENBQUM7WUFDRixPQUFPLEtBQUssd0JBQUksWUFBWSxHQUFFO1FBQ2hDLENBQUMsQ0FBQyxFQUNGLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FDckI7YUFDQSxTQUFTLENBQUMsVUFBQyxFQUE2QjtnQkFBbEIsMEJBQU8sRUFBSSxnQkFBSztZQUNyQyxJQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssT0FBQSxFQUFFLE9BQU8sRUFBRSxPQUFPLEtBQUssb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0UsSUFBSSxLQUFJLENBQUMsVUFBVSxLQUFLLG1CQUFtQixDQUFDLElBQUksRUFBRTtnQkFDaEQsS0FBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM5QjtpQkFBTSxJQUFJLEtBQUksQ0FBQyxVQUFVLEtBQUssbUJBQW1CLENBQUMsTUFBTSxFQUFFO2dCQUN6RCxLQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEM7WUFDRCxLQUFJLENBQUMsMkJBQTJCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGlEQUFlLEdBQXZCLFVBQXdCLEVBQWtCO1lBQWhCLG9CQUFPLEVBQUUsZ0JBQUs7UUFDdEMsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtZQUNULElBQUEscUJBQUssQ0FBYTtZQUMxQixJQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbkUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFTyxtREFBaUIsR0FBekIsVUFBMEIsRUFBa0I7WUFBaEIsb0JBQU8sRUFBRSxnQkFBSztRQUN4QyxJQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RCxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0QsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU8sNkRBQTJCLEdBQW5DLFVBQW9DLE9BQTZCLEVBQUUsS0FBYTtRQUM5RSxJQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM3RSxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFnQixDQUFDO1FBQzNFLFlBQVksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVPLGdEQUFjLEdBQXRCLFVBQXVCLE9BQTZCO1FBQ2xELE9BQU8sT0FBTyxLQUFLLG9CQUFvQixDQUFDLFFBQVEsSUFBSSxPQUFPLEtBQUssb0JBQW9CLENBQUMsU0FBUyxDQUFDO0lBQ2pHLENBQUM7SUFFTywrQ0FBYSxHQUFyQixVQUFzQixLQUE0QjtRQUNoRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU8scURBQW1CLEdBQTNCLFVBQTRCLFVBQWtCOztRQUE5QyxpQkFzQ0M7UUFyQ0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBTSxNQUFNLEdBQW1DO1lBQzdDLFlBQVksRUFBRTtnQkFDWixLQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDekIsS0FBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztnQkFDaEMsS0FBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLEtBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsQ0FBQztZQUNELGVBQWUsRUFBRSxVQUFBLElBQUk7Z0JBQ25CLEtBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxDQUFDLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBcEIsQ0FBb0IsQ0FBQyxDQUFDO2dCQUN6RCxLQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQy9DLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEMsS0FBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixDQUFDO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFVBQVUsRUFBRSxDQUFDO2dCQUNiLGFBQWE7b0JBQ1gsR0FBQyxJQUFJLENBQUMsUUFBUSxJQUFHO3dCQUNmLFFBQVEsRUFBRSxhQUFhLENBQUMsR0FBRzt3QkFDM0IsT0FBTyxFQUFFOzRCQUNQO2dDQUNFLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxRQUFRO2dDQUN4QyxLQUFLLEVBQUUsVUFBVTs2QkFDbEI7eUJBQ0Y7cUJBQ0Y7dUJBQ0Y7Z0JBQ0QsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDaEMsZUFBZSxFQUFFLElBQUk7YUFDdEI7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFhLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCx3SUFBd0k7SUFDaEksb0RBQWtCLEdBQTFCLFVBQTJCLElBQXlCO1FBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU8seURBQXVCLEdBQS9CO1FBQUEsaUJBWUM7UUFYQyxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsWUFBWTthQUM1QyxJQUFJLENBQ0gsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFDeEIsUUFBUSxFQUFFLENBQ1g7YUFDQSxTQUFTLENBQUMsVUFBQyxFQUFlO2dCQUFmLGtCQUFlLEVBQWQsWUFBSSxFQUFFLGVBQU87WUFDeEIsSUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ25ELElBQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUE1RSxDQUE0RSxDQUFDLENBQUM7UUFDbEcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sc0RBQW9CLEdBQTVCLFVBQTZCLElBQXlCO1FBQXRELGlCQUVDO1FBREMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxLQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBM0IsQ0FBMkIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNLLGdEQUFjLEdBQXRCLFVBQXVCLE1BQW1CLEVBQUUsTUFBVztRQUFYLHVCQUFBLEVBQUEsV0FBVztRQUNyRCxJQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkMsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsV0FBVyxDQUFDO1FBRWpGLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDMUM7UUFFRCxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztnQkFobUJlLFVBQVU7Z0JBQ1AsVUFBVTtnQkFDZixXQUFXO2dCQUNKLG9CQUFvQjtnQkFDMUIsaUJBQWlCOztJQXhDckIsdUJBQXVCO1FBTm5DLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsbXRhQUEyQztZQUUzQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7U0FDaEQsQ0FBQzt5Q0FxQ2dCLFVBQVU7WUFDUCxVQUFVO1lBQ2YsV0FBVztZQUNKLG9CQUFvQjtZQUMxQixpQkFBaUI7T0F4Q3JCLHVCQUF1QixDQXFvQm5DO0lBQUQsOEJBQUM7Q0FBQSxBQXJvQkQsSUFxb0JDO1NBcm9CWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0dyaWRGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXAsXG4gIERhdG9HcmlkRmlsdGVyU2VjdGlvbnMsXG4gIERhdG9HcmlkRmlsdGVyVHlwZXMsXG4gIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24sXG4gIERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucyxcbiAgaXNSYW5nZUNvbmRpdGlvbixcbiAgTGlzdEl0ZW1cbn0gZnJvbSAnLi9ncmlkLWZpbHRlci50eXBlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQb3BvdmVyUmVmIH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9wb3BvdmVyLXJlZic7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBkaWZmZXJlbmNlLCBpc0FycmF5VmFsdWVzRXF1YWwsIHVuaXFCeSB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGlzRW1wdHksIGlzTmlsLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uL29wZXJhdG9yLXRvZ2dsZXIvb3BlcmF0b3ItdG9nZ2xlci50eXBlcyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsdGVyIH0gZnJvbSAnLi9maWx0ZXItdmFsaWRhdG9yJztcbmltcG9ydCB7IERhdG9HcmlkQ29sdW1uRGVmLCBEYXRvR3JpZEdldFJvd3NQYXJhbXMgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IERhdG9Db2x1bW5NZW51RGF0YSB9IGZyb20gJy4uL2dyaWQtY29sdW1uLWhlYWRlci9ncmlkLWNvbHVtbi1oZWFkZXIudHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uLCBDb2x1bW5Hcm91cCwgR3JpZEFwaSwgUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IERhdGVSYW5nZSB9IGZyb20gJy4uLy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLnR5cGVzJztcbmltcG9ydCB7IGN1cnJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZnVuY3Rpb24nO1xuaW1wb3J0IHsgU29ydExhYmVsVHlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NlYXJjaC1yZXN1bHRzLnBpcGUnO1xuaW1wb3J0IHsgSG90S2V5Q29uZmlnIH0gZnJvbSAnLi4vLi4vaG90a2V5cy9ob3RrZXkudHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0S2V5cyB9IGZyb20gJy4uLy4uL2hvdGtleXMvaG90a2V5cy1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgZ2V0Q29sRmllbGQgfSBmcm9tICcuLi9ncmlkLXN0b3JlL3V0aWwnO1xuXG5jb25zdCBtYXBUb1ZhbHVlID0gKHsgdmFsdWUgfSkgPT4gdmFsdWU7XG5jb25zdCBtYXBUb0xpc3RJdGVtID0gdmFsID0+ICh7IGlkOiB2YWwsIGxhYmVsOiBpc05pbCh2YWwpID8gYChFbXB0eSlgIDogYCR7dmFsfWAudHJpbSgpLCB2YWx1ZTogdmFsIH0pO1xuY29uc3QgbWFwVG9MaXN0SXRlbVdpdGhGb3JtYXR0ZWQgPSAoeyB2YWx1ZSwgZm9ybWF0dGVkVmFsdWUgfSkgPT4gKHtcbiAgaWQ6IHZhbHVlLFxuICBsYWJlbDogaXNOaWwoZm9ybWF0dGVkVmFsdWUpID8gYChFbXB0eSlgIDogYCR7Zm9ybWF0dGVkVmFsdWV9YC50cmltKCksXG4gIHZhbHVlXG59KTtcblxudHlwZSBDb25kaXRpb25zID0ge1xuICB0eXBlOiB7XG4gICAgb3BlcmFuZDogRXhjbHVkZTxEYXRvRmlsdGVyQ29uZGl0aW9ucywgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCB8IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUPjtcbiAgfTtcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgcmFuZ2VFbmQ6IHN0cmluZyB8IG51bWJlcjtcbn1bXTtcblxudHlwZSBDb25kaXRpb25PcHRpb24gPSB7IGlkOiBudW1iZXI7IGxhYmVsOiBzdHJpbmc7IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zIH07XG5cbnR5cGUgVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSA9IHsgdmFsdWU6IHN0cmluZyB8IG51bWJlcjsgZm9ybWF0dGVkVmFsdWU6IHN0cmluZyB8IG51bWJlciB9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0b0dyaWRGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBncmlkRmlsdGVyVHlwZXMgPSBEYXRvR3JpZEZpbHRlclR5cGVzO1xuICBmaWx0ZXJUeXBlOiBEYXRvR3JpZEZpbHRlclR5cGVzO1xuICBjb2x1bW5WYWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXTtcbiAgbGlzdE9wdGlvbnM6IExpc3RJdGVtW10gPSBbXTtcbiAgY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zOiBDb25kaXRpb25PcHRpb25bXTtcbiAgaGFzRmlsdGVyJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZmlsdGVyRm9ybTogRm9ybUdyb3VwO1xuICBmaWx0ZXJTZWN0aW9uczogeyBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZV0/OiBib29sZWFuOyBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbF0/OiBib29sZWFuIH0gPSB7XG4gICAgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQnlfVmFsdWVdOiB0cnVlLFxuICAgIFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsXTogdHJ1ZVxuICB9O1xuICByYW5nZU9wZXJhbmQgPSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRTtcbiAgbGlzdExhYmVsVHlwZTogU29ydExhYmVsVHlwZTtcbiAgbGlzdFNvcnRCeUtleTogc3RyaW5nO1xuICBpc0NsaWVudFNpZGVHcmlkID0gZmFsc2U7XG4gIGxpc3RTZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIGxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gIHNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgYXBwbHlIb3RLZXlDb25maWc6IEhvdEtleUNvbmZpZyA9IHtcbiAgICBrZXlzOiAnbWV0YS5lbnRlcicsXG4gICAgaGFuZGxlcjogKCkgPT4gdGhpcy5jbG9zZVBvcFVwKCksXG4gICAgZGVzY3JpcHRpb246ICdjb3JlLmFwcGx5LWZpbHRlcnMnXG4gIH07XG4gIGhvdEtleVRvb2x0aXAgPSBmb3JtYXRLZXlzKHRoaXMuYXBwbHlIb3RLZXlDb25maWcua2V5cyk7XG4gIGFjdGl2ZUFjY29yZGlvbklkID0gMDtcbiAga2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlcjogYm9vbGVhbjtcblxuICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5O1xuICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZTtcbiAgcHJpdmF0ZSBjb2xGaWVsZDogc3RyaW5nO1xuICBwcml2YXRlIGV4Y2x1ZGVkVmFsdWVzID0gbmV3IFNldDxzdHJpbmcgfCBudW1iZXI+KCk7XG4gIHByaXZhdGUgYnlWYWx1ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBpdm90Q29sdW1uOiBDb2x1bW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcG9wb3ZlcjogUG9wb3ZlclJlZjxEYXRvQ29sdW1uTWVudURhdGE+LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIGdldCBieVZhbHVlQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdieVZhbHVlJyk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uc0NvbnRyb2xzKCk6IEFic3RyYWN0Q29udHJvbFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNPcGVyYXRvcigpOiBPcGVyYXRvclR5cGVzIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwub3BlcmF0b3InKS52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRPcGVyYW5kKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgdHlwZTogW3RoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdXSxcbiAgICAgIHZhbHVlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICByYW5nZUVuZDogW251bGxdXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1ByZWRlZmluZWRMaXN0SXRlbXMoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzQ29uZmlnID0ge30gfSA9IHRoaXMuY29sRGVmO1xuICAgIHJldHVybiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzICYmIHR5cGVvZiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzWzBdID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRDb25kaXRpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBvcGVyYXRvcjogW09wZXJhdG9yVHlwZXMuQU5EXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkoW3RoaXMuZGVmYXVsdE9wZXJhbmRdKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJ5VmFsdWUoKSB7XG4gICAgcmV0dXJuIFt0aGlzLmNvbHVtblZhbHVlc107XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Rm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZpbHRlcnM6IHsgYnlWYWx1ZT87IGNvbmRpdGlvbmFsPyB9ID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlcnMuYnlWYWx1ZSA9IHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBmaWx0ZXJzLmNvbmRpdGlvbmFsID0gdGhpcy5kZWZhdWx0Q29uZGl0aW9uYWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29uZGl0aW9ucygpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbC5jb25kaXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29sRmlsdGVyKCk6IERhdG9HcmlkRmlsdGVyIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKVt0aGlzLmNvbEZpZWxkXTtcblxuICAgIHJldHVybiBmaWx0ZXIgJiYgaXNBcnJheVZhbHVlc0VxdWFsKHRoaXMucGl2b3RLZXlzLCBmaWx0ZXIucGl2b3RLZXlzKSA/IGZpbHRlciA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2xEZWYoKTogRGF0b0dyaWRDb2x1bW5EZWYge1xuICAgIHJldHVybiB0aGlzLnBvcG92ZXIuZGF0YS5jb2x1bW4uZ2V0Q29sRGVmKCkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gIH1cblxuICBwcml2YXRlIGdldCBwaXZvdEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbERlZi5waXZvdEtleXMgfHwgW107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGdyaWRTZXJ2aWNlLCBncmlkUXVlcnkgfSA9IHRoaXMucG9wb3Zlci5kYXRhO1xuICAgIGNvbnN0IHsgZmlsdGVyLCBmaWx0ZXJzQ29uZmlnID0ge30sIHBpdm90VmFsdWVDb2x1bW4sIHBpdm90S2V5cyB9ID0gdGhpcy5jb2xEZWY7XG5cbiAgICB0aGlzLmNvbEZpZWxkID0gZ2V0Q29sRmllbGQodGhpcy5jb2xEZWYpO1xuICAgIHRoaXMucGl2b3RDb2x1bW4gPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0U2Vjb25kYXJ5UGl2b3RDb2x1bW4ocGl2b3RLZXlzLCBwaXZvdFZhbHVlQ29sdW1uKTtcblxuICAgIGlmIChmaWx0ZXJzQ29uZmlnLnNlY3Rpb25zKSB7XG4gICAgICB0aGlzLmZpbHRlclNlY3Rpb25zID0geyBbZmlsdGVyc0NvbmZpZy5zZWN0aW9uc106IHRydWUgfTtcbiAgICB9XG4gICAgdGhpcy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyID1cbiAgICAgIGZpbHRlcnNDb25maWcua2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlciAmJiAhaXNFbXB0eShmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzKTtcbiAgICBjb25zdCBmaWx0ZXJPcHRpb25zID0gRGF0b0dyaWRGaWx0ZXJPcHRpb25zTWFwW2ZpbHRlciBhcyBzdHJpbmddO1xuICAgIHRoaXMuZmlsdGVyVHlwZSA9IGZpbHRlck9wdGlvbnMgPyAoZmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIDogRGF0b0dyaWRGaWx0ZXJUeXBlcy5TdHJpbmc7XG4gICAgdGhpcy5saXN0TGFiZWxUeXBlID0gdGhpcy5maWx0ZXJUeXBlLnRvTG93ZXJDYXNlKCkgYXMgU29ydExhYmVsVHlwZTtcbiAgICB0aGlzLmxpc3RTb3J0QnlLZXkgPSB0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyICYmIHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyID8gJ2lkJyA6ICdsYWJlbCc7XG4gICAgdGhpcy5ncmlkUXVlcnkgPSBncmlkUXVlcnk7XG4gICAgdGhpcy5ncmlkU2VydmljZSA9IGdyaWRTZXJ2aWNlO1xuICAgIHRoaXMuaGFzRmlsdGVyJCA9IHRoaXMuZ3JpZFF1ZXJ5XG4gICAgICAuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzLmZpbHRlclt0aGlzLmNvbEZpZWxkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoZmlsdGVyID0+IHtcbiAgICAgICAgICByZXR1cm4gIWlzTmlsKGZpbHRlcikgJiYgaXNBcnJheVZhbHVlc0VxdWFsKGZpbHRlci5waXZvdEtleXMsIHRoaXMucGl2b3RLZXlzKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIGxldCBmaWx0ZXJDb25kaXRpb25zOiBEYXRvRmlsdGVyQ29uZGl0aW9uc1tdID0gZmlsdGVyT3B0aW9ucyB8fCBEYXRvR3JpZFN0cmluZ0ZpbHRlck9wdGlvbnM7XG4gICAgICBpZiAoZmlsdGVyc0NvbmZpZy5zaG93RW1wdHlDb25kaXRpb25zKSB7XG4gICAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSBbLi4uZmlsdGVyQ29uZGl0aW9ucywgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFksIERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWV07XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmRpdGlvbmFsRmlsdGVyT3B0aW9ucyA9IGZpbHRlckNvbmRpdGlvbnMubWFwKChvcGVyYW5kLCBpZCkgPT4gKHtcbiAgICAgICAgaWQsXG4gICAgICAgIG9wZXJhbmQsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0oYGNvcmUuJHt0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSA/ICdEQVRFXycgOiAnJ30ke29wZXJhbmR9YClcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgbGV0IG9yaWdpbmFsT3B0aW9ucztcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgY29uc3QgeyBwcmVkZWZpbmVkTGlzdFZhbHVlcyB9ID0gZmlsdGVyc0NvbmZpZztcbiAgICAgIHRoaXMuaXNDbGllbnRTaWRlR3JpZCA9ICFpc05pbChwcmVkZWZpbmVkTGlzdFZhbHVlcykgfHwgIWdyaWRRdWVyeS5pc1NlcnZlclNpZGU7XG4gICAgICBpZiAoIXByZWRlZmluZWRMaXN0VmFsdWVzIHx8IHRoaXMuaXNTdHJpbmdBcnJheShwcmVkZWZpbmVkTGlzdFZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChyYXdWYWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtblZhbHVlcyA9IHJhd1ZhbHVlcztcbiAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzLm1hcChtYXBUb0xpc3RJdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSB0aGlzLmdldENvbHVtblZhbHVlcygpO1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gY29sdW1uVmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbHVtbiA/IHZhbHVlW3RoaXMuY29sRmllbGRdIDogdmFsdWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IGNvbHVtblZhbHVlcy5tYXAobWFwVG9MaXN0SXRlbVdpdGhGb3JtYXR0ZWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByYXdWYWx1ZXMgPSBwcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBMaXN0SXRlbVtdO1xuICAgICAgICB0aGlzLmNvbHVtblZhbHVlcyA9IHJhd1ZhbHVlcy5tYXAobWFwVG9WYWx1ZSk7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSByYXdWYWx1ZXM7XG4gICAgICB9XG4gICAgICBvcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmxpc3RPcHRpb25zO1xuICAgICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgICAgdGhpcy5saXN0U2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKChzZWFyY2hUZXJtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoc2VhcmNoVGVybS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gb3JpZ2luYWxPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5wYXRjaEFuZFJlUmVnaXN0ZXIodGhpcy5jb2x1bW5WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldFZhbHVlc0Zyb21TZXJ2ZXIoc2VhcmNoVGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBjbG9zZVBvcFVwKCkge1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbGlkICYmIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5kaXJ0eSAmJiAodGhpcy5maWx0ZXJGb3JtLnZhbGlkIHx8IHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsJykucHJpc3RpbmUpKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbiB9ID0gdGhpcy5wb3BvdmVyLmRhdGE7XG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKCk7XG4gICAgICBpc0VtcHR5KGZpbHRlcilcbiAgICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpXG4gICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWx0ZXIoY29sdW1uLCBmaWx0ZXIpO1xuXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gIH1cblxuICByZW1vdmVDb25kaXRpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY29uZGl0aW9ucy5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBhZGRDb25kaXRpb24oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jb25kaXRpb25zLnB1c2godGhpcy5kZWZhdWx0T3BlcmFuZCk7XG4gIH1cblxuICBnZXRPcGVyYW5kVHlwZShpOiBudW1iZXIpIHtcbiAgICBjb25zdCBjb25kaXRpb25UeXBlID0gdGhpcy5jb25kaXRpb25zLmF0KGkpLnZhbHVlLnR5cGU7XG4gICAgcmV0dXJuIGNvbmRpdGlvblR5cGUgPyBjb25kaXRpb25UeXBlLm9wZXJhbmQgOiBudWxsO1xuICB9XG5cbiAgaXNDb25kaXRpb25hbEVtcHR5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zID1cbiAgICAgIGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLnR5cGUgPyBjb250cm9sLnZhbHVlLnR5cGUub3BlcmFuZCA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuaXNFbXB0eU9wZXJhbmQob3BlcmFuZCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gJiYgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHR5cGU6IFwiRXhjbHVkZVwiXG4gICAqIFNlbGVjdGVkIHZhbHVlczogQSwgQywgRFxuICAgKiBBbGwgbGlzdDogQSwgQiwgQywgRFxuICAgKiBSZXN1bHQ6IEJcbiAgICogQHBhcmFtIGluY2x1ZGVkQXJyIC1UaGUgbGlzdCBvZiB2YWx1ZXMgdG8gaW5jbHVkZVxuICAgKiBAcGFyYW0gYXNMaXN0SXRlbSAtSW5kaWNhdGVzIGlmIHRoZSByZXNwb25zZSBuZWVkcyB0byBiZSBhcyBzdHJpbmcgb3IgYXMgTGlzdEl0ZW1cbiAgICovXG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSwgYXNMaXN0SXRlbTogdHJ1ZSk6IExpc3RJdGVtW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoXG4gICAgaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSxcbiAgICBhc0xpc3RJdGVtID0gZmFsc2VcbiAgKTogKHN0cmluZyB8IG51bWJlcilbXSB8IExpc3RJdGVtW10ge1xuICAgIGxldCBpbmNsdWRlZFNldDtcbiAgICBpZiAodGhpcy5pc1ByZWRlZmluZWRMaXN0SXRlbXMpIHtcbiAgICAgIGNvbnN0IHByZWRlZmluZWRMaXN0ID0gdGhpcy5jb2xEZWYuZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBMaXN0SXRlbVtdO1xuICAgICAgaW5jbHVkZWRTZXQgPSBuZXcgU2V0KFxuICAgICAgICBpbmNsdWRlZEFyci5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gcHJlZGVmaW5lZExpc3QuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gdmFsKTtcbiAgICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluY2x1ZGVkU2V0ID0gbmV3IFNldChpbmNsdWRlZEFyci5tYXAodmFsID0+IChpc09iamVjdDxMaXN0SXRlbT4odmFsKSA/IHZhbC52YWx1ZSA6IHZhbCkpKTtcbiAgICB9XG4gICAgaWYgKGFzTGlzdEl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3RPcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiAhaW5jbHVkZWRTZXQuaGFzKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlcy5maWx0ZXIodmFsdWUgPT4gIWluY2x1ZGVkU2V0Lmhhcyh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlcigpOiBEYXRvR3JpZEZpbHRlciB7XG4gICAgY29uc3QgeyBieVZhbHVlLCBjb25kaXRpb25hbCB9ID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIgPSB7IGNvbElkOiB0aGlzLmNvbERlZi5jb2xJZCB9O1xuXG4gICAgZmlsdGVyLnBpdm90S2V5cyA9IHRoaXMucGl2b3RLZXlzO1xuXG4gICAgaWYgKHRoaXMucGl2b3RDb2x1bW4pIHtcbiAgICAgIGZpbHRlci5waXZvdEZpZWxkc01hcCA9IHRoaXMuZ2V0UGl2b3RGaWVsZHModGhpcy5waXZvdENvbHVtbi5nZXRQYXJlbnQoKSkucmVkdWNlKChmaWVsZE1hcCwgZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBpdm90S2V5c1tpbmRleF0pIHtcbiAgICAgICAgICBmaWVsZE1hcFtmaWVsZF0gPSB0aGlzLnBpdm90S2V5c1tpbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGRNYXA7XG4gICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxGaWx0ZXIoZmlsdGVyLCBjb25kaXRpb25hbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICB0aGlzLnNldEJ5VmFsdWVGaWx0ZXIoZmlsdGVyLCBieVZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IGZpbHRlclZhbHVlID8gdGhpcy5idWlsZEZvcm1Gcm9tRmlsdGVyKGZpbHRlclZhbHVlKSA6IHRoaXMuZGVmYXVsdEZvcm07XG4gICAgdGhpcy5yZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKTtcbiAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCAmJiB0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBmaWx0ZXIgdmlldyBmcm9tIGEgZ2l2ZW4gZmlsdGVyXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRm9ybUZyb21GaWx0ZXIoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcik6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmlsdGVyR3JvdXAgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgZmlsdGVyR3JvdXBbJ2NvbmRpdGlvbmFsJ10gPSB0aGlzLmJ1aWxkQ29uZGl0aW9uYWxGaWx0ZXIoZmlsdGVyLmNvbmRpdGlvbmFsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlckdyb3VwWydieVZhbHVlJ10gPSB0aGlzLmJ1aWxkQnlWYWx1ZUZpbHRlcihmaWx0ZXIuYnlWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlckdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgZmlsdGVyIHZpZXdcbiAgICovXG4gIHByaXZhdGUgcmVzZXRGb3JtKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5zZXRFcnJvcnMobnVsbCk7XG4gICAgbGV0IG9yaWdpbmFsU3RhdGUgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgb3JpZ2luYWxTdGF0ZSA9IHsgYnlWYWx1ZTogdGhpcy5jb2x1bW5WYWx1ZXMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSB7XG4gICAgICAgIC4uLm9yaWdpbmFsU3RhdGUsXG4gICAgICAgIGNvbmRpdGlvbmFsOiB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGNvbmRpdGlvbnM6IFt7IHR5cGU6IHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdLCB2YWx1ZTogbnVsbCwgcmFuZ2VFbmQ6IG51bGwgfV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbmFsID0gdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzLmNvbmRpdGlvbmFsIGFzIEZvcm1Hcm91cDtcbiAgICAgIGNvbmRpdGlvbmFsLnJlbW92ZUNvbnRyb2woJ2NvbmRpdGlvbnMnKTtcbiAgICAgIGNvbmRpdGlvbmFsLmFkZENvbnRyb2woJ2NvbmRpdGlvbnMnLCB0aGlzLmZiLmFycmF5KFt0aGlzLmRlZmF1bHRPcGVyYW5kXSkpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQob3JpZ2luYWxTdGF0ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgY29sdW1uIHZhbHVlcyB0byBkaXNwbGF5IG9uIHRoZSBsaXN0LlxuICAgKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkXG4gICAqIDIuIFNpbmNlIHdlIGFsc28gd2FudCB0byBzaG93IHZhbHVlcyB0aGF0IHdlcmUgZmlsdGVyZWQgYnkgdGhpcyBjb2x1bW4gZmlsdGVyIHdlIGFyZSBpdGVyYXRpbmcgYWxsIHRoZSByb3dzXG4gICAqIChiZWZvcmUgdGhlIGZpbHRlcmluZyksIGZpbmRpbmcgd2hpY2ggd2VyZSByZW1vdmVkIGJ5IHRoaXMgY29sdW1uJ3MgZmlsdGVyIGFuZCBhZGRpbmcgdGhlbSBiYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb2x1bW5WYWx1ZXMoKTogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZVtdIHtcbiAgICBsZXQgdmFsdWVzOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIGNvbnN0IGRpc3BsYXllZFJvdyA9IHt9O1xuICAgIGNvbnN0IGJ5VmFsdWVUeXBlID0gZmlsdGVyVmFsdWUgJiYgZmlsdGVyVmFsdWUuYnlWYWx1ZSAmJiBmaWx0ZXJWYWx1ZS5ieVZhbHVlLmNvbmRpdGlvbjtcbiAgICBjb25zdCBhcGkgPSB0aGlzLmdyaWRRdWVyeS5hcGkuZ3JpZDtcbiAgICBjb25zdCBnZXRWYWx1ZUN1cnJpZWQgPSBjdXJyeSh0aGlzLmdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUpKHRoaXMuY29sRmllbGQsIGFwaSwgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIpO1xuICAgIC8qKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkICovXG4gICAgaWYgKHRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgYXBpLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KHJvdyA9PiB7XG4gICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgZGlzcGxheWVkUm93W3Jvdy5pZF0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIFdlIG9ubHkgZGlzcGxheSB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBsaXN0ICovXG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IGFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gYXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VTaXplICogY3VycmVudFBhZ2U7XG4gICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICAgIGFwaS5mb3JFYWNoTm9kZShyb3cgPT4ge1xuICAgICAgICBjb25zdCB7IHJvd0luZGV4IH0gPSByb3c7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSBzdGFydEluZGV4ICYmIHJvd0luZGV4IDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiAyLiBBZGQgYmFjayB2YWx1ZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIGJ5IHRoaXMgY29sdW1uICovXG4gICAgaWYgKGJ5VmFsdWVUeXBlKSB7XG4gICAgICBpZiAoYnlWYWx1ZVR5cGUgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyIGFzIChwYXJhbXM6IGFueSkgPT4gc3RyaW5nO1xuICAgICAgICBjb25zdCBjdXJyRmlsdGVyVmFsdWVzID0gZmlsdGVyVmFsdWUuYnlWYWx1ZS52YWx1ZXMubWFwKCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9KSA6IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdChjdXJyRmlsdGVyVmFsdWVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uYWwgfSA9IHRoaXMuY29sRmlsdGVyO1xuICAgICAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpLFxuICAgICAgICAgIFt0aGlzLmNvbEZpZWxkXTogeyBjb25kaXRpb25hbCB9XG4gICAgICAgIH07XG4gICAgICAgIGFwaS5mb3JFYWNoTGVhZk5vZGUocm93ID0+IHtcbiAgICAgICAgICBpZiAoIWRpc3BsYXllZFJvdy5oYXNPd25Qcm9wZXJ0eShyb3cuaWQpICYmIHZhbGlkYXRlRmlsdGVyKHsgcm93LCBhcGkgfSwgYWN0aXZlRmlsdGVycykpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5pcUJ5KHZhbHVlcywgJ3ZhbHVlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUoXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBhcGk6IEdyaWRBcGksXG4gICAgLy8gVE9ETzogZm9sbG93dXA6IGh0dHBzOi8vYWctZ3JpZC56ZW5kZXNrLmNvbS9oYy9lbi11cy9yZXF1ZXN0cy8xMTAxOVxuICAgIGZvcm1hdHRlcjogKHBhcmFtczogYW55KSA9PiBzdHJpbmcsXG4gICAgcm93OiBSb3dOb2RlXG4gICk6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUge1xuICAgIGNvbnN0IHZhbHVlID0gYXBpLmdldFZhbHVlKGZpZWxkLCByb3cpO1xuICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTA5NjM/cGFnZT0xXG4gICAgcmV0dXJuIHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlOiBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9IGFzIGFueSkgOiB2YWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbEZpbHRlcihcbiAgICBmaWx0ZXI6IERhdG9HcmlkRmlsdGVyLFxuICAgIHsgb3BlcmF0b3IsIGNvbmRpdGlvbnMgfTogeyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlczsgY29uZGl0aW9uczogQ29uZGl0aW9ucyB9XG4gICkge1xuICAgIGNvbnN0IHZhbGlkQ29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuZmlsdGVyKCh7IHZhbHVlLCB0eXBlIH0pID0+ICFpc05pbCh2YWx1ZSkgfHwgdGhpcy5pc0VtcHR5T3BlcmFuZCh0eXBlLm9wZXJhbmQpKTtcbiAgICBpZiAodmFsaWRDb25kaXRpb25zLmxlbmd0aCkge1xuICAgICAgZmlsdGVyLmNvbmRpdGlvbmFsID0ge1xuICAgICAgICB0eXBlOiAodGhpcy5jb2xEZWYuZmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIHx8IERhdG9HcmlkRmlsdGVyVHlwZXMuU3RyaW5nLFxuICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9ucy5tYXAoKHsgdmFsdWUsIHR5cGUsIHJhbmdlRW5kIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlID0geyBjb25kaXRpb246IHR5cGUub3BlcmFuZCwgdmFsdWUgfTtcbiAgICAgICAgICBpZiAodHlwZS5vcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHsgLi4uYmFzZSwgcmFuZ2VFbmQgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB2YWx1ZSBhcyBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHsgY29uZGl0aW9uOiB0eXBlLm9wZXJhbmQsIHZhbHVlOiBmcm9tIGFzIHN0cmluZywgcmFuZ2VFbmQ6IHRvIGFzIHN0cmluZyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYmFzZSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRCeVZhbHVlRmlsdGVyKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsIGJ5VmFsdWU6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICBpZiAodGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICBjb25zdCB2YWx1ZXNDb3VudCA9IHRoaXMuY29sdW1uVmFsdWVzLmxlbmd0aDtcbiAgICAgIGlmIChieVZhbHVlLmxlbmd0aCAhPT0gdmFsdWVzQ291bnQpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgICBieVZhbHVlLmxlbmd0aCA8IHZhbHVlc0NvdW50IC8gMiA/IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVDtcbiAgICAgICAgZmlsdGVyLmJ5VmFsdWUgPSB7XG4gICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgIHZhbHVlczogY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUID8gYnlWYWx1ZSA6IHRoaXMuZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoYnlWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLmV4Y2x1ZGVkVmFsdWVzLnZhbHVlcygpKTtcbiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXIuYnlWYWx1ZSA9IHtcbiAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgICAgIHZhbHVlc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCeVZhbHVlRmlsdGVyKGJ5VmFsdWU6IERhdG9HcmlkRmlsdGVyWydieVZhbHVlJ10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdW10ge1xuICAgIGlmICghYnlWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLnZhbHVlcy5sZW5ndGggJiYgdGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgdGhpcy5hY3RpdmVBY2NvcmRpb25JZCA9IDE7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLmNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QpIHtcbiAgICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZWRWYWx1ZXMgPSBuZXcgU2V0KGJ5VmFsdWUudmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbdGhpcy5nZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhieVZhbHVlLnZhbHVlcyldO1xuICAgIH1cbiAgICByZXR1cm4gW2J5VmFsdWUudmFsdWVzXTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25hbEZpbHRlcihjb25kaXRpb25hbDogRGF0b0dyaWRGaWx0ZXJbJ2NvbmRpdGlvbmFsJ10pOiBGb3JtR3JvdXAge1xuICAgIGlmICghY29uZGl0aW9uYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDb25kaXRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgb3BlcmF0b3I6IFtjb25kaXRpb25hbC5vcGVyYXRvcl0sXG4gICAgICBjb25kaXRpb25zOiB0aGlzLmZiLmFycmF5KHRoaXMuYnVpbGRDb25kaXRpb25zKGNvbmRpdGlvbmFsLmNvbmRpdGlvbnMpKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmRpdGlvbnMoY29uZGl0aW9uczogKERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uIHwgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbilbXSk6IEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gY29uZGl0aW9ucy5tYXAoY29uZGl0aW9uID0+IHtcbiAgICAgIGNvbnN0IHsgY29uZGl0aW9uOiBjdXJyZW50T3BlcmFuZCwgdmFsdWUgfSA9IGNvbmRpdGlvbjtcbiAgICAgIGNvbnN0IGdyb3VwID0ge1xuICAgICAgICB0eXBlOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zLmZpbmRJbmRleCgoeyBvcGVyYW5kIH0pID0+IG9wZXJhbmQgPT09IGN1cnJlbnRPcGVyYW5kKSxcbiAgICAgICAgICAgIG9wZXJhbmQ6IGN1cnJlbnRPcGVyYW5kLFxuICAgICAgICAgICAgbGFiZWw6IGBjb3JlLiR7Y3VycmVudE9wZXJhbmR9YFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWU6IFt2YWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHJhbmdlRW5kOiBudWxsXG4gICAgICB9O1xuICAgICAgaWYgKGlzUmFuZ2VDb25kaXRpb248RGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbj4oY29uZGl0aW9uKSkge1xuICAgICAgICBncm91cC5yYW5nZUVuZCA9IFtjb25kaXRpb24ucmFuZ2VFbmQsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICBncm91cC52YWx1ZSA9IFt7IGZyb206IGNvbmRpdGlvbi52YWx1ZSBhcyBzdHJpbmcsIHRvOiBjb25kaXRpb24ucmFuZ2VFbmQgYXMgc3RyaW5nIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZ3JvdXApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIHJhbmdlIGlzIG5vdCByZXF1aXJlZCBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIG1ha2UgaXQgcmVxdWlyZWQgb25jZSB0aGlzIG9wZXJhbmQgaXMgc2VsZWN0ZWQuXG4gICAqICovXG4gIHByaXZhdGUgcmVnaXN0ZXJPcGVyYW5kTGlzdGVuZXJzKCkge1xuICAgIGlmICghdGhpcy5jb25kaXRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29uZGl0aW9ucy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGhpcy5jb25kaXRpb25zLmxlbmd0aCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbmRpdGlvbnMubGVuZ3RoKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZXMgPSB0aGlzLmNvbmRpdGlvbnMuY29udHJvbHMubWFwKChncm91cDogRm9ybUdyb3VwLCBpbmRleCkgPT5cbiAgICAgICAgICAgIGdyb3VwLmdldCgndHlwZScpLnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgodmFsdWU6IENvbmRpdGlvbk9wdGlvbikgPT4gKHsgdmFsdWUsIGluZGV4IH0pKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBtZXJnZSguLi52YWx1ZUNoYW5nZXMpO1xuICAgICAgICB9KSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgdmFsdWU6IHsgb3BlcmFuZCB9LCBpbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgaW5kZXgsIGluUmFuZ2U6IG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFIH07XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRGF0ZUlucHV0KHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLk51bWJlcikge1xuICAgICAgICAgIHRoaXMudXBkYXRlTnVtYmVySW5wdXQocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQ29udHJvbFZhbGlkYXRvcihvcGVyYW5kLCBpbmRleCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZUlucHV0KHsgaW5SYW5nZSwgaW5kZXggfSkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgndmFsdWUnKTtcbiAgICBpZiAoY29udHJvbC5kaXJ0eSkge1xuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gY29udHJvbDtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaW5SYW5nZSA/IHsgZnJvbTogdmFsdWUsIHRvOiB2YWx1ZSB9IDogdmFsdWUuZnJvbTtcbiAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVOdW1iZXJJbnB1dCh7IGluUmFuZ2UsIGluZGV4IH0pIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBpblJhbmdlID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGw7XG4gICAgY29uc3QgcmFuZ2VFbmQgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgncmFuZ2VFbmQnKTtcbiAgICByYW5nZUVuZC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgcmFuZ2VFbmQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZUNvbnRyb2xWYWxpZGF0b3Iob3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSAhdGhpcy5pc0VtcHR5T3BlcmFuZChvcGVyYW5kKSA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsO1xuICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpIGFzIEZvcm1Db250cm9sO1xuICAgIHZhbHVlQ29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgdmFsdWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbXB0eU9wZXJhbmQob3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgfHwgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VNUFRZO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmluZ0FycmF5KHZhbHVlOiAoc3RyaW5nIHwgTGlzdEl0ZW0pW10pOiB2YWx1ZSBpcyBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlWzBdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVzRnJvbVNlcnZlcihzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWRpbmdMaXN0ID0gdHJ1ZTtcbiAgICB0aGlzLmxpc3RPcHRpb25zID0gW107XG4gICAgY29uc3QgcGFyYW1zOiBQYXJ0aWFsPERhdG9HcmlkR2V0Um93c1BhcmFtcz4gPSB7XG4gICAgICBmYWlsQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTGlzdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlcnZlclNlYXJjaEVycm9yZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBzdWNjZXNzQ2FsbGJhY2s6IGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZsYXREYXRhID0gZGF0YS5tYXAodmFsdWUgPT4gdmFsdWVbdGhpcy5jb2xGaWVsZF0pO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gZmxhdERhdGEubWFwKG1hcFRvTGlzdEl0ZW0pO1xuICAgICAgICB0aGlzLnBhdGNoQW5kUmVSZWdpc3RlcihmbGF0RGF0YSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBzZXJ2ZXJDb25maWc6IHtcbiAgICAgICAgcGFnZVNpemU6IDMwLFxuICAgICAgICBwYWdlTnVtYmVyOiAxLFxuICAgICAgICBjb2x1bW5GaWx0ZXJzOiB7XG4gICAgICAgICAgW3RoaXMuY29sRmllbGRdOiB7XG4gICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgICBmaWx0ZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLkNPTlRBSU5TLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hUZXJtXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNvcnQ6IFtdLFxuICAgICAgICBjb2x1bW5zVG9SZXR1cm46IFt0aGlzLmNvbEZpZWxkXSxcbiAgICAgICAgZGlzdGluY3RSZXN1bHRzOiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLl9vcmlnaW5hbEdldFJvd3MocGFyYW1zIGFzIGFueSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyogV2hlbiBzZWFyY2hpbmcgdGhlIGJ5IHZhbHVlIGZpbHRlciBvbiBzZXJ2ZXIgc2lkZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29udHJvbCB3aXRoIHRoZSBuZXcgdmFsdWVzIGFuZCByZS1yZWdpc3RlciB0byB0aGUgY2hhbmdlcyAqL1xuICBwcml2YXRlIHBhdGNoQW5kUmVSZWdpc3RlcihkYXRhOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5ieVZhbHVlQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMuZ2V0Tm9uRXhjbHVkZWRWYWx1ZXMoZGF0YSkpO1xuICAgIHRoaXMucmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKSB7XG4gICAgY29uc3QgYnlWYWx1ZSA9IHRoaXMuYnlWYWx1ZUNvbnRyb2w7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uID0gYnlWYWx1ZS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoYnlWYWx1ZS52YWx1ZSksXG4gICAgICAgIHBhaXJ3aXNlKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtwcmV2LCBjdXJyZW50XSkgPT4ge1xuICAgICAgICBjb25zdCBhZGRUb0V4Y2x1ZGVkID0gY3VycmVudC5sZW5ndGggPCBwcmV2Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGlmZiA9IGFkZFRvRXhjbHVkZWQgPyBkaWZmZXJlbmNlKHByZXYsIGN1cnJlbnQpIDogZGlmZmVyZW5jZShjdXJyZW50LCBwcmV2KTtcbiAgICAgICAgZGlmZi5mb3JFYWNoKHYgPT4gKGFkZFRvRXhjbHVkZWQgPyB0aGlzLmV4Y2x1ZGVkVmFsdWVzLmFkZCh2KSA6IHRoaXMuZXhjbHVkZWRWYWx1ZXMuZGVsZXRlKHYpKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Tm9uRXhjbHVkZWRWYWx1ZXMoZGF0YTogKHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcih2ID0+ICF0aGlzLmV4Y2x1ZGVkVmFsdWVzLmhhcyh2KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBpdm90IGRpbWVuc2lvbnMgYXMgZGVmaW5lZCBpbiB0aGUgcGFyZW50IGdyb3VwIGNvbHVtbiBoZWFkZXIgY2xhc3MuXG4gICAqL1xuICBwcml2YXRlIGdldFBpdm90RmllbGRzKHBhcmVudDogQ29sdW1uR3JvdXAsIGZpZWxkcyA9IFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGdyYW5kUGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuICAgIGNvbnN0IGhlYWRlckNsYXNzID0gcGFyZW50LmdldE9yaWdpbmFsQ29sdW1uR3JvdXAoKS5nZXRDb2xHcm91cERlZigpLmhlYWRlckNsYXNzO1xuXG4gICAgaWYgKGdyYW5kUGFyZW50KSB7XG4gICAgICB0aGlzLmdldFBpdm90RmllbGRzKGdyYW5kUGFyZW50LCBmaWVsZHMpO1xuICAgIH1cblxuICAgIGhlYWRlckNsYXNzICYmIGZpZWxkcy5wdXNoKGhlYWRlckNsYXNzWzBdKTtcblxuICAgIHJldHVybiBmaWVsZHM7XG4gIH1cbn1cbiJdfQ==
|
|
691
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFFakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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QUEyQixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0RBQWMsR0FBdEIsVUFBdUIsTUFBbUIsRUFBRSxNQUFXO1FBQVgsdUJBQUEsRUFBQSxXQUFXO1FBQ3JELElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QyxJQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFFakYsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMxQztRQUVELFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O2dCQXhtQmUsVUFBVTtnQkFDUCxVQUFVO2dCQUNmLFdBQVc7Z0JBQ0osb0JBQW9CO2dCQUMxQixpQkFBaUI7O0lBeENyQix1QkFBdUI7UUFObkMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixtdGFBQTJDO1lBRTNDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOztTQUNoRCxDQUFDO3lDQXFDZ0IsVUFBVTtZQUNQLFVBQVU7WUFDZixXQUFXO1lBQ0osb0JBQW9CO1lBQzFCLGlCQUFpQjtPQXhDckIsdUJBQXVCLENBNm9CbkM7SUFBRCw4QkFBQztDQUFBLEFBN29CRCxJQTZvQkM7U0E3b0JZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLFxuICBEYXRvR3JpZEZpbHRlcixcbiAgRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24sXG4gIERhdG9HcmlkRmlsdGVyT3B0aW9uc01hcCxcbiAgRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucyxcbiAgRGF0b0dyaWRGaWx0ZXJUeXBlcyxcbiAgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRTdHJpbmdGaWx0ZXJPcHRpb25zLFxuICBpc1JhbmdlQ29uZGl0aW9uLFxuICBMaXN0SXRlbVxufSBmcm9tICcuL2dyaWQtZmlsdGVyLnR5cGVzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBvcG92ZXJSZWYgfSBmcm9tICcuLi8uLi9wb3BvdmVyL3BvcG92ZXItcmVmJztcbmltcG9ydCB7IEdyaWRRdWVyeSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5xdWVyeSc7XG5pbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBwYWlyd2lzZSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRpZmZlcmVuY2UsIGlzQXJyYXlWYWx1ZXNFcXVhbCwgdW5pcUJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBPcGVyYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vb3BlcmF0b3ItdG9nZ2xlci9vcGVyYXRvci10b2dnbGVyLnR5cGVzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgdmFsaWRhdGVGaWx0ZXIgfSBmcm9tICcuL2ZpbHRlci12YWxpZGF0b3InO1xuaW1wb3J0IHsgRGF0b0dyaWRDb2x1bW5EZWYsIERhdG9HcmlkR2V0Um93c1BhcmFtcyB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi50eXBlcyc7XG5pbXBvcnQgeyB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ25neC10YWtlLXVudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgRGF0b0NvbHVtbk1lbnVEYXRhIH0gZnJvbSAnLi4vZ3JpZC1jb2x1bW4taGVhZGVyL2dyaWQtY29sdW1uLWhlYWRlci50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW4sIENvbHVtbkdyb3VwLCBHcmlkQXBpLCBSb3dOb2RlIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi4vLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIudHlwZXMnO1xuaW1wb3J0IHsgY3VycnkgfSBmcm9tICcuLi8uLi91dGlscy9mdW5jdGlvbic7XG5pbXBvcnQgeyBTb3J0TGFiZWxUeXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2VhcmNoLXJlc3VsdHMucGlwZSc7XG5pbXBvcnQgeyBIb3RLZXlDb25maWcgfSBmcm9tICcuLi8uLi9ob3RrZXlzL2hvdGtleS50eXBlcyc7XG5pbXBvcnQgeyBmb3JtYXRLZXlzIH0gZnJvbSAnLi4vLi4vaG90a2V5cy9ob3RrZXlzLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBnZXRDb2xGaWVsZCB9IGZyb20gJy4uL2dyaWQtc3RvcmUvdXRpbCc7XG5cbmNvbnN0IG1hcFRvVmFsdWUgPSAoeyB2YWx1ZSB9KSA9PiB2YWx1ZTtcbmNvbnN0IG1hcFRvTGlzdEl0ZW0gPSB2YWwgPT4gKHsgaWQ6IHZhbCwgbGFiZWw6IGlzTmlsKHZhbCkgPyBgKEVtcHR5KWAgOiBgJHt2YWx9YC50cmltKCksIHZhbHVlOiB2YWwgfSk7XG5jb25zdCBtYXBUb0xpc3RJdGVtV2l0aEZvcm1hdHRlZCA9ICh7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSB9LCBrZXk/KSA9PiAoe1xuICBpZDoga2V5ICYmIHZhbHVlID8gdmFsdWVba2V5XSA6IHZhbHVlLFxuICBsYWJlbDogaXNOaWwoZm9ybWF0dGVkVmFsdWUpID8gYChFbXB0eSlgIDogYCR7a2V5ID8gZm9ybWF0dGVkVmFsdWVba2V5XSA6IGZvcm1hdHRlZFZhbHVlfWAudHJpbSgpLFxuICB2YWx1ZToga2V5ICYmIHZhbHVlID8gdmFsdWVba2V5XSA6IHZhbHVlXG59KTtcblxudHlwZSBDb25kaXRpb25zID0ge1xuICB0eXBlOiB7XG4gICAgb3BlcmFuZDogRXhjbHVkZTxEYXRvRmlsdGVyQ29uZGl0aW9ucywgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCB8IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUPjtcbiAgfTtcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgcmFuZ2VFbmQ6IHN0cmluZyB8IG51bWJlcjtcbn1bXTtcblxudHlwZSBDb25kaXRpb25PcHRpb24gPSB7IGlkOiBudW1iZXI7IGxhYmVsOiBzdHJpbmc7IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zIH07XG5cbnR5cGUgVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSA9IHsgdmFsdWU6IHN0cmluZyB8IG51bWJlcjsgZm9ybWF0dGVkVmFsdWU6IHN0cmluZyB8IG51bWJlciB9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0b0dyaWRGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBncmlkRmlsdGVyVHlwZXMgPSBEYXRvR3JpZEZpbHRlclR5cGVzO1xuICBmaWx0ZXJUeXBlOiBEYXRvR3JpZEZpbHRlclR5cGVzO1xuICBjb2x1bW5WYWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXTtcbiAgbGlzdE9wdGlvbnM6IExpc3RJdGVtW10gPSBbXTtcbiAgY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zOiBDb25kaXRpb25PcHRpb25bXTtcbiAgaGFzRmlsdGVyJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZmlsdGVyRm9ybTogRm9ybUdyb3VwO1xuICBmaWx0ZXJTZWN0aW9uczogeyBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZV0/OiBib29sZWFuOyBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbF0/OiBib29sZWFuIH0gPSB7XG4gICAgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQnlfVmFsdWVdOiB0cnVlLFxuICAgIFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsXTogdHJ1ZVxuICB9O1xuICByYW5nZU9wZXJhbmQgPSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRTtcbiAgbGlzdExhYmVsVHlwZTogU29ydExhYmVsVHlwZTtcbiAgbGlzdFNvcnRCeUtleTogc3RyaW5nO1xuICBpc0NsaWVudFNpZGVHcmlkID0gZmFsc2U7XG4gIGxpc3RTZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIGxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gIHNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgYXBwbHlIb3RLZXlDb25maWc6IEhvdEtleUNvbmZpZyA9IHtcbiAgICBrZXlzOiAnbWV0YS5lbnRlcicsXG4gICAgaGFuZGxlcjogKCkgPT4gdGhpcy5jbG9zZVBvcFVwKCksXG4gICAgZGVzY3JpcHRpb246ICdjb3JlLmFwcGx5LWZpbHRlcnMnXG4gIH07XG4gIGhvdEtleVRvb2x0aXAgPSBmb3JtYXRLZXlzKHRoaXMuYXBwbHlIb3RLZXlDb25maWcua2V5cyk7XG4gIGFjdGl2ZUFjY29yZGlvbklkID0gMDtcbiAga2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlcjogYm9vbGVhbjtcblxuICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5O1xuICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZTtcbiAgcHJpdmF0ZSBjb2xGaWVsZDogc3RyaW5nO1xuICBwcml2YXRlIGV4Y2x1ZGVkVmFsdWVzID0gbmV3IFNldDxzdHJpbmcgfCBudW1iZXI+KCk7XG4gIHByaXZhdGUgYnlWYWx1ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBpdm90Q29sdW1uOiBDb2x1bW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcG9wb3ZlcjogUG9wb3ZlclJlZjxEYXRvQ29sdW1uTWVudURhdGE+LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIGdldCBieVZhbHVlQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdieVZhbHVlJyk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uc0NvbnRyb2xzKCk6IEFic3RyYWN0Q29udHJvbFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNPcGVyYXRvcigpOiBPcGVyYXRvclR5cGVzIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwub3BlcmF0b3InKS52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRPcGVyYW5kKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgdHlwZTogW3RoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdXSxcbiAgICAgIHZhbHVlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICByYW5nZUVuZDogW251bGxdXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1ByZWRlZmluZWRMaXN0SXRlbXMoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzQ29uZmlnID0ge30gfSA9IHRoaXMuY29sRGVmO1xuICAgIHJldHVybiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzICYmIHR5cGVvZiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzWzBdID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRDb25kaXRpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBvcGVyYXRvcjogW09wZXJhdG9yVHlwZXMuQU5EXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkoW3RoaXMuZGVmYXVsdE9wZXJhbmRdKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJ5VmFsdWUoKSB7XG4gICAgcmV0dXJuIFt0aGlzLmNvbHVtblZhbHVlc107XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Rm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZpbHRlcnM6IHsgYnlWYWx1ZT87IGNvbmRpdGlvbmFsPyB9ID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlcnMuYnlWYWx1ZSA9IHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBmaWx0ZXJzLmNvbmRpdGlvbmFsID0gdGhpcy5kZWZhdWx0Q29uZGl0aW9uYWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29uZGl0aW9ucygpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbC5jb25kaXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29sRmlsdGVyKCk6IERhdG9HcmlkRmlsdGVyIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKVt0aGlzLmNvbEZpZWxkXTtcblxuICAgIHJldHVybiBmaWx0ZXIgJiYgaXNBcnJheVZhbHVlc0VxdWFsKHRoaXMucGl2b3RLZXlzLCBmaWx0ZXIucGl2b3RLZXlzKSA/IGZpbHRlciA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2xEZWYoKTogRGF0b0dyaWRDb2x1bW5EZWYge1xuICAgIHJldHVybiB0aGlzLnBvcG92ZXIuZGF0YS5jb2x1bW4uZ2V0Q29sRGVmKCkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gIH1cblxuICBwcml2YXRlIGdldCBwaXZvdEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbERlZi5waXZvdEtleXMgfHwgW107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGdyaWRTZXJ2aWNlLCBncmlkUXVlcnkgfSA9IHRoaXMucG9wb3Zlci5kYXRhO1xuICAgIGNvbnN0IHsgZmlsdGVyLCBmaWx0ZXJzQ29uZmlnID0ge30sIHBpdm90VmFsdWVDb2x1bW4sIHBpdm90S2V5cyB9ID0gdGhpcy5jb2xEZWY7XG4gICAgY29uc3QgY29sRGVmcyA9IGdyaWRRdWVyeS5hcGkuY29sdW1ucy5nZXRBbGxDb2x1bW5zKCkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZ2V0Q29sRGVmKCkpO1xuXG4gICAgdGhpcy5jb2xGaWVsZCA9IGdldENvbEZpZWxkKHRoaXMuY29sRGVmKTtcblxuICAgIGNvbnN0IGNvbERlZiA9IGNvbERlZnMuZmluZChjb2xEZWYgPT4gY29sRGVmLmZpZWxkID09PSB0aGlzLmNvbEZpZWxkKTtcblxuICAgIHRoaXMucGl2b3RDb2x1bW4gPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0U2Vjb25kYXJ5UGl2b3RDb2x1bW4ocGl2b3RLZXlzLCBwaXZvdFZhbHVlQ29sdW1uKTtcblxuICAgIGlmIChmaWx0ZXJzQ29uZmlnLnNlY3Rpb25zKSB7XG4gICAgICB0aGlzLmZpbHRlclNlY3Rpb25zID0geyBbZmlsdGVyc0NvbmZpZy5zZWN0aW9uc106IHRydWUgfTtcbiAgICB9XG4gICAgdGhpcy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyID1cbiAgICAgIGZpbHRlcnNDb25maWcua2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlciAmJiAhaXNFbXB0eShmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzKTtcblxuICAgIGNvbnN0IGNvbEZpbHRlciA9IGZpbHRlciB8fCBjb2xEZWYuZmlsdGVyO1xuICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXBbY29sRmlsdGVyIGFzIHN0cmluZ107XG4gICAgdGhpcy5maWx0ZXJUeXBlID0gZmlsdGVyT3B0aW9ucyA/IChjb2xGaWx0ZXIgYXMgRGF0b0dyaWRGaWx0ZXJUeXBlcykgOiBEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZztcbiAgICB0aGlzLmxpc3RMYWJlbFR5cGUgPSB0aGlzLmZpbHRlclR5cGUudG9Mb3dlckNhc2UoKSBhcyBTb3J0TGFiZWxUeXBlO1xuICAgIHRoaXMubGlzdFNvcnRCeUtleSA9IHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIgJiYgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIgPyAnaWQnIDogJ2xhYmVsJztcbiAgICB0aGlzLmdyaWRRdWVyeSA9IGdyaWRRdWVyeTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlID0gZ3JpZFNlcnZpY2U7XG4gICAgdGhpcy5oYXNGaWx0ZXIkID0gdGhpcy5ncmlkUXVlcnlcbiAgICAgIC5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2V0dGluZ3MuZmlsdGVyW3RoaXMuY29sRmllbGRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgIHJldHVybiAhaXNOaWwoZmlsdGVyKSAmJiBpc0FycmF5VmFsdWVzRXF1YWwoZmlsdGVyLnBpdm90S2V5cywgdGhpcy5waXZvdEtleXMpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IERhdG9GaWx0ZXJDb25kaXRpb25zW10gPSBmaWx0ZXJPcHRpb25zIHx8IERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucztcbiAgICAgIGlmIChmaWx0ZXJzQ29uZmlnLnNob3dFbXB0eUNvbmRpdGlvbnMpIHtcbiAgICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IFsuLi5maWx0ZXJDb25kaXRpb25zLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VNUFRZXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zID0gZmlsdGVyQ29uZGl0aW9ucy5tYXAoKG9wZXJhbmQsIGlkKSA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAgb3BlcmFuZCxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybShgY29yZS4ke3RoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlID8gJ0RBVEVfJyA6ICcnfSR7b3BlcmFuZH1gKVxuICAgICAgfSkpO1xuICAgIH1cbiAgICBsZXQgb3JpZ2luYWxPcHRpb25zO1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBjb25zdCB7IHByZWRlZmluZWRMaXN0VmFsdWVzIH0gPSBmaWx0ZXJzQ29uZmlnO1xuICAgICAgdGhpcy5pc0NsaWVudFNpZGVHcmlkID0gIWlzTmlsKHByZWRlZmluZWRMaXN0VmFsdWVzKSB8fCAhZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZTtcbiAgICAgIGlmICghcHJlZGVmaW5lZExpc3RWYWx1ZXMgfHwgdGhpcy5pc1N0cmluZ0FycmF5KHByZWRlZmluZWRMaXN0VmFsdWVzKSkge1xuICAgICAgICBjb25zdCByYXdWYWx1ZXMgPSBwcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKHJhd1ZhbHVlcykge1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSByYXdWYWx1ZXMubWFwKG1hcFRvTGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbHVtblZhbHVlcyA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKCk7XG4gICAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSBjb2x1bW5WYWx1ZXMubWFwKCh7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhaXNOaWwodGhpcy5waXZvdENvbHVtbikgJiYgdmFsdWUgPyB2YWx1ZVt0aGlzLmNvbEZpZWxkXSA6IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBjb2x1bW5WYWx1ZXMubWFwKGNvbFZhbHVlID0+XG4gICAgICAgICAgICBtYXBUb0xpc3RJdGVtV2l0aEZvcm1hdHRlZChjb2xWYWx1ZSwgIWlzTmlsKHRoaXMucGl2b3RDb2x1bW4pICYmIHRoaXMuY29sRmllbGQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgTGlzdEl0ZW1bXTtcbiAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSByYXdWYWx1ZXMubWFwKG1hcFRvVmFsdWUpO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzO1xuICAgICAgfVxuICAgICAgb3JpZ2luYWxPcHRpb25zID0gdGhpcy5saXN0T3B0aW9ucztcbiAgICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICAgIHRoaXMubGlzdFNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoc2VhcmNoVGVybTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXJ2ZXJTZWFyY2hFcnJvcmVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHNlYXJjaFRlcm0udHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IG9yaWdpbmFsT3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMucGF0Y2hBbmRSZVJlZ2lzdGVyKHRoaXMuY29sdW1uVmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZXNGcm9tU2VydmVyKHNlYXJjaFRlcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICB9XG5cbiAgY2xvc2VQb3BVcCgpIHtcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIHRoaXMucG9wb3Zlci5jbG9zZSgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS52YWxpZCAmJiB0aGlzLmZpbHRlckZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIGlmICh0aGlzLmZpbHRlckZvcm0uZGlydHkgJiYgKHRoaXMuZmlsdGVyRm9ybS52YWxpZCB8fCB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbCcpLnByaXN0aW5lKSkge1xuICAgICAgY29uc3QgeyBjb2x1bW4gfSA9IHRoaXMucG9wb3Zlci5kYXRhO1xuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcigpO1xuICAgICAgaXNFbXB0eShmaWx0ZXIpXG4gICAgICAgID8gdGhpcy5ncmlkU2VydmljZS5jbGVhckNvbHVtbkZpbHRlcih0aGlzLmNvbEZpZWxkKVxuICAgICAgICA6IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmlsdGVyKGNvbHVtbiwgZmlsdGVyKTtcblxuICAgICAgdGhpcy5ncmlkU2VydmljZS5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jbGVhckNvbHVtbkZpbHRlcih0aGlzLmNvbEZpZWxkKTtcbiAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmNvbmRpdGlvbnMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMuZmlsdGVyRm9ybS5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHRoaXMuY29uZGl0aW9ucy5wdXNoKHRoaXMuZGVmYXVsdE9wZXJhbmQpO1xuICB9XG5cbiAgZ2V0T3BlcmFuZFR5cGUoaTogbnVtYmVyKSB7XG4gICAgY29uc3QgY29uZGl0aW9uVHlwZSA9IHRoaXMuY29uZGl0aW9ucy5hdChpKS52YWx1ZS50eXBlO1xuICAgIHJldHVybiBjb25kaXRpb25UeXBlID8gY29uZGl0aW9uVHlwZS5vcGVyYW5kIDogbnVsbDtcbiAgfVxuXG4gIGlzQ29uZGl0aW9uYWxFbXB0eShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBjb25zdCBvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyA9XG4gICAgICBjb250cm9sICYmIGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS50eXBlID8gY29udHJvbC52YWx1ZS50eXBlLm9wZXJhbmQgOiBudWxsO1xuICAgIHJldHVybiB0aGlzLmlzRW1wdHlPcGVyYW5kKG9wZXJhbmQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uICYmIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0eXBlOiBcIkV4Y2x1ZGVcIlxuICAgKiBTZWxlY3RlZCB2YWx1ZXM6IEEsIEMsIERcbiAgICogQWxsIGxpc3Q6IEEsIEIsIEMsIERcbiAgICogUmVzdWx0OiBCXG4gICAqIEBwYXJhbSBpbmNsdWRlZEFyciAtVGhlIGxpc3Qgb2YgdmFsdWVzIHRvIGluY2x1ZGVcbiAgICogQHBhcmFtIGFzTGlzdEl0ZW0gLUluZGljYXRlcyBpZiB0aGUgcmVzcG9uc2UgbmVlZHMgdG8gYmUgYXMgc3RyaW5nIG9yIGFzIExpc3RJdGVtXG4gICAqL1xuICBwcml2YXRlIGdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGluY2x1ZGVkQXJyOiAoTGlzdEl0ZW0gfCBzdHJpbmcgfCBudW1iZXIpW10sIGFzTGlzdEl0ZW06IHRydWUpOiBMaXN0SXRlbVtdO1xuICBwcml2YXRlIGdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGluY2x1ZGVkQXJyOiAoTGlzdEl0ZW0gfCBzdHJpbmcgfCBudW1iZXIpW10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuICBwcml2YXRlIGdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKFxuICAgIGluY2x1ZGVkQXJyOiAoTGlzdEl0ZW0gfCBzdHJpbmcgfCBudW1iZXIpW10sXG4gICAgYXNMaXN0SXRlbSA9IGZhbHNlXG4gICk6IChzdHJpbmcgfCBudW1iZXIpW10gfCBMaXN0SXRlbVtdIHtcbiAgICBsZXQgaW5jbHVkZWRTZXQ7XG4gICAgaWYgKHRoaXMuaXNQcmVkZWZpbmVkTGlzdEl0ZW1zKSB7XG4gICAgICBjb25zdCBwcmVkZWZpbmVkTGlzdCA9IHRoaXMuY29sRGVmLmZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgTGlzdEl0ZW1bXTtcbiAgICAgIGluY2x1ZGVkU2V0ID0gbmV3IFNldChcbiAgICAgICAgaW5jbHVkZWRBcnIubWFwKHZhbCA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHByZWRlZmluZWRMaXN0LmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IHZhbCk7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmNsdWRlZFNldCA9IG5ldyBTZXQoaW5jbHVkZWRBcnIubWFwKHZhbCA9PiAoaXNPYmplY3Q8TGlzdEl0ZW0+KHZhbCkgPyB2YWwudmFsdWUgOiB2YWwpKSk7XG4gICAgfVxuICAgIGlmIChhc0xpc3RJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0T3B0aW9ucy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gIWluY2x1ZGVkU2V0Lmhhcyh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5WYWx1ZXMuZmlsdGVyKHZhbHVlID0+ICFpbmNsdWRlZFNldC5oYXModmFsdWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGaWx0ZXIoKTogRGF0b0dyaWRGaWx0ZXIge1xuICAgIGNvbnN0IHsgYnlWYWx1ZSwgY29uZGl0aW9uYWwgfSA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZTtcbiAgICBjb25zdCBmaWx0ZXI6IERhdG9HcmlkRmlsdGVyID0geyBjb2xJZDogdGhpcy5jb2xEZWYuY29sSWQgfTtcblxuICAgIGZpbHRlci5waXZvdEtleXMgPSB0aGlzLnBpdm90S2V5cztcblxuICAgIGlmICh0aGlzLnBpdm90Q29sdW1uKSB7XG4gICAgICBmaWx0ZXIucGl2b3RGaWVsZHNNYXAgPSB0aGlzLmdldFBpdm90RmllbGRzKHRoaXMucGl2b3RDb2x1bW4uZ2V0UGFyZW50KCkpLnJlZHVjZSgoZmllbGRNYXAsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5waXZvdEtleXNbaW5kZXhdKSB7XG4gICAgICAgICAgZmllbGRNYXBbZmllbGRdID0gdGhpcy5waXZvdEtleXNbaW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkTWFwO1xuICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLnNldENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlciwgY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5zZXRCeVZhbHVlRmlsdGVyKGZpbHRlciwgYnlWYWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm0oKSB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLmNvbEZpbHRlcjtcbiAgICB0aGlzLmZpbHRlckZvcm0gPSBmaWx0ZXJWYWx1ZSA/IHRoaXMuYnVpbGRGb3JtRnJvbUZpbHRlcihmaWx0ZXJWYWx1ZSkgOiB0aGlzLmRlZmF1bHRGb3JtO1xuICAgIHRoaXMucmVnaXN0ZXJPcGVyYW5kTGlzdGVuZXJzKCk7XG4gICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQgJiYgdGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5yZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgZmlsdGVyIHZpZXcgZnJvbSBhIGdpdmVuIGZpbHRlclxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEZvcm1Gcm9tRmlsdGVyKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZpbHRlckdyb3VwID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlckdyb3VwWydjb25kaXRpb25hbCddID0gdGhpcy5idWlsZENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlci5jb25kaXRpb25hbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBmaWx0ZXJHcm91cFsnYnlWYWx1ZSddID0gdGhpcy5idWlsZEJ5VmFsdWVGaWx0ZXIoZmlsdGVyLmJ5VmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cChmaWx0ZXJHcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGZpbHRlciB2aWV3XG4gICAqL1xuICBwcml2YXRlIHJlc2V0Rm9ybSgpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0uc2V0RXJyb3JzKG51bGwpO1xuICAgIGxldCBvcmlnaW5hbFN0YXRlID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSB7IGJ5VmFsdWU6IHRoaXMuY29sdW1uVmFsdWVzIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBvcmlnaW5hbFN0YXRlID0ge1xuICAgICAgICAuLi5vcmlnaW5hbFN0YXRlLFxuICAgICAgICBjb25kaXRpb25hbDoge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBjb25kaXRpb25zOiBbeyB0eXBlOiB0aGlzLmNvbmRpdGlvbmFsRmlsdGVyT3B0aW9uc1swXSwgdmFsdWU6IG51bGwsIHJhbmdlRW5kOiBudWxsIH1dXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjb25kaXRpb25hbCA9IHRoaXMuZmlsdGVyRm9ybS5jb250cm9scy5jb25kaXRpb25hbCBhcyBGb3JtR3JvdXA7XG4gICAgICBjb25kaXRpb25hbC5yZW1vdmVDb250cm9sKCdjb25kaXRpb25zJyk7XG4gICAgICBjb25kaXRpb25hbC5hZGRDb250cm9sKCdjb25kaXRpb25zJywgdGhpcy5mYi5hcnJheShbdGhpcy5kZWZhdWx0T3BlcmFuZF0pKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJGb3JtLnJlc2V0KG9yaWdpbmFsU3RhdGUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmZpbHRlckZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGNvbHVtbiB2YWx1ZXMgdG8gZGlzcGxheSBvbiB0aGUgbGlzdC5cbiAgICogMS4gSXRlcmF0ZSBvdmVyIHRoZSByb3dzIGFmdGVyIGZpbHRlcmluZyBhbmQgc29ydGluZyB3YXMgYXBwbGllZFxuICAgKiAyLiBTaW5jZSB3ZSBhbHNvIHdhbnQgdG8gc2hvdyB2YWx1ZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIGJ5IHRoaXMgY29sdW1uIGZpbHRlciB3ZSBhcmUgaXRlcmF0aW5nIGFsbCB0aGUgcm93c1xuICAgKiAoYmVmb3JlIHRoZSBmaWx0ZXJpbmcpLCBmaW5kaW5nIHdoaWNoIHdlcmUgcmVtb3ZlZCBieSB0aGlzIGNvbHVtbidzIGZpbHRlciBhbmQgYWRkaW5nIHRoZW0gYmFjay5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q29sdW1uVmFsdWVzKCk6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWVbXSB7XG4gICAgbGV0IHZhbHVlczogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZVtdID0gW107XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLmNvbEZpbHRlcjtcbiAgICBjb25zdCBkaXNwbGF5ZWRSb3cgPSB7fTtcbiAgICBjb25zdCBieVZhbHVlVHlwZSA9IGZpbHRlclZhbHVlICYmIGZpbHRlclZhbHVlLmJ5VmFsdWUgJiYgZmlsdGVyVmFsdWUuYnlWYWx1ZS5jb25kaXRpb247XG4gICAgY29uc3QgYXBpID0gdGhpcy5ncmlkUXVlcnkuYXBpLmdyaWQ7XG4gICAgY29uc3QgZ2V0VmFsdWVDdXJyaWVkID0gY3VycnkodGhpcy5nZXRWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlKSh0aGlzLmNvbEZpZWxkLCBhcGksIHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyKTtcbiAgICAvKiogMS4gSXRlcmF0ZSBvdmVyIHRoZSByb3dzIGFmdGVyIGZpbHRlcmluZyBhbmQgc29ydGluZyB3YXMgYXBwbGllZCAqL1xuICAgIGlmICh0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgIGFwaS5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyQW5kU29ydChyb3cgPT4ge1xuICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgIGRpc3BsYXllZFJvd1tyb3cuaWRdID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBXZSBvbmx5IGRpc3BsYXkgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgbGlzdCAqL1xuICAgICAgY29uc3QgcGFnZVNpemUgPSBhcGkucGFnaW5hdGlvbkdldFBhZ2VTaXplKCk7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZSA9IGFwaS5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKTtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlU2l6ZSAqIGN1cnJlbnRQYWdlO1xuICAgICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgcGFnZVNpemU7XG4gICAgICBhcGkuZm9yRWFjaE5vZGUocm93ID0+IHtcbiAgICAgICAgY29uc3QgeyByb3dJbmRleCB9ID0gcm93O1xuICAgICAgICBpZiAocm93SW5kZXggPj0gc3RhcnRJbmRleCAmJiByb3dJbmRleCA8IGVuZEluZGV4KSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVDdXJyaWVkKHJvdykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogMi4gQWRkIGJhY2sgdmFsdWVzIHRoYXQgd2VyZSBmaWx0ZXJlZCBieSB0aGlzIGNvbHVtbiAqL1xuICAgIGlmIChieVZhbHVlVHlwZSkge1xuICAgICAgaWYgKGJ5VmFsdWVUeXBlID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLmNvbERlZi52YWx1ZUZvcm1hdHRlciBhcyAocGFyYW1zOiBhbnkpID0+IHN0cmluZztcbiAgICAgICAgY29uc3QgY3VyckZpbHRlclZhbHVlcyA9IGZpbHRlclZhbHVlLmJ5VmFsdWUudmFsdWVzLm1hcCgodmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVyID8gZm9ybWF0dGVyKHsgdmFsdWUgfSkgOiB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgZm9ybWF0dGVkVmFsdWUgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQoY3VyckZpbHRlclZhbHVlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGNvbmRpdGlvbmFsIH0gPSB0aGlzLmNvbEZpbHRlcjtcbiAgICAgICAgY29uc3QgYWN0aXZlRmlsdGVycyA9IHtcbiAgICAgICAgICAuLi50aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKSxcbiAgICAgICAgICBbdGhpcy5jb2xGaWVsZF06IHsgY29uZGl0aW9uYWwgfVxuICAgICAgICB9O1xuICAgICAgICBhcGkuZm9yRWFjaExlYWZOb2RlKHJvdyA9PiB7XG4gICAgICAgICAgaWYgKCFkaXNwbGF5ZWRSb3cuaGFzT3duUHJvcGVydHkocm93LmlkKSAmJiB2YWxpZGF0ZUZpbHRlcih7IHJvdywgYXBpIH0sIGFjdGl2ZUZpbHRlcnMpKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuaXFCeSh2YWx1ZXMsICd2YWx1ZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlKFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgYXBpOiBHcmlkQXBpLFxuICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTEwMTlcbiAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IGFueSkgPT4gc3RyaW5nLFxuICAgIHJvdzogUm93Tm9kZVxuICApOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlIHtcbiAgICBjb25zdCB2YWx1ZSA9IGFwaS5nZXRWYWx1ZShmaWVsZCwgcm93KTtcbiAgICAvLyBUT0RPOiBmb2xsb3d1cDogaHR0cHM6Ly9hZy1ncmlkLnplbmRlc2suY29tL2hjL2VuLXVzL3JlcXVlc3RzLzEwOTYzP3BhZ2U9MVxuICAgIHJldHVybiB7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZTogZm9ybWF0dGVyID8gZm9ybWF0dGVyKHsgdmFsdWUgfSBhcyBhbnkpIDogdmFsdWUgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29uZGl0aW9uYWxGaWx0ZXIoXG4gICAgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcixcbiAgICB7IG9wZXJhdG9yLCBjb25kaXRpb25zIH06IHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXM7IGNvbmRpdGlvbnM6IENvbmRpdGlvbnMgfVxuICApIHtcbiAgICBjb25zdCB2YWxpZENvbmRpdGlvbnMgPSBjb25kaXRpb25zLmZpbHRlcigoeyB2YWx1ZSwgdHlwZSB9KSA9PiAhaXNOaWwodmFsdWUpIHx8IHRoaXMuaXNFbXB0eU9wZXJhbmQodHlwZS5vcGVyYW5kKSk7XG4gICAgaWYgKHZhbGlkQ29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGZpbHRlci5jb25kaXRpb25hbCA9IHtcbiAgICAgICAgdHlwZTogKHRoaXMuY29sRGVmLmZpbHRlciBhcyBEYXRvR3JpZEZpbHRlclR5cGVzKSB8fCBEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZyxcbiAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgIGNvbmRpdGlvbnM6IGNvbmRpdGlvbnMubWFwKCh7IHZhbHVlLCB0eXBlLCByYW5nZUVuZCB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZSA9IHsgY29uZGl0aW9uOiB0eXBlLm9wZXJhbmQsIHZhbHVlIH07XG4gICAgICAgICAgaWYgKHR5cGUub3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB7IC4uLmJhc2UsIHJhbmdlRW5kIH07XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBmcm9tLCB0byB9ID0gdmFsdWUgYXMgRGF0ZVJhbmdlO1xuICAgICAgICAgICAgICByZXN1bHQgPSB7IGNvbmRpdGlvbjogdHlwZS5vcGVyYW5kLCB2YWx1ZTogZnJvbSBhcyBzdHJpbmcsIHJhbmdlRW5kOiB0byBhcyBzdHJpbmcgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJhc2UgYXMgRGF0b0dyaWRGaWx0ZXJDb25kaXRpb247XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0QnlWYWx1ZUZpbHRlcihmaWx0ZXI6IERhdG9HcmlkRmlsdGVyLCBieVZhbHVlOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XG4gICAgaWYgKHRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgY29uc3QgdmFsdWVzQ291bnQgPSB0aGlzLmNvbHVtblZhbHVlcy5sZW5ndGg7XG4gICAgICBpZiAoYnlWYWx1ZS5sZW5ndGggIT09IHZhbHVlc0NvdW50KSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9XG4gICAgICAgICAgYnlWYWx1ZS5sZW5ndGggPCB2YWx1ZXNDb3VudCAvIDIgPyBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIDogRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Q7XG4gICAgICAgIGZpbHRlci5ieVZhbHVlID0ge1xuICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICB2YWx1ZXM6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCA/IGJ5VmFsdWUgOiB0aGlzLmdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGJ5VmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5leGNsdWRlZFZhbHVlcy52YWx1ZXMoKSk7XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyLmJ5VmFsdWUgPSB7XG4gICAgICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVCxcbiAgICAgICAgICB2YWx1ZXNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQnlWYWx1ZUZpbHRlcihieVZhbHVlOiBEYXRvR3JpZEZpbHRlclsnYnlWYWx1ZSddKTogKHN0cmluZyB8IG51bWJlcilbXVtdIHtcbiAgICBpZiAoIWJ5VmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRCeVZhbHVlO1xuICAgIH1cbiAgICBpZiAoYnlWYWx1ZS52YWx1ZXMubGVuZ3RoICYmIHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIHRoaXMuYWN0aXZlQWNjb3JkaW9uSWQgPSAxO1xuICAgIH1cbiAgICBpZiAoYnlWYWx1ZS5jb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUKSB7XG4gICAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgICB0aGlzLmV4Y2x1ZGVkVmFsdWVzID0gbmV3IFNldChieVZhbHVlLnZhbHVlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3RoaXMuZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoYnlWYWx1ZS52YWx1ZXMpXTtcbiAgICB9XG4gICAgcmV0dXJuIFtieVZhbHVlLnZhbHVlc107XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9uYWxGaWx0ZXIoY29uZGl0aW9uYWw6IERhdG9HcmlkRmlsdGVyWydjb25kaXRpb25hbCddKTogRm9ybUdyb3VwIHtcbiAgICBpZiAoIWNvbmRpdGlvbmFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q29uZGl0aW9uYWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG9wZXJhdG9yOiBbY29uZGl0aW9uYWwub3BlcmF0b3JdLFxuICAgICAgY29uZGl0aW9uczogdGhpcy5mYi5hcnJheSh0aGlzLmJ1aWxkQ29uZGl0aW9ucyhjb25kaXRpb25hbC5jb25kaXRpb25zKSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25zKGNvbmRpdGlvbnM6IChEYXRvR3JpZEZpbHRlckNvbmRpdGlvbiB8IERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24pW10pOiBGb3JtR3JvdXBbXSB7XG4gICAgcmV0dXJuIGNvbmRpdGlvbnMubWFwKGNvbmRpdGlvbiA9PiB7XG4gICAgICBjb25zdCB7IGNvbmRpdGlvbjogY3VycmVudE9wZXJhbmQsIHZhbHVlIH0gPSBjb25kaXRpb247XG4gICAgICBjb25zdCBncm91cCA9IHtcbiAgICAgICAgdHlwZTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmNvbmRpdGlvbmFsRmlsdGVyT3B0aW9ucy5maW5kSW5kZXgoKHsgb3BlcmFuZCB9KSA9PiBvcGVyYW5kID09PSBjdXJyZW50T3BlcmFuZCksXG4gICAgICAgICAgICBvcGVyYW5kOiBjdXJyZW50T3BlcmFuZCxcbiAgICAgICAgICAgIGxhYmVsOiBgY29yZS4ke2N1cnJlbnRPcGVyYW5kfWBcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHZhbHVlOiBbdmFsdWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICByYW5nZUVuZDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlmIChpc1JhbmdlQ29uZGl0aW9uPERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24+KGNvbmRpdGlvbikpIHtcbiAgICAgICAgZ3JvdXAucmFuZ2VFbmQgPSBbY29uZGl0aW9uLnJhbmdlRW5kLCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgZ3JvdXAudmFsdWUgPSBbeyBmcm9tOiBjb25kaXRpb24udmFsdWUgYXMgc3RyaW5nLCB0bzogY29uZGl0aW9uLnJhbmdlRW5kIGFzIHN0cmluZyB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGdyb3VwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByYW5nZSBpcyBub3QgcmVxdWlyZWQgYnkgZGVmYXVsdCwgd2Ugd2FudCB0byBtYWtlIGl0IHJlcXVpcmVkIG9uY2UgdGhpcyBvcGVyYW5kIGlzIHNlbGVjdGVkLlxuICAgKiAqL1xuICBwcml2YXRlIHJlZ2lzdGVyT3BlcmFuZExpc3RlbmVycygpIHtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbmRpdGlvbnMudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMuY29uZGl0aW9ucy5sZW5ndGgpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5jb25kaXRpb25zLmxlbmd0aCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWVDaGFuZ2VzID0gdGhpcy5jb25kaXRpb25zLmNvbnRyb2xzLm1hcCgoZ3JvdXA6IEZvcm1Hcm91cCwgaW5kZXgpID0+XG4gICAgICAgICAgICBncm91cC5nZXQoJ3R5cGUnKS52YWx1ZUNoYW5nZXMucGlwZShtYXAoKHZhbHVlOiBDb25kaXRpb25PcHRpb24pID0+ICh7IHZhbHVlLCBpbmRleCB9KSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbWVyZ2UoLi4udmFsdWVDaGFuZ2VzKTtcbiAgICAgICAgfSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHZhbHVlOiB7IG9wZXJhbmQgfSwgaW5kZXggfSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IGluZGV4LCBpblJhbmdlOiBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSB9O1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZURhdGVJbnB1dChwYXJhbXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU51bWJlcklucHV0KHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZUNvbnRyb2xWYWxpZGF0b3Iob3BlcmFuZCwgaW5kZXgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGVJbnB1dCh7IGluUmFuZ2UsIGluZGV4IH0pIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJyk7XG4gICAgaWYgKGNvbnRyb2wuZGlydHkpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGNvbnRyb2w7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IGluUmFuZ2UgPyB7IGZyb206IHZhbHVlLCB0bzogdmFsdWUgfSA6IHZhbHVlLmZyb207XG4gICAgICBjb250cm9sLnBhdGNoVmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTnVtYmVySW5wdXQoeyBpblJhbmdlLCBpbmRleCB9KSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gaW5SYW5nZSA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsO1xuICAgIGNvbnN0IHJhbmdlRW5kID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3JhbmdlRW5kJyk7XG4gICAgcmFuZ2VFbmQuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3IpO1xuICAgIHJhbmdlRW5kLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVDb250cm9sVmFsaWRhdG9yKG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zLCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gIXRoaXMuaXNFbXB0eU9wZXJhbmQob3BlcmFuZCkgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbDtcbiAgICBjb25zdCB2YWx1ZUNvbnRyb2wgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgndmFsdWUnKSBhcyBGb3JtQ29udHJvbDtcbiAgICB2YWx1ZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3IpO1xuICAgIHZhbHVlQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIGlzRW1wdHlPcGVyYW5kKG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZIHx8IG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTdHJpbmdBcnJheSh2YWx1ZTogKHN0cmluZyB8IExpc3RJdGVtKVtdKTogdmFsdWUgaXMgc3RyaW5nW10ge1xuICAgIHJldHVybiBpc1N0cmluZyh2YWx1ZVswXSk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlc0Zyb21TZXJ2ZXIoc2VhcmNoVGVybTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkaW5nTGlzdCA9IHRydWU7XG4gICAgdGhpcy5saXN0T3B0aW9ucyA9IFtdO1xuICAgIGNvbnN0IHBhcmFtczogUGFydGlhbDxEYXRvR3JpZEdldFJvd3NQYXJhbXM+ID0ge1xuICAgICAgZmFpbENhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXJ2ZXJTZWFyY2hFcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgc3VjY2Vzc0NhbGxiYWNrOiBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTGlzdCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmbGF0RGF0YSA9IGRhdGEubWFwKHZhbHVlID0+IHZhbHVlW3RoaXMuY29sRmllbGRdKTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IGZsYXREYXRhLm1hcChtYXBUb0xpc3RJdGVtKTtcbiAgICAgICAgdGhpcy5wYXRjaEFuZFJlUmVnaXN0ZXIoZmxhdERhdGEpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgc2VydmVyQ29uZmlnOiB7XG4gICAgICAgIHBhZ2VTaXplOiAzMCxcbiAgICAgICAgcGFnZU51bWJlcjogMSxcbiAgICAgICAgY29sdW1uRmlsdGVyczoge1xuICAgICAgICAgIFt0aGlzLmNvbEZpZWxkXToge1xuICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5DT05UQUlOUyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogc2VhcmNoVGVybVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzb3J0OiBbXSxcbiAgICAgICAgY29sdW1uc1RvUmV0dXJuOiBbdGhpcy5jb2xGaWVsZF0sXG4gICAgICAgIGRpc3RpbmN0UmVzdWx0czogdHJ1ZVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5ncmlkU2VydmljZS5fb3JpZ2luYWxHZXRSb3dzKHBhcmFtcyBhcyBhbnkpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qIFdoZW4gc2VhcmNoaW5nIHRoZSBieSB2YWx1ZSBmaWx0ZXIgb24gc2VydmVyIHNpZGUgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbnRyb2wgd2l0aCB0aGUgbmV3IHZhbHVlcyBhbmQgcmUtcmVnaXN0ZXIgdG8gdGhlIGNoYW5nZXMgKi9cbiAgcHJpdmF0ZSBwYXRjaEFuZFJlUmVnaXN0ZXIoZGF0YTogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuYnlWYWx1ZUNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLmdldE5vbkV4Y2x1ZGVkVmFsdWVzKGRhdGEpKTtcbiAgICB0aGlzLnJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCkge1xuICAgIGNvbnN0IGJ5VmFsdWUgPSB0aGlzLmJ5VmFsdWVDb250cm9sO1xuICAgIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbiA9IGJ5VmFsdWUudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKGJ5VmFsdWUudmFsdWUpLFxuICAgICAgICBwYWlyd2lzZSgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbcHJldiwgY3VycmVudF0pID0+IHtcbiAgICAgICAgY29uc3QgYWRkVG9FeGNsdWRlZCA9IGN1cnJlbnQubGVuZ3RoIDwgcHJldi5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBhZGRUb0V4Y2x1ZGVkID8gZGlmZmVyZW5jZShwcmV2LCBjdXJyZW50KSA6IGRpZmZlcmVuY2UoY3VycmVudCwgcHJldik7XG4gICAgICAgIGRpZmYuZm9yRWFjaCh2ID0+IChhZGRUb0V4Y2x1ZGVkID8gdGhpcy5leGNsdWRlZFZhbHVlcy5hZGQodikgOiB0aGlzLmV4Y2x1ZGVkVmFsdWVzLmRlbGV0ZSh2KSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE5vbkV4Y2x1ZGVkVmFsdWVzKGRhdGE6IChzdHJpbmcgfCBudW1iZXIpW10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIodiA9PiAhdGhpcy5leGNsdWRlZFZhbHVlcy5oYXModikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwaXZvdCBkaW1lbnNpb25zIGFzIGRlZmluZWQgaW4gdGhlIHBhcmVudCBncm91cCBjb2x1bW4gaGVhZGVyIGNsYXNzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQaXZvdEZpZWxkcyhwYXJlbnQ6IENvbHVtbkdyb3VwLCBmaWVsZHMgPSBbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBncmFuZFBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKTtcbiAgICBjb25zdCBoZWFkZXJDbGFzcyA9IHBhcmVudC5nZXRPcmlnaW5hbENvbHVtbkdyb3VwKCkuZ2V0Q29sR3JvdXBEZWYoKS5oZWFkZXJDbGFzcztcblxuICAgIGlmIChncmFuZFBhcmVudCkge1xuICAgICAgdGhpcy5nZXRQaXZvdEZpZWxkcyhncmFuZFBhcmVudCwgZmllbGRzKTtcbiAgICB9XG5cbiAgICBoZWFkZXJDbGFzcyAmJiBmaWVsZHMucHVzaChoZWFkZXJDbGFzc1swXSk7XG5cbiAgICByZXR1cm4gZmllbGRzO1xuICB9XG59XG4iXX0=
|