@netgrif/components-core 6.0.2-rc.3 → 6.0.2
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/netgrif-components-core.umd.js +68 -11
- package/bundles/netgrif-components-core.umd.js.map +1 -1
- package/bundles/netgrif-components-core.umd.min.js +1 -1
- package/bundles/netgrif-components-core.umd.min.js.map +1 -1
- package/esm2015/lib/panel/abstract/panel-with-immediate-data.js +5 -1
- package/esm2015/lib/resources/engine-endpoint/task-resource.service.js +2 -1
- package/esm2015/lib/resources/interface/data-groups.js +1 -1
- package/esm2015/lib/resources/interface/immediate-data.js +1 -1
- package/esm2015/lib/task/services/task-data.service.js +10 -4
- package/esm2015/lib/task-content/model/task-fields.js +2 -0
- package/esm2015/lib/task-content/public-api.js +2 -1
- package/esm2015/lib/task-content/services/task-content.service.js +46 -9
- package/esm5/lib/panel/abstract/panel-with-immediate-data.js +7 -1
- package/esm5/lib/resources/engine-endpoint/task-resource.service.js +2 -1
- package/esm5/lib/resources/interface/data-groups.js +1 -1
- package/esm5/lib/resources/interface/immediate-data.js +1 -1
- package/esm5/lib/task/services/task-data.service.js +10 -4
- package/esm5/lib/task-content/model/task-fields.js +2 -0
- package/esm5/lib/task-content/public-api.js +2 -1
- package/esm5/lib/task-content/services/task-content.service.js +53 -9
- package/fesm2015/netgrif-components-core.js +59 -11
- package/fesm2015/netgrif-components-core.js.map +1 -1
- package/fesm5/netgrif-components-core.js +68 -11
- package/fesm5/netgrif-components-core.js.map +1 -1
- package/lib/resources/interface/data-groups.d.ts +4 -0
- package/lib/resources/interface/immediate-data.d.ts +6 -0
- package/lib/task-content/model/task-fields.d.ts +7 -0
- package/lib/task-content/public-api.d.ts +1 -0
- package/lib/task-content/services/task-content.service.d.ts +6 -6
- package/netgrif-components-core.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -211,11 +211,15 @@ var TaskContentService = /** @class */ (function () {
|
|
|
211
211
|
// todo actions owner zbytočný?
|
|
212
212
|
var frontendActions = chFields.taskId === this.task.stringId && chFields[TaskContentService.FRONTEND_ACTIONS_KEY];
|
|
213
213
|
Object.keys(chFields).forEach(function (changedField) {
|
|
214
|
-
if (!!_this.taskFieldsIndex[chFields.taskId] && !!_this.taskFieldsIndex[chFields.taskId]
|
|
215
|
-
|
|
214
|
+
if (!!_this.taskFieldsIndex[chFields.taskId] && !!_this.taskFieldsIndex[chFields.taskId].fields
|
|
215
|
+
&& !!_this.taskFieldsIndex[chFields.taskId].fields[changedField]) {
|
|
216
|
+
_this.updateField(chFields, _this.taskFieldsIndex[chFields.taskId].fields[changedField], frontendActions);
|
|
216
217
|
}
|
|
217
218
|
else if (_this.isFieldInTaskRef(changedField)) {
|
|
218
|
-
_this.
|
|
219
|
+
var taskId = _this.getReferencedTaskId(changedField);
|
|
220
|
+
if (!!taskId && !!_this.taskFieldsIndex[taskId] && !!_this.taskFieldsIndex[taskId].fields
|
|
221
|
+
&& !!_this.taskFieldsIndex[taskId].fields[changedField])
|
|
222
|
+
_this.updateReferencedField(chFields, _this.taskFieldsIndex[taskId].fields[changedField], frontendActions);
|
|
219
223
|
}
|
|
220
224
|
});
|
|
221
225
|
this.$shouldCreate.next(this._task.dataGroups);
|
|
@@ -223,8 +227,7 @@ var TaskContentService = /** @class */ (function () {
|
|
|
223
227
|
};
|
|
224
228
|
TaskContentService.prototype.updateField = function (chFields, field, frontendActions) {
|
|
225
229
|
var _this = this;
|
|
226
|
-
if (this._fieldConverterService.resolveType(field) === FieldTypeResource.TASK_REF
|
|
227
|
-
|| this.isFieldInTaskRef(field.stringId)) {
|
|
230
|
+
if (this._fieldConverterService.resolveType(field) === FieldTypeResource.TASK_REF) {
|
|
228
231
|
this._taskDataReloadRequest$.next(frontendActions ? frontendActions : undefined);
|
|
229
232
|
return;
|
|
230
233
|
}
|
|
@@ -243,8 +246,10 @@ var TaskContentService = /** @class */ (function () {
|
|
|
243
246
|
field.behavior = updatedField.behavior[_this._task.transitionId];
|
|
244
247
|
}
|
|
245
248
|
else {
|
|
246
|
-
|
|
247
|
-
|
|
249
|
+
var transitionId = _this.getReferencedTransitionId(field.stringId);
|
|
250
|
+
if (!!transitionId && transitionId !== '' && updatedField.behavior[transitionId])
|
|
251
|
+
field.behavior = updatedField.behavior[transitionId];
|
|
252
|
+
break;
|
|
248
253
|
}
|
|
249
254
|
break;
|
|
250
255
|
case 'choices':
|
|
@@ -280,6 +285,26 @@ var TaskContentService = /** @class */ (function () {
|
|
|
280
285
|
field.update();
|
|
281
286
|
});
|
|
282
287
|
};
|
|
288
|
+
TaskContentService.prototype.updateReferencedField = function (chFields, field, frontendActions) {
|
|
289
|
+
var _this = this;
|
|
290
|
+
if (this._fieldConverterService.resolveType(field) === FieldTypeResource.TASK_REF) {
|
|
291
|
+
this._taskDataReloadRequest$.next(frontendActions ? frontendActions : undefined);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
var updatedField = chFields[field.stringId];
|
|
295
|
+
Object.keys(updatedField).forEach(function (key) {
|
|
296
|
+
switch (key) {
|
|
297
|
+
case 'behavior':
|
|
298
|
+
var transitionId = _this.getReferencedTransitionId(field.stringId);
|
|
299
|
+
if (!!transitionId && transitionId !== '' && updatedField.behavior[transitionId])
|
|
300
|
+
field.behavior = updatedField.behavior[transitionId];
|
|
301
|
+
break;
|
|
302
|
+
default:
|
|
303
|
+
field[key] = updatedField[key];
|
|
304
|
+
}
|
|
305
|
+
field.update();
|
|
306
|
+
});
|
|
307
|
+
};
|
|
283
308
|
/**
|
|
284
309
|
* Performs the specific frontend action.
|
|
285
310
|
*
|
|
@@ -299,7 +324,26 @@ var TaskContentService = /** @class */ (function () {
|
|
|
299
324
|
var _this = this;
|
|
300
325
|
return !!this.taskFieldsIndex &&
|
|
301
326
|
Object.keys(this.taskFieldsIndex)
|
|
302
|
-
.some(function (taskId) { return taskId !== _this.task.stringId && _this.taskFieldsIndex[taskId][changedField]; });
|
|
327
|
+
.some(function (taskId) { return taskId !== _this.task.stringId && _this.taskFieldsIndex[taskId].fields[changedField]; });
|
|
328
|
+
};
|
|
329
|
+
TaskContentService.prototype.getReferencedTransitionId = function (changedField) {
|
|
330
|
+
var _this = this;
|
|
331
|
+
if (!!this.taskFieldsIndex) {
|
|
332
|
+
var taskFieldsIndexId = Object.keys(this.taskFieldsIndex).find(function (taskId) {
|
|
333
|
+
return Object.keys(_this.taskFieldsIndex[taskId].fields).includes(changedField);
|
|
334
|
+
});
|
|
335
|
+
return this.taskFieldsIndex[taskFieldsIndexId].transitionId;
|
|
336
|
+
}
|
|
337
|
+
return undefined;
|
|
338
|
+
};
|
|
339
|
+
TaskContentService.prototype.getReferencedTaskId = function (changedField) {
|
|
340
|
+
var _this = this;
|
|
341
|
+
if (!!this.taskFieldsIndex) {
|
|
342
|
+
return Object.keys(this.taskFieldsIndex).find(function (taskId) {
|
|
343
|
+
return Object.keys(_this.taskFieldsIndex[taskId].fields).includes(changedField);
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
return undefined;
|
|
303
347
|
};
|
|
304
348
|
TaskContentService.FRONTEND_ACTIONS_KEY = '_frontend_actions';
|
|
305
349
|
TaskContentService.VALIDATE_FRONTEND_ACTION = 'validate';
|
|
@@ -321,4 +365,4 @@ var TaskContentService = /** @class */ (function () {
|
|
|
321
365
|
return TaskContentService;
|
|
322
366
|
}());
|
|
323
367
|
export { TaskContentService };
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1jb250ZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvdGFzay1jb250ZW50L3NlcnZpY2VzL3Rhc2stY29udGVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBQyxlQUFlLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUlyRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzRUFBc0UsQ0FBQztBQUs3Rzs7Ozs7OztHQU9HO0FBQ0g7SUFrQkksNEJBQWdDLHNCQUE2QyxFQUM3QyxnQkFBaUMsRUFDakMsVUFBNEIsRUFDNUIsT0FBc0I7UUFIdEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFWOUMscUJBQWdCLEdBSXBCLEVBQUUsQ0FBQztRQUNDLDhCQUF5QixHQUF3QyxFQUFFLENBQUM7UUFNeEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBbUIsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUks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QVMsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLGdCQUFnQixFQUFFLEVBQXZCLENBQXVCLENBQUMsQ0FBQztTQUNwRDtJQUNMLENBQUM7SUFFTyw2Q0FBZ0IsR0FBeEIsVUFBeUIsWUFBb0I7UUFBN0MsaUJBSUM7UUFIRyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZTtZQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7aUJBQ2hDLElBQUksQ0FBQyxVQUFBLE1BQU0sSUFBSSxPQUFBLE1BQU0sS0FBSyxLQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUEzRSxDQUEyRSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQWpTdUIsdUNBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDM0MsMkNBQXdCLEdBQUcsVUFBVSxDQUFDOztnQkFjTixxQkFBcUI7Z0JBQzNCLGVBQWU7Z0JBQ3JCLGdCQUFnQjtnQkFDbkIsYUFBYTs7O2dCQXJCekQsVUFBVTs7O2dCQWZILHFCQUFxQjtnQkFMckIsZUFBZTtnQkFDZixnQkFBZ0I7Z0JBRmhCLGFBQWE7O0lBMFRyQix5QkFBQztDQUFBLEFBclNELElBcVNDO1NBcFNxQixrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RhdGFHcm91cH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9kYXRhLWdyb3Vwcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUYXNrfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL3Rhc2snO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtTbmFja0JhclNlcnZpY2V9IGZyb20gJy4uLy4uL3NuYWNrLWJhci9zZXJ2aWNlcy9zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtFbnVtZXJhdGlvbkZpZWxkLCBFbnVtZXJhdGlvbkZpZWxkVmFsdWV9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2VudW1lcmF0aW9uLWZpZWxkL21vZGVscy9lbnVtZXJhdGlvbi1maWVsZCc7XG5pbXBvcnQge011bHRpY2hvaWNlRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL211bHRpY2hvaWNlLWZpZWxkL21vZGVscy9tdWx0aWNob2ljZS1maWVsZCc7XG5pbXBvcnQge0NoYW5nZSwgQ2hhbmdlZEZpZWxkcywgRnJvbnRlbmRBY3Rpb25zfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9tb2RlbHMvY2hhbmdlZC1maWVsZHMnO1xuaW1wb3J0IHtGaWVsZENvbnZlcnRlclNlcnZpY2V9IGZyb20gJy4vZmllbGQtY29udmVydGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtGaWVsZFR5cGVSZXNvdXJjZX0gZnJvbSAnLi4vbW9kZWwvZmllbGQtdHlwZS1yZXNvdXJjZSc7XG5pbXBvcnQge0R5bmFtaWNFbnVtZXJhdGlvbkZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9lbnVtZXJhdGlvbi1maWVsZC9tb2RlbHMvZHluYW1pYy1lbnVtZXJhdGlvbi1maWVsZCc7XG5pbXBvcnQge1ZhbGlkYXRpb259IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy92YWxpZGF0aW9uJztcbmltcG9ydCB7VGFza0V2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvdGFzay1vdXRjb21lcy90YXNrLWV2ZW50LW91dGNvbWUnO1xuaW1wb3J0IHtEYXRhRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9hYnN0cmFjdC1kYXRhLWZpZWxkJztcblxuLyoqXG4gKiBBY3RzIGFzIGEgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgQ29tcG9uZW50IHRoYXQgcmVuZGVycyBUYXNrIGNvbnRlbnQgYW5kIGl0J3MgcGFyZW50IENvbXBvbmVudC5cbiAqIEFsc28gcHJvdmlkZXMgc29tZSBnZW5lcmFsIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBuZWVkZWQgd2hlbiB3b3JraW5nIHdpdGggdGFzayBjb250ZW50LlxuICpcbiAqIE5vdGFibGUgZXhhbXBsZSBvZiBhIHBhcmVudCBDb21wb25lbnQgaXMgdGhlIHtAbGluayBBYnN0cmFjdFRhc2tQYW5lbENvbXBvbmVudH0uXG4gKlxuICogTm90YWJsZSBleGFtcGxlIG9mIGEgdGFzayBjb250ZW50IHJlbmRlcmVyIGlzIHRoZSB7QGxpbmsgQWJzdHJhY3RUYXNrQ29udGVudENvbXBvbmVudH0uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUYXNrQ29udGVudFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRlJPTlRFTkRfQUNUSU9OU19LRVkgPSAnX2Zyb250ZW5kX2FjdGlvbnMnO1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFZBTElEQVRFX0ZST05URU5EX0FDVElPTiA9ICd2YWxpZGF0ZSc7XG5cbiAgICAkc2hvdWxkQ3JlYXRlOiBSZXBsYXlTdWJqZWN0PEFycmF5PERhdGFHcm91cD4+O1xuICAgICRzaG91bGRDcmVhdGVDb3VudGVyOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcbiAgICBwcm90ZWN0ZWQgX3Rhc2s6IFRhc2s7XG4gICAgcHJvdGVjdGVkIF90YXNrRGF0YVJlbG9hZFJlcXVlc3QkOiBTdWJqZWN0PEZyb250ZW5kQWN0aW9ucz47XG4gICAgcHJvdGVjdGVkIF9pc0V4cGFuZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgICBwcml2YXRlIF90YXNrRmllbGRzSW5kZXg6IHtcbiAgICAgICAgW3Rhc2tJZDogc3RyaW5nXToge1xuICAgICAgICAgICAgW2ZpZWxkSWQ6IHN0cmluZ106IERhdGFGaWVsZDxhbnk+O1xuICAgICAgICB9XG4gICAgfSA9IHt9O1xuICAgIHByaXZhdGUgX3JlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkczogeyBbY2FzZUlkOiBzdHJpbmddOiBBcnJheTxzdHJpbmc+IH0gPSB7fTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2ZpZWxkQ29udmVydGVyU2VydmljZTogRmllbGRDb252ZXJ0ZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3NuYWNrQmFyU2VydmljZTogU25hY2tCYXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2dnZXI6IExvZ2dlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy4kc2hvdWxkQ3JlYXRlID0gbmV3IFJlcGxheVN1YmplY3Q8QXJyYXk8RGF0YUdyb3VwPj4oMSk7XG4gICAgICAgIHRoaXMuJHNob3VsZENyZWF0ZUNvdW50ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgICAgIHRoaXMuX2lzRXhwYW5kaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgICAgICB0aGlzLl90YXNrID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl90YXNrRGF0YVJlbG9hZFJlcXVlc3QkID0gbmV3IFN1YmplY3Q8RnJvbnRlbmRBY3Rpb25zPigpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuJHNob3VsZENyZWF0ZS5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuJHNob3VsZENyZWF0ZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Rhc2tEYXRhUmVsb2FkUmVxdWVzdCQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5faXNFeHBhbmRpbmckLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIFRhc2sgb2JqZWN0IGlmIHNldCBhbmQgYHVuZGVmaW5lZGAgb3RoZXJ3aXNlXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IGdldCB0YXNrKCk6IFRhc2sgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBTZXR0aW5nIGEgVGFzayBhbHNvIGVtaXRzIGl0IGludG8gdGhlIHN0cmVhbSBhY2Nlc3NpYmxlIGJ5IHRoZSBbdGFzayRde0BsaW5rIFRhc2tDb250ZW50U2VydmljZSN0YXNrJH0gZ2V0dGVyIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gdGFzayB0aGUgVGFzayB0aGF0IG93bnMgdGhlIGNvbnRlbnQgbWFuYWdlZCBieSB0aGlzIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3Qgc2V0IHRhc2sodGFzazogVGFzayk7XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gcmV0dXJucyBhIHtAbGluayBUYXNrfSBvYmplY3QgZXZlcnkgdGltZSB0aGlzIG9iamVjdCBpcyBzZXQuXG4gICAgICpcbiAgICAgKiBVc2UgW3Rhc2tde0BsaW5rIFRhc2tDb250ZW50U2VydmljZSN0YXNrfSBzZXR0ZXIgbWV0aG9kIHRvIHNldCB0aGUgVGFzay5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IHRhc2skKCk6IE9ic2VydmFibGU8VGFzaz47XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gdGhhdCBlbWl0cyBldmVyeSB0aW1lIGEgZGF0YSByZWxvYWQgaXMgcmVxdWVzdGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGFza0RhdGFSZWxvYWRSZXF1ZXN0JCgpOiBPYnNlcnZhYmxlPEZyb250ZW5kQWN0aW9ucz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFza0RhdGFSZWxvYWRSZXF1ZXN0JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cblxuICAgIGdldCB0YXNrRmllbGRzSW5kZXgoKTogeyBbcDogc3RyaW5nXTogeyBbcDogc3RyaW5nXTogRGF0YUZpZWxkPGFueT4gfSB9IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2tGaWVsZHNJbmRleDtcbiAgICB9XG5cbiAgICBzZXQgdGFza0ZpZWxkc0luZGV4KHZhbHVlOiB7IFtwOiBzdHJpbmddOiB7IFtwOiBzdHJpbmddOiBEYXRhRmllbGQ8YW55PiB9IH0pIHtcbiAgICAgICAgdGhpcy5fdGFza0ZpZWxkc0luZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHJlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkcygpOiB7IFtwOiBzdHJpbmddOiBBcnJheTxzdHJpbmc+IH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzO1xuICAgIH1cblxuICAgIHNldCByZWZlcmVuY2VkVGFza0FuZENhc2VJZHModmFsdWU6IHsgW3A6IHN0cmluZ106IEFycmF5PHN0cmluZz4gfSkge1xuICAgICAgICB0aGlzLl9yZWZlcmVuY2VkVGFza0FuZENhc2VJZHMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBwYW5lbCB0aGF0IHRoZSB0YXNrIGNvbnRlbnQgaXMgY29udGFpbmVkIGluIGlzIGN1cnJlbnRseSBleHBhbmRpbmcuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdGFzayBjb250ZW50IGlzIG5vdCBjb250YWluZWQgaW4gYSBwYW5lbCwgYGlzRXhwYW5kaW5nYCB3aWxsIGJlIGFsd2F5cyBgZmFsc2VgLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNFeHBhbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0V4cGFuZGluZyQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyB0aGUgc3RhdGUgb2YgdGhlIHRhc2sgY29udGVudCB0byBgZXhwYW5kaW5nYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5zaW9uU3RhcnRlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNFeHBhbmRpbmckLm5leHQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyB0aGUgc3RhdGUgb2YgdGhlIHRhc2sgY29udGVudCB0byBgbm90IGV4cGFuZGluZ2AuXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuc2lvbkZpbmlzaGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0V4cGFuZGluZyQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiBhbGwgZGF0YSBmaWVsZHMgaW4gdGhlIG1hbmFnZWQge0BsaW5rIFRhc2t9LlxuICAgICAqXG4gICAgICogSWYgc29tZSBvZiB0aGUgZmllbGRzIGFyZSBpbnZhbGlkIHRvdWNoZXMgdGhlbSBzbyB0aGVpciB2YWxpZGF0aW9uIGVycm9ycyB3aWxsIGFwcGVhciAoaWYgc2V0KS5cbiAgICAgKiBBIHNuYWNrYmFyIHdpbGwgYWxzbyBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIsIGluZm9ybWluZyB0aGVtIG9mIHRoZSBmYWN0IHRoYXQgdGhlIGZpZWxkcyBhcmUgaW52YWxpZC5cbiAgICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSB0YXNrIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZVRhc2tEYXRhKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuX3Rhc2sgfHwgIXRoaXMuX3Rhc2suZGF0YUdyb3Vwcykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gIXRoaXMuX3Rhc2suZGF0YUdyb3Vwcy5zb21lKGdyb3VwID0+IGdyb3VwLmZpZWxkcy5zb21lKGZpZWxkID0+ICFmaWVsZC52YWxpZCAmJiAhZmllbGQuZGlzYWJsZWQpKTtcbiAgICAgICAgY29uc3QgdmFsaWREaXNhYmxlZCA9ICF0aGlzLl90YXNrLmRhdGFHcm91cHMuc29tZShncm91cCA9PiBncm91cC5maWVsZHMuc29tZShmaWVsZCA9PiAhZmllbGQudmFsaWRSZXF1aXJlZCAmJiBmaWVsZC5kaXNhYmxlZCkpO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja0JhclNlcnZpY2Uub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLmludmFsaWREYXRhJykpO1xuICAgICAgICAgICAgdGhpcy5fdGFzay5kYXRhR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4gZ3JvdXAuZmllbGRzLmZvckVhY2goZmllbGQgPT4gZmllbGQudG91Y2ggPSB0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZERpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja0JhclNlcnZpY2Uub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLm1pc3NpbmdSZXF1aXJlZCcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQgJiYgdmFsaWREaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBpbnZhbGlkIGRhdGEgb2YgdGFza1xuICAgICAqXG4gICAgICogQHJldHVybnMgYXJyYXkgb2YgaW52YWxpZCBkYXRhZmllbGRzXG4gICAgICovXG4gICAgcHVibGljIGdldEludmFsaWRUYXNrRGF0YSgpOiBBcnJheTxEYXRhRmllbGQ8YW55Pj4ge1xuICAgICAgICBjb25zdCBpbnZhbGlkRmllbGRzID0gW107XG4gICAgICAgIHRoaXMuX3Rhc2suZGF0YUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IGludmFsaWRGaWVsZHMucHVzaCguLi5ncm91cC5maWVsZHMuZmlsdGVyKGZpZWxkID0+XG4gICAgICAgICAgICAoIWZpZWxkLnZhbGlkICYmICFmaWVsZC5kaXNhYmxlZCkgfHwgKCFmaWVsZC52YWxpZFJlcXVpcmVkICYmICFmaWVsZC5kaXNhYmxlZCkpKSk7XG4gICAgICAgIHJldHVybiBpbnZhbGlkRmllbGRzO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZUR5bmFtaWNFbnVtRmllbGQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5fdGFzayB8fCAhdGhpcy5fdGFzay5kYXRhR3JvdXBzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5fdGFzay5kYXRhR3JvdXBzLnNvbWUoZ3JvdXAgPT4gZ3JvdXAuZmllbGRzLnNvbWUoZmllbGQgPT4gZmllbGQgaW5zdGFuY2VvZiBEeW5hbWljRW51bWVyYXRpb25GaWVsZCkpO1xuICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLl90YXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZ3JvdXAuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgRHluYW1pY0VudW1lcmF0aW9uRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmNob2ljZXMgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC5jaG9pY2VzLmxlbmd0aCAhPT0gMCAmJiBmaWVsZC52YWx1ZSAhPT0gJycgJiYgZmllbGQudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWVsZC5jaG9pY2VzLnNvbWUoY2hvaWNlID0+IGNob2ljZS5rZXkgPT09IGZpZWxkLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmJlaGF2aW9yLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIubWlzc2luZ1JlcXVpcmVkJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRoZSBibG9ja2luZyBzdGF0ZSBvZiBhbGwgZmllbGRzIGluIHRoZSBtYW5hZ2VkIFRhc2suXG4gICAgICogQHBhcmFtIGJsb2NraW5nU3RhdGUgd2hldGhlciB0aGUgZmllbGQgc2hvdWxkIGJlIGJsb2NrZWQgb3Igbm90XG4gICAgICovXG4gICAgcHVibGljIGJsb2NrRmllbGRzKGJsb2NraW5nU3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3Rhc2sgJiYgdGhpcy5fdGFzay5kYXRhR3JvdXBzKSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrLmRhdGFHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5ibG9jayA9IGJsb2NraW5nU3RhdGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgYXNzaWduZWUsIHN0YXJ0IGRhdGUgYW5kIGZpbmlzaCBkYXRlIGZyb20gdGhlIG1hbmFnZWQgVGFzay5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlU3RhdGVEYXRhKGV2ZW50T3V0Y29tZTogVGFza0V2ZW50T3V0Y29tZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fdGFzaykge1xuICAgICAgICAgICAgdGhpcy5fdGFzay51c2VyID0gZXZlbnRPdXRjb21lLnRhc2sudXNlcjtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2suc3RhcnREYXRlID0gZXZlbnRPdXRjb21lLnRhc2suc3RhcnREYXRlO1xuICAgICAgICAgICAgdGhpcy5fdGFzay5maW5pc2hEYXRlID0gZXZlbnRPdXRjb21lLnRhc2suZmluaXNoRGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHByb3BlcnRpZXMgb2YgZmllbGRzIGluIHRoZSBtYW5hZ2VkIHRhc2sgYmFzZWQgb24gYSBkZWx0YSBvZiBjaGFuZ2VzIGZyb20gcHJldmlvdXMgc3RhdGUuXG4gICAgICogQHBhcmFtIGNoRmllbGRzIG9iamVjdCBjb250YWluaW5nIHRoZSBkZWx0YSBvZiB0aGUgY2hhbmdlcyBmcm9tIHRoZSBwcmV2aW91cyBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVGcm9tQ2hhbmdlZEZpZWxkcyhjaEZpZWxkczogQ2hhbmdlZEZpZWxkcyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3Rhc2sgfHwgIXRoaXMuX3Rhc2suZGF0YUdyb3Vwcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRvZG8gYWN0aW9ucyBvd25lciB6Ynl0b8SNbsO9P1xuICAgICAgICBjb25zdCBmcm9udGVuZEFjdGlvbnMgPSBjaEZpZWxkcy50YXNrSWQgPT09IHRoaXMudGFzay5zdHJpbmdJZCAmJiBjaEZpZWxkc1tUYXNrQ29udGVudFNlcnZpY2UuRlJPTlRFTkRfQUNUSU9OU19LRVldO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGNoRmllbGRzKS5mb3JFYWNoKGNoYW5nZWRGaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLnRhc2tGaWVsZHNJbmRleFtjaEZpZWxkcy50YXNrSWRdICYmICEhdGhpcy50YXNrRmllbGRzSW5kZXhbY2hGaWVsZHMudGFza0lkXVtjaGFuZ2VkRmllbGRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZChjaEZpZWxkcywgdGhpcy50YXNrRmllbGRzSW5kZXhbY2hGaWVsZHMudGFza0lkXVtjaGFuZ2VkRmllbGRdLCBmcm9udGVuZEFjdGlvbnMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRmllbGRJblRhc2tSZWYoY2hhbmdlZEZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tEYXRhUmVsb2FkUmVxdWVzdCQubmV4dChmcm9udGVuZEFjdGlvbnMgPyBmcm9udGVuZEFjdGlvbnMgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRzaG91bGRDcmVhdGUubmV4dCh0aGlzLl90YXNrLmRhdGFHcm91cHMpO1xuICAgICAgICB0aGlzLnBlcmZvcm1Gcm9udGVuZEFjdGlvbihmcm9udGVuZEFjdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRmllbGQoY2hGaWVsZHM6IENoYW5nZWRGaWVsZHMsIGZpZWxkOiBEYXRhRmllbGQ8YW55PiwgZnJvbnRlbmRBY3Rpb25zOiBDaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkQ29udmVydGVyU2VydmljZS5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLlRBU0tfUkVGXG4gICAgICAgICAgICB8fCB0aGlzLmlzRmllbGRJblRhc2tSZWYoZmllbGQuc3RyaW5nSWQpKSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrRGF0YVJlbG9hZFJlcXVlc3QkLm5leHQoZnJvbnRlbmRBY3Rpb25zID8gZnJvbnRlbmRBY3Rpb25zIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaWVsZCA9IGNoRmllbGRzW2ZpZWxkLnN0cmluZ0lkXTtcbiAgICAgICAgT2JqZWN0LmtleXModXBkYXRlZEZpZWxkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0eXBlIGlzIGp1c3QgYW4gaW5mb3JtYXRpb24sIG5vdCBhbiB1cGRhdGUuIEEgZmllbGQgY2Fubm90IGNoYW5nZSBpdHMgdHlwZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGNvbnRpbnVlIC0gdGhlIGZpZWxkIGRvZXMgbm90IG5lZWQgdXBkYXRpbmcsIHNpbmNlIG5vdGhpbmcgY2hhbmdlZFxuICAgICAgICAgICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWVXaXRob3V0Q2hhbmdlKHRoaXMuX2ZpZWxkQ29udmVydGVyU2VydmljZS5mb3JtYXRWYWx1ZUZyb21CYWNrZW5kKGZpZWxkLCB1cGRhdGVkRmllbGRba2V5XSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdiZWhhdmlvcic6XG4gICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkRmllbGQuYmVoYXZpb3JbdGhpcy5fdGFzay50cmFuc2l0aW9uSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIE5HU0QtNDg5IGZpeCBiZWhhdmlvciByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5iZWhhdmlvciA9IHVwZGF0ZWRGaWVsZC5iZWhhdmlvclt0aGlzLl90YXNrLnRyYW5zaXRpb25JZF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdGhlIGJlaGF2aW9yIHVwZGF0ZSwgc2luY2UgaXQgZG9lcyBub3QgYWZmZWN0IHRoaXMgdGFza1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBjb250aW51ZSAtIHRoZSBmaWVsZCBkb2VzIG5vdCBuZWVkIHVwZGF0aW5nLCBzaW5jZSBub3RoaW5nIGNoYW5nZWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdjaG9pY2VzJzpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2hvaWNlczogQXJyYXk8RW51bWVyYXRpb25GaWVsZFZhbHVlPiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZEZpZWxkLmNob2ljZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkLmNob2ljZXMuZm9yRWFjaChpdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hvaWNlcy5wdXNoKHtrZXk6IGl0LCB2YWx1ZTogaXR9IGFzIEVudW1lcmF0aW9uRmllbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZWRGaWVsZC5jaG9pY2VzKS5mb3JFYWNoKGNob2ljZUtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hvaWNlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaG9pY2VLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1cGRhdGVkRmllbGQuY2hvaWNlc1tjaG9pY2VLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBFbnVtZXJhdGlvbkZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIEVudW1lcmF0aW9uRmllbGQgfCBNdWx0aWNob2ljZUZpZWxkKS5jaG9pY2VzID0gbmV3Q2hvaWNlcztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModXBkYXRlZEZpZWxkLm9wdGlvbnMpLmZvckVhY2gob3B0aW9uS2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMucHVzaCh7a2V5OiBvcHRpb25LZXksIHZhbHVlOiB1cGRhdGVkRmllbGQub3B0aW9uc1tvcHRpb25LZXldfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgRW51bWVyYXRpb25GaWVsZCB8IE11bHRpY2hvaWNlRmllbGQpLmNob2ljZXMgPSBuZXdPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd2YWxpZGF0aW9ucyc6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnJlcGxhY2VWYWxpZGF0aW9ucyh1cGRhdGVkRmllbGQudmFsaWRhdGlvbnMubWFwKGl0ID0+IChpdCBhcyBWYWxpZGF0aW9uKSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWVsZFtrZXldID0gdXBkYXRlZEZpZWxkW2tleV07XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkLnVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyB0aGUgc3BlY2lmaWMgZnJvbnRlbmQgYWN0aW9uLlxuICAgICAqXG4gICAgICogQSBwcm90b3R5cGUgaW1wbGVtZW50YXRpb24gb2YgZnJvbnRlbmQgYWN0aW9ucy5cbiAgICAgKlxuICAgICAqIFRoZSBzcGVjaWZpY3MgYXJlIHN1YmplY3QgdG8gY2hhbmdlLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHRoaXMgbWV0aG9kIHdpbGwgYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgc2VydmljZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmcm9udGVuZEFjdGlvbiB0aGUgYWN0aW9uIHRoYXQgc2hvdWxkIGJlIHBlcmZvcm1lZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGVyZm9ybUZyb250ZW5kQWN0aW9uKGZyb250ZW5kQWN0aW9uOiBGcm9udGVuZEFjdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZyb250ZW5kQWN0aW9uICYmIGZyb250ZW5kQWN0aW9uLnR5cGUgPT09IFRhc2tDb250ZW50U2VydmljZS5WQUxJREFURV9GUk9OVEVORF9BQ1RJT04pIHtcbiAgICAgICAgICAgIHRpbWVyKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMudmFsaWRhdGVUYXNrRGF0YSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaWVsZEluVGFza1JlZihjaGFuZ2VkRmllbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnRhc2tGaWVsZHNJbmRleCAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy50YXNrRmllbGRzSW5kZXgpXG4gICAgICAgICAgICAuc29tZSh0YXNrSWQgPT4gdGFza0lkICE9PSB0aGlzLnRhc2suc3RyaW5nSWQgJiYgdGhpcy50YXNrRmllbGRzSW5kZXhbdGFza0lkXVtjaGFuZ2VkRmllbGRdKTtcbiAgICB9XG59XG4iXX0=
|
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1jb250ZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvdGFzay1jb250ZW50L3NlcnZpY2VzL3Rhc2stY29udGVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBQyxlQUFlLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUlyRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzRUFBc0UsQ0FBQztBQU03Rzs7Ozs7OztHQU9HO0FBQ0g7SUFnQkksNEJBQWdDLHNCQUE2QyxFQUM3QyxnQkFBaUMsRUFDakMsVUFBNEIsRUFDNUIsT0FBc0I7UUFIdEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFSOUMscUJBQWdCLEdBRXBCLEVBQUUsQ0FBQztRQUNDLDhCQUF5QixHQUF3QyxFQUFFLENBQUM7UUFNeEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBbUIsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUks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QkFDbEUsT0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUF2RSxDQUF1RSxDQUFDLENBQUM7WUFDOUUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsWUFBWSxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLGdEQUFtQixHQUEzQixVQUE0QixZQUFvQjtRQUFoRCxpQkFNQztRQUxHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsT0FBUSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxNQUFNO2dCQUNqRCxPQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQXZFLENBQXVFLENBQUMsQ0FBQztTQUNoRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUF6VXVCLHVDQUFvQixHQUFHLG1CQUFtQixDQUFDO0lBQzNDLDJDQUF3QixHQUFHLFVBQVUsQ0FBQzs7Z0JBWU4scUJBQXFCO2dCQUMzQixlQUFlO2dCQUNyQixnQkFBZ0I7Z0JBQ25CLGFBQWE7OztnQkFuQnpELFVBQVU7OztnQkFoQkgscUJBQXFCO2dCQUxyQixlQUFlO2dCQUNmLGdCQUFnQjtnQkFGaEIsYUFBYTs7SUFtV3JCLHlCQUFDO0NBQUEsQUE3VUQsSUE2VUM7U0E1VXFCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0YUdyb3VwfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2RhdGEtZ3JvdXBzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1Rhc2t9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvdGFzayc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1NuYWNrQmFyU2VydmljZX0gZnJvbSAnLi4vLi4vc25hY2stYmFyL3NlcnZpY2VzL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0VudW1lcmF0aW9uRmllbGQsIEVudW1lcmF0aW9uRmllbGRWYWx1ZX0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZW51bWVyYXRpb24tZmllbGQvbW9kZWxzL2VudW1lcmF0aW9uLWZpZWxkJztcbmltcG9ydCB7TXVsdGljaG9pY2VGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbXVsdGljaG9pY2UtZmllbGQvbW9kZWxzL211bHRpY2hvaWNlLWZpZWxkJztcbmltcG9ydCB7Q2hhbmdlLCBDaGFuZ2VkRmllbGRzLCBGcm9udGVuZEFjdGlvbnN9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9jaGFuZ2VkLWZpZWxkcyc7XG5pbXBvcnQge0ZpZWxkQ29udmVydGVyU2VydmljZX0gZnJvbSAnLi9maWVsZC1jb252ZXJ0ZXIuc2VydmljZSc7XG5pbXBvcnQge0ZpZWxkVHlwZVJlc291cmNlfSBmcm9tICcuLi9tb2RlbC9maWVsZC10eXBlLXJlc291cmNlJztcbmltcG9ydCB7RHluYW1pY0VudW1lcmF0aW9uRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2VudW1lcmF0aW9uLWZpZWxkL21vZGVscy9keW5hbWljLWVudW1lcmF0aW9uLWZpZWxkJztcbmltcG9ydCB7VmFsaWRhdGlvbn0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHtUYXNrRXZlbnRPdXRjb21lfSBmcm9tICcuLi8uLi9ldmVudC9tb2RlbC9ldmVudC1vdXRjb21lcy90YXNrLW91dGNvbWVzL3Rhc2stZXZlbnQtb3V0Y29tZSc7XG5pbXBvcnQge0RhdGFGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQnO1xuaW1wb3J0IHtUYXNrRmllbGRzfSBmcm9tICcuLi9tb2RlbC90YXNrLWZpZWxkcyc7XG5cbi8qKlxuICogQWN0cyBhcyBhIGNvbW11bmljYXRpb24gaW50ZXJmYWNlIGJldHdlZW4gdGhlIENvbXBvbmVudCB0aGF0IHJlbmRlcnMgVGFzayBjb250ZW50IGFuZCBpdCdzIHBhcmVudCBDb21wb25lbnQuXG4gKiBBbHNvIHByb3ZpZGVzIHNvbWUgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgbmVlZGVkIHdoZW4gd29ya2luZyB3aXRoIHRhc2sgY29udGVudC5cbiAqXG4gKiBOb3RhYmxlIGV4YW1wbGUgb2YgYSBwYXJlbnQgQ29tcG9uZW50IGlzIHRoZSB7QGxpbmsgQWJzdHJhY3RUYXNrUGFuZWxDb21wb25lbnR9LlxuICpcbiAqIE5vdGFibGUgZXhhbXBsZSBvZiBhIHRhc2sgY29udGVudCByZW5kZXJlciBpcyB0aGUge0BsaW5rIEFic3RyYWN0VGFza0NvbnRlbnRDb21wb25lbnR9LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFza0NvbnRlbnRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZST05URU5EX0FDVElPTlNfS0VZID0gJ19mcm9udGVuZF9hY3Rpb25zJztcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBWQUxJREFURV9GUk9OVEVORF9BQ1RJT04gPSAndmFsaWRhdGUnO1xuXG4gICAgJHNob3VsZENyZWF0ZTogUmVwbGF5U3ViamVjdDxBcnJheTxEYXRhR3JvdXA+PjtcbiAgICAkc2hvdWxkQ3JlYXRlQ291bnRlcjogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj47XG4gICAgcHJvdGVjdGVkIF90YXNrOiBUYXNrO1xuICAgIHByb3RlY3RlZCBfdGFza0RhdGFSZWxvYWRSZXF1ZXN0JDogU3ViamVjdDxGcm9udGVuZEFjdGlvbnM+O1xuICAgIHByb3RlY3RlZCBfaXNFeHBhbmRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gICAgcHJpdmF0ZSBfdGFza0ZpZWxkc0luZGV4OiB7XG4gICAgICAgIFt0YXNrSWQ6IHN0cmluZ106IFRhc2tGaWVsZHNcbiAgICB9ID0ge307XG4gICAgcHJpdmF0ZSBfcmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzOiB7IFtjYXNlSWQ6IHN0cmluZ106IEFycmF5PHN0cmluZz4gfSA9IHt9O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfZmllbGRDb252ZXJ0ZXJTZXJ2aWNlOiBGaWVsZENvbnZlcnRlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc25hY2tCYXJTZXJ2aWNlOiBTbmFja0JhclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZ2dlcjogTG9nZ2VyU2VydmljZSkge1xuICAgICAgICB0aGlzLiRzaG91bGRDcmVhdGUgPSBuZXcgUmVwbGF5U3ViamVjdDxBcnJheTxEYXRhR3JvdXA+PigxKTtcbiAgICAgICAgdGhpcy4kc2hvdWxkQ3JlYXRlQ291bnRlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICAgICAgdGhpcy5faXNFeHBhbmRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgICAgIHRoaXMuX3Rhc2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3Rhc2tEYXRhUmVsb2FkUmVxdWVzdCQgPSBuZXcgU3ViamVjdDxGcm9udGVuZEFjdGlvbnM+KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy4kc2hvdWxkQ3JlYXRlLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy4kc2hvdWxkQ3JlYXRlLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFza0RhdGFSZWxvYWRSZXF1ZXN0JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9pc0V4cGFuZGluZyQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB0aGUgVGFzayBvYmplY3QgaWYgc2V0IGFuZCBgdW5kZWZpbmVkYCBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IHRhc2soKTogVGFzayB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFNldHRpbmcgYSBUYXNrIGFsc28gZW1pdHMgaXQgaW50byB0aGUgc3RyZWFtIGFjY2Vzc2libGUgYnkgdGhlIFt0YXNrJF17QGxpbmsgVGFza0NvbnRlbnRTZXJ2aWNlI3Rhc2skfSBnZXR0ZXIgbWV0aG9kLlxuICAgICAqIEBwYXJhbSB0YXNrIHRoZSBUYXNrIHRoYXQgb3ducyB0aGUgY29udGVudCBtYW5hZ2VkIGJ5IHRoaXMgc2VydmljZVxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBzZXQgdGFzayh0YXNrOiBUYXNrKTtcblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSByZXR1cm5zIGEge0BsaW5rIFRhc2t9IG9iamVjdCBldmVyeSB0aW1lIHRoaXMgb2JqZWN0IGlzIHNldC5cbiAgICAgKlxuICAgICAqIFVzZSBbdGFza117QGxpbmsgVGFza0NvbnRlbnRTZXJ2aWNlI3Rhc2t9IHNldHRlciBtZXRob2QgdG8gc2V0IHRoZSBUYXNrLlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgdGFzayQoKTogT2JzZXJ2YWJsZTxUYXNrPjtcblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSB0aGF0IGVtaXRzIGV2ZXJ5IHRpbWUgYSBkYXRhIHJlbG9hZCBpcyByZXF1ZXN0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0YXNrRGF0YVJlbG9hZFJlcXVlc3QkKCk6IE9ic2VydmFibGU8RnJvbnRlbmRBY3Rpb25zPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXNrRGF0YVJlbG9hZFJlcXVlc3QkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuXG4gICAgZ2V0IHRhc2tGaWVsZHNJbmRleCgpOiB7IFtwOiBzdHJpbmddOiBUYXNrRmllbGRzIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFza0ZpZWxkc0luZGV4O1xuICAgIH1cblxuICAgIHNldCB0YXNrRmllbGRzSW5kZXgodmFsdWU6IHsgW3A6IHN0cmluZ106IFRhc2tGaWVsZHMgfSkge1xuICAgICAgICB0aGlzLl90YXNrRmllbGRzSW5kZXggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgcmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzKCk6IHsgW3A6IHN0cmluZ106IEFycmF5PHN0cmluZz4gfSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZlcmVuY2VkVGFza0FuZENhc2VJZHM7XG4gICAgfVxuXG4gICAgc2V0IHJlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkcyh2YWx1ZTogeyBbcDogc3RyaW5nXTogQXJyYXk8c3RyaW5nPiB9KSB7XG4gICAgICAgIHRoaXMuX3JlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkcyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHBhbmVsIHRoYXQgdGhlIHRhc2sgY29udGVudCBpcyBjb250YWluZWQgaW4gaXMgY3VycmVudGx5IGV4cGFuZGluZy5cbiAgICAgKlxuICAgICAqIElmIHRoZSB0YXNrIGNvbnRlbnQgaXMgbm90IGNvbnRhaW5lZCBpbiBhIHBhbmVsLCBgaXNFeHBhbmRpbmdgIHdpbGwgYmUgYWx3YXlzIGBmYWxzZWAuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0V4cGFuZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRXhwYW5kaW5nJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgdGFzayBjb250ZW50IHRvIGBleHBhbmRpbmdgLlxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbnNpb25TdGFydGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0V4cGFuZGluZyQubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgdGFzayBjb250ZW50IHRvIGBub3QgZXhwYW5kaW5nYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5zaW9uRmluaXNoZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzRXhwYW5kaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIGFsbCBkYXRhIGZpZWxkcyBpbiB0aGUgbWFuYWdlZCB7QGxpbmsgVGFza30uXG4gICAgICpcbiAgICAgKiBJZiBzb21lIG9mIHRoZSBmaWVsZHMgYXJlIGludmFsaWQgdG91Y2hlcyB0aGVtIHNvIHRoZWlyIHZhbGlkYXRpb24gZXJyb3JzIHdpbGwgYXBwZWFyIChpZiBzZXQpLlxuICAgICAqIEEgc25hY2tiYXIgd2lsbCBhbHNvIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlciwgaW5mb3JtaW5nIHRoZW0gb2YgdGhlIGZhY3QgdGhhdCB0aGUgZmllbGRzIGFyZSBpbnZhbGlkLlxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIHRhc2sgaXMgdmFsaWQgb3Igbm90XG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlVGFza0RhdGEoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5fdGFzayB8fCAhdGhpcy5fdGFzay5kYXRhR3JvdXBzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSAhdGhpcy5fdGFzay5kYXRhR3JvdXBzLnNvbWUoZ3JvdXAgPT4gZ3JvdXAuZmllbGRzLnNvbWUoZmllbGQgPT4gIWZpZWxkLnZhbGlkICYmICFmaWVsZC5kaXNhYmxlZCkpO1xuICAgICAgICBjb25zdCB2YWxpZERpc2FibGVkID0gIXRoaXMuX3Rhc2suZGF0YUdyb3Vwcy5zb21lKGdyb3VwID0+IGdyb3VwLmZpZWxkcy5zb21lKGZpZWxkID0+ICFmaWVsZC52YWxpZFJlcXVpcmVkICYmIGZpZWxkLmRpc2FibGVkKSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIuaW52YWxpZERhdGEnKSk7XG4gICAgICAgICAgICB0aGlzLl90YXNrLmRhdGFHcm91cHMuZm9yRWFjaChncm91cCA9PiBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiBmaWVsZC50b3VjaCA9IHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIubWlzc2luZ1JlcXVpcmVkJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZCAmJiB2YWxpZERpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGludmFsaWQgZGF0YSBvZiB0YXNrXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhcnJheSBvZiBpbnZhbGlkIGRhdGFmaWVsZHNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW52YWxpZFRhc2tEYXRhKCk6IEFycmF5PERhdGFGaWVsZDxhbnk+PiB7XG4gICAgICAgIGNvbnN0IGludmFsaWRGaWVsZHMgPSBbXTtcbiAgICAgICAgdGhpcy5fdGFzay5kYXRhR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4gaW52YWxpZEZpZWxkcy5wdXNoKC4uLmdyb3VwLmZpZWxkcy5maWx0ZXIoZmllbGQgPT5cbiAgICAgICAgICAgICghZmllbGQudmFsaWQgJiYgIWZpZWxkLmRpc2FibGVkKSB8fCAoIWZpZWxkLnZhbGlkUmVxdWlyZWQgJiYgIWZpZWxkLmRpc2FibGVkKSkpKTtcbiAgICAgICAgcmV0dXJuIGludmFsaWRGaWVsZHM7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlRHluYW1pY0VudW1GaWVsZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrIHx8ICF0aGlzLl90YXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLl90YXNrLmRhdGFHcm91cHMuc29tZShncm91cCA9PiBncm91cC5maWVsZHMuc29tZShmaWVsZCA9PiBmaWVsZCBpbnN0YW5jZW9mIER5bmFtaWNFbnVtZXJhdGlvbkZpZWxkKSk7XG4gICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuX3Rhc2suZGF0YUdyb3Vwcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBncm91cC5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBEeW5hbWljRW51bWVyYXRpb25GaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuY2hvaWNlcyAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLmNob2ljZXMubGVuZ3RoICE9PSAwICYmIGZpZWxkLnZhbHVlICE9PSAnJyAmJiBmaWVsZC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkLmNob2ljZXMuc29tZShjaG9pY2UgPT4gY2hvaWNlLmtleSA9PT0gZmllbGQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuYmVoYXZpb3IucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tCYXJTZXJ2aWNlLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5taXNzaW5nUmVxdWlyZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGhlIGJsb2NraW5nIHN0YXRlIG9mIGFsbCBmaWVsZHMgaW4gdGhlIG1hbmFnZWQgVGFzay5cbiAgICAgKiBAcGFyYW0gYmxvY2tpbmdTdGF0ZSB3aGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgYmUgYmxvY2tlZCBvciBub3RcbiAgICAgKi9cbiAgICBwdWJsaWMgYmxvY2tGaWVsZHMoYmxvY2tpbmdTdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fdGFzayAmJiB0aGlzLl90YXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2suZGF0YUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmJsb2NrID0gYmxvY2tpbmdTdGF0ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBhc3NpZ25lZSwgc3RhcnQgZGF0ZSBhbmQgZmluaXNoIGRhdGUgZnJvbSB0aGUgbWFuYWdlZCBUYXNrLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVTdGF0ZURhdGEoZXZlbnRPdXRjb21lOiBUYXNrRXZlbnRPdXRjb21lKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl90YXNrKSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrLnVzZXIgPSBldmVudE91dGNvbWUudGFzay51c2VyO1xuICAgICAgICAgICAgdGhpcy5fdGFzay5zdGFydERhdGUgPSBldmVudE91dGNvbWUudGFzay5zdGFydERhdGU7XG4gICAgICAgICAgICB0aGlzLl90YXNrLmZpbmlzaERhdGUgPSBldmVudE91dGNvbWUudGFzay5maW5pc2hEYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgcHJvcGVydGllcyBvZiBmaWVsZHMgaW4gdGhlIG1hbmFnZWQgdGFzayBiYXNlZCBvbiBhIGRlbHRhIG9mIGNoYW5nZXMgZnJvbSBwcmV2aW91cyBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gY2hGaWVsZHMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlbHRhIG9mIHRoZSBjaGFuZ2VzIGZyb20gdGhlIHByZXZpb3VzIHN0YXRlXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZUZyb21DaGFuZ2VkRmllbGRzKGNoRmllbGRzOiBDaGFuZ2VkRmllbGRzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fdGFzayB8fCAhdGhpcy5fdGFzay5kYXRhR3JvdXBzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gdG9kbyBhY3Rpb25zIG93bmVyIHpieXRvxI1uw70/XG4gICAgICAgIGNvbnN0IGZyb250ZW5kQWN0aW9ucyA9IGNoRmllbGRzLnRhc2tJZCA9PT0gdGhpcy50YXNrLnN0cmluZ0lkICYmIGNoRmllbGRzW1Rhc2tDb250ZW50U2VydmljZS5GUk9OVEVORF9BQ1RJT05TX0tFWV07XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY2hGaWVsZHMpLmZvckVhY2goY2hhbmdlZEZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmICghIXRoaXMudGFza0ZpZWxkc0luZGV4W2NoRmllbGRzLnRhc2tJZF0gJiYgISF0aGlzLnRhc2tGaWVsZHNJbmRleFtjaEZpZWxkcy50YXNrSWRdLmZpZWxkc1xuICAgICAgICAgICAgICAgICYmICEhdGhpcy50YXNrRmllbGRzSW5kZXhbY2hGaWVsZHMudGFza0lkXS5maWVsZHNbY2hhbmdlZEZpZWxkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRmllbGQoY2hGaWVsZHMsIHRoaXMudGFza0ZpZWxkc0luZGV4W2NoRmllbGRzLnRhc2tJZF0uZmllbGRzW2NoYW5nZWRGaWVsZF0sIGZyb250ZW5kQWN0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGaWVsZEluVGFza1JlZihjaGFuZ2VkRmllbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFza0lkID0gdGhpcy5nZXRSZWZlcmVuY2VkVGFza0lkKGNoYW5nZWRGaWVsZCk7XG4gICAgICAgICAgICAgICAgaWYgKCEhdGFza0lkICYmICEhdGhpcy50YXNrRmllbGRzSW5kZXhbdGFza0lkXSAmJiAhIXRoaXMudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICYmICEhdGhpcy50YXNrRmllbGRzSW5kZXhbdGFza0lkXS5maWVsZHNbY2hhbmdlZEZpZWxkXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSZWZlcmVuY2VkRmllbGQoY2hGaWVsZHMsIHRoaXMudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzW2NoYW5nZWRGaWVsZF0sIGZyb250ZW5kQWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJHNob3VsZENyZWF0ZS5uZXh0KHRoaXMuX3Rhc2suZGF0YUdyb3Vwcyk7XG4gICAgICAgIHRoaXMucGVyZm9ybUZyb250ZW5kQWN0aW9uKGZyb250ZW5kQWN0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVGaWVsZChjaEZpZWxkczogQ2hhbmdlZEZpZWxkcywgZmllbGQ6IERhdGFGaWVsZDxhbnk+LCBmcm9udGVuZEFjdGlvbnM6IENoYW5nZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZmllbGRDb252ZXJ0ZXJTZXJ2aWNlLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVEFTS19SRUYpIHtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tEYXRhUmVsb2FkUmVxdWVzdCQubmV4dChmcm9udGVuZEFjdGlvbnMgPyBmcm9udGVuZEFjdGlvbnMgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkID0gY2hGaWVsZHNbZmllbGQuc3RyaW5nSWRdO1xuICAgICAgICBPYmplY3Qua2V5cyh1cGRhdGVkRmllbGQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHR5cGUgaXMganVzdCBhbiBpbmZvcm1hdGlvbiwgbm90IGFuIHVwZGF0ZS4gQSBmaWVsZCBjYW5ub3QgY2hhbmdlIGl0cyB0eXBlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWUgLSB0aGUgZmllbGQgZG9lcyBub3QgbmVlZCB1cGRhdGluZywgc2luY2Ugbm90aGluZyBjaGFuZ2VkXG4gICAgICAgICAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZVdpdGhvdXRDaGFuZ2UodGhpcy5fZmllbGRDb252ZXJ0ZXJTZXJ2aWNlLmZvcm1hdFZhbHVlRnJvbUJhY2tlbmQoZmllbGQsIHVwZGF0ZWRGaWVsZFtrZXldKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2JlaGF2aW9yJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRGaWVsZC5iZWhhdmlvclt0aGlzLl90YXNrLnRyYW5zaXRpb25JZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gTkdTRC00ODkgZml4IGJlaGF2aW9yIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmJlaGF2aW9yID0gdXBkYXRlZEZpZWxkLmJlaGF2aW9yW3RoaXMuX3Rhc2sudHJhbnNpdGlvbklkXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb25JZCA9IHRoaXMuZ2V0UmVmZXJlbmNlZFRyYW5zaXRpb25JZChmaWVsZC5zdHJpbmdJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF0cmFuc2l0aW9uSWQgJiYgdHJhbnNpdGlvbklkICE9PSAnJyAmJiB1cGRhdGVkRmllbGQuYmVoYXZpb3JbdHJhbnNpdGlvbklkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5iZWhhdmlvciA9IHVwZGF0ZWRGaWVsZC5iZWhhdmlvclt0cmFuc2l0aW9uSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hvaWNlcyc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Nob2ljZXM6IEFycmF5PEVudW1lcmF0aW9uRmllbGRWYWx1ZT4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRGaWVsZC5jaG9pY2VzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZC5jaG9pY2VzLmZvckVhY2goaXQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nob2ljZXMucHVzaCh7a2V5OiBpdCwgdmFsdWU6IGl0fSBhcyBFbnVtZXJhdGlvbkZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh1cGRhdGVkRmllbGQuY2hvaWNlcykuZm9yRWFjaChjaG9pY2VLZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nob2ljZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY2hvaWNlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdXBkYXRlZEZpZWxkLmNob2ljZXNbY2hvaWNlS2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgRW51bWVyYXRpb25GaWVsZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBFbnVtZXJhdGlvbkZpZWxkIHwgTXVsdGljaG9pY2VGaWVsZCkuY2hvaWNlcyA9IG5ld0Nob2ljZXM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ29wdGlvbnMnOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZWRGaWVsZC5vcHRpb25zKS5mb3JFYWNoKG9wdGlvbktleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zLnB1c2goe2tleTogb3B0aW9uS2V5LCB2YWx1ZTogdXBkYXRlZEZpZWxkLm9wdGlvbnNbb3B0aW9uS2V5XX0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIEVudW1lcmF0aW9uRmllbGQgfCBNdWx0aWNob2ljZUZpZWxkKS5jaG9pY2VzID0gbmV3T3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAndmFsaWRhdGlvbnMnOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZXBsYWNlVmFsaWRhdGlvbnModXBkYXRlZEZpZWxkLnZhbGlkYXRpb25zLm1hcChpdCA9PiAoaXQgYXMgVmFsaWRhdGlvbikpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGRba2V5XSA9IHVwZGF0ZWRGaWVsZFtrZXldO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZC51cGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVSZWZlcmVuY2VkRmllbGQoY2hGaWVsZHM6IENoYW5nZWRGaWVsZHMsIGZpZWxkOiBEYXRhRmllbGQ8YW55PiwgZnJvbnRlbmRBY3Rpb25zOiBDaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkQ29udmVydGVyU2VydmljZS5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLlRBU0tfUkVGKSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrRGF0YVJlbG9hZFJlcXVlc3QkLm5leHQoZnJvbnRlbmRBY3Rpb25zID8gZnJvbnRlbmRBY3Rpb25zIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkRmllbGQgPSBjaEZpZWxkc1tmaWVsZC5zdHJpbmdJZF07XG4gICAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZWRGaWVsZCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdiZWhhdmlvcic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb25JZCA9IHRoaXMuZ2V0UmVmZXJlbmNlZFRyYW5zaXRpb25JZChmaWVsZC5zdHJpbmdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXRyYW5zaXRpb25JZCAmJiB0cmFuc2l0aW9uSWQgIT09ICcnICYmIHVwZGF0ZWRGaWVsZC5iZWhhdmlvclt0cmFuc2l0aW9uSWRdKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuYmVoYXZpb3IgPSB1cGRhdGVkRmllbGQuYmVoYXZpb3JbdHJhbnNpdGlvbklkXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGRba2V5XSA9IHVwZGF0ZWRGaWVsZFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGQudXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIHRoZSBzcGVjaWZpYyBmcm9udGVuZCBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBBIHByb3RvdHlwZSBpbXBsZW1lbnRhdGlvbiBvZiBmcm9udGVuZCBhY3Rpb25zLlxuICAgICAqXG4gICAgICogVGhlIHNwZWNpZmljcyBhcmUgc3ViamVjdCB0byBjaGFuZ2UuIEl0IGlzIHZlcnkgbGlrZWx5IHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZyb250ZW5kQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBwZXJmb3JtRnJvbnRlbmRBY3Rpb24oZnJvbnRlbmRBY3Rpb246IEZyb250ZW5kQWN0aW9ucyk6IHZvaWQge1xuICAgICAgICBpZiAoZnJvbnRlbmRBY3Rpb24gJiYgZnJvbnRlbmRBY3Rpb24udHlwZSA9PT0gVGFza0NvbnRlbnRTZXJ2aWNlLlZBTElEQVRFX0ZST05URU5EX0FDVElPTikge1xuICAgICAgICAgICAgdGltZXIoKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy52YWxpZGF0ZVRhc2tEYXRhKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZpZWxkSW5UYXNrUmVmKGNoYW5nZWRGaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudGFza0ZpZWxkc0luZGV4ICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnRhc2tGaWVsZHNJbmRleClcbiAgICAgICAgICAgIC5zb21lKHRhc2tJZCA9PiB0YXNrSWQgIT09IHRoaXMudGFzay5zdHJpbmdJZCAmJiB0aGlzLnRhc2tGaWVsZHNJbmRleFt0YXNrSWRdLmZpZWxkc1tjaGFuZ2VkRmllbGRdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlZmVyZW5jZWRUcmFuc2l0aW9uSWQoY2hhbmdlZEZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoISF0aGlzLnRhc2tGaWVsZHNJbmRleCkge1xuICAgICAgICAgICBjb25zdCB0YXNrRmllbGRzSW5kZXhJZCA9IE9iamVjdC5rZXlzKHRoaXMudGFza0ZpZWxkc0luZGV4KS5maW5kKHRhc2tJZCA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzKS5pbmNsdWRlcyhjaGFuZ2VkRmllbGQpKTtcbiAgICAgICAgICAgcmV0dXJuIHRoaXMudGFza0ZpZWxkc0luZGV4W3Rhc2tGaWVsZHNJbmRleElkXS50cmFuc2l0aW9uSWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlZmVyZW5jZWRUYXNrSWQoY2hhbmdlZEZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoISF0aGlzLnRhc2tGaWVsZHNJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuICBPYmplY3Qua2V5cyh0aGlzLnRhc2tGaWVsZHNJbmRleCkuZmluZCh0YXNrSWQgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnRhc2tGaWVsZHNJbmRleFt0YXNrSWRdLmZpZWxkcykuaW5jbHVkZXMoY2hhbmdlZEZpZWxkKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -5812,6 +5812,7 @@ class TaskResourceService extends AbstractResourceService {
|
|
|
5812
5812
|
};
|
|
5813
5813
|
if (dataGroupResource.parentTaskId !== undefined) {
|
|
5814
5814
|
dataGroupObject.parentTaskId = dataGroupResource.parentTaskId;
|
|
5815
|
+
dataGroupObject.parentTransitionId = dataGroupResource.parentTransitionId;
|
|
5815
5816
|
dataGroupObject.parentTaskRefId = dataGroupResource.parentTaskRefId;
|
|
5816
5817
|
dataGroupObject.nestingLevel = dataGroupResource.nestingLevel;
|
|
5817
5818
|
}
|
|
@@ -13181,6 +13182,10 @@ class PanelWithImmediateData extends PanelWithHeaderBinding {
|
|
|
13181
13182
|
return { value: immediate.value.defaultValue, icon: undefined, type: immediate.type };
|
|
13182
13183
|
case 'multichoice':
|
|
13183
13184
|
return { value: immediate.value.map(it => it.defaultValue).join(', '), icon: undefined, type: immediate.type };
|
|
13185
|
+
case 'enumeration_map':
|
|
13186
|
+
return { value: immediate.options[immediate.value].defaultValue, icon: undefined, type: immediate.type };
|
|
13187
|
+
case 'multichoice_map':
|
|
13188
|
+
return { value: immediate.value.map(it => immediate.options[it].defaultValue).join(', '), icon: undefined, type: immediate.type };
|
|
13184
13189
|
case 'file':
|
|
13185
13190
|
return { value: (_a = immediate.value) === null || _a === void 0 ? void 0 : _a.name, icon: 'insert_drive_file', type: immediate.type };
|
|
13186
13191
|
case 'fileList':
|
|
@@ -21159,19 +21164,22 @@ class TaskContentService {
|
|
|
21159
21164
|
// todo actions owner zbytočný?
|
|
21160
21165
|
const frontendActions = chFields.taskId === this.task.stringId && chFields[TaskContentService.FRONTEND_ACTIONS_KEY];
|
|
21161
21166
|
Object.keys(chFields).forEach(changedField => {
|
|
21162
|
-
if (!!this.taskFieldsIndex[chFields.taskId] && !!this.taskFieldsIndex[chFields.taskId]
|
|
21163
|
-
|
|
21167
|
+
if (!!this.taskFieldsIndex[chFields.taskId] && !!this.taskFieldsIndex[chFields.taskId].fields
|
|
21168
|
+
&& !!this.taskFieldsIndex[chFields.taskId].fields[changedField]) {
|
|
21169
|
+
this.updateField(chFields, this.taskFieldsIndex[chFields.taskId].fields[changedField], frontendActions);
|
|
21164
21170
|
}
|
|
21165
21171
|
else if (this.isFieldInTaskRef(changedField)) {
|
|
21166
|
-
this.
|
|
21172
|
+
const taskId = this.getReferencedTaskId(changedField);
|
|
21173
|
+
if (!!taskId && !!this.taskFieldsIndex[taskId] && !!this.taskFieldsIndex[taskId].fields
|
|
21174
|
+
&& !!this.taskFieldsIndex[taskId].fields[changedField])
|
|
21175
|
+
this.updateReferencedField(chFields, this.taskFieldsIndex[taskId].fields[changedField], frontendActions);
|
|
21167
21176
|
}
|
|
21168
21177
|
});
|
|
21169
21178
|
this.$shouldCreate.next(this._task.dataGroups);
|
|
21170
21179
|
this.performFrontendAction(frontendActions);
|
|
21171
21180
|
}
|
|
21172
21181
|
updateField(chFields, field, frontendActions) {
|
|
21173
|
-
if (this._fieldConverterService.resolveType(field) === FieldTypeResource.TASK_REF
|
|
21174
|
-
|| this.isFieldInTaskRef(field.stringId)) {
|
|
21182
|
+
if (this._fieldConverterService.resolveType(field) === FieldTypeResource.TASK_REF) {
|
|
21175
21183
|
this._taskDataReloadRequest$.next(frontendActions ? frontendActions : undefined);
|
|
21176
21184
|
return;
|
|
21177
21185
|
}
|
|
@@ -21190,8 +21198,10 @@ class TaskContentService {
|
|
|
21190
21198
|
field.behavior = updatedField.behavior[this._task.transitionId];
|
|
21191
21199
|
}
|
|
21192
21200
|
else {
|
|
21193
|
-
|
|
21194
|
-
|
|
21201
|
+
const transitionId = this.getReferencedTransitionId(field.stringId);
|
|
21202
|
+
if (!!transitionId && transitionId !== '' && updatedField.behavior[transitionId])
|
|
21203
|
+
field.behavior = updatedField.behavior[transitionId];
|
|
21204
|
+
break;
|
|
21195
21205
|
}
|
|
21196
21206
|
break;
|
|
21197
21207
|
case 'choices':
|
|
@@ -21227,6 +21237,25 @@ class TaskContentService {
|
|
|
21227
21237
|
field.update();
|
|
21228
21238
|
});
|
|
21229
21239
|
}
|
|
21240
|
+
updateReferencedField(chFields, field, frontendActions) {
|
|
21241
|
+
if (this._fieldConverterService.resolveType(field) === FieldTypeResource.TASK_REF) {
|
|
21242
|
+
this._taskDataReloadRequest$.next(frontendActions ? frontendActions : undefined);
|
|
21243
|
+
return;
|
|
21244
|
+
}
|
|
21245
|
+
const updatedField = chFields[field.stringId];
|
|
21246
|
+
Object.keys(updatedField).forEach(key => {
|
|
21247
|
+
switch (key) {
|
|
21248
|
+
case 'behavior':
|
|
21249
|
+
const transitionId = this.getReferencedTransitionId(field.stringId);
|
|
21250
|
+
if (!!transitionId && transitionId !== '' && updatedField.behavior[transitionId])
|
|
21251
|
+
field.behavior = updatedField.behavior[transitionId];
|
|
21252
|
+
break;
|
|
21253
|
+
default:
|
|
21254
|
+
field[key] = updatedField[key];
|
|
21255
|
+
}
|
|
21256
|
+
field.update();
|
|
21257
|
+
});
|
|
21258
|
+
}
|
|
21230
21259
|
/**
|
|
21231
21260
|
* Performs the specific frontend action.
|
|
21232
21261
|
*
|
|
@@ -21244,7 +21273,20 @@ class TaskContentService {
|
|
|
21244
21273
|
isFieldInTaskRef(changedField) {
|
|
21245
21274
|
return !!this.taskFieldsIndex &&
|
|
21246
21275
|
Object.keys(this.taskFieldsIndex)
|
|
21247
|
-
.some(taskId => taskId !== this.task.stringId && this.taskFieldsIndex[taskId][changedField]);
|
|
21276
|
+
.some(taskId => taskId !== this.task.stringId && this.taskFieldsIndex[taskId].fields[changedField]);
|
|
21277
|
+
}
|
|
21278
|
+
getReferencedTransitionId(changedField) {
|
|
21279
|
+
if (!!this.taskFieldsIndex) {
|
|
21280
|
+
const taskFieldsIndexId = Object.keys(this.taskFieldsIndex).find(taskId => Object.keys(this.taskFieldsIndex[taskId].fields).includes(changedField));
|
|
21281
|
+
return this.taskFieldsIndex[taskFieldsIndexId].transitionId;
|
|
21282
|
+
}
|
|
21283
|
+
return undefined;
|
|
21284
|
+
}
|
|
21285
|
+
getReferencedTaskId(changedField) {
|
|
21286
|
+
if (!!this.taskFieldsIndex) {
|
|
21287
|
+
return Object.keys(this.taskFieldsIndex).find(taskId => Object.keys(this.taskFieldsIndex[taskId].fields).includes(changedField));
|
|
21288
|
+
}
|
|
21289
|
+
return undefined;
|
|
21248
21290
|
}
|
|
21249
21291
|
}
|
|
21250
21292
|
TaskContentService.FRONTEND_ACTIONS_KEY = '_frontend_actions';
|
|
@@ -21764,6 +21806,8 @@ class TaskDataService extends TaskHandlingService {
|
|
|
21764
21806
|
dataGroups.forEach(group => {
|
|
21765
21807
|
const dataGroupParentCaseId = group.parentCaseId === undefined ? this._safeTask.caseId : group.parentCaseId;
|
|
21766
21808
|
const parentTaskId = group.parentTaskId === undefined ? this._safeTask.stringId : group.parentTaskId;
|
|
21809
|
+
const parentTransitionId = group.parentTransitionId === undefined ?
|
|
21810
|
+
this._safeTask.transitionId : group.parentTransitionId;
|
|
21767
21811
|
if (dataGroupParentCaseId !== this._safeTask.caseId) {
|
|
21768
21812
|
if (!this._taskContentService.referencedTaskAndCaseIds[dataGroupParentCaseId]) {
|
|
21769
21813
|
this._taskContentService.referencedTaskAndCaseIds[dataGroupParentCaseId] = [group.parentTaskId];
|
|
@@ -21780,8 +21824,12 @@ class TaskDataService extends TaskHandlingService {
|
|
|
21780
21824
|
if (group.fields.length > 0 && !this._taskContentService.taskFieldsIndex[parentTaskId]) {
|
|
21781
21825
|
this._taskContentService.taskFieldsIndex[parentTaskId] = {};
|
|
21782
21826
|
}
|
|
21827
|
+
if (group.fields.length > 0 && !this._taskContentService.taskFieldsIndex[parentTaskId].fields) {
|
|
21828
|
+
this._taskContentService.taskFieldsIndex[parentTaskId].fields = {};
|
|
21829
|
+
}
|
|
21783
21830
|
group.fields.forEach(field => {
|
|
21784
|
-
this._taskContentService.taskFieldsIndex[parentTaskId]
|
|
21831
|
+
this._taskContentService.taskFieldsIndex[parentTaskId].transitionId = parentTransitionId;
|
|
21832
|
+
this._taskContentService.taskFieldsIndex[parentTaskId].fields[field.stringId] = field;
|
|
21785
21833
|
field.valueChanges().subscribe(() => {
|
|
21786
21834
|
if (this.wasFieldUpdated(field)) {
|
|
21787
21835
|
if (field instanceof DynamicEnumerationField) {
|
|
@@ -21941,7 +21989,7 @@ class TaskDataService extends TaskHandlingService {
|
|
|
21941
21989
|
}
|
|
21942
21990
|
const fieldIdsOfRequest = Object.keys(request[taskId]);
|
|
21943
21991
|
for (const fieldId of fieldIdsOfRequest) {
|
|
21944
|
-
const field = this._taskContentService.taskFieldsIndex[taskId][fieldId];
|
|
21992
|
+
const field = this._taskContentService.taskFieldsIndex[taskId].fields[fieldId];
|
|
21945
21993
|
if (field === undefined) {
|
|
21946
21994
|
this._log.error(`Unexpected state. Datafield ${fieldId} of task ${taskId} in setData request is not present in the task.`);
|
|
21947
21995
|
return false;
|
|
@@ -22111,7 +22159,7 @@ class TaskDataService extends TaskHandlingService {
|
|
|
22111
22159
|
clearWaitingForResponseFlag(body) {
|
|
22112
22160
|
Object.keys(body).forEach(taskId => {
|
|
22113
22161
|
Object.keys(body[taskId]).forEach(fieldId => {
|
|
22114
|
-
this._taskContentService.taskFieldsIndex[taskId][fieldId].waitingForResponse = false;
|
|
22162
|
+
this._taskContentService.taskFieldsIndex[taskId].fields[fieldId].waitingForResponse = false;
|
|
22115
22163
|
});
|
|
22116
22164
|
});
|
|
22117
22165
|
}
|