@senior-gestao-empresarial/angular-components 7.17.0 → 7.18.1

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.
@@ -359,10 +359,30 @@ var ErpLookups = /** @class */ (function () {
359
359
  this.lookupService
360
360
  .list({ page: page, sort: sort, filterQuery: filterQuery, displayFields: displayFields }, this.entity, options.domain || this.domain, options.service || this.service)
361
361
  .pipe(takeUntil(this.ngUnsubscribe))
362
- .pipe(map(function (list) { return ({
363
- gridData: list.contents.map(function (item) { return (__assign(__assign({}, item), { label: _this.getItemLabel(item, prefix, lookupDisplayFields) })); }),
364
- totalRecords: list.totalElements
365
- }); }))
362
+ .pipe(map(function (list) {
363
+ // Criar um mapa de campos com maxLength definido
364
+ var fieldsWithMaxLength = new Map();
365
+ __spread((options.searchFields || _this.searchFields), (options.searchGridFields || _this.searchGridFields)).forEach(function (field) {
366
+ if (field.maxLength &&
367
+ (field.type === FieldType.String || field.type === FieldType.Text)) {
368
+ fieldsWithMaxLength.set(field.name, field.maxLength);
369
+ }
370
+ });
371
+ return {
372
+ gridData: list.contents.map(function (item) {
373
+ var processedItem = JSON.parse(JSON.stringify(item));
374
+ // Aplicar maxLength nos campos que possuem a configuração
375
+ fieldsWithMaxLength.forEach(function (maxLength, fieldName) {
376
+ var fieldValue = _this.getNestedValue(processedItem, fieldName);
377
+ if (fieldValue && typeof fieldValue === 'string' && fieldValue.length > maxLength) {
378
+ _this.setNestedValue(processedItem, fieldName, fieldValue.substring(0, maxLength) + '...');
379
+ }
380
+ });
381
+ return __assign(__assign({}, processedItem), { label: _this.getItemLabel(processedItem, prefix, lookupDisplayFields) });
382
+ }),
383
+ totalRecords: list.totalElements
384
+ };
385
+ }))
366
386
  .subscribe(function (data) {
367
387
  _this.lookupSearchObservable.next(data);
368
388
  });
@@ -379,6 +399,21 @@ var ErpLookups = /** @class */ (function () {
379
399
  })
380
400
  .join(" - ");
381
401
  };
402
+ ErpLookups.prototype.getNestedValue = function (obj, path) {
403
+ return path.split(".").reduce(function (current, key) {
404
+ return current && current[key] !== undefined ? current[key] : undefined;
405
+ }, obj);
406
+ };
407
+ ErpLookups.prototype.setNestedValue = function (obj, path, value) {
408
+ var keys = path.split(".");
409
+ var lastKey = keys.pop();
410
+ var target = keys.reduce(function (current, key) {
411
+ return current && current[key] !== undefined ? current[key] : undefined;
412
+ }, obj);
413
+ if (target && lastKey) {
414
+ target[lastKey] = value;
415
+ }
416
+ };
382
417
  ErpLookups.ctorParameters = function () { return [
383
418
  { type: ErpLookupsService },
384
419
  { type: TranslateService },
@@ -399,4 +434,4 @@ var ErpLookups = /** @class */ (function () {
399
434
  return ErpLookups;
400
435
  }());
401
436
  export { ErpLookups };
402
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJwLWxvb2t1cHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2xvb2t1cHMvZXJwLWxvb2t1cHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBZ0N2QixrRkFBa0Y7QUFDbEYsTUFBTSxDQUFOLElBQVksbUJBeUJYO0FBekJELFdBQVksbUJBQW1CO0lBQzNCLCtEQUErRDtJQUMvRCxnQ0FBUyxDQUFBO0lBQ1Qsa0VBQWtFO0lBQ2xFLGdDQUFTLENBQUE7SUFDVCx1REFBdUQ7SUFDdkQsZ0NBQVMsQ0FBQTtJQUNULGdFQUFnRTtJQUNoRSxnQ0FBUyxDQUFBO0lBQ1QsbURBQW1EO0lBQ25ELGdDQUFTLENBQUE7SUFDVCw2REFBNkQ7SUFDN0QsZ0NBQVMsQ0FBQTtJQUNULHdFQUF3RTtJQUN4RSxrQ0FBVyxDQUFBO0lBQ1gscUVBQXFFO0lBQ3JFLGdDQUFTLENBQUE7SUFDVCwrRUFBK0U7SUFDL0Usa0NBQVcsQ0FBQTtJQUNYLG1EQUFtRDtJQUNuRCxnQ0FBUyxDQUFBO0lBQ1QsbUVBQW1FO0lBQ25FLHVDQUFnQixDQUFB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RyxPQUFPLG1CQUFtQjthQUNyQixHQUFHLENBQUMsVUFBQyxLQUFVO1lBQ1osSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDckUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJO2dCQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDYixDQUFDLENBQUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUksTUFBTSxpQkFBYyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7O2dCQWhYNEIsaUJBQWlCO2dCQUNyQixnQkFBZ0I7Ozs7Ozs7O0lBWGhDLFVBQVU7UUFOdEIsVUFBVSxFQUFFO1FBRWI7OztVQUdFO09BQ1csVUFBVSxDQTJYdEI7SUFBRCxpQkFBQztDQUFBLEFBM1hELElBMlhDO1NBM1hZLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IEZvcm1GaWVsZCwgRmllbGRUeXBlIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHNcIjtcbmltcG9ydCB7IEVycExvb2t1cHNTZXJ2aWNlIH0gZnJvbSBcIi4vZXJwLWxvb2t1cHMuc2VydmljZVwiO1xu4oCLXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IHRha2VVbnRpbCwgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xu4oCLXG5jb25zdCBtb21lbnQgPSBtb21lbnRfO1xuXG4vKiogRW50aWRhZGVzIGRlIHF1ZSBkZXBlbmRlICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eURlcGVuZGVuY3kge1xuICAgIC8qKiBOb21lIGRhIGVudGlkYWRlIHF1ZSBkZXBlbmRlIChwYWkpICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBDYW1wbyBkYSBlbnRpZGFkZSBwYWkgcXVlIHNlcsOhIGNvbXBhcmFkbyAqL1xuICAgIGZpZWxkPzogc3RyaW5nO1xuICAgIC8qKiBWYWxvciBkYSBlbnRpZGFkZSBwYWkgKi9cbiAgICB2YWx1ZTogRnVuY3Rpb247XG59XG7igItcbi8qKiBGaWx0cm8gcGFkcsOjbyBhcGxpY2FkbyBlbSB0b2RhcyByZXF1aXNpw6fDtWVzIGRhIGVudGlkYWRlLiBQb3IgcGFkcsOjbyBmaWx0cmEgcmVnaXN0cm9zIG7Do28gZXhjbHVpZG9zICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRGaWx0ZXIge1xuICAgIC8qKiBDYW1wbyBxdWUgc2Vyw6EgZmlsdHJhZG8gKi9cbiAgICBmaWVsZDogc3RyaW5nIHwgRGVmYXVsdEZpbHRlcjtcbiAgICAvKiogQ29tcGFyYcOnw6NvIHF1ZSBzZXLDoSBhcGxpY2FkYSBuYSBjb25zdWx0YSAqL1xuICAgIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yO1xuICAgIC8qKiBWYWxvcmVzIHF1ZSBzZXLDo28gYnVzY2Fkb3MgKi9cbiAgICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKiogRmlsdHJvIGRpbmFtaWNvIHBhcmEgY29uc3VsdGFzIG1haXMgY29tcGxleGFzICovXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNGaWx0ZXIge1xuICAgIC8qKiBDYW1wbyBxdWUgc2Vyw6EgZmlsdHJhZG8gKi9cbiAgICBmaWVsZDogRnVuY3Rpb25cbiAgICAvKiogQ29tcGFyYcOnw6NvIHF1ZSBzZXLDoSBhcGxpY2FkYSBuYSBjb25zdWx0YSAqL1xuICAgIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yO1xuICAgIC8qKiBWYWxvcmVzIHF1ZSBzZXLDo28gYnVzY2Fkb3MgKi9cbiAgICB2YWx1ZTogRnVuY3Rpb247XG59XG5cbi8qKiBGaWx0ZXIgU3lzdGVtIFF1ZXJ5IE9wdGlvbiAtIE9wZXJhdG9ycyBzdXBwb3J0ZWQgaW4gdGhlIGV4cHJlc3Npb24gbGFuZ3VhZ2UgKi9cbmV4cG9ydCBlbnVtIEVudW1Mb2dpY2FsT3BlcmF0b3Ige1xuICAgIC8qKiBFcXVhbCAoRXg6IC9TdXBwbGllcnM/JGZpbHRlcj1BZGRyZXNzL0NpdHkgZXEgJ1JlZG1vbmQnKSAqL1xuICAgIEVxID0gXCJlcVwiLFxuICAgIC8qKiBOb3QgZXF1YWwgKEV4OiAvU3VwcGxpZXJzPyRmaWx0ZXI9QWRkcmVzcy9DaXR5IG5lICdMb25kb24nKSAqL1xuICAgIE5lID0gXCJuZVwiLFxuICAgIC8qKiBHcmVhdGVyIHRoYW4gKEV4OiAvUHJvZHVjdHM/JGZpbHRlcj1QcmljZSBndCAyMCkgKi9cbiAgICBHdCA9IFwiZ3RcIixcbiAgICAvKiogR3JlYXRlciB0aGFuIG9yIGVxdWFsIChFeDogL1Byb2R1Y3RzPyRmaWx0ZXI9UHJpY2UgZ2UgMTApICovXG4gICAgR2UgPSBcImdlXCIsXG4gICAgLyoqIExlc3MgdGhhbiAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPVByaWNlIGx0IDIwKSovXG4gICAgTHQgPSBcImx0XCIsXG4gICAgLyoqIExlc3MgdGhhbiBvciBlcXVhbCAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPVByaWNlIGxlIDEwMCkqL1xuICAgIExlID0gXCJsZVwiLFxuICAgIC8qKiBMb2dpY2FsIGFuZFx0IChFeDogL1Byb2R1Y3RzPyRmaWx0ZXI9UHJpY2UgbGUgMjAwIGFuZCBQcmljZSBndCAzLjUpKi9cbiAgICBBbmQgPSBcImFuZFwiLFxuICAgIC8qKiBMb2dpY2FsIG9yIChFeDogL1Byb2R1Y3RzPyRmaWx0ZXI9UHJpY2UgbGUgMy41IG9yIFByaWNlIGd0IDIwMCkqL1xuICAgIE9yID0gXCJvclwiLFxuICAgIC8qKiBMb2dpY2FsIG5lZ2F0aW9uIChFeDogL1Byb2R1Y3RzPyRmaWx0ZXI9bm90IGVuZHN3aXRoKERlc2NyaXB0aW9uLCdtaWxrJykpKi9cbiAgICBOb3QgPSBcIm5vdFwiLFxuICAgIC8qKiBMb2dpY2FsIGlzIChFeDogL1Byb2R1Y3RzPyRmaWx0ZXI9aWQgaXMgbnVsbCAqL1xuICAgIElzID0gXCJpc1wiLFxuICAgIC8qKiBOZWdhdGlvbiBvZiBsb2dpY2FsIGlzIChFeDogL1Byb2R1Y3RzPyRmaWx0ZXI9aWQgaXMgbm90IG51bGwgKi9cbiAgICBJc05vdCA9IFwiaXMgbm90XCIsXG4gICAgLyoqIENvbnRhaW5zIHN0cmluZyB2YWx1ZSAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPWNvbnRhaW5pbmcobG93ZXIobmFtZSksIGxvd2VyKCdteSBuYW1lJykpKSAqL1xuICAgIENvbnRhaW5zID0gXCJjb250YWluaW5nXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb3J0T3B0aW9ucyB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBvcmRlcjogbnVtYmVyO1xufVxuXG4vKiogUGFyw6JtZXRyb3MgcGFyYSBjdXN0b21pemHDp8O1ZXMgZG8gbG9va3VwICovXG5leHBvcnQgaW50ZXJmYWNlIExvb2t1cE9wdGlvbnMge1xuICAgIC8qKiBOb21lIGRhIGVudGlkYWRlICovXG4gICAgZW50aXR5Pzogc3RyaW5nO1xuICAgIC8qKiBOb21lIGRvIGZvcm1Hcm91cCAqL1xuICAgIGZvcm1Hcm91cD86IHN0cmluZztcbiAgICAvKiogRmlsdHJvIHBhZHLDo28gKi9cbiAgICBkZWZhdWx0RmlsdGVyPzogRGVmYXVsdEZpbHRlcltdO1xuICAgIC8qKiBGaWx0cm8gZGluw6JtaWNvICovXG4gICAgZHluYW1pY0ZpbHRlcj86IER5bmFtaWNGaWx0ZXJbXTtcbiAgICAvKiogQ2FtcG9zIGRvIGxvb2t1cCAoYXV0b2NvbXBsZXRlKSAqL1xuICAgIGxvb2t1cEZpZWxkcz86IEZvcm1GaWVsZFtdO1xuICAgIC8qKiBDYW1wb3MgcXVlIHNlcsOjbyBzb2xpY2l0YWRvcyBuYSBjb25zdWx0YSAqL1xuICAgIHF1ZXJ5RmllbGRzPzogc3RyaW5nW107XG4gICAgLyoqIENhbXBvcyBleGliaWRvcyBubyBmaWx0cm8gZGEgbW9kYWwgZGUgbGlzdGFnZW0gKi9cbiAgICBzZWFyY2hGaWVsZHM/OiAoRm9ybUZpZWxkIHwgRXJwTG9va3Vwc0Zvcm1GaWVsZClbXTtcbiAgICAvKiogQ2FtcG9zIGV4aWJpZG9zIG5hIGdyaWQgZGEgbW9kYWwgZGUgbGlzdGFnZW0gKi9cbiAgICBzZWFyY2hHcmlkRmllbGRzPzogRm9ybUZpZWxkW107XG4gICAgLyoqIERlZmluZSBzZSBvIGxvb2t1cCBwZXJtaXRpcsOhIG11bHRpIHNlbGXDp8OjbyAqL1xuICAgIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgICAvKiogRW50aWRhZGVzIGRlIHF1ZSBkZXBlbmRlICovXG4gICAgZW50aXR5RGVwZW5kZW5jeT86IEVudGl0eURlcGVuZGVuY3lbXTtcbiAgICAvKiogUHJlZml4byB1dGlsaXphZG8gcGFyYSBtb250YXIgb3MgbGFiZWxzIChwb3IgcGFkcsOjbyB1dGlsaXphIGRvbcOtbmlvIGUgc2VydmnDp28pICovXG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIC8qKiBTdWZpeG8gdXRpbGl6YWRvIHBhcmEgbW9udGFyIG9zIGxhYmVscyAocG9yIHBhZHLDo28gw6kgdmF6aW8pICovXG4gICAgc3VmZml4Pzogc3RyaW5nO1xuICAgIC8qKiBEb23DrW5pbyAqL1xuICAgIGRvbWFpbj86IHN0cmluZztcbiAgICAvKiogU2VydmnDp28gKi9cbiAgICBzZXJ2aWNlPzogc3RyaW5nO1xuICAgIC8qKiBEYXRhIGtleSAqL1xuICAgIGRhdGFLZXk/OiBzdHJpbmc7XG4gICAgLyoqIENhbXBvcyBwYXJhIG9yZGVuYcOnw6NvIGRvIGxvb2t1cCAoYXV0b2NvbXBsZXRlKSovXG4gICAgbG9va3VwU29ydD86IFNvcnRPcHRpb25zW107XG4gICAgLyoqIENhbXBvcyBwYXJhIGEgb3JkZW5hw6fDo28gYW8gYWJyaXIgYSBtb2RhbCBkZSBsaXN0YWdlbSAqL1xuICAgIHNlYXJjaFNvcnQ/OiBTb3J0T3B0aW9uc1tdO1xufVxuXG5leHBvcnQgdHlwZSBDdXN0b21GaWx0ZXJGdW5jdGlvbjxUID0gdW5rbm93bj4gPSAob3B0aW9uczoge1xuICB2YWx1ZTogVDtcbiAgZmlsdGVyRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59KSA9PiBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUZpbHRlcjxUID0gdW5rbm93bj4gPSB7XG4gICAgb3BlcmF0b3I6IEVudW1Mb2dpY2FsT3BlcmF0b3I7XG4gICAgdmFsdWU6IHN0cmluZyB8IEN1c3RvbUZpbHRlckZ1bmN0aW9uPFQ+O1xufTtcblxuZXhwb3J0IGNsYXNzIEVycExvb2t1cHNGb3JtRmllbGQ8VCA9IHVua25vd24+IGV4dGVuZHMgRm9ybUZpZWxkIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVycExvb2t1cHNGb3JtRmllbGQ/OiB7XG4gICAgICAgICAgICBjdXN0b21GaWx0ZXJzPzogQ3VzdG9tRmlsdGVyPFQ+W107XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgRm9ybUZpZWxkPlxuICAgICkge1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbuKAi1xuLyoqXG4gKiBFcnAgTG9va3Vwc1xuICogQGNsYXNzIEVycExvb2t1cHNcbiovXG5leHBvcnQgY2xhc3MgRXJwTG9va3VwcyB7XG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcbiAgICAvKipcbiAgICAgKiBDcmlhw6fDo28gZGUgdW0gbG9va3VwLlxuICAgICAqIEBwYXJhbSBlbnRpdHkgTm9tZSBkYSBlbnRpZGFkZS5cbiAgICAgKiBAcGFyYW0gbG9va3VwRmllbGRzIENhbXBvcyBleGliaWRvcyBubyBhdXRvY29tcGxldGUuXG4gICAgICogQHBhcmFtIHNlYXJjaEZpZWxkcyBDYW1wb3MgZXhpYmlkb3Mgbm8gZmlsdHJvIGRlbnRybyBkYSBtb2RhbC5cbiAgICAgKiBAcGFyYW0gc2VhcmNoR3JpZEZpZWxkcyBDYW1wb3MgZXhpYmlkb3MgbmEgdGFiZWxhIGRlbnRybyBkYSBtb2RhbC5cbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgbG9va3VwU2VydmljZTogRXJwTG9va3Vwc1NlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBlbnRpdHk6IHN0cmluZyxcbiAgICAgICAgcHJvdGVjdGVkIGxvb2t1cEZpZWxkczogRm9ybUZpZWxkW10sXG4gICAgICAgIHB1YmxpYyBzZWFyY2hGaWVsZHM6IChGb3JtRmllbGQgfCBFcnBMb29rdXBzRm9ybUZpZWxkKVtdLFxuICAgICAgICBwdWJsaWMgc2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW10sXG4gICAgICAgIHByb3RlY3RlZCBkb21haW46IHN0cmluZyxcbiAgICAgICAgcHJvdGVjdGVkIHNlcnZpY2U6IHN0cmluZyxcbiAgICApIHtcbiAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XG4gICAgICAgIHRoaXMuZG9tYWluID0gZG9tYWluO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICB0aGlzLmxvb2t1cEZpZWxkcyA9IGxvb2t1cEZpZWxkcyB8fCBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHMgfHwgW107XG4gICAgICAgIHRoaXMuc2VhcmNoR3JpZEZpZWxkcyA9IHNlYXJjaEdyaWRGaWVsZHMgfHwgW107XG4gICAgfVxuXG4gICAgcHVibGljIGxvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHVibGljIGxvb2t1cFNlYXJjaE9ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xu4oCLXG4gICAgcHVibGljIHRvU25ha2VDYXNlKHZhbHVlOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyg/Ol58XFwuPykoW0EtWl0pL2csIGZ1bmN0aW9uICh4LCB5KSB7cmV0dXJuIFwiX1wiICsgeS50b0xvd2VyQ2FzZSgpOyB9KS5yZXBsYWNlKC9eXy8sIFwiXCIpO1xuICAgIH1cbuKAi1xuICAgIHB1YmxpYyBtb3VudEZvcm1GaWVsZChmaWVsZHM6IGFueSwgcHJlZml4OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGxldCB0cmFuc2xhdGlvbktleSA9IGAke3ByZWZpeH0ubG9va3VwXyR7dGhpcy50b1NuYWtlQ2FzZSh0aGlzLmVudGl0eSl9XyR7dGhpcy50b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gO1xuICAgICAgICAgICAgbGV0IGxhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XG4gICAgICAgICAgICBpZiAobGFiZWwgPT09IHRyYW5zbGF0aW9uS2V5KSB7XG4gICAgICAgICAgICAgICAgLy8gTWFudGVyIGNvbXBhdGliaWxpZGFkZSBjb20gb3MgbG9va3VwcyBhdHVhaXMgYXTDqSB0b2RvcyBhanVzdGFyZW1cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBmaWVsZC5uYW1lLnNwbGl0KCcuJykuam9pbignXycpO1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uS2V5ID0gYCR7cHJlZml4fS5sb29rdXBfJHt0aGlzLnRvU25ha2VDYXNlKHRoaXMuZW50aXR5KX1fJHt0aGlzLnRvU25ha2VDYXNlKGZpZWxkTmFtZSl9YDtcbiAgICAgICAgICAgICAgICBsYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXCJlcnBMb29rdXBzRm9ybUZpZWxkXCIgaW4gZmllbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycExvb2t1cHNGb3JtRmllbGQoZmllbGQuZXJwTG9va3Vwc0Zvcm1GaWVsZCwge1xuICAgICAgICAgICAgICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgICAgICAgICBsYWJlbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbuKAi1xuICAgIHB1YmxpYyBtb3VudERlZmF1bHRGaWx0ZXIoZGVmYXVsdEZpbHRlcjogRGVmYXVsdEZpbHRlcltdID0gW3tmaWVsZDogXCJleGNsdWlkb1wiLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbXCJmYWxzZVwiXX1dKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFwiKFwiICsgZmlsdGVyLnZhbHVlcy5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIub3BlcmF0b3IgPT0gRW51bUxvZ2ljYWxPcGVyYXRvci5Db250YWlucylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7ZmlsdGVyLmZpZWxkfSksIGxvd2VyKCcke3ZhbHVlfScpKWA7XG5cbiAgICAgICAgICAgICAgICBpZiAoKGZpbHRlci5vcGVyYXRvciA9PSBFbnVtTG9naWNhbE9wZXJhdG9yLklzTm90IHx8IGZpbHRlci5vcGVyYXRvciA9PSBFbnVtTG9naWNhbE9wZXJhdG9yLklzKSAmJiAhdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtmaWx0ZXIuZmllbGR9ICR7ZmlsdGVyLm9wZXJhdG9yfSBudWxsYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZmlsdGVyLmZpZWxkfSAke2ZpbHRlci5vcGVyYXRvcn0gJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KS5qb2luKFwiIG9yIFwiKSArIFwiKVwiO1xuICAgICAgICB9KS5qb2luKFwiIGFuZCBcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG1vdW50RHluYW1pY0ZpbHRlcihkeW5hbWljRmlsdGVyOiBEeW5hbWljRmlsdGVyW10pIHtcbiAgICAgICAgaWYgKGR5bmFtaWNGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBkeW5hbWljRmlsdGVyLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBmaWx0ZXIudmFsdWUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpbHRlci5maWVsZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yID0gZmlsdGVyLm9wZXJhdG9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEodmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBcIihcIiArIHZhbHVlcy5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09IEVudW1Mb2dpY2FsT3BlcmF0b3IuQ29udGFpbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtmaWVsZH0pLCBsb3dlcignJHt2YWx1ZX0nKSlgO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgob3BlcmF0b3IgPT0gRW51bUxvZ2ljYWxPcGVyYXRvci5Jc05vdCB8fCBvcGVyYXRvciA9PSBFbnVtTG9naWNhbE9wZXJhdG9yLklzKSAmJiAhdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZmllbGR9ICR7b3BlcmF0b3J9IG51bGxgO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtmaWVsZH0gJHtvcGVyYXRvcn0gJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfSkuam9pbihcIiBvciBcIikgKyBcIilcIjtcbiAgICAgICAgICAgIH0pLmpvaW4oXCIgYW5kIFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbW91bnRDdXN0b21GaWx0ZXIoe1xuICAgICAgICBlcnBMb29rdXBzU2VhcmNoRmllbGQsXG4gICAgICAgIGZpbHRlckRhdGEsXG4gICAgfToge1xuICAgICAgICBlcnBMb29rdXBzU2VhcmNoRmllbGQ6IEVycExvb2t1cHNGb3JtRmllbGQ7XG4gICAgICAgIGZpbHRlckRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIH0pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB7IGVycExvb2t1cHNGb3JtRmllbGQsIG5hbWUgfSA9IGVycExvb2t1cHNTZWFyY2hGaWVsZDtcblxuICAgICAgICByZXR1cm4gYCgke2VycExvb2t1cHNGb3JtRmllbGQuY3VzdG9tRmlsdGVyc1xuICAgICAgICAgICAgLm1hcCgoeyBvcGVyYXRvciwgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKHZhbHVlIGFzIEN1c3RvbUZpbHRlckZ1bmN0aW9uKSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyRGF0YVtuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSBFbnVtTG9naWNhbE9wZXJhdG9yLkNvbnRhaW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlfScpKSlgO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgob3BlcmF0b3IgPT09IEVudW1Mb2dpY2FsT3BlcmF0b3IuSXNOb3QgfHwgb3BlcmF0b3IgPT09IEVudW1Mb2dpY2FsT3BlcmF0b3IuSXMpICYmICF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke25hbWV9ICR7b3BlcmF0b3J9IG51bGwpYDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYCgke25hbWV9ICR7b3BlcmF0b3J9ICcke3ZhbHVlfScpYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpfSlgO1xuICAgIH1cbuKAi1xuICAgIHB1YmxpYyBtb3VudEZpbHRlclF1ZXJ5KHZhbHVlOiBzdHJpbmcsIGxvb2t1cEZpZWxkczogRm9ybUZpZWxkW10sIGRlZmF1bHRGaWx0ZXI/OiBEZWZhdWx0RmlsdGVyW10sIGR5bmFtaWNGaWx0ZXI/OiBEeW5hbWljRmlsdGVyW10pIHtcbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5OiBzdHJpbmc7XG4gICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcih2YWx1ZSkpKSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGxvb2t1cEZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLlN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYChjb250YWluaW5nKGxvd2VyKCR7ZmllbGQubmFtZX0pLCBsb3dlcignJHt2YWx1ZX0nKSkpYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNhbml0aXplZFZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEQvZywgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2FuaXRpemVkVmFsdWUpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke2ZpZWxkLm5hbWV9IGVxICcke3Nhbml0aXplZFZhbHVlfScpYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke2ZpZWxkLm5hbWV9IGVxICcke3ZhbHVlfScpYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXIgPT4gISFmaWx0ZXIpXG4gICAgICAgICAgICAuam9pbihcIiBvciBcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGxvb2t1cEZpZWxkc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkOiBhbnkpID0+IGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgICAgICAgLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYChjb250YWluaW5nKGxvd2VyKCR7ZmllbGQubmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC9cXFxcL2csIFwiXCIpLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSkpYDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXJRdWVyeSA9IHRoaXMubW91bnREZWZhdWx0RmlsdGVyKGRlZmF1bHRGaWx0ZXIpO1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlclF1ZXJ5KVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBgKCgke2RlZmF1bHRGaWx0ZXJRdWVyeX0pIGFuZCAoJHtmaWx0ZXJRdWVyeX0pKWA7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gXCIoXCIgKyBmaWx0ZXJRdWVyeSArIFwiKVwiO1xu4oCLXG4gICAgICAgIGNvbnN0IGR5bmFtaWNGaWx0ZXJRdWVyeSA9IHRoaXMubW91bnREeW5hbWljRmlsdGVyKGR5bmFtaWNGaWx0ZXIpO1xuICAgICAgICBpZiAoZHluYW1pY0ZpbHRlclF1ZXJ5KVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBgKCgke2R5bmFtaWNGaWx0ZXJRdWVyeX0pIGFuZCAoJHtmaWx0ZXJRdWVyeX0pKWA7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gXCIoXCIgKyBmaWx0ZXJRdWVyeSArIFwiKVwiO1xuXG4gICAgICAgIHJldHVybiBmaWx0ZXJRdWVyeTtcbiAgICB9XG7igItcbiAgICBwdWJsaWMgbW91bnRFbnVtRmlsdGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgbXVsdGlwbGU6IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIG11bHRpcGxlID8gYCgke3ZhbHVlLm1hcCgoc2VsZWN0ZWQ6IGFueSkgPT4gYCR7bmFtZX0gZXEgJyR7c2VsZWN0ZWR9J2ApLmpvaW4oXCIgb3IgXCIpfSlgIDogYCgke25hbWV9IGVxICcke3ZhbHVlfScpYDtcbiAgICB9XG7igItcbiAgICAvKiogTcOpdG9kbyByZXNwb25zw6F2ZWwgcG9yIG1vbnRhciBhcyBvcMOnw7VlcyBwYWRyw7VlcyBwYXJhIG8gbG9va3VwIGRvIER5bmFtaWMgRm9ybSAqL1xuICAgIHB1YmxpYyBtb3VudE9wdGlvbnMob3B0aW9uczogTG9va3VwT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG9wdGlvbnMucHJlZml4XG4gICAgICAgICAgICA/IG9wdGlvbnMucHJlZml4XG4gICAgICAgICAgICA6IChvcHRpb25zLmRvbWFpbiAmJiBvcHRpb25zLnNlcnZpY2UpXG4gICAgICAgICAgICAgICAgPyBgJHtvcHRpb25zLmRvbWFpbn0uJHtvcHRpb25zLnNlcnZpY2V9YFxuICAgICAgICAgICAgICAgIDogYCR7dGhpcy5kb21haW59LiR7dGhpcy5zZXJ2aWNlfWA7XG5cbiAgICAgICAgY29uc3Qgc3VmZml4ID0gb3B0aW9ucy5zdWZmaXggPyBgXyR7b3B0aW9ucy5zdWZmaXh9YCA6IFwiXCI7XG5cblxuICAgICAgICBvcHRpb25zLmxvb2t1cEZpZWxkcyA9IG9wdGlvbnMubG9va3VwRmllbGRzICYmIG9wdGlvbnMubG9va3VwRmllbGRzLmxlbmd0aFxuICAgICAgICAgICAgPyBvcHRpb25zLmxvb2t1cEZpZWxkc1xuICAgICAgICAgICAgOiB0aGlzLmxvb2t1cEZpZWxkcztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogb3B0aW9ucy5mb3JtR3JvdXAgfHwgdGhpcy5lbnRpdHksXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHtwcmVmaXh9Lmxvb2t1cF8ke3RoaXMudG9TbmFrZUNhc2Uob3B0aW9ucy5lbnRpdHkpIHx8IHRoaXMudG9TbmFrZUNhc2UodGhpcy5lbnRpdHkpfSR7c3VmZml4fWApLFxuICAgICAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5sb29rdXBfJHt0aGlzLnRvU25ha2VDYXNlKG9wdGlvbnMuZW50aXR5KSB8fFxuICAgICAgICAgICAgICAgIHRoaXMudG9TbmFrZUNhc2UodGhpcy5lbnRpdHkpfV9zZWFyY2hfdGl0bGVgKSxcbiAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Mb29rdXAsXG4gICAgICAgICAgICBtdWx0aXBsZTogb3B0aW9ucy5tdWx0aXBsZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsXG4gICAgICAgICAgICBkYXRhS2V5OiBvcHRpb25zLmRhdGFLZXkgfHwgXCJpZFwiLFxuICAgICAgICAgICAgbG9va3VwRGlzcGxheUZpZWxkOiBcImxhYmVsXCIsXG4gICAgICAgICAgICBzZWFyY2hFbXB0eVRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3ByZWZpeH0ubm90aGluZ19mb3VuZGApLFxuICAgICAgICAgICAgZmlsdGVyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5maWx0ZXJgKSxcbiAgICAgICAgICAgIGNsZWFyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5jbGVhcmApLFxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5jYW5jZWxgKSxcbiAgICAgICAgICAgIHNlbGVjdExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3ByZWZpeH0uc2VsZWN0YCksXG4gICAgICAgICAgICBzZWFyY2hGaWVsZHM6IG9wdGlvbnMuc2VhcmNoRmllbGRzID8gdGhpcy5tb3VudEZvcm1GaWVsZChvcHRpb25zLnNlYXJjaEZpZWxkcywgcHJlZml4KSA6XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VudEZvcm1GaWVsZCh0aGlzLnNlYXJjaEZpZWxkcywgcHJlZml4KSxcbiAgICAgICAgICAgIHNlYXJjaEdyaWRGaWVsZHM6IG9wdGlvbnMuc2VhcmNoR3JpZEZpZWxkcyA/IHRoaXMubW91bnRGb3JtRmllbGQob3B0aW9ucy5zZWFyY2hHcmlkRmllbGRzLCBwcmVmaXgpIDpcbiAgICAgICAgICAgICAgICB0aGlzLm1vdW50Rm9ybUZpZWxkKHRoaXMuc2VhcmNoR3JpZEZpZWxkcywgcHJlZml4KSxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zT2JzZXJ2YWJsZTogdGhpcy5sb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUsXG4gICAgICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiB0aGlzLmxvb2t1cFNlYXJjaE9ic2VydmFibGUsXG4gICAgICAgICAgICBvbkxvb2t1cFJlcXVlc3Q6ICh2YWx1ZTogc3RyaW5nKSA9PiB0aGlzLm9uTG9va3VwUmVxdWVzdCh2YWx1ZSwgcHJlZml4LCBvcHRpb25zKSxcbiAgICAgICAgICAgIG9uU2VhcmNoUmVxdWVzdDogKGV2ZW50OiBhbnkpID0+IHRoaXMub25TZWFyY2hSZXF1ZXN0KGV2ZW50LCBwcmVmaXgsIG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgfVxu4oCLXG4gICAgcHVibGljIGdldFByb3Aob2JqOiBhbnksIHBhdGg6IGFueSwgcHJlZml4OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLnJlZHVjZSgocmVzdWx0OiBhbnksIHByb3A6IGFueSkgPT4gKHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdFtwcm9wXSA9PT0gbnVsbFxuICAgICAgICAgICAgPyB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3ByZWZpeH0uZW1wdHlfbGFiZWxgKVxuICAgICAgICAgICAgOiByZXN1bHRbcHJvcF0pLCBvYmopO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiAhdmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gISF2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbW91bnRFbnRpdHlGaWx0ZXIoZW50aXR5OiBFbnRpdHlEZXBlbmRlbmN5LCB2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGVudGl0eS5maWVsZFxuICAgICAgICAgICAgPyBgKCR7ZW50aXR5Lm5hbWV9LiR7ZW50aXR5LmZpZWxkfSBlcSAnJHt2YWx1ZVtlbnRpdHkuZmllbGRdfScpYFxuICAgICAgICAgICAgOiBgKCR7ZW50aXR5Lm5hbWV9IGVxICcke3ZhbHVlW2VudGl0eS5uYW1lXX0nKWA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZywgb3B0aW9ucz86IExvb2t1cE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc29ydCA9IG9wdGlvbnMubG9va3VwU29ydDtcbiAgICAgICAgY29uc3QgbG9va3VwRGlzcGxheUZpZWxkcyA9IG9wdGlvbnMubG9va3VwRmllbGRzLm1hcChmaWVsZCA9PiBmaWVsZC5uYW1lKTtcbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5ID0gdGhpcy5tb3VudEZpbHRlclF1ZXJ5KHZhbHVlLCBvcHRpb25zLmxvb2t1cEZpZWxkcywgb3B0aW9ucy5kZWZhdWx0RmlsdGVyLCBvcHRpb25zLmR5bmFtaWNGaWx0ZXIpO1xuXG4gICAgICAgIGxldCBkaXNwbGF5RmllbGRzID0gbG9va3VwRGlzcGxheUZpZWxkcy5jb25jYXQoIChvcHRpb25zLnNlYXJjaEdyaWRGaWVsZHMgfHwgdGhpcy5zZWFyY2hHcmlkRmllbGRzKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpIHx8IFtdKTtcbiAgICAgICAgaWYgKG9wdGlvbnMucXVlcnlGaWVsZHMpXG4gICAgICAgICAgICBkaXNwbGF5RmllbGRzID0gZGlzcGxheUZpZWxkcy5jb25jYXQob3B0aW9ucy5xdWVyeUZpZWxkcyk7XG4gICAgICAgIGRpc3BsYXlGaWVsZHMgPSBkaXNwbGF5RmllbGRzLmZpbHRlcigodiwgaSkgPT4gZGlzcGxheUZpZWxkcy5pbmRleE9mKHYpID09PSBpKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5lbnRpdHlEZXBlbmRlbmN5KSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHlGaWx0ZXIgPSBvcHRpb25zLmVudGl0eURlcGVuZGVuY3kubWFwKChlbnRpdHk6IEVudGl0eURlcGVuZGVuY3kpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGVudGl0eS52YWx1ZSgpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZShuZXdWYWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke25ld1ZhbHVlLm1hcCgodmFsOiBhbnkpID0+IHRoaXMubW91bnRFbnRpdHlGaWx0ZXIoZW50aXR5LCB2YWwpKS5qb2luKFwiIG9yIFwiKX0pYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke3RoaXMubW91bnRFbnRpdHlGaWx0ZXIoZW50aXR5LCBuZXdWYWx1ZSl9KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuZmlsdGVyKGZpbHRlciA9PiAhIWZpbHRlcikuam9pbiAoXCIgYW5kIFwiKTtcbiAgICAgICAgICAgIGlmIChlbnRpdHlGaWx0ZXIpXG4gICAgICAgICAgICAgICAgZmlsdGVyUXVlcnkgPyBmaWx0ZXJRdWVyeSArPSBgIGFuZCAoJHtlbnRpdHlGaWx0ZXJ9KWAgOiBmaWx0ZXJRdWVyeSA9IGVudGl0eUZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvb2t1cFNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHtcbiAgICAgICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgICAgIGZpbHRlclF1ZXJ5LFxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLmVudGl0eSxcbiAgICAgICAgICAgIG9wdGlvbnMuZG9tYWluIHx8IHRoaXMuZG9tYWluLFxuICAgICAgICAgICAgb3B0aW9ucy5zZXJ2aWNlIHx8IHRoaXMuc2VydmljZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0SXRlbUxhYmVsKGl0ZW0sIHByZWZpeCwgbG9va3VwRGlzcGxheUZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUubmV4dChkYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbuKAi1xuICAgIHB1YmxpYyBvblNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSwgcHJlZml4OiBzdHJpbmcsIG9wdGlvbnM/OiBMb29rdXBPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YSA/IG11bHRpU29ydE1ldGEgOiBvcHRpb25zLnNlYXJjaFNvcnQ7XG4gICAgICAgIGNvbnN0IGxvb2t1cERpc3BsYXlGaWVsZHMgPSBvcHRpb25zLmxvb2t1cEZpZWxkcy5tYXAoZmllbGQgPT4gZmllbGQubmFtZSk7XG5cbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5ID0gKG9wdGlvbnMuc2VhcmNoRmllbGRzIHx8IHRoaXMuc2VhcmNoRmllbGRzKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgbXVsdGlwbGUsIGVycExvb2t1cHNGb3JtRmllbGQgfSA9IGZvcm1GaWVsZCBhcyBFcnBMb29rdXBzRm9ybUZpZWxkO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVycExvb2t1cHNGb3JtRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91bnRDdXN0b21GaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJwTG9va3Vwc1NlYXJjaEZpZWxkOiBmb3JtRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEYXRhLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91bnRFbnVtRmlsdGVyKG5hbWUsIHZhbHVlLCBtdWx0aXBsZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYChjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZX0nKSkpYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuTG9va3VwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke25hbWV9IGVxICcke3ZhbHVlLmlkfScpYDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xu4oCLXG4gICAgICAgIGlmIChvcHRpb25zLmVudGl0eURlcGVuZGVuY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eUZpbHRlciA9IG9wdGlvbnMuZW50aXR5RGVwZW5kZW5jeS5tYXAoKGVudGl0eTogRW50aXR5RGVwZW5kZW5jeSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZW50aXR5LnZhbHVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke3ZhbHVlLm1hcCgodmFsOiBhbnkpID0+IHRoaXMubW91bnRFbnRpdHlGaWx0ZXIoZW50aXR5LCB2YWwpKS5qb2luKFwiIG9yIFwiKX0pYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke3RoaXMubW91bnRFbnRpdHlGaWx0ZXIoZW50aXR5LCB2YWx1ZSl9KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuZmlsdGVyKGZpbHRlciA9PiAhIWZpbHRlcikuam9pbiAoXCIgYW5kIFwiKTtcbiAgICAgICAgICAgIGlmIChlbnRpdHlGaWx0ZXIpXG4gICAgICAgICAgICAgICAgZmlsdGVyUXVlcnkgPyBmaWx0ZXJRdWVyeSArPSBgIGFuZCAoJHtlbnRpdHlGaWx0ZXJ9KWAgOiBmaWx0ZXJRdWVyeSA9IGVudGl0eUZpbHRlcjtcbiAgICAgICAgfVxu4oCLXG4gICAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXJRdWVyeSA9IHRoaXMubW91bnREZWZhdWx0RmlsdGVyKG9wdGlvbnMuZGVmYXVsdEZpbHRlcik7XG5cbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJRdWVyeSlcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID8gZmlsdGVyUXVlcnkgKz0gYCBhbmQgKCR7ZGVmYXVsdEZpbHRlclF1ZXJ5fSlgIDogZmlsdGVyUXVlcnkgPSBgKCR7ZGVmYXVsdEZpbHRlclF1ZXJ5fSlgO1xuXG4gICAgICAgIGNvbnN0IGR5bmFtaWNGaWx0ZXJRdWVyeSA9IHRoaXMubW91bnREeW5hbWljRmlsdGVyKG9wdGlvbnMuZHluYW1pY0ZpbHRlcik7XG5cbiAgICAgICAgaWYgKGR5bmFtaWNGaWx0ZXJRdWVyeSlcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID8gZmlsdGVyUXVlcnkgKz0gYCBhbmQgKCR7ZHluYW1pY0ZpbHRlclF1ZXJ5fSlgIDogZmlsdGVyUXVlcnkgPSBgKCR7ZHluYW1pY0ZpbHRlclF1ZXJ5fSlgO1xuXG4gICAgICAgIGxldCBkaXNwbGF5RmllbGRzID0gbG9va3VwRGlzcGxheUZpZWxkcy5jb25jYXQoKG9wdGlvbnMuc2VhcmNoR3JpZEZpZWxkcyB8fCB0aGlzLnNlYXJjaEdyaWRGaWVsZHMpXG4gICAgICAgICAgICAgICAgLmNvbmNhdChvcHRpb25zLnNlYXJjaEdyaWRGaWVsZHMgfHwgW10pXG4gICAgICAgICAgICAgICAgLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpIHx8IFtdKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5xdWVyeUZpZWxkcylcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZHMgPSBkaXNwbGF5RmllbGRzLmNvbmNhdChvcHRpb25zLnF1ZXJ5RmllbGRzKTtcblxuICAgICAgICBkaXNwbGF5RmllbGRzID0gZGlzcGxheUZpZWxkcy5maWx0ZXIoKHYsIGkpID0+IGRpc3BsYXlGaWVsZHMuaW5kZXhPZih2KSA9PT0gaSk7XG5cbiAgICAgICAgdGhpcy5sb29rdXBTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0sIHRoaXMuZW50aXR5LCBvcHRpb25zLmRvbWFpbiB8fCB0aGlzLmRvbWFpbiwgb3B0aW9ucy5zZXJ2aWNlIHx8IHRoaXMuc2VydmljZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGdyaWREYXRhOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldEl0ZW1MYWJlbChpdGVtLCBwcmVmaXgsIGxvb2t1cERpc3BsYXlGaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHNcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9va3VwU2VhcmNoT2JzZXJ2YWJsZS5uZXh0KGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SXRlbUxhYmVsKGl0ZW06IGFueSwgcHJlZml4OiBzdHJpbmcsIGxvb2t1cERpc3BsYXlGaWVsZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiBsb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAubWFwKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCwgcHJlZml4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF0gIT09IHVuZGVmaW5lZCAmJiBpdGVtW2ZpZWxkXSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICA/IGl0ZW1bZmllbGRdXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHtwcmVmaXh9LmVtcHR5X2xhYmVsYCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgLSBcIik7XG4gICAgfVxufVxuIl19
437
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJwLWxvb2t1cHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2xvb2t1cHMvZXJwLWxvb2t1cHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBZ0N2QixrRkFBa0Y7QUFDbEYsTUFBTSxDQUFOLElBQVksbUJBeUJYO0FBekJELFdBQVksbUJBQW1CO0lBQzNCLCtEQUErRDtJQUMvRCxnQ0FBUyxDQUFBO0lBQ1Qsa0VBQWtFO0lBQ2xFLGdDQUFTLENBQUE7SUFDVCx1REFBdUQ7SUFDdkQsZ0NBQVMsQ0FBQTtJQUNULGdFQUFnRTtJQUNoRSxnQ0FBUyxDQUFBO0lBQ1QsbURBQW1EO0lBQ25ELGdDQUFTLENBQUE7SUFDVCw2REFBNkQ7SUFDN0QsZ0NBQVMsQ0FBQTtJQUNULHdFQUF3RTtJQUN4RSxrQ0FBVyxDQUFBO0lBQ1gscUVBQXFFO0lBQ3JFLGdDQUFTLENBQUE7SUFDVCwrRUFBK0U7SUFDL0Usa0NBQVcsQ0FBQTtJQUNYLG1EQUFtRDtJQUNuRCxnQ0FBUyxDQUFBO0lBQ1QsbUVBQW1FO0lBQ25FLHVDQUFnQixDQUFB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QyxTQUFTLENBQUM7UUFDNUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsSUFBSSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDM0I7SUFDTCxDQUFDOztnQkExWjRCLGlCQUFpQjtnQkFDckIsZ0JBQWdCOzs7Ozs7OztJQVhoQyxVQUFVO1FBTnRCLFVBQVUsRUFBRTtRQUViOzs7VUFHRTtPQUNXLFVBQVUsQ0FxYXRCO0lBQUQsaUJBQUM7Q0FBQSxBQXJhRCxJQXFhQztTQXJhWSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBGb3JtRmllbGQsIEZpZWxkVHlwZSB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBFcnBMb29rdXBzU2VydmljZSB9IGZyb20gXCIuL2VycC1sb29rdXBzLnNlcnZpY2VcIjtcbuKAi1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwsIG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbuKAi1xuY29uc3QgbW9tZW50ID0gbW9tZW50XztcblxuLyoqIEVudGlkYWRlcyBkZSBxdWUgZGVwZW5kZSAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlEZXBlbmRlbmN5IHtcbiAgICAvKiogTm9tZSBkYSBlbnRpZGFkZSBxdWUgZGVwZW5kZSAocGFpKSAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogQ2FtcG8gZGEgZW50aWRhZGUgcGFpIHF1ZSBzZXLDoSBjb21wYXJhZG8gKi9cbiAgICBmaWVsZD86IHN0cmluZztcbiAgICAvKiogVmFsb3IgZGEgZW50aWRhZGUgcGFpICovXG4gICAgdmFsdWU6IEZ1bmN0aW9uO1xufVxu4oCLXG4vKiogRmlsdHJvIHBhZHLDo28gYXBsaWNhZG8gZW0gdG9kYXMgcmVxdWlzacOnw7VlcyBkYSBlbnRpZGFkZS4gUG9yIHBhZHLDo28gZmlsdHJhIHJlZ2lzdHJvcyBuw6NvIGV4Y2x1aWRvcyAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0RmlsdGVyIHtcbiAgICAvKiogQ2FtcG8gcXVlIHNlcsOhIGZpbHRyYWRvICovXG4gICAgZmllbGQ6IHN0cmluZyB8IERlZmF1bHRGaWx0ZXI7XG4gICAgLyoqIENvbXBhcmHDp8OjbyBxdWUgc2Vyw6EgYXBsaWNhZGEgbmEgY29uc3VsdGEgKi9cbiAgICBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvcjtcbiAgICAvKiogVmFsb3JlcyBxdWUgc2Vyw6NvIGJ1c2NhZG9zICovXG4gICAgdmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqIEZpbHRybyBkaW5hbWljbyBwYXJhIGNvbnN1bHRhcyBtYWlzIGNvbXBsZXhhcyAqL1xuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljRmlsdGVyIHtcbiAgICAvKiogQ2FtcG8gcXVlIHNlcsOhIGZpbHRyYWRvICovXG4gICAgZmllbGQ6IEZ1bmN0aW9uXG4gICAgLyoqIENvbXBhcmHDp8OjbyBxdWUgc2Vyw6EgYXBsaWNhZGEgbmEgY29uc3VsdGEgKi9cbiAgICBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvcjtcbiAgICAvKiogVmFsb3JlcyBxdWUgc2Vyw6NvIGJ1c2NhZG9zICovXG4gICAgdmFsdWU6IEZ1bmN0aW9uO1xufVxuXG4vKiogRmlsdGVyIFN5c3RlbSBRdWVyeSBPcHRpb24gLSBPcGVyYXRvcnMgc3VwcG9ydGVkIGluIHRoZSBleHByZXNzaW9uIGxhbmd1YWdlICovXG5leHBvcnQgZW51bSBFbnVtTG9naWNhbE9wZXJhdG9yIHtcbiAgICAvKiogRXF1YWwgKEV4OiAvU3VwcGxpZXJzPyRmaWx0ZXI9QWRkcmVzcy9DaXR5IGVxICdSZWRtb25kJykgKi9cbiAgICBFcSA9IFwiZXFcIixcbiAgICAvKiogTm90IGVxdWFsIChFeDogL1N1cHBsaWVycz8kZmlsdGVyPUFkZHJlc3MvQ2l0eSBuZSAnTG9uZG9uJykgKi9cbiAgICBOZSA9IFwibmVcIixcbiAgICAvKiogR3JlYXRlciB0aGFuIChFeDogL1Byb2R1Y3RzPyRmaWx0ZXI9UHJpY2UgZ3QgMjApICovXG4gICAgR3QgPSBcImd0XCIsXG4gICAgLyoqIEdyZWF0ZXIgdGhhbiBvciBlcXVhbCAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPVByaWNlIGdlIDEwKSAqL1xuICAgIEdlID0gXCJnZVwiLFxuICAgIC8qKiBMZXNzIHRoYW4gKEV4OiAvUHJvZHVjdHM/JGZpbHRlcj1QcmljZSBsdCAyMCkqL1xuICAgIEx0ID0gXCJsdFwiLFxuICAgIC8qKiBMZXNzIHRoYW4gb3IgZXF1YWwgKEV4OiAvUHJvZHVjdHM/JGZpbHRlcj1QcmljZSBsZSAxMDApKi9cbiAgICBMZSA9IFwibGVcIixcbiAgICAvKiogTG9naWNhbCBhbmRcdCAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPVByaWNlIGxlIDIwMCBhbmQgUHJpY2UgZ3QgMy41KSovXG4gICAgQW5kID0gXCJhbmRcIixcbiAgICAvKiogTG9naWNhbCBvciAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPVByaWNlIGxlIDMuNSBvciBQcmljZSBndCAyMDApKi9cbiAgICBPciA9IFwib3JcIixcbiAgICAvKiogTG9naWNhbCBuZWdhdGlvbiAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPW5vdCBlbmRzd2l0aChEZXNjcmlwdGlvbiwnbWlsaycpKSovXG4gICAgTm90ID0gXCJub3RcIixcbiAgICAvKiogTG9naWNhbCBpcyAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPWlkIGlzIG51bGwgKi9cbiAgICBJcyA9IFwiaXNcIixcbiAgICAvKiogTmVnYXRpb24gb2YgbG9naWNhbCBpcyAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPWlkIGlzIG5vdCBudWxsICovXG4gICAgSXNOb3QgPSBcImlzIG5vdFwiLFxuICAgIC8qKiBDb250YWlucyBzdHJpbmcgdmFsdWUgKEV4OiAvUHJvZHVjdHM/JGZpbHRlcj1jb250YWluaW5nKGxvd2VyKG5hbWUpLCBsb3dlcignbXkgbmFtZScpKSkgKi9cbiAgICBDb250YWlucyA9IFwiY29udGFpbmluZ1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydE9wdGlvbnMge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgb3JkZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRFcnB4IGV4dGVuZHMgRm9ybUZpZWxkIHtcbiAgICBtYXhMZW5ndGg/OiBudW1iZXI7XG59XG5cbi8qKiBQYXLDom1ldHJvcyBwYXJhIGN1c3RvbWl6YcOnw7VlcyBkbyBsb29rdXAgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwT3B0aW9ucyB7XG4gICAgLyoqIE5vbWUgZGEgZW50aWRhZGUgKi9cbiAgICBlbnRpdHk/OiBzdHJpbmc7XG4gICAgLyoqIE5vbWUgZG8gZm9ybUdyb3VwICovXG4gICAgZm9ybUdyb3VwPzogc3RyaW5nO1xuICAgIC8qKiBGaWx0cm8gcGFkcsOjbyAqL1xuICAgIGRlZmF1bHRGaWx0ZXI/OiBEZWZhdWx0RmlsdGVyW107XG4gICAgLyoqIEZpbHRybyBkaW7Dom1pY28gKi9cbiAgICBkeW5hbWljRmlsdGVyPzogRHluYW1pY0ZpbHRlcltdO1xuICAgIC8qKiBDYW1wb3MgZG8gbG9va3VwIChhdXRvY29tcGxldGUpICovXG4gICAgbG9va3VwRmllbGRzPzogKEZvcm1GaWVsZCB8IEZvcm1GaWVsZEVycHgpW107XG4gICAgLyoqIENhbXBvcyBxdWUgc2Vyw6NvIHNvbGljaXRhZG9zIG5hIGNvbnN1bHRhICovXG4gICAgcXVlcnlGaWVsZHM/OiBzdHJpbmdbXTtcbiAgICAvKiogQ2FtcG9zIGV4aWJpZG9zIG5vIGZpbHRybyBkYSBtb2RhbCBkZSBsaXN0YWdlbSAqL1xuICAgIHNlYXJjaEZpZWxkcz86IChGb3JtRmllbGQgfCBFcnBMb29rdXBzRm9ybUZpZWxkKVtdO1xuICAgIC8qKiBDYW1wb3MgZXhpYmlkb3MgbmEgZ3JpZCBkYSBtb2RhbCBkZSBsaXN0YWdlbSAqL1xuICAgIHNlYXJjaEdyaWRGaWVsZHM/OiAoRm9ybUZpZWxkIHwgRm9ybUZpZWxkRXJweClbXTtcbiAgICAvKiogRGVmaW5lIHNlIG8gbG9va3VwIHBlcm1pdGlyw6EgbXVsdGkgc2VsZcOnw6NvICovXG4gICAgbXVsdGlwbGU/OiBib29sZWFuO1xuICAgIC8qKiBFbnRpZGFkZXMgZGUgcXVlIGRlcGVuZGUgKi9cbiAgICBlbnRpdHlEZXBlbmRlbmN5PzogRW50aXR5RGVwZW5kZW5jeVtdO1xuICAgIC8qKiBQcmVmaXhvIHV0aWxpemFkbyBwYXJhIG1vbnRhciBvcyBsYWJlbHMgKHBvciBwYWRyw6NvIHV0aWxpemEgZG9tw61uaW8gZSBzZXJ2acOnbykgKi9cbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gICAgLyoqIFN1Zml4byB1dGlsaXphZG8gcGFyYSBtb250YXIgb3MgbGFiZWxzIChwb3IgcGFkcsOjbyDDqSB2YXppbykgKi9cbiAgICBzdWZmaXg/OiBzdHJpbmc7XG4gICAgLyoqIERvbcOtbmlvICovXG4gICAgZG9tYWluPzogc3RyaW5nO1xuICAgIC8qKiBTZXJ2acOnbyAqL1xuICAgIHNlcnZpY2U/OiBzdHJpbmc7XG4gICAgLyoqIERhdGEga2V5ICovXG4gICAgZGF0YUtleT86IHN0cmluZztcbiAgICAvKiogQ2FtcG9zIHBhcmEgb3JkZW5hw6fDo28gZG8gbG9va3VwIChhdXRvY29tcGxldGUpKi9cbiAgICBsb29rdXBTb3J0PzogU29ydE9wdGlvbnNbXTtcbiAgICAvKiogQ2FtcG9zIHBhcmEgYSBvcmRlbmHDp8OjbyBhbyBhYnJpciBhIG1vZGFsIGRlIGxpc3RhZ2VtICovXG4gICAgc2VhcmNoU29ydD86IFNvcnRPcHRpb25zW107XG59XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUZpbHRlckZ1bmN0aW9uPFQgPSB1bmtub3duPiA9IChvcHRpb25zOiB7XG4gIHZhbHVlOiBUO1xuICBmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0pID0+IHN0cmluZztcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRmlsdGVyPFQgPSB1bmtub3duPiA9IHtcbiAgICBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvcjtcbiAgICB2YWx1ZTogc3RyaW5nIHwgQ3VzdG9tRmlsdGVyRnVuY3Rpb248VD47XG59O1xuXG5leHBvcnQgY2xhc3MgRXJwTG9va3Vwc0Zvcm1GaWVsZDxUID0gdW5rbm93bj4gZXh0ZW5kcyBGb3JtRmllbGQge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZXJwTG9va3Vwc0Zvcm1GaWVsZD86IHtcbiAgICAgICAgICAgIGN1c3RvbUZpbHRlcnM/OiBDdXN0b21GaWx0ZXI8VD5bXTtcbiAgICAgICAgfSxcbiAgICAgICAgLi4uYXJnczogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBGb3JtRmllbGQ+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxu4oCLXG4vKipcbiAqIEVycCBMb29rdXBzXG4gKiBAY2xhc3MgRXJwTG9va3Vwc1xuKi9cbmV4cG9ydCBjbGFzcyBFcnBMb29rdXBzIHtcbiAgICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuICAgIC8qKlxuICAgICAqIENyaWHDp8OjbyBkZSB1bSBsb29rdXAuXG4gICAgICogQHBhcmFtIGVudGl0eSBOb21lIGRhIGVudGlkYWRlLlxuICAgICAqIEBwYXJhbSBsb29rdXBGaWVsZHMgQ2FtcG9zIGV4aWJpZG9zIG5vIGF1dG9jb21wbGV0ZS5cbiAgICAgKiBAcGFyYW0gc2VhcmNoRmllbGRzIENhbXBvcyBleGliaWRvcyBubyBmaWx0cm8gZGVudHJvIGRhIG1vZGFsLlxuICAgICAqIEBwYXJhbSBzZWFyY2hHcmlkRmllbGRzIENhbXBvcyBleGliaWRvcyBuYSB0YWJlbGEgZGVudHJvIGRhIG1vZGFsLlxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBsb29rdXBTZXJ2aWNlOiBFcnBMb29rdXBzU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGVudGl0eTogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgbG9va3VwRmllbGRzOiBGb3JtRmllbGRbXSxcbiAgICAgICAgcHVibGljIHNlYXJjaEZpZWxkczogKEZvcm1GaWVsZCB8IEVycExvb2t1cHNGb3JtRmllbGQpW10sXG4gICAgICAgIHB1YmxpYyBzZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXSxcbiAgICAgICAgcHJvdGVjdGVkIGRvbWFpbjogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgc2VydmljZTogc3RyaW5nLFxuICAgICkge1xuICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcbiAgICAgICAgdGhpcy5kb21haW4gPSBkb21haW47XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMubG9va3VwRmllbGRzID0gbG9va3VwRmllbGRzIHx8IFtdO1xuICAgICAgICB0aGlzLnNlYXJjaEZpZWxkcyA9IHNlYXJjaEZpZWxkcyB8fCBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hHcmlkRmllbGRzID0gc2VhcmNoR3JpZEZpZWxkcyB8fCBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwdWJsaWMgbG9va3VwU2VhcmNoT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG7igItcbiAgICBwdWJsaWMgdG9TbmFrZUNhc2UodmFsdWU6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKD86XnxcXC4/KShbQS1aXSkvZywgZnVuY3Rpb24gKHgsIHkpIHtyZXR1cm4gXCJfXCIgKyB5LnRvTG93ZXJDYXNlKCk7IH0pLnJlcGxhY2UoL15fLywgXCJcIik7XG4gICAgfVxu4oCLXG4gICAgcHVibGljIG1vdW50Rm9ybUZpZWxkKGZpZWxkczogYW55LCBwcmVmaXg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gZmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IHRyYW5zbGF0aW9uS2V5ID0gYCR7cHJlZml4fS5sb29rdXBfJHt0aGlzLnRvU25ha2VDYXNlKHRoaXMuZW50aXR5KX1fJHt0aGlzLnRvU25ha2VDYXNlKGZpZWxkLm5hbWUpfWA7XG4gICAgICAgICAgICBsZXQgbGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRyYW5zbGF0aW9uS2V5KTtcbiAgICAgICAgICAgIGlmIChsYWJlbCA9PT0gdHJhbnNsYXRpb25LZXkpIHtcbiAgICAgICAgICAgICAgICAvLyBNYW50ZXIgY29tcGF0aWJpbGlkYWRlIGNvbSBvcyBsb29rdXBzIGF0dWFpcyBhdMOpIHRvZG9zIGFqdXN0YXJlbVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGZpZWxkLm5hbWUuc3BsaXQoJy4nKS5qb2luKCdfJyk7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25LZXkgPSBgJHtwcmVmaXh9Lmxvb2t1cF8ke3RoaXMudG9TbmFrZUNhc2UodGhpcy5lbnRpdHkpfV8ke3RoaXMudG9TbmFrZUNhc2UoZmllbGROYW1lKX1gO1xuICAgICAgICAgICAgICAgIGxhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcImVycExvb2t1cHNGb3JtRmllbGRcIiBpbiBmaWVsZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJwTG9va3Vwc0Zvcm1GaWVsZChmaWVsZC5lcnBMb29rdXBzRm9ybUZpZWxkLCB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIC4uLmZpZWxkLFxuICAgICAgICAgICAgICAgIGxhYmVsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxu4oCLXG4gICAgcHVibGljIG1vdW50RGVmYXVsdEZpbHRlcihkZWZhdWx0RmlsdGVyOiBEZWZhdWx0RmlsdGVyW10gPSBbe2ZpZWxkOiBcImV4Y2x1aWRvXCIsIG9wZXJhdG9yOiBFbnVtTG9naWNhbE9wZXJhdG9yLkVxLCB2YWx1ZXM6IFtcImZhbHNlXCJdfV0pIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRGaWx0ZXIubWFwKGZpbHRlciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXCIoXCIgKyBmaWx0ZXIudmFsdWVzLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PSBFbnVtTG9naWNhbE9wZXJhdG9yLkNvbnRhaW5zKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtmaWx0ZXIuZmllbGR9KSwgbG93ZXIoJyR7dmFsdWV9JykpYDtcblxuICAgICAgICAgICAgICAgIGlmICgoZmlsdGVyLm9wZXJhdG9yID09IEVudW1Mb2dpY2FsT3BlcmF0b3IuSXNOb3QgfHwgZmlsdGVyLm9wZXJhdG9yID09IEVudW1Mb2dpY2FsT3BlcmF0b3IuSXMpICYmICF2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2ZpbHRlci5maWVsZH0gJHtmaWx0ZXIub3BlcmF0b3J9IG51bGxgO1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtmaWx0ZXIuZmllbGR9ICR7ZmlsdGVyLm9wZXJhdG9yfSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pLmpvaW4oXCIgb3IgXCIpICsgXCIpXCI7XG4gICAgICAgIH0pLmpvaW4oXCIgYW5kIFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbW91bnREeW5hbWljRmlsdGVyKGR5bmFtaWNGaWx0ZXI6IER5bmFtaWNGaWx0ZXJbXSkge1xuICAgICAgICBpZiAoZHluYW1pY0ZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIGR5bmFtaWNGaWx0ZXIubWFwKGZpbHRlciA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IGZpbHRlci52YWx1ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmlsdGVyLmZpZWxkKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBmaWx0ZXIub3BlcmF0b3I7XG5cbiAgICAgICAgICAgICAgICBpZiAoISh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiKFwiICsgdmFsdWVzLm1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IgPT0gRW51bUxvZ2ljYWxPcGVyYXRvci5Db250YWlucylcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke2ZpZWxkfSksIGxvd2VyKCcke3ZhbHVlfScpKWA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKChvcGVyYXRvciA9PSBFbnVtTG9naWNhbE9wZXJhdG9yLklzTm90IHx8IG9wZXJhdG9yID09IEVudW1Mb2dpY2FsT3BlcmF0b3IuSXMpICYmICF2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtmaWVsZH0gJHtvcGVyYXRvcn0gbnVsbGA7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2ZpZWxkfSAke29wZXJhdG9yfSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICB9KS5qb2luKFwiIG9yIFwiKSArIFwiKVwiO1xuICAgICAgICAgICAgfSkuam9pbihcIiBhbmQgXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3VudEN1c3RvbUZpbHRlcih7XG4gICAgICAgIGVycExvb2t1cHNTZWFyY2hGaWVsZCxcbiAgICAgICAgZmlsdGVyRGF0YSxcbiAgICB9OiB7XG4gICAgICAgIGVycExvb2t1cHNTZWFyY2hGaWVsZDogRXJwTG9va3Vwc0Zvcm1GaWVsZDtcbiAgICAgICAgZmlsdGVyRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHsgZXJwTG9va3Vwc0Zvcm1GaWVsZCwgbmFtZSB9ID0gZXJwTG9va3Vwc1NlYXJjaEZpZWxkO1xuXG4gICAgICAgIHJldHVybiBgKCR7ZXJwTG9va3Vwc0Zvcm1GaWVsZC5jdXN0b21GaWx0ZXJzXG4gICAgICAgICAgICAubWFwKCh7IG9wZXJhdG9yLCB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAodmFsdWUgYXMgQ3VzdG9tRmlsdGVyRnVuY3Rpb24pKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJEYXRhW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IgPT09IEVudW1Mb2dpY2FsT3BlcmF0b3IuQ29udGFpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAoY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWV9JykpKWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChvcGVyYXRvciA9PT0gRW51bUxvZ2ljYWxPcGVyYXRvci5Jc05vdCB8fCBvcGVyYXRvciA9PT0gRW51bUxvZ2ljYWxPcGVyYXRvci5JcykgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKCR7bmFtZX0gJHtvcGVyYXRvcn0gbnVsbClgO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBgKCR7bmFtZX0gJHtvcGVyYXRvcn0gJyR7dmFsdWV9JylgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIil9KWA7XG4gICAgfVxu4oCLXG4gICAgcHVibGljIG1vdW50RmlsdGVyUXVlcnkodmFsdWU6IHN0cmluZywgbG9va3VwRmllbGRzOiBGb3JtRmllbGRbXSwgZGVmYXVsdEZpbHRlcj86IERlZmF1bHRGaWx0ZXJbXSwgZHluYW1pY0ZpbHRlcj86IER5bmFtaWNGaWx0ZXJbXSkge1xuICAgICAgICBsZXQgZmlsdGVyUXVlcnk6IHN0cmluZztcbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoTnVtYmVyKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gbG9va3VwRmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBGaWVsZFR5cGUuU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKGNvbnRhaW5pbmcobG93ZXIoJHtmaWVsZC5uYW1lfSksIGxvd2VyKCcke3ZhbHVlfScpKSlgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2FuaXRpemVkVmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzYW5pdGl6ZWRWYWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKCR7ZmllbGQubmFtZX0gZXEgJyR7c2FuaXRpemVkVmFsdWV9JylgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKCR7ZmllbGQubmFtZX0gZXEgJyR7dmFsdWV9JylgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKGZpbHRlciA9PiAhIWZpbHRlcilcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gbG9va3VwRmllbGRzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmllbGQ6IGFueSkgPT4gZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICAgICAgICAubWFwKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKGNvbnRhaW5pbmcobG93ZXIoJHtmaWVsZC5uYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoL1xcXFwvZywgXCJcIikucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKSlgO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdEZpbHRlclF1ZXJ5ID0gdGhpcy5tb3VudERlZmF1bHRGaWx0ZXIoZGVmYXVsdEZpbHRlcik7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyUXVlcnkpXG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGAoKCR7ZGVmYXVsdEZpbHRlclF1ZXJ5fSkgYW5kICgke2ZpbHRlclF1ZXJ5fSkpYDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBcIihcIiArIGZpbHRlclF1ZXJ5ICsgXCIpXCI7XG7igItcbiAgICAgICAgY29uc3QgZHluYW1pY0ZpbHRlclF1ZXJ5ID0gdGhpcy5tb3VudER5bmFtaWNGaWx0ZXIoZHluYW1pY0ZpbHRlcik7XG4gICAgICAgIGlmIChkeW5hbWljRmlsdGVyUXVlcnkpXG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGAoKCR7ZHluYW1pY0ZpbHRlclF1ZXJ5fSkgYW5kICgke2ZpbHRlclF1ZXJ5fSkpYDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBcIihcIiArIGZpbHRlclF1ZXJ5ICsgXCIpXCI7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlclF1ZXJ5O1xuICAgIH1cbuKAi1xuICAgIHB1YmxpYyBtb3VudEVudW1GaWx0ZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBtdWx0aXBsZTogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gbXVsdGlwbGUgPyBgKCR7dmFsdWUubWFwKChzZWxlY3RlZDogYW55KSA9PiBgJHtuYW1lfSBlcSAnJHtzZWxlY3RlZH0nYCkuam9pbihcIiBvciBcIil9KWAgOiBgKCR7bmFtZX0gZXEgJyR7dmFsdWV9JylgO1xuICAgIH1cbuKAi1xuICAgIC8qKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwb3IgbW9udGFyIGFzIG9ww6fDtWVzIHBhZHLDtWVzIHBhcmEgbyBsb29rdXAgZG8gRHluYW1pYyBGb3JtICovXG4gICAgcHVibGljIG1vdW50T3B0aW9ucyhvcHRpb25zOiBMb29rdXBPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gb3B0aW9ucy5wcmVmaXhcbiAgICAgICAgICAgID8gb3B0aW9ucy5wcmVmaXhcbiAgICAgICAgICAgIDogKG9wdGlvbnMuZG9tYWluICYmIG9wdGlvbnMuc2VydmljZSlcbiAgICAgICAgICAgICAgICA/IGAke29wdGlvbnMuZG9tYWlufS4ke29wdGlvbnMuc2VydmljZX1gXG4gICAgICAgICAgICAgICAgOiBgJHt0aGlzLmRvbWFpbn0uJHt0aGlzLnNlcnZpY2V9YDtcblxuICAgICAgICBjb25zdCBzdWZmaXggPSBvcHRpb25zLnN1ZmZpeCA/IGBfJHtvcHRpb25zLnN1ZmZpeH1gIDogXCJcIjtcblxuXG4gICAgICAgIG9wdGlvbnMubG9va3VwRmllbGRzID0gb3B0aW9ucy5sb29rdXBGaWVsZHMgJiYgb3B0aW9ucy5sb29rdXBGaWVsZHMubGVuZ3RoXG4gICAgICAgICAgICA/IG9wdGlvbnMubG9va3VwRmllbGRzXG4gICAgICAgICAgICA6IHRoaXMubG9va3VwRmllbGRzO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBvcHRpb25zLmZvcm1Hcm91cCB8fCB0aGlzLmVudGl0eSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3ByZWZpeH0ubG9va3VwXyR7dGhpcy50b1NuYWtlQ2FzZShvcHRpb25zLmVudGl0eSkgfHwgdGhpcy50b1NuYWtlQ2FzZSh0aGlzLmVudGl0eSl9JHtzdWZmaXh9YCksXG4gICAgICAgICAgICBzZWFyY2hUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHtwcmVmaXh9Lmxvb2t1cF8ke3RoaXMudG9TbmFrZUNhc2Uob3B0aW9ucy5lbnRpdHkpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy50b1NuYWtlQ2FzZSh0aGlzLmVudGl0eSl9X3NlYXJjaF90aXRsZWApLFxuICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkxvb2t1cCxcbiAgICAgICAgICAgIG11bHRpcGxlOiBvcHRpb25zLm11bHRpcGxlID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgICAgIGRhdGFLZXk6IG9wdGlvbnMuZGF0YUtleSB8fCBcImlkXCIsXG4gICAgICAgICAgICBsb29rdXBEaXNwbGF5RmllbGQ6IFwibGFiZWxcIixcbiAgICAgICAgICAgIHNlYXJjaEVtcHR5VGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5ub3RoaW5nX2ZvdW5kYCksXG4gICAgICAgICAgICBmaWx0ZXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHtwcmVmaXh9LmZpbHRlcmApLFxuICAgICAgICAgICAgY2xlYXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHtwcmVmaXh9LmNsZWFyYCksXG4gICAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHtwcmVmaXh9LmNhbmNlbGApLFxuICAgICAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5zZWxlY3RgKSxcbiAgICAgICAgICAgIHNlYXJjaEZpZWxkczogb3B0aW9ucy5zZWFyY2hGaWVsZHMgPyB0aGlzLm1vdW50Rm9ybUZpZWxkKG9wdGlvbnMuc2VhcmNoRmllbGRzLCBwcmVmaXgpIDpcbiAgICAgICAgICAgICAgICB0aGlzLm1vdW50Rm9ybUZpZWxkKHRoaXMuc2VhcmNoRmllbGRzLCBwcmVmaXgpLFxuICAgICAgICAgICAgc2VhcmNoR3JpZEZpZWxkczogb3B0aW9ucy5zZWFyY2hHcmlkRmllbGRzID8gdGhpcy5tb3VudEZvcm1GaWVsZChvcHRpb25zLnNlYXJjaEdyaWRGaWVsZHMsIHByZWZpeCkgOlxuICAgICAgICAgICAgICAgIHRoaXMubW91bnRGb3JtRmllbGQodGhpcy5zZWFyY2hHcmlkRmllbGRzLCBwcmVmaXgpLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNPYnNlcnZhYmxlOiB0aGlzLmxvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSxcbiAgICAgICAgICAgIHNlYXJjaE9ic2VydmFibGU6IHRoaXMubG9va3VwU2VhcmNoT2JzZXJ2YWJsZSxcbiAgICAgICAgICAgIG9uTG9va3VwUmVxdWVzdDogKHZhbHVlOiBzdHJpbmcpID0+IHRoaXMub25Mb29rdXBSZXF1ZXN0KHZhbHVlLCBwcmVmaXgsIG9wdGlvbnMpLFxuICAgICAgICAgICAgb25TZWFyY2hSZXF1ZXN0OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vblNlYXJjaFJlcXVlc3QoZXZlbnQsIHByZWZpeCwgb3B0aW9ucylcbiAgICAgICAgfTtcbiAgICB9XG7igItcbiAgICBwdWJsaWMgZ2V0UHJvcChvYmo6IGFueSwgcGF0aDogYW55LCBwcmVmaXg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PiAocmVzdWx0W3Byb3BdID09PSB1bmRlZmluZWQgfHwgcmVzdWx0W3Byb3BdID09PSBudWxsXG4gICAgICAgICAgICA/IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5lbXB0eV9sYWJlbGApXG4gICAgICAgICAgICA6IHJlc3VsdFtwcm9wXSksIG9iaik7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1ZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmICF2YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAhIXZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBtb3VudEVudGl0eUZpbHRlcihlbnRpdHk6IEVudGl0eURlcGVuZGVuY3ksIHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZW50aXR5LmZpZWxkXG4gICAgICAgICAgICA/IGAoJHtlbnRpdHkubmFtZX0uJHtlbnRpdHkuZmllbGR9IGVxICcke3ZhbHVlW2VudGl0eS5maWVsZF19JylgXG4gICAgICAgICAgICA6IGAoJHtlbnRpdHkubmFtZX0gZXEgJyR7dmFsdWVbZW50aXR5Lm5hbWVdfScpYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Mb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nLCBvcHRpb25zPzogTG9va3VwT3B0aW9ucykge1xuICAgICAgICBjb25zdCBzb3J0ID0gb3B0aW9ucy5sb29rdXBTb3J0O1xuICAgICAgICBjb25zdCBsb29rdXBEaXNwbGF5RmllbGRzID0gb3B0aW9ucy5sb29rdXBGaWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLm5hbWUpO1xuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLm1vdW50RmlsdGVyUXVlcnkodmFsdWUsIG9wdGlvbnMubG9va3VwRmllbGRzLCBvcHRpb25zLmRlZmF1bHRGaWx0ZXIsIG9wdGlvbnMuZHluYW1pY0ZpbHRlcik7XG5cbiAgICAgICAgbGV0IGRpc3BsYXlGaWVsZHMgPSBsb29rdXBEaXNwbGF5RmllbGRzLmNvbmNhdCggKG9wdGlvbnMuc2VhcmNoR3JpZEZpZWxkcyB8fCB0aGlzLnNlYXJjaEdyaWRGaWVsZHMpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkgfHwgW10pO1xuICAgICAgICBpZiAob3B0aW9ucy5xdWVyeUZpZWxkcylcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZHMgPSBkaXNwbGF5RmllbGRzLmNvbmNhdChvcHRpb25zLnF1ZXJ5RmllbGRzKTtcbiAgICAgICAgZGlzcGxheUZpZWxkcyA9IGRpc3BsYXlGaWVsZHMuZmlsdGVyKCh2LCBpKSA9PiBkaXNwbGF5RmllbGRzLmluZGV4T2YodikgPT09IGkpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmVudGl0eURlcGVuZGVuY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eUZpbHRlciA9IG9wdGlvbnMuZW50aXR5RGVwZW5kZW5jeS5tYXAoKGVudGl0eTogRW50aXR5RGVwZW5kZW5jeSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZW50aXR5LnZhbHVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKG5ld1ZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKCR7bmV3VmFsdWUubWFwKCh2YWw6IGFueSkgPT4gdGhpcy5tb3VudEVudGl0eUZpbHRlcihlbnRpdHksIHZhbCkpLmpvaW4oXCIgb3IgXCIpfSlgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKCR7dGhpcy5tb3VudEVudGl0eUZpbHRlcihlbnRpdHksIG5ld1ZhbHVlKX0pYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5maWx0ZXIoZmlsdGVyID0+ICEhZmlsdGVyKS5qb2luIChcIiBhbmQgXCIpO1xuICAgICAgICAgICAgaWYgKGVudGl0eUZpbHRlcilcbiAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeSA/IGZpbHRlclF1ZXJ5ICs9IGAgYW5kICgke2VudGl0eUZpbHRlcn0pYCA6IGZpbHRlclF1ZXJ5ID0gZW50aXR5RmlsdGVyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9va3VwU2VydmljZVxuICAgICAgICAgICAgLmxpc3Qoe1xuICAgICAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICAgICAgZmlsdGVyUXVlcnksXG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgb3B0aW9ucy5kb21haW4gfHwgdGhpcy5kb21haW4sXG4gICAgICAgICAgICBvcHRpb25zLnNlcnZpY2UgfHwgdGhpcy5zZXJ2aWNlKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRJdGVtTGFiZWwoaXRlbSwgcHJlZml4LCBsb29rdXBEaXNwbGF5RmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZS5uZXh0KGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxu4oCLXG4gICAgcHVibGljIG9uU2VhcmNoUmVxdWVzdChldmVudDogYW55LCBwcmVmaXg6IHN0cmluZywgb3B0aW9ucz86IExvb2t1cE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhID8gbXVsdGlTb3J0TWV0YSA6IG9wdGlvbnMuc2VhcmNoU29ydDtcbiAgICAgICAgY29uc3QgbG9va3VwRGlzcGxheUZpZWxkcyA9IG9wdGlvbnMubG9va3VwRmllbGRzLm1hcChmaWVsZCA9PiBmaWVsZC5uYW1lKTtcblxuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSAob3B0aW9ucy5zZWFyY2hGaWVsZHMgfHwgdGhpcy5zZWFyY2hGaWVsZHMpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBuYW1lLCB0eXBlLCBtdWx0aXBsZSwgZXJwTG9va3Vwc0Zvcm1GaWVsZCB9ID0gZm9ybUZpZWxkIGFzIEVycExvb2t1cHNGb3JtRmllbGQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJwTG9va3Vwc0Zvcm1GaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VudEN1c3RvbUZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnBMb29rdXBzU2VhcmNoRmllbGQ6IGZvcm1GaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tb3VudEVudW1GaWx0ZXIobmFtZSwgdmFsdWUsIG11bHRpcGxlKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlfScpKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5Mb29rdXApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKCR7bmFtZX0gZXEgJyR7dmFsdWUuaWR9JylgO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG7igItcbiAgICAgICAgaWYgKG9wdGlvbnMuZW50aXR5RGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5RmlsdGVyID0gb3B0aW9ucy5lbnRpdHlEZXBlbmRlbmN5Lm1hcCgoZW50aXR5OiBFbnRpdHlEZXBlbmRlbmN5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlbnRpdHkudmFsdWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzVmFsdWUodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKCR7dmFsdWUubWFwKCh2YWw6IGFueSkgPT4gdGhpcy5tb3VudEVudGl0eUZpbHRlcihlbnRpdHksIHZhbCkpLmpvaW4oXCIgb3IgXCIpfSlgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgKCR7dGhpcy5tb3VudEVudGl0eUZpbHRlcihlbnRpdHksIHZhbHVlKX0pYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5maWx0ZXIoZmlsdGVyID0+ICEhZmlsdGVyKS5qb2luIChcIiBhbmQgXCIpO1xuICAgICAgICAgICAgaWYgKGVudGl0eUZpbHRlcilcbiAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeSA/IGZpbHRlclF1ZXJ5ICs9IGAgYW5kICgke2VudGl0eUZpbHRlcn0pYCA6IGZpbHRlclF1ZXJ5ID0gZW50aXR5RmlsdGVyO1xuICAgICAgICB9XG7igItcbiAgICAgICAgY29uc3QgZGVmYXVsdEZpbHRlclF1ZXJ5ID0gdGhpcy5tb3VudERlZmF1bHRGaWx0ZXIob3B0aW9ucy5kZWZhdWx0RmlsdGVyKTtcblxuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlclF1ZXJ5KVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPyBmaWx0ZXJRdWVyeSArPSBgIGFuZCAoJHtkZWZhdWx0RmlsdGVyUXVlcnl9KWAgOiBmaWx0ZXJRdWVyeSA9IGAoJHtkZWZhdWx0RmlsdGVyUXVlcnl9KWA7XG5cbiAgICAgICAgY29uc3QgZHluYW1pY0ZpbHRlclF1ZXJ5ID0gdGhpcy5tb3VudER5bmFtaWNGaWx0ZXIob3B0aW9ucy5keW5hbWljRmlsdGVyKTtcblxuICAgICAgICBpZiAoZHluYW1pY0ZpbHRlclF1ZXJ5KVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPyBmaWx0ZXJRdWVyeSArPSBgIGFuZCAoJHtkeW5hbWljRmlsdGVyUXVlcnl9KWAgOiBmaWx0ZXJRdWVyeSA9IGAoJHtkeW5hbWljRmlsdGVyUXVlcnl9KWA7XG5cbiAgICAgICAgbGV0IGRpc3BsYXlGaWVsZHMgPSBsb29rdXBEaXNwbGF5RmllbGRzLmNvbmNhdCgob3B0aW9ucy5zZWFyY2hHcmlkRmllbGRzIHx8IHRoaXMuc2VhcmNoR3JpZEZpZWxkcylcbiAgICAgICAgICAgICAgICAuY29uY2F0KG9wdGlvbnMuc2VhcmNoR3JpZEZpZWxkcyB8fCBbXSlcbiAgICAgICAgICAgICAgICAubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkgfHwgW10pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnF1ZXJ5RmllbGRzKVxuICAgICAgICAgICAgZGlzcGxheUZpZWxkcyA9IGRpc3BsYXlGaWVsZHMuY29uY2F0KG9wdGlvbnMucXVlcnlGaWVsZHMpO1xuXG4gICAgICAgIGRpc3BsYXlGaWVsZHMgPSBkaXNwbGF5RmllbGRzLmZpbHRlcigodiwgaSkgPT4gZGlzcGxheUZpZWxkcy5pbmRleE9mKHYpID09PSBpKTtcblxuICAgICAgICB0aGlzLmxvb2t1cFNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSwgdGhpcy5lbnRpdHksIG9wdGlvbnMuZG9tYWluIHx8IHRoaXMuZG9tYWluLCBvcHRpb25zLnNlcnZpY2UgfHwgdGhpcy5zZXJ2aWNlKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ3JpYXIgdW0gbWFwYSBkZSBjYW1wb3MgY29tIG1heExlbmd0aCBkZWZpbmlkb1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkc1dpdGhNYXhMZW5ndGggPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIFsuLi4ob3B0aW9ucy5zZWFyY2hGaWVsZHMgfHwgdGhpcy5zZWFyY2hGaWVsZHMpLCAuLi4ob3B0aW9ucy5zZWFyY2hHcmlkRmllbGRzIHx8IHRoaXMuc2VhcmNoR3JpZEZpZWxkcyldXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGZpZWxkOiBGb3JtRmllbGRFcnB4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5tYXhMZW5ndGggJiYgXG4gICAgICAgICAgICAgICAgICAgIChmaWVsZC50eXBlID09PSBGaWVsZFR5cGUuU3RyaW5nIHx8IGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5UZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHNXaXRoTWF4TGVuZ3RoLnNldChmaWVsZC5uYW1lLCBmaWVsZC5tYXhMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBncmlkRGF0YTogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBBcGxpY2FyIG1heExlbmd0aCBub3MgY2FtcG9zIHF1ZSBwb3NzdWVtIGEgY29uZmlndXJhw6fDo29cbiAgICAgICAgICAgICAgICAgICAgZmllbGRzV2l0aE1heExlbmd0aC5mb3JFYWNoKChtYXhMZW5ndGgsIGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocHJvY2Vzc2VkSXRlbSwgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlICYmIHR5cGVvZiBmaWVsZFZhbHVlID09PSAnc3RyaW5nJyAmJiBmaWVsZFZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocHJvY2Vzc2VkSXRlbSwgZmllbGROYW1lLCBmaWVsZFZhbHVlLnN1YnN0cmluZygwLCBtYXhMZW5ndGgpICsgJy4uLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnByb2Nlc3NlZEl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldEl0ZW1MYWJlbChwcm9jZXNzZWRJdGVtLCBwcmVmaXgsIGxvb2t1cERpc3BsYXlGaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb29rdXBTZWFyY2hPYnNlcnZhYmxlLm5leHQoZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRJdGVtTGFiZWwoaXRlbTogYW55LCBwcmVmaXg6IHN0cmluZywgbG9va3VwRGlzcGxheUZpZWxkczogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgIC5tYXAoKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkLCBwcmVmaXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIGl0ZW1bZmllbGRdICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gaXRlbVtmaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3ByZWZpeH0uZW1wdHlfbGFiZWxgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiAtIFwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKChjdXJyZW50LCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50ICYmIGN1cnJlbnRba2V5XSAhPT0gdW5kZWZpbmVkID8gY3VycmVudFtrZXldIDogdW5kZWZpbmVkO1xuICAgICAgICB9LCBvYmopO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBrZXlzLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudCAmJiBjdXJyZW50W2tleV0gIT09IHVuZGVmaW5lZCA/IGN1cnJlbnRba2V5XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSwgb2JqKTtcbiAgICAgICAgaWYgKHRhcmdldCAmJiBsYXN0S2V5KSB7XG4gICAgICAgICAgICB0YXJnZXRbbGFzdEtleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -513,10 +513,31 @@ class ErpLookups {
513
513
  this.lookupService
514
514
  .list({ page, sort, filterQuery, displayFields }, this.entity, options.domain || this.domain, options.service || this.service)
515
515
  .pipe(takeUntil(this.ngUnsubscribe))
516
- .pipe(map((list) => ({
517
- gridData: list.contents.map((item) => (Object.assign(Object.assign({}, item), { label: this.getItemLabel(item, prefix, lookupDisplayFields) }))),
518
- totalRecords: list.totalElements
519
- })))
516
+ .pipe(map((list) => {
517
+ // Criar um mapa de campos com maxLength definido
518
+ const fieldsWithMaxLength = new Map();
519
+ [...(options.searchFields || this.searchFields), ...(options.searchGridFields || this.searchGridFields)]
520
+ .forEach((field) => {
521
+ if (field.maxLength &&
522
+ (field.type === FieldType.String || field.type === FieldType.Text)) {
523
+ fieldsWithMaxLength.set(field.name, field.maxLength);
524
+ }
525
+ });
526
+ return {
527
+ gridData: list.contents.map((item) => {
528
+ const processedItem = JSON.parse(JSON.stringify(item));
529
+ // Aplicar maxLength nos campos que possuem a configuração
530
+ fieldsWithMaxLength.forEach((maxLength, fieldName) => {
531
+ const fieldValue = this.getNestedValue(processedItem, fieldName);
532
+ if (fieldValue && typeof fieldValue === 'string' && fieldValue.length > maxLength) {
533
+ this.setNestedValue(processedItem, fieldName, fieldValue.substring(0, maxLength) + '...');
534
+ }
535
+ });
536
+ return Object.assign(Object.assign({}, processedItem), { label: this.getItemLabel(processedItem, prefix, lookupDisplayFields) });
537
+ }),
538
+ totalRecords: list.totalElements
539
+ };
540
+ }))
520
541
  .subscribe((data) => {
521
542
  this.lookupSearchObservable.next(data);
522
543
  });
@@ -532,6 +553,21 @@ class ErpLookups {
532
553
  })
533
554
  .join(" - ");
534
555
  }
556
+ getNestedValue(obj, path) {
557
+ return path.split(".").reduce((current, key) => {
558
+ return current && current[key] !== undefined ? current[key] : undefined;
559
+ }, obj);
560
+ }
561
+ setNestedValue(obj, path, value) {
562
+ const keys = path.split(".");
563
+ const lastKey = keys.pop();
564
+ const target = keys.reduce((current, key) => {
565
+ return current && current[key] !== undefined ? current[key] : undefined;
566
+ }, obj);
567
+ if (target && lastKey) {
568
+ target[lastKey] = value;
569
+ }
570
+ }
535
571
  };
536
572
  ErpLookups.ctorParameters = () => [
537
573
  { type: ErpLookupsService },