@senior-gestao-empresarial/angular-components 7.15.0 → 7.16.0-d01f48ea-688f-4b39-a69c-784ec06abbf5

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.
@@ -1,4 +1,4 @@
1
- import { __assign, __decorate } from "tslib";
1
+ import { __assign, __decorate, __extends, __read, __spread } from "tslib";
2
2
  import * as moment_ from "moment";
3
3
  import { FormField, FieldType } from "@seniorsistemas/angular-components";
4
4
  import { ErpLookupsService } from "./erp-lookups.service";
@@ -35,6 +35,20 @@ export var EnumLogicalOperator;
35
35
  /** Contains string value (Ex: /Products?$filter=containing(lower(name), lower('my name'))) */
36
36
  EnumLogicalOperator["Contains"] = "containing";
37
37
  })(EnumLogicalOperator || (EnumLogicalOperator = {}));
38
+ var ErpLookupsFormField = /** @class */ (function (_super) {
39
+ __extends(ErpLookupsFormField, _super);
40
+ function ErpLookupsFormField(erpLookupsFormField) {
41
+ var args = [];
42
+ for (var _i = 1; _i < arguments.length; _i++) {
43
+ args[_i - 1] = arguments[_i];
44
+ }
45
+ var _this = _super.apply(this, __spread(args)) || this;
46
+ _this.erpLookupsFormField = erpLookupsFormField;
47
+ return _this;
48
+ }
49
+ return ErpLookupsFormField;
50
+ }(FormField));
51
+ export { ErpLookupsFormField };
38
52
  var ErpLookups = /** @class */ (function () {
39
53
  /**
40
54
  * Criação de um lookup.
@@ -77,6 +91,9 @@ var ErpLookups = /** @class */ (function () {
77
91
  translationKey = prefix + ".lookup_" + _this.toSnakeCase(_this.entity) + "_" + _this.toSnakeCase(fieldName);
78
92
  label = _this.translate.instant(translationKey);
79
93
  }
94
+ if ("erpLookupsFormField" in field) {
95
+ return new ErpLookupsFormField(field.erpLookupsFormField, __assign(__assign({}, field), { label: label }));
96
+ }
80
97
  return new FormField(__assign(__assign({}, field), { label: label }));
81
98
  });
82
99
  };
@@ -111,6 +128,29 @@ var ErpLookups = /** @class */ (function () {
111
128
  }).join(" and ");
112
129
  }
113
130
  };
131
+ ErpLookups.prototype.mountCustomFilter = function (_a) {
132
+ var erpLookupsSearchField = _a.erpLookupsSearchField, filterData = _a.filterData;
133
+ var erpLookupsFormField = erpLookupsSearchField.erpLookupsFormField, name = erpLookupsSearchField.name;
134
+ return "(" + erpLookupsFormField.customFilters
135
+ .map(function (_a) {
136
+ var operator = _a.operator, value = _a.value;
137
+ value =
138
+ typeof value === "function"
139
+ ? value({
140
+ value: filterData[name],
141
+ filterData: filterData,
142
+ })
143
+ : value;
144
+ if (operator === EnumLogicalOperator.Contains) {
145
+ return "(containing(lower(" + name + "), lower('" + value + "')))";
146
+ }
147
+ if ((operator === EnumLogicalOperator.IsNot || operator === EnumLogicalOperator.Is) && !value) {
148
+ return "(" + name + " " + operator + " null)";
149
+ }
150
+ return "(" + name + " " + operator + " '" + value + "')";
151
+ })
152
+ .join(" and ") + ")";
153
+ };
114
154
  ErpLookups.prototype.mountFilterQuery = function (value, lookupFields, defaultFilter, dynamicFilter) {
115
155
  var filterQuery;
116
156
  if (Number.isInteger(Number(value))) {
@@ -260,9 +300,15 @@ var ErpLookups = /** @class */ (function () {
260
300
  var name = _a.name;
261
301
  return filterData[name] != undefined && filterData[name] != "";
262
302
  })
263
- .map(function (_a) {
264
- var name = _a.name, type = _a.type, multiple = _a.multiple;
303
+ .map(function (formField) {
304
+ var _a = formField, name = _a.name, type = _a.type, multiple = _a.multiple, erpLookupsFormField = _a.erpLookupsFormField;
265
305
  var value = filterData[name];
306
+ if (erpLookupsFormField) {
307
+ return _this.mountCustomFilter({
308
+ erpLookupsSearchField: formField,
309
+ filterData: filterData,
310
+ });
311
+ }
266
312
  if (typeof value == "number")
267
313
  return name + " eq " + value;
268
314
  else if (type == FieldType.Date)
@@ -277,8 +323,7 @@ var ErpLookups = /** @class */ (function () {
277
323
  return "(containing(lower(" + name + "), lower('" + value + "')))";
278
324
  else if (type === FieldType.Lookup)
279
325
  return "(" + name + " eq '" + value.id + "')";
280
- else
281
- return name + " eq '" + value + "'";
326
+ return name + " eq '" + value + "'";
282
327
  })
283
328
  .join(" and ");
284
329
  if (options.entityDependency) {
@@ -354,4 +399,4 @@ var ErpLookups = /** @class */ (function () {
354
399
  return ErpLookups;
355
400
  }());
356
401
  export { ErpLookups };
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJwLWxvb2t1cHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2xvb2t1cHMvZXJwLWxvb2t1cHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBZ0N2QixrRkFBa0Y7QUFDbEYsTUFBTSxDQUFOLElBQVksbUJBeUJYO0FBekJELFdBQVksbUJBQW1CO0lBQzNCLCtEQUErRDtJQUMvRCxnQ0FBUyxDQUFBO0lBQ1Qsa0VBQWtFO0lBQ2xFLGdDQUFTLENBQUE7SUFDVCx1REFBdUQ7SUFDdkQsZ0NBQVMsQ0FBQTtJQUNULGdFQUFnRTtJQUNoRSxnQ0FBUyxDQUFBO0lBQ1QsbURBQW1EO0lBQ25ELGdDQUFTLENBQUE7SUFDVCw2REFBNkQ7SUFDN0QsZ0NBQVMsQ0FBQTtJQUNULHdFQUF3RTtJQUN4RSxrQ0FBVyxDQUFBO0lBQ1gscUVBQXFFO0lBQ3JFLGdDQUFTLENBQUE7SUFDVCwrRUFBK0U7SUFDL0Usa0NBQVcsQ0FBQTtJQUNYLG1EQUFtRDtJQUNuRCxnQ0FBUyxDQUFBO0lBQ1QsbUVBQW1FO0lBQ25FLHVDQUFnQixDQUFB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QyxLQUFLLENBQUM7Z0JBQ2IsQ0FBQyxDQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFJLE1BQU0saUJBQWMsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDOztnQkE3VDRCLGlCQUFpQjtnQkFDckIsZ0JBQWdCOzs7Ozs7OztJQVhoQyxVQUFVO1FBTnRCLFVBQVUsRUFBRTtRQUViOzs7VUFHRTtPQUNXLFVBQVUsQ0F3VXRCO0lBQUQsaUJBQUM7Q0FBQSxBQXhVRCxJQXdVQztTQXhVWSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBGb3JtRmllbGQsIEZpZWxkVHlwZSB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBFcnBMb29rdXBzU2VydmljZSB9IGZyb20gXCIuL2VycC1sb29rdXBzLnNlcnZpY2VcIjtcbuKAi1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwsIG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbuKAi1xuY29uc3QgbW9tZW50ID0gbW9tZW50XztcblxuLyoqIEVudGlkYWRlcyBkZSBxdWUgZGVwZW5kZSAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlEZXBlbmRlbmN5IHtcbiAgICAvKiogTm9tZSBkYSBlbnRpZGFkZSBxdWUgZGVwZW5kZSAocGFpKSAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogQ2FtcG8gZGEgZW50aWRhZGUgcGFpIHF1ZSBzZXLDoSBjb21wYXJhZG8gKi9cbiAgICBmaWVsZD86IHN0cmluZztcbiAgICAvKiogVmFsb3IgZGEgZW50aWRhZGUgcGFpICovXG4gICAgdmFsdWU6IEZ1bmN0aW9uO1xufVxu4oCLXG4vKiogRmlsdHJvIHBhZHLDo28gYXBsaWNhZG8gZW0gdG9kYXMgcmVxdWlzacOnw7VlcyBkYSBlbnRpZGFkZS4gUG9yIHBhZHLDo28gZmlsdHJhIHJlZ2lzdHJvcyBuw6NvIGV4Y2x1aWRvcyAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0RmlsdGVyIHtcbiAgICAvKiogQ2FtcG8gcXVlIHNlcsOhIGZpbHRyYWRvICovXG4gICAgZmllbGQ6IHN0cmluZyB8IERlZmF1bHRGaWx0ZXI7XG4gICAgLyoqIENvbXBhcmHDp8OjbyBxdWUgc2Vyw6EgYXBsaWNhZGEgbmEgY29uc3VsdGEgKi9cbiAgICBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvcjtcbiAgICAvKiogVmFsb3JlcyBxdWUgc2Vyw6NvIGJ1c2NhZG9zICovXG4gICAgdmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqIEZpbHRybyBkaW5hbWljbyBwYXJhIGNvbnN1bHRhcyBtYWlzIGNvbXBsZXhhcyAqL1xuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljRmlsdGVyIHtcbiAgICAvKiogQ2FtcG8gcXVlIHNlcsOhIGZpbHRyYWRvICovXG4gICAgZmllbGQ6IEZ1bmN0aW9uXG4gICAgLyoqIENvbXBhcmHDp8OjbyBxdWUgc2Vyw6EgYXBsaWNhZGEgbmEgY29uc3VsdGEgKi9cbiAgICBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvcjtcbiAgICAvKiogVmFsb3JlcyBxdWUgc2Vyw6NvIGJ1c2NhZG9zICovXG4gICAgdmFsdWU6IEZ1bmN0aW9uO1xufVxuXG4vKiogRmlsdGVyIFN5c3RlbSBRdWVyeSBPcHRpb24gLSBPcGVyYXRvcnMgc3VwcG9ydGVkIGluIHRoZSBleHByZXNzaW9uIGxhbmd1YWdlICovXG5leHBvcnQgZW51bSBFbnVtTG9naWNhbE9wZXJhdG9yIHtcbiAgICAvKiogRXF1YWwgKEV4OiAvU3VwcGxpZXJzPyRmaWx0ZXI9QWRkcmVzcy9DaXR5IGVxICdSZWRtb25kJykgKi9cbiAgICBFcSA9IFwiZXFcIixcbiAgICAvKiogTm90IGVxdWFsIChFeDogL1N1cHBsaWVycz8kZmlsdGVyPUFkZHJlc3MvQ2l0eSBuZSAnTG9uZG9uJykgKi9cbiAgICBOZSA9IFwibmVcIixcbiAgICAvKiogR3JlYXRlciB0aGFuIChFeDogL1Byb2R1Y3RzPyRmaWx0ZXI9UHJpY2UgZ3QgMjApICovXG4gICAgR3QgPSBcImd0XCIsXG4gICAgLyoqIEdyZWF0ZXIgdGhhbiBvciBlcXVhbCAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPVByaWNlIGdlIDEwKSAqL1xuICAgIEdlID0gXCJnZVwiLFxuICAgIC8qKiBMZXNzIHRoYW4gKEV4OiAvUHJvZHVjdHM/JGZpbHRlcj1QcmljZSBsdCAyMCkqL1xuICAgIEx0ID0gXCJsdFwiLFxuICAgIC8qKiBMZXNzIHRoYW4gb3IgZXF1YWwgKEV4OiAvUHJvZHVjdHM/JGZpbHRlcj1QcmljZSBsZSAxMDApKi9cbiAgICBMZSA9IFwibGVcIixcbiAgICAvKiogTG9naWNhbCBhbmRcdCAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPVByaWNlIGxlIDIwMCBhbmQgUHJpY2UgZ3QgMy41KSovXG4gICAgQW5kID0gXCJhbmRcIixcbiAgICAvKiogTG9naWNhbCBvciAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPVByaWNlIGxlIDMuNSBvciBQcmljZSBndCAyMDApKi9cbiAgICBPciA9IFwib3JcIixcbiAgICAvKiogTG9naWNhbCBuZWdhdGlvbiAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPW5vdCBlbmRzd2l0aChEZXNjcmlwdGlvbiwnbWlsaycpKSovXG4gICAgTm90ID0gXCJub3RcIixcbiAgICAvKiogTG9naWNhbCBpcyAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPWlkIGlzIG51bGwgKi9cbiAgICBJcyA9IFwiaXNcIixcbiAgICAvKiogTmVnYXRpb24gb2YgbG9naWNhbCBpcyAoRXg6IC9Qcm9kdWN0cz8kZmlsdGVyPWlkIGlzIG5vdCBudWxsICovXG4gICAgSXNOb3QgPSBcImlzIG5vdFwiLFxuICAgIC8qKiBDb250YWlucyBzdHJpbmcgdmFsdWUgKEV4OiAvUHJvZHVjdHM/JGZpbHRlcj1jb250YWluaW5nKGxvd2VyKG5hbWUpLCBsb3dlcignbXkgbmFtZScpKSkgKi9cbiAgICBDb250YWlucyA9IFwiY29udGFpbmluZ1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydE9wdGlvbnMge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgb3JkZXI6IG51bWJlcjtcbn1cblxuLyoqIFBhcsOibWV0cm9zIHBhcmEgY3VzdG9taXphw6fDtWVzIGRvIGxvb2t1cCAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29rdXBPcHRpb25zIHtcbiAgICAvKiogTm9tZSBkYSBlbnRpZGFkZSAqL1xuICAgIGVudGl0eT86IHN0cmluZztcbiAgICAvKiogTm9tZSBkbyBmb3JtR3JvdXAgKi9cbiAgICBmb3JtR3JvdXA/OiBzdHJpbmc7XG4gICAgLyoqIEZpbHRybyBwYWRyw6NvICovXG4gICAgZGVmYXVsdEZpbHRlcj86IERlZmF1bHRGaWx0ZXJbXTtcbiAgICAvKiogRmlsdHJvIGRpbsOibWljbyAqL1xuICAgIGR5bmFtaWNGaWx0ZXI/OiBEeW5hbWljRmlsdGVyW107XG4gICAgLyoqIENhbXBvcyBkbyBsb29rdXAgKGF1dG9jb21wbGV0ZSkgKi9cbiAgICBsb29rdXBGaWVsZHM/OiBGb3JtRmllbGRbXTtcbiAgICAvKiogQ2FtcG9zIHF1ZSBzZXLDo28gc29saWNpdGFkb3MgbmEgY29uc3VsdGEgKi9cbiAgICBxdWVyeUZpZWxkcz86IHN0cmluZ1tdO1xuICAgIC8qKiBDYW1wb3MgZXhpYmlkb3Mgbm8gZmlsdHJvIGRhIG1vZGFsIGRlIGxpc3RhZ2VtICovXG4gICAgc2VhcmNoRmllbGRzPzogRm9ybUZpZWxkW107XG4gICAgLyoqIENhbXBvcyBleGliaWRvcyBuYSBncmlkIGRhIG1vZGFsIGRlIGxpc3RhZ2VtICovXG4gICAgc2VhcmNoR3JpZEZpZWxkcz86IEZvcm1GaWVsZFtdO1xuICAgIC8qKiBEZWZpbmUgc2UgbyBsb29rdXAgcGVybWl0aXLDoSBtdWx0aSBzZWxlw6fDo28gKi9cbiAgICBtdWx0aXBsZT86IGJvb2xlYW47XG4gICAgLyoqIEVudGlkYWRlcyBkZSBxdWUgZGVwZW5kZSAqL1xuICAgIGVudGl0eURlcGVuZGVuY3k/OiBFbnRpdHlEZXBlbmRlbmN5W107XG4gICAgLyoqIFByZWZpeG8gdXRpbGl6YWRvIHBhcmEgbW9udGFyIG9zIGxhYmVscyAocG9yIHBhZHLDo28gdXRpbGl6YSBkb23DrW5pbyBlIHNlcnZpw6dvKSAqL1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgICAvKiogU3VmaXhvIHV0aWxpemFkbyBwYXJhIG1vbnRhciBvcyBsYWJlbHMgKHBvciBwYWRyw6NvIMOpIHZhemlvKSAqL1xuICAgIHN1ZmZpeD86IHN0cmluZztcbiAgICAvKiogRG9tw61uaW8gKi9cbiAgICBkb21haW4/OiBzdHJpbmc7XG4gICAgLyoqIFNlcnZpw6dvICovXG4gICAgc2VydmljZT86IHN0cmluZztcbiAgICAvKiogRGF0YSBrZXkgKi9cbiAgICBkYXRhS2V5Pzogc3RyaW5nO1xuICAgIC8qKiBDYW1wb3MgcGFyYSBvcmRlbmHDp8OjbyBkbyBsb29rdXAgKGF1dG9jb21wbGV0ZSkqL1xuICAgIGxvb2t1cFNvcnQ/OiBTb3J0T3B0aW9uc1tdO1xuICAgIC8qKiBDYW1wb3MgcGFyYSBhIG9yZGVuYcOnw6NvIGFvIGFicmlyIGEgbW9kYWwgZGUgbGlzdGFnZW0gKi9cbiAgICBzZWFyY2hTb3J0PzogU29ydE9wdGlvbnNbXTtcbn1cblxuQEluamVjdGFibGUoKVxu4oCLXG4vKipcbiAqIEVycCBMb29rdXBzXG4gKiBAY2xhc3MgRXJwTG9va3Vwc1xuKi9cbmV4cG9ydCBjbGFzcyBFcnBMb29rdXBzIHtcbiAgICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuICAgIC8qKlxuICAgICAqIENyaWHDp8OjbyBkZSB1bSBsb29rdXAuXG4gICAgICogQHBhcmFtIGVudGl0eSBOb21lIGRhIGVudGlkYWRlLlxuICAgICAqIEBwYXJhbSBsb29rdXBGaWVsZHMgQ2FtcG9zIGV4aWJpZG9zIG5vIGF1dG9jb21wbGV0ZS5cbiAgICAgKiBAcGFyYW0gc2VhcmNoRmllbGRzIENhbXBvcyBleGliaWRvcyBubyBmaWx0cm8gZGVudHJvIGRhIG1vZGFsLlxuICAgICAqIEBwYXJhbSBzZWFyY2hHcmlkRmllbGRzIENhbXBvcyBleGliaWRvcyBuYSB0YWJlbGEgZGVudHJvIGRhIG1vZGFsLlxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBsb29rdXBTZXJ2aWNlOiBFcnBMb29rdXBzU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGVudGl0eTogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgbG9va3VwRmllbGRzOiBGb3JtRmllbGRbXSxcbiAgICAgICAgcHVibGljIHNlYXJjaEZpZWxkczogRm9ybUZpZWxkW10sXG4gICAgICAgIHB1YmxpYyBzZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXSxcbiAgICAgICAgcHJvdGVjdGVkIGRvbWFpbjogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgc2VydmljZTogc3RyaW5nLFxuICAgICkge1xuICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcbiAgICAgICAgdGhpcy5kb21haW4gPSBkb21haW47XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMubG9va3VwRmllbGRzID0gbG9va3VwRmllbGRzIHx8IFtdO1xuICAgICAgICB0aGlzLnNlYXJjaEZpZWxkcyA9IHNlYXJjaEZpZWxkcyB8fCBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hHcmlkRmllbGRzID0gc2VhcmNoR3JpZEZpZWxkcyB8fCBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwdWJsaWMgbG9va3VwU2VhcmNoT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG7igItcbiAgICBwdWJsaWMgdG9TbmFrZUNhc2UodmFsdWU6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKD86XnxcXC4/KShbQS1aXSkvZywgZnVuY3Rpb24gKHgsIHkpIHtyZXR1cm4gXCJfXCIgKyB5LnRvTG93ZXJDYXNlKCk7IH0pLnJlcGxhY2UoL15fLywgXCJcIik7XG4gICAgfVxu4oCLXG4gICAgcHVibGljIG1vdW50Rm9ybUZpZWxkKGZpZWxkczogYW55LCBwcmVmaXg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gZmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IHRyYW5zbGF0aW9uS2V5ID0gYCR7cHJlZml4fS5sb29rdXBfJHt0aGlzLnRvU25ha2VDYXNlKHRoaXMuZW50aXR5KX1fJHt0aGlzLnRvU25ha2VDYXNlKGZpZWxkLm5hbWUpfWA7XG4gICAgICAgICAgICBsZXQgbGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRyYW5zbGF0aW9uS2V5KTtcbiAgICAgICAgICAgIGlmIChsYWJlbCA9PT0gdHJhbnNsYXRpb25LZXkpIHtcbiAgICAgICAgICAgICAgICAvLyBNYW50ZXIgY29tcGF0aWJpbGlkYWRlIGNvbSBvcyBsb29rdXBzIGF0dWFpcyBhdMOpIHRvZG9zIGFqdXN0YXJlbVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGZpZWxkLm5hbWUuc3BsaXQoJy4nKS5qb2luKCdfJyk7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25LZXkgPSBgJHtwcmVmaXh9Lmxvb2t1cF8ke3RoaXMudG9TbmFrZUNhc2UodGhpcy5lbnRpdHkpfV8ke3RoaXMudG9TbmFrZUNhc2UoZmllbGROYW1lKX1gO1xuICAgICAgICAgICAgICAgIGxhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgICAgICAgICBsYWJlbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbuKAi1xuICAgIHB1YmxpYyBtb3VudERlZmF1bHRGaWx0ZXIoZGVmYXVsdEZpbHRlcjogRGVmYXVsdEZpbHRlcltdID0gW3tmaWVsZDogXCJleGNsdWlkb1wiLCBvcGVyYXRvcjogRW51bUxvZ2ljYWxPcGVyYXRvci5FcSwgdmFsdWVzOiBbXCJmYWxzZVwiXX1dKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFwiKFwiICsgZmlsdGVyLnZhbHVlcy5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIub3BlcmF0b3IgPT0gRW51bUxvZ2ljYWxPcGVyYXRvci5Db250YWlucylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7ZmlsdGVyLmZpZWxkfSksIGxvd2VyKCcke3ZhbHVlfScpKWA7XG5cbiAgICAgICAgICAgICAgICBpZiAoKGZpbHRlci5vcGVyYXRvciA9PSBFbnVtTG9naWNhbE9wZXJhdG9yLklzTm90IHx8IGZpbHRlci5vcGVyYXRvciA9PSBFbnVtTG9naWNhbE9wZXJhdG9yLklzKSAmJiAhdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtmaWx0ZXIuZmllbGR9ICR7ZmlsdGVyLm9wZXJhdG9yfSBudWxsYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZmlsdGVyLmZpZWxkfSAke2ZpbHRlci5vcGVyYXRvcn0gJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KS5qb2luKFwiIG9yIFwiKSArIFwiKVwiO1xuICAgICAgICB9KS5qb2luKFwiIGFuZCBcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG1vdW50RHluYW1pY0ZpbHRlcihkeW5hbWljRmlsdGVyOiBEeW5hbWljRmlsdGVyW10pIHtcbiAgICAgICAgaWYgKGR5bmFtaWNGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBkeW5hbWljRmlsdGVyLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBmaWx0ZXIudmFsdWUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpbHRlci5maWVsZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yID0gZmlsdGVyLm9wZXJhdG9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEodmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBcIihcIiArIHZhbHVlcy5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09IEVudW1Mb2dpY2FsT3BlcmF0b3IuQ29udGFpbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtmaWVsZH0pLCBsb3dlcignJHt2YWx1ZX0nKSlgO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgob3BlcmF0b3IgPT0gRW51bUxvZ2ljYWxPcGVyYXRvci5Jc05vdCB8fCBvcGVyYXRvciA9PSBFbnVtTG9naWNhbE9wZXJhdG9yLklzKSAmJiAhdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZmllbGR9ICR7b3BlcmF0b3J9IG51bGxgO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtmaWVsZH0gJHtvcGVyYXRvcn0gJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfSkuam9pbihcIiBvciBcIikgKyBcIilcIjtcbiAgICAgICAgICAgIH0pLmpvaW4oXCIgYW5kIFwiKTtcbiAgICAgICAgfVxuICAgIH1cbuKAi1xuICAgIHB1YmxpYyBtb3VudEZpbHRlclF1ZXJ5KHZhbHVlOiBzdHJpbmcsIGxvb2t1cEZpZWxkczogRm9ybUZpZWxkW10sIGRlZmF1bHRGaWx0ZXI/OiBEZWZhdWx0RmlsdGVyW10sIGR5bmFtaWNGaWx0ZXI/OiBEeW5hbWljRmlsdGVyW10pIHtcbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5OiBzdHJpbmc7XG4gICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcih2YWx1ZSkpKSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGxvb2t1cEZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLlN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYChjb250YWluaW5nKGxvd2VyKCR7ZmllbGQubmFtZX0pLCBsb3dlcignJHt2YWx1ZX0nKSkpYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNhbml0aXplZFZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEQvZywgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2FuaXRpemVkVmFsdWUpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke2ZpZWxkLm5hbWV9IGVxICcke3Nhbml0aXplZFZhbHVlfScpYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke2ZpZWxkLm5hbWV9IGVxICcke3ZhbHVlfScpYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXIgPT4gISFmaWx0ZXIpXG4gICAgICAgICAgICAuam9pbihcIiBvciBcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGxvb2t1cEZpZWxkc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkOiBhbnkpID0+IGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgICAgICAgLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYChjb250YWluaW5nKGxvd2VyKCR7ZmllbGQubmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC9cXFxcL2csIFwiXCIpLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSkpYDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXJRdWVyeSA9IHRoaXMubW91bnREZWZhdWx0RmlsdGVyKGRlZmF1bHRGaWx0ZXIpO1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlclF1ZXJ5KVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBgKCgke2RlZmF1bHRGaWx0ZXJRdWVyeX0pIGFuZCAoJHtmaWx0ZXJRdWVyeX0pKWA7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gXCIoXCIgKyBmaWx0ZXJRdWVyeSArIFwiKVwiO1xu4oCLXG4gICAgICAgIGNvbnN0IGR5bmFtaWNGaWx0ZXJRdWVyeSA9IHRoaXMubW91bnREeW5hbWljRmlsdGVyKGR5bmFtaWNGaWx0ZXIpO1xuICAgICAgICBpZiAoZHluYW1pY0ZpbHRlclF1ZXJ5KVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBgKCgke2R5bmFtaWNGaWx0ZXJRdWVyeX0pIGFuZCAoJHtmaWx0ZXJRdWVyeX0pKWA7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gXCIoXCIgKyBmaWx0ZXJRdWVyeSArIFwiKVwiO1xuXG4gICAgICAgIHJldHVybiBmaWx0ZXJRdWVyeTtcbiAgICB9XG7igItcbiAgICBwdWJsaWMgbW91bnRFbnVtRmlsdGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgbXVsdGlwbGU6IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIG11bHRpcGxlID8gYCgke3ZhbHVlLm1hcCgoc2VsZWN0ZWQ6IGFueSkgPT4gYCR7bmFtZX0gZXEgJyR7c2VsZWN0ZWR9J2ApLmpvaW4oXCIgb3IgXCIpfSlgIDogYCgke25hbWV9IGVxICcke3ZhbHVlfScpYDtcbiAgICB9XG7igItcbiAgICAvKiogTcOpdG9kbyByZXNwb25zw6F2ZWwgcG9yIG1vbnRhciBhcyBvcMOnw7VlcyBwYWRyw7VlcyBwYXJhIG8gbG9va3VwIGRvIER5bmFtaWMgRm9ybSAqL1xuICAgIHB1YmxpYyBtb3VudE9wdGlvbnMob3B0aW9uczogTG9va3VwT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG9wdGlvbnMucHJlZml4XG4gICAgICAgICAgICA/IG9wdGlvbnMucHJlZml4XG4gICAgICAgICAgICA6IChvcHRpb25zLmRvbWFpbiAmJiBvcHRpb25zLnNlcnZpY2UpXG4gICAgICAgICAgICAgICAgPyBgJHtvcHRpb25zLmRvbWFpbn0uJHtvcHRpb25zLnNlcnZpY2V9YFxuICAgICAgICAgICAgICAgIDogYCR7dGhpcy5kb21haW59LiR7dGhpcy5zZXJ2aWNlfWA7XG5cbiAgICAgICAgY29uc3Qgc3VmZml4ID0gb3B0aW9ucy5zdWZmaXggPyBgXyR7b3B0aW9ucy5zdWZmaXh9YCA6IFwiXCI7XG5cblxuICAgICAgICBvcHRpb25zLmxvb2t1cEZpZWxkcyA9IG9wdGlvbnMubG9va3VwRmllbGRzICYmIG9wdGlvbnMubG9va3VwRmllbGRzLmxlbmd0aFxuICAgICAgICAgICAgPyBvcHRpb25zLmxvb2t1cEZpZWxkc1xuICAgICAgICAgICAgOiB0aGlzLmxvb2t1cEZpZWxkcztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogb3B0aW9ucy5mb3JtR3JvdXAgfHwgdGhpcy5lbnRpdHksXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHtwcmVmaXh9Lmxvb2t1cF8ke3RoaXMudG9TbmFrZUNhc2Uob3B0aW9ucy5lbnRpdHkpIHx8IHRoaXMudG9TbmFrZUNhc2UodGhpcy5lbnRpdHkpfSR7c3VmZml4fWApLFxuICAgICAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5sb29rdXBfJHt0aGlzLnRvU25ha2VDYXNlKG9wdGlvbnMuZW50aXR5KSB8fFxuICAgICAgICAgICAgICAgIHRoaXMudG9TbmFrZUNhc2UodGhpcy5lbnRpdHkpfV9zZWFyY2hfdGl0bGVgKSxcbiAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Mb29rdXAsXG4gICAgICAgICAgICBtdWx0aXBsZTogb3B0aW9ucy5tdWx0aXBsZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsXG4gICAgICAgICAgICBkYXRhS2V5OiBvcHRpb25zLmRhdGFLZXkgfHwgXCJpZFwiLFxuICAgICAgICAgICAgbG9va3VwRGlzcGxheUZpZWxkOiBcImxhYmVsXCIsXG4gICAgICAgICAgICBzZWFyY2hFbXB0eVRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3ByZWZpeH0ubm90aGluZ19mb3VuZGApLFxuICAgICAgICAgICAgZmlsdGVyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5maWx0ZXJgKSxcbiAgICAgICAgICAgIGNsZWFyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5jbGVhcmApLFxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7cHJlZml4fS5jYW5jZWxgKSxcbiAgICAgICAgICAgIHNlbGVjdExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3ByZWZpeH0uc2VsZWN0YCksXG4gICAgICAgICAgICBzZWFyY2hGaWVsZHM6IG9wdGlvbnMuc2VhcmNoRmllbGRzID8gdGhpcy5tb3VudEZvcm1GaWVsZChvcHRpb25zLnNlYXJjaEZpZWxkcywgcHJlZml4KSA6XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VudEZvcm1GaWVsZCh0aGlzLnNlYXJjaEZpZWxkcywgcHJlZml4KSxcbiAgICAgICAgICAgIHNlYXJjaEdyaWRGaWVsZHM6IG9wdGlvbnMuc2VhcmNoR3JpZEZpZWxkcyA/IHRoaXMubW91bnRGb3JtRmllbGQob3B0aW9ucy5zZWFyY2hHcmlkRmllbGRzLCBwcmVmaXgpIDpcbiAgICAgICAgICAgICAgICB0aGlzLm1vdW50Rm9ybUZpZWxkKHRoaXMuc2VhcmNoR3JpZEZpZWxkcywgcHJlZml4KSxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zT2JzZXJ2YWJsZTogdGhpcy5sb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUsXG4gICAgICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiB0aGlzLmxvb2t1cFNlYXJjaE9ic2VydmFibGUsXG4gICAgICAgICAgICBvbkxvb2t1cFJlcXVlc3Q6ICh2YWx1ZTogc3RyaW5nKSA9PiB0aGlzLm9uTG9va3VwUmVxdWVzdCh2YWx1ZSwgcHJlZml4LCBvcHRpb25zKSxcbiAgICAgICAgICAgIG9uU2VhcmNoUmVxdWVzdDogKGV2ZW50OiBhbnkpID0+IHRoaXMub25TZWFyY2hSZXF1ZXN0KGV2ZW50LCBwcmVmaXgsIG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgfVxu4oCLXG4gICAgcHVibGljIGdldFByb3Aob2JqOiBhbnksIHBhdGg6IGFueSwgcHJlZml4OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLnJlZHVjZSgocmVzdWx0OiBhbnksIHByb3A6IGFueSkgPT4gKHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdFtwcm9wXSA9PT0gbnVsbFxuICAgICAgICAgICAgPyB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3ByZWZpeH0uZW1wdHlfbGFiZWxgKVxuICAgICAgICAgICAgOiByZXN1bHRbcHJvcF0pLCBvYmopO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiAhdmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gISF2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbW91bnRFbnRpdHlGaWx0ZXIoZW50aXR5OiBFbnRpdHlEZXBlbmRlbmN5LCB2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGVudGl0eS5maWVsZFxuICAgICAgICAgICAgPyBgKCR7ZW50aXR5Lm5hbWV9LiR7ZW50aXR5LmZpZWxkfSBlcSAnJHt2YWx1ZVtlbnRpdHkuZmllbGRdfScpYFxuICAgICAgICAgICAgOiBgKCR7ZW50aXR5Lm5hbWV9IGVxICcke3ZhbHVlW2VudGl0eS5uYW1lXX0nKWA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZywgb3B0aW9ucz86IExvb2t1cE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc29ydCA9IG9wdGlvbnMubG9va3VwU29ydDtcbiAgICAgICAgY29uc3QgbG9va3VwRGlzcGxheUZpZWxkcyA9IG9wdGlvbnMubG9va3VwRmllbGRzLm1hcChmaWVsZCA9PiBmaWVsZC5uYW1lKTtcbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5ID0gdGhpcy5tb3VudEZpbHRlclF1ZXJ5KHZhbHVlLCBvcHRpb25zLmxvb2t1cEZpZWxkcywgb3B0aW9ucy5kZWZhdWx0RmlsdGVyLCBvcHRpb25zLmR5bmFtaWNGaWx0ZXIpO1xuXG4gICAgICAgIGxldCBkaXNwbGF5RmllbGRzID0gbG9va3VwRGlzcGxheUZpZWxkcy5jb25jYXQoIChvcHRpb25zLnNlYXJjaEdyaWRGaWVsZHMgfHwgdGhpcy5zZWFyY2hHcmlkRmllbGRzKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpIHx8IFtdKTtcbiAgICAgICAgaWYgKG9wdGlvbnMucXVlcnlGaWVsZHMpXG4gICAgICAgICAgICBkaXNwbGF5RmllbGRzID0gZGlzcGxheUZpZWxkcy5jb25jYXQob3B0aW9ucy5xdWVyeUZpZWxkcyk7XG4gICAgICAgIGRpc3BsYXlGaWVsZHMgPSBkaXNwbGF5RmllbGRzLmZpbHRlcigodiwgaSkgPT4gZGlzcGxheUZpZWxkcy5pbmRleE9mKHYpID09PSBpKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5lbnRpdHlEZXBlbmRlbmN5KSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHlGaWx0ZXIgPSBvcHRpb25zLmVudGl0eURlcGVuZGVuY3kubWFwKChlbnRpdHk6IEVudGl0eURlcGVuZGVuY3kpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGVudGl0eS52YWx1ZSgpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZShuZXdWYWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke25ld1ZhbHVlLm1hcCgodmFsOiBhbnkpID0+IHRoaXMubW91bnRFbnRpdHlGaWx0ZXIoZW50aXR5LCB2YWwpKS5qb2luKFwiIG9yIFwiKX0pYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke3RoaXMubW91bnRFbnRpdHlGaWx0ZXIoZW50aXR5LCBuZXdWYWx1ZSl9KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuZmlsdGVyKGZpbHRlciA9PiAhIWZpbHRlcikuam9pbiAoXCIgYW5kIFwiKTtcbiAgICAgICAgICAgIGlmIChlbnRpdHlGaWx0ZXIpXG4gICAgICAgICAgICAgICAgZmlsdGVyUXVlcnkgPyBmaWx0ZXJRdWVyeSArPSBgIGFuZCAoJHtlbnRpdHlGaWx0ZXJ9KWAgOiBmaWx0ZXJRdWVyeSA9IGVudGl0eUZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvb2t1cFNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHtcbiAgICAgICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgICAgIGZpbHRlclF1ZXJ5LFxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLmVudGl0eSxcbiAgICAgICAgICAgIG9wdGlvbnMuZG9tYWluIHx8IHRoaXMuZG9tYWluLFxuICAgICAgICAgICAgb3B0aW9ucy5zZXJ2aWNlIHx8IHRoaXMuc2VydmljZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0SXRlbUxhYmVsKGl0ZW0sIHByZWZpeCwgbG9va3VwRGlzcGxheUZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUubmV4dChkYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbuKAi1xuICAgIHB1YmxpYyBvblNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSwgcHJlZml4OiBzdHJpbmcsIG9wdGlvbnM/OiBMb29rdXBPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YSA/IG11bHRpU29ydE1ldGEgOiBvcHRpb25zLnNlYXJjaFNvcnQ7XG4gICAgICAgIGNvbnN0IGxvb2t1cERpc3BsYXlGaWVsZHMgPSBvcHRpb25zLmxvb2t1cEZpZWxkcy5tYXAoZmllbGQgPT4gZmllbGQubmFtZSk7XG5cbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5ID0gKG9wdGlvbnMuc2VhcmNoRmllbGRzIHx8IHRoaXMuc2VhcmNoRmllbGRzKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSwgbXVsdGlwbGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91bnRFbnVtRmlsdGVyKG5hbWUsIHZhbHVlLCBtdWx0aXBsZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYChjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZX0nKSkpYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuTG9va3VwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke25hbWV9IGVxICcke3ZhbHVlLmlkfScpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xu4oCLXG4gICAgICAgIGlmIChvcHRpb25zLmVudGl0eURlcGVuZGVuY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eUZpbHRlciA9IG9wdGlvbnMuZW50aXR5RGVwZW5kZW5jeS5tYXAoKGVudGl0eTogRW50aXR5RGVwZW5kZW5jeSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZW50aXR5LnZhbHVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke3ZhbHVlLm1hcCgodmFsOiBhbnkpID0+IHRoaXMubW91bnRFbnRpdHlGaWx0ZXIoZW50aXR5LCB2YWwpKS5qb2luKFwiIG9yIFwiKX0pYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCgke3RoaXMubW91bnRFbnRpdHlGaWx0ZXIoZW50aXR5LCB2YWx1ZSl9KWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuZmlsdGVyKGZpbHRlciA9PiAhIWZpbHRlcikuam9pbiAoXCIgYW5kIFwiKTtcbiAgICAgICAgICAgIGlmIChlbnRpdHlGaWx0ZXIpXG4gICAgICAgICAgICAgICAgZmlsdGVyUXVlcnkgPyBmaWx0ZXJRdWVyeSArPSBgIGFuZCAoJHtlbnRpdHlGaWx0ZXJ9KWAgOiBmaWx0ZXJRdWVyeSA9IGVudGl0eUZpbHRlcjtcbiAgICAgICAgfVxu4oCLXG4gICAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXJRdWVyeSA9IHRoaXMubW91bnREZWZhdWx0RmlsdGVyKG9wdGlvbnMuZGVmYXVsdEZpbHRlcik7XG5cbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJRdWVyeSlcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID8gZmlsdGVyUXVlcnkgKz0gYCBhbmQgKCR7ZGVmYXVsdEZpbHRlclF1ZXJ5fSlgIDogZmlsdGVyUXVlcnkgPSBgKCR7ZGVmYXVsdEZpbHRlclF1ZXJ5fSlgO1xuXG4gICAgICAgIGNvbnN0IGR5bmFtaWNGaWx0ZXJRdWVyeSA9IHRoaXMubW91bnREeW5hbWljRmlsdGVyKG9wdGlvbnMuZHluYW1pY0ZpbHRlcik7XG5cbiAgICAgICAgaWYgKGR5bmFtaWNGaWx0ZXJRdWVyeSlcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID8gZmlsdGVyUXVlcnkgKz0gYCBhbmQgKCR7ZHluYW1pY0ZpbHRlclF1ZXJ5fSlgIDogZmlsdGVyUXVlcnkgPSBgKCR7ZHluYW1pY0ZpbHRlclF1ZXJ5fSlgO1xuXG4gICAgICAgIGxldCBkaXNwbGF5RmllbGRzID0gbG9va3VwRGlzcGxheUZpZWxkcy5jb25jYXQoKG9wdGlvbnMuc2VhcmNoR3JpZEZpZWxkcyB8fCB0aGlzLnNlYXJjaEdyaWRGaWVsZHMpXG4gICAgICAgICAgICAgICAgLmNvbmNhdChvcHRpb25zLnNlYXJjaEdyaWRGaWVsZHMgfHwgW10pXG4gICAgICAgICAgICAgICAgLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpIHx8IFtdKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5xdWVyeUZpZWxkcylcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZHMgPSBkaXNwbGF5RmllbGRzLmNvbmNhdChvcHRpb25zLnF1ZXJ5RmllbGRzKTtcblxuICAgICAgICBkaXNwbGF5RmllbGRzID0gZGlzcGxheUZpZWxkcy5maWx0ZXIoKHYsIGkpID0+IGRpc3BsYXlGaWVsZHMuaW5kZXhPZih2KSA9PT0gaSk7XG5cbiAgICAgICAgdGhpcy5sb29rdXBTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0sIHRoaXMuZW50aXR5LCBvcHRpb25zLmRvbWFpbiB8fCB0aGlzLmRvbWFpbiwgb3B0aW9ucy5zZXJ2aWNlIHx8IHRoaXMuc2VydmljZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGdyaWREYXRhOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldEl0ZW1MYWJlbChpdGVtLCBwcmVmaXgsIGxvb2t1cERpc3BsYXlGaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHNcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9va3VwU2VhcmNoT2JzZXJ2YWJsZS5uZXh0KGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SXRlbUxhYmVsKGl0ZW06IGFueSwgcHJlZml4OiBzdHJpbmcsIGxvb2t1cERpc3BsYXlGaWVsZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiBsb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAubWFwKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCwgcHJlZml4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF0gIT09IHVuZGVmaW5lZCAmJiBpdGVtW2ZpZWxkXSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICA/IGl0ZW1bZmllbGRdXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHtwcmVmaXh9LmVtcHR5X2xhYmVsYCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgLSBcIik7XG4gICAgfVxufVxuIl19
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
@@ -257,6 +257,16 @@ var WebsocketService = /** @class */ (function () {
257
257
  };
258
258
  WebsocketService.prototype.handleOnWebSocketClose = function (data) {
259
259
  var _a, _b;
260
+ if ((data === null || data === void 0 ? void 0 : data.reason) === '') {
261
+ this.lostConnection = true;
262
+ this.handleError('Failed to send message to ExecutorSubscribableChannel', new FrameImpl({
263
+ command: data.type,
264
+ headers: {
265
+ message: data.reason
266
+ }
267
+ }));
268
+ return;
269
+ }
260
270
  if (((_a = data === null || data === void 0 ? void 0 : data.reason) === null || _a === void 0 ? void 0 : _a.toLowerCase().indexOf("go away")) !== -1) {
261
271
  this.lostConnection = true;
262
272
  this.handleError('AuthenticationError', new FrameImpl({
@@ -409,4 +419,4 @@ var WebsocketService = /** @class */ (function () {
409
419
  return WebsocketService;
410
420
  }());
411
421
  export { WebsocketService };
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3dlYnNvY2tldC93ZWJzb2NrZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFrQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQUc1QyxJQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUM3QyxJQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUs3QztJQWNJLDBCQUE2QixzQkFBOEM7UUFBOUMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQWIxRCxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakQsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3BDLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNuQyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWEsQ0FBQztRQUNsQyxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUF5QixD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QztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxtREFBd0IsR0FBaEMsVUFBb0MsZ0JBQXFDO1FBQ3JFLElBQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUMvRCxnQkFBZ0IsQ0FBQyxNQUFNLEVBQ3ZCLGdCQUFnQixDQUFDLE9BQU8sRUFDeEIsZ0JBQWdCLENBQUMsU0FBUyxDQUM3QixDQUFDO1FBQ0YsSUFBTSwyQkFBMkIsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQ25FLGdCQUFnQixDQUFDLE1BQU0sRUFDdkIsZ0JBQWdCLENBQUMsT0FBTyxFQUN4QixnQkFBZ0IsQ0FBQyxTQUFTLENBQzdCLENBQUM7UUFFRixJQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVHLElBQU0sNkJBQTZCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLDJCQUEyQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDbEgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLDBCQUEwQixFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sNkNBQWtCLEdBQTFCO1FBQ0ksT0FBVSxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFLGtCQUFlLENBQUM7SUFDM0UsQ0FBQzs7Z0JBelhvRCxzQkFBc0I7OztJQWRsRSxnQkFBZ0I7UUFINUIsVUFBVSxDQUFDO1lBQ1IsVUFBVSxFQUFFLE1BQU07U0FDckIsQ0FBQztPQUNXLGdCQUFnQixDQXdZNUI7MkJBeFpEO0NBd1pDLEFBeFlELElBd1lDO1NBeFlZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZmlsdGVyLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENsaWVudCwgRnJhbWVJbXBsLCBTdG9tcENvbmZpZywgU3RvbXBTdWJzY3JpcHRpb24gfSBmcm9tICdAc3RvbXAvc3RvbXBqcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBTb2NrSlMgZnJvbSAnc29ja2pzLWNsaWVudCc7XHJcbmltcG9ydCB7IEFzeW5jTG9jayB9IGZyb20gJy4uL3V0aWxzL2FzeW5jLWxvY2snO1xyXG5pbXBvcnQgeyBVc2VySW5mb3JtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi91c2VyLWluZm9ybWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcmltaXRpdmVNYW5hZ2VyIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBPbkV2ZW50T3B0aW9ucywgUHJpbWl0aXZlRXZlbnQgfSBmcm9tICcuL3Byb3RvY29scyc7XHJcblxyXG5jb25zdCBSRUNPTk5FQ1RfSU5URVJWQUxfTUlMTElTRUNPTkRTID0gMzAwMDtcclxuY29uc3QgQ09OTkVDVElPTl9USU1FT1VUX01JTExJU0VDT05EUyA9IDUwMDA7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpc2Nvbm5lY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWNvbm5lY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvciQgPSBuZXcgU3ViamVjdDxGcmFtZUltcGw+KCk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmliZWQkID0gbmV3IFN1YmplY3Q8UHJpbWl0aXZlTWFuYWdlcjxhbnk+PigpO1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJpbWl0aXZlTWFuYWdlcnM6IE1hcDxzdHJpbmcsIFByaW1pdGl2ZU1hbmFnZXI8YW55Pj4gPSBuZXcgTWFwPHN0cmluZywgUHJpbWl0aXZlTWFuYWdlcjxhbnk+PigpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0aW9uTG9jayA9IG5ldyBBc3luY0xvY2soKTtcclxuXHJcbiAgICBwcml2YXRlIHN0b21wQ2xpZW50OiBDbGllbnQ7XHJcbiAgICBwcml2YXRlIGRlYnVnRW5hYmxlID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGxvc3RDb25uZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB1c2VySW5mb3JtYXRpb25TZXJ2aWNlOiBVc2VySW5mb3JtYXRpb25TZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGVzIHN0b21wanMgZGVidWcgbG9ncyBhbmQgYWRkaXRpb25hbCBpbmZvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBlbmFibGVEZWJ1Z0xvZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0VuYWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYW51YWxseSBzdGFydHMgdGhlIGNvbm5lY3Rpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uTG9jay5hY3F1aXJlKCk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkgfHwgdGhpcy5pc0Nvbm5lY3RpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0b21wQ29uZmlnOiBTdG9tcENvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIHdlYlNvY2tldEZhY3Rvcnk6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNvY2tKUyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb25VcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogQ09OTkVDVElPTl9USU1FT1VUX01JTExJU0VDT05EU1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uVGltZW91dDogQ09OTkVDVElPTl9USU1FT1VUX01JTExJU0VDT05EUyxcclxuICAgICAgICAgICAgICAgIHJlY29ubmVjdERlbGF5OiBSRUNPTk5FQ1RfSU5URVJWQUxfTUlMTElTRUNPTkRTLFxyXG4gICAgICAgICAgICAgICAgZGVidWc6IHRoaXMuZGVidWcuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9uQ29ubmVjdDogdGhpcy5oYW5kbGVPbkNvbm5lY3RlZC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb25EaXNjb25uZWN0OiB0aGlzLmhhbmRsZU9uRGlzY29ubmVjdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb25XZWJTb2NrZXRDbG9zZTogdGhpcy5oYW5kbGVPbldlYlNvY2tldENsb3NlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBvblN0b21wRXJyb3I6IHRoaXMuaGFuZGxlT25TdG9tcEVycm9yLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBvbldlYlNvY2tldEVycm9yOiB0aGlzLmhhbmRsZU9uV2ViU29ja2V0RXJyb3IuYmluZCh0aGlzKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnQ29ubmVjdGluZyB0aGUgV2Vic2Nva2V0Jyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50ID0gbmV3IENsaWVudChzdG9tcENvbmZpZyk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvbXBDbGllbnQuYWN0aXZhdGUoKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLnJlbGVhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYW51YWxseSBkaXNjb25uZWN0IHRoZSB3ZWJzb2NrZXQuIFRoZSByZWNvbm5lY3QgbG9vcCB3aWxsIGJlIHN0b3BwZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBkaXNjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0Nvbm5lY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2suYWNxdWlyZSgpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJpbWl0aXZlTWFuYWdlciBvZiB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RvbXBDbGllbnQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvbXBDbGllbnQuZGVhY3RpdmF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uTG9jay5yZWxlYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcclxuICAgICAqIEByZXR1cm4gYGJvb2xlYW5gIHJlcHJlc2VudGluZyBpZiB0aGUgd2Vic29ja2V0IGlzIGNvbm5lY3RlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0b21wQ2xpZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b21wQ2xpZW50LmNvbm5lY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGlmIHRoZSB3ZWJzb2NrZXQgaXMgdHJpbmcgdG8gY29ubmVjdFxyXG4gICAgICogQHJldHVybiBgYm9vbGVhbmAgcmVwcmVzZW50aW5nIGlmIHRoZSB3ZWJzb2NrZXQgc3RhdHVzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0Nvbm5lY3RpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0b21wQ2xpZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhdGhpcy5zdG9tcENsaWVudC5jb25uZWN0ZWQgJiYgdGhpcy5zdG9tcENsaWVudC5hY3RpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuXHJcbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cclxuICAgICAqIEByZXR1cm4gYE9ic2VydmFibGU8Ym9vbGVhbj5gXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkNvbm5lY3QoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGVkJC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShmaWx0ZXIocCA9PiBwID09PSB0cnVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLlxyXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXHJcbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPHZvaWQ+YFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25EaXNjb25uZWN0KCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc2Nvbm5lY3RlZCQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgcmVlc3RhYmxpc2hlZC5cclxuICAgICAqIERvIG5vdCBmb3JnZXQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlLlxyXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTx2b2lkPmBcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uUmVjb25uZWN0KCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlY29ubmVjdGVkJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IHJlc3BvbnNhYmxlIHRvIGVtaXQgYW4gZXZlbnQgd2hlbiBhbiBlcnJvciBvY3VycmVkLlxyXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXHJcbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPEZyYW1lSW1wbD5gXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkVycm9yKCk6IE9ic2VydmFibGU8RnJhbWVJbXBsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgcmVzcG9uc2libGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIGEgcHJpbWl0aXZlIGlzIGNhbGxlZC5cclxuICAgICAqIERvIG5vdCBmb3JnZXQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlLlxyXG4gICAgICogQHR5cGVQYXJhbSBgPFQ+YCBPYmplY3QgdHlwZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgb2JzZXJ2YWJsZSBmb3IgdGhlIGBkYXRhYCBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7T25FdmVudE9wdGlvbnN9IG9wdGlvbnMgQ29uZmlndXJhdGlvbnMgZm9yIHRoZSBldmVudC5cclxuICAgICAqIEByZXR1cm4gYE9ic2VydmFibGU8UHJpbWl0aXZlRXZlbnQ8VD4+YCBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgc2VydmljZSBjYWxscyB0aGUgcHJpbWl0aXZlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25FdmVudDxUPihvcHRpb25zOiBPbkV2ZW50T3B0aW9ucyk6IE9ic2VydmFibGU8UHJpbWl0aXZlRXZlbnQ8VD4+IHtcclxuICAgICAgICBjb25zdCB7IGRvbWFpbiwgc2VydmljZSwgcHJpbWl0aXZlIH0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KGRvbWFpbiwgc2VydmljZSwgcHJpbWl0aXZlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuZ2V0KGtleSkuZ2V0RXZlbnRPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcmltaXRpdmVNYW5hZ2VyID0gbmV3IFByaW1pdGl2ZU1hbmFnZXI8VD4oZG9tYWluLCBzZXJ2aWNlLCBwcmltaXRpdmUpO1xyXG4gICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuc2V0KGtleSwgcHJpbWl0aXZlTWFuYWdlcik7XHJcblxyXG4gICAgICAgIHRoaXMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdCgpXHJcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnMocHJpbWl0aXZlTWFuYWdlcik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHByaW1pdGl2ZU1hbmFnZXJcclxuICAgICAgICAgICAgLmdldEV2ZW50T2JzZXJ2YWJsZSgpXHJcbiAgICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHRoaXMudW5zdWJzY3JpYmVQcmltaXRpdmVPbkZpbmFsaXplKHByaW1pdGl2ZU1hbmFnZXIpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCByZXNwb25zaWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYSBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCBmb3IgdGhlIHByaW1pdGl2ZS5cclxuICAgICAqIERvIG5vdCBmb3JnZXQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlLlxyXG4gICAgICogQHBhcmFtIHtPbkV2ZW50T3B0aW9uc30gb3B0aW9ucyBDb25maWd1cmF0aW9ucyBmb3IgdGhlIGV2ZW50LlxyXG4gICAgICogT2JzZXJ2YWJsZSByZXNwb25zw6F2ZWwgcG9yIGVtaXRpciB1bWEgbm90aWZpY2HDp8OjbyBhcMOzcyBvIHN1YnNjcmliZSBkbyBldmVudG8gcGVsYSBwcmltZWlyYSB2ZXouXHJcbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPGJvb2xlYW4+YCBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgc2VydmljZSBjYWxscyB0aGUgcHJpbWl0aXZlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25TdWJzY3JpYmUob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCB7IGRvbWFpbiwgc2VydmljZSwgcHJpbWl0aXZlIH0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KGRvbWFpbiwgc2VydmljZSwgcHJpbWl0aXZlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25Db25uZWN0KCkucGlwZShcclxuICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJpbWl0aXZlTWFuYWdlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldChrZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTdWJzY3JpcHRpb25PYnNlcnZhYmxlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlZCQuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHByaW1pdGl2ZU1hbmFnZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5kb21haW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnByaW1pdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApID09PSBrZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHRydWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRha2UoMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRlYnVnRW5hYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1dTIGRlYnVnOiAnICsgbWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5mbyhtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zb2xlLmluZm8oJ1dTIGluZm86ICcgKyBtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU9uQ29ubmVjdGVkKCkge1xyXG4gICAgICAgIHRoaXMuaW5mbygnV2Vic2Nva2V0IGNvbm5lY3RlZCcpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3RlZCQubmV4dCh0cnVlKTtcclxuICAgICAgICBpZiAodGhpcy5sb3N0Q29ubmVjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmluZm8oJ1dlYnNjb2tldCByZWNvbm5lY3RlZCwgcmVjcmlhdGluZyBzdWJzY3JpcHRpb25zJyk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlT25EaXNjb25uZWN0KCkge1xyXG4gICAgICAgIHRoaXMuaW5mbygnV2Vic2Nva2V0IGRpc2Nvbm5lY3RlZCcpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3RlZCQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0ZWQkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU9uV2ViU29ja2V0Q2xvc2UoZGF0YTogQ2xvc2VFdmVudCkge1xyXG4gICAgICAgIGlmIChkYXRhPy5yZWFzb24/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImdvIGF3YXlcIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKCdBdXRoZW50aWNhdGlvbkVycm9yJywgbmV3IEZyYW1lSW1wbChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBkYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLnJlYXNvblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkYXRhPy5yZWFzb24/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImNhbm5vdCBjb25uZWN0IHRvIHNlcnZlclwiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0Nvbm5lY3Rpb25FcnJvcicsIG5ldyBGcmFtZUltcGwoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogZGF0YS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGF0YS5yZWFzb25cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGF0YS53YXNDbGVhbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvc3RDb25uZWN0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU9uU3RvbXBFcnJvcihkYXRhOiBGcmFtZUltcGwpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKCdTdG9tcEVycm9yJywgZGF0YSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRpb25FcnJvcihkYXRhKSkge1xyXG4gICAgICAgICAgICB0aGlzLmluZm8oJ0F1dGhlbnRpY2F0aW9uIGVycm9yLCByZWNyaWF0aW5nIHN1YnNjcmlwdGlvbnMnKTtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZWNvbm5lY3Rpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0F1dGhlbnRpY2F0aW9uRXJyb3IoZGF0YTogRnJhbWVJbXBsKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZGF0YT8uaGVhZGVycz8ubWVzc2FnZTtcclxuICAgICAgICBpZiAoIWVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZm9yYmlkZGVuZXhjZXB0aW9uJykgIT09IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlT25XZWJTb2NrZXRFcnJvcihkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKCdXZWJTb2NrZXRFcnJvcicsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3Iob3JpZ2luOiBzdHJpbmcsIGRhdGE6IEZyYW1lSW1wbCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3Iob3JpZ2luLCBkYXRhKTtcclxuICAgICAgICB0aGlzLmVycm9yJC5uZXh0KGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlUmVjb25uZWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlY29ubmVjdFByaW1pdGl2ZXMoKTtcclxuICAgICAgICB0aGlzLnJlY29ubmVjdGVkJC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWNvbm5lY3RQcmltaXRpdmVzKCk6IHZvaWQge1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJpbWl0aXZlTWFuYWdlciBvZiB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnZhbHVlcygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlU3RvbXBTdWJzY3JpcHRpb25zKHByaW1pdGl2ZU1hbmFnZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkU3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuKGRvbWFpbjogc3RyaW5nLCBzZXJ2aWNlOiBzdHJpbmcsIHByaW1pdGl2ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBhdXRoVG9rZW4gPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0QXV0aFRva2VuKCk7XHJcbiAgICAgICAgY29uc3QgdGVuYW50ID0gdGhpcy51c2VySW5mb3JtYXRpb25TZXJ2aWNlLmdldFRlbmFudERvbWFpbigpO1xyXG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7dGVuYW50fS8ke2F1dGhUb2tlbn0vJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFN1YnNjcmlwdGlvblVybFdpdGhvdXRUb2tlbihkb21haW46IHN0cmluZywgc2VydmljZTogc3RyaW5nLCBwcmltaXRpdmU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdGVuYW50ID0gdGhpcy51c2VySW5mb3JtYXRpb25TZXJ2aWNlLmdldFRlbmFudERvbWFpbigpO1xyXG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7dGVuYW50fS8ke2RvbWFpbn0vJHtzZXJ2aWNlfS8ke3ByaW1pdGl2ZX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KGRvbWFpbjogc3RyaW5nLCBzZXJ2aWNlOiBzdHJpbmcsIHByaW1pdGl2ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7ZG9tYWlufS8ke3NlcnZpY2V9LyR7cHJpbWl0aXZlfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyB1bnN1YnNjcmliZVByaW1pdGl2ZU9uRmluYWxpemUocHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxhbnk+KSB7XHJcbiAgICAgICAgaWYgKHByaW1pdGl2ZU1hbmFnZXIuaGFzT2JzZXJ2ZXJzKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpbWl0aXZlTWFuYWdlci51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbiwgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLCBwcmltaXRpdmVNYW5hZ2VyLnByaW1pdGl2ZSk7XHJcbiAgICAgICAgdGhpcy5wcmltaXRpdmVNYW5hZ2Vycy5kZWxldGUoa2V5KTtcclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0SWZOb01vcmVPYnNlcnZhYmxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZGlzY29ubmVjdElmTm9Nb3JlT2JzZXJ2YWJsZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0T2JzZXJ2ZXJzQ291bnQoKSA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdNYW51YWxseSBkaXNjb25uZWN0aW5nIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG1vcmUgb2JzZXJ2ZXJzJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE9ic2VydmVyc0NvdW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IG9ic2VydmVyc0NvdW50ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5wcmltaXRpdmVNYW5hZ2Vycy5mb3JFYWNoKHByaW1pdGl2ZU1hbmFnZXIgPT4ge1xyXG4gICAgICAgICAgICBvYnNlcnZlcnNDb3VudCArPSBwcmltaXRpdmVNYW5hZ2VyLmdldE9ic2VydmVyc0NvdW50KCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBvYnNlcnZlcnNDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVN0b21wU3Vic2NyaXB0aW9uPFQ+KGRlc3RpbmF0aW9uOiBzdHJpbmcsIHByaW1pdGl2ZU1hbmFnZXI6IFByaW1pdGl2ZU1hbmFnZXI8VD4pOiBTdG9tcFN1YnNjcmlwdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvbXBDbGllbnQuc3Vic2NyaWJlKGRlc3RpbmF0aW9uLCAobWVzc2FnZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gSlNPTi5wYXJzZShtZXNzYWdlLmJvZHkgfHwgJ3t9Jyk7XHJcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZmlyZUV2ZW50KGV2ZW50KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVN0b21wU3Vic2NyaXB0aW9uczxUPihwcmltaXRpdmVNYW5hZ2VyOiBQcmltaXRpdmVNYW5hZ2VyPFQ+KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuID0gdGhpcy5idWlsZFN1YnNjcmlwdGlvblVybFdpdGhUb2tlbihcclxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5kb21haW4sXHJcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc2VydmljZSxcclxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvblVybFdpdGhvdXRUb2tlbiA9IHRoaXMuZ2V0U3Vic2NyaXB0aW9uVXJsV2l0aG91dFRva2VuKFxyXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbixcclxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxyXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnByaW1pdGl2ZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN0b21wU3Vic2NyaXB0aW9uV2l0aFRva2VuID0gdGhpcy5jcmVhdGVTdG9tcFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25VcmxXaXRoVG9rZW4sIHByaW1pdGl2ZU1hbmFnZXIpO1xyXG4gICAgICAgIGNvbnN0IHN0b21wU3Vic2NyaXB0aW9uV2l0aG91dFRva2VuID0gdGhpcy5jcmVhdGVTdG9tcFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4sIHByaW1pdGl2ZU1hbmFnZXIpO1xyXG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc3Vic2NyaWJlKHN0b21wU3Vic2NyaXB0aW9uV2l0aFRva2VuLCBzdG9tcFN1YnNjcmlwdGlvbldpdGhvdXRUb2tlbik7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVkJC5uZXh0KHByaW1pdGl2ZU1hbmFnZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaXB0aW9uVXJsKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0V2ViU29ja2V0VXJsKCl9L3N1YnNjcmlwdGlvbmA7XHJcbiAgICB9XHJcbn1cclxuIl19
422
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3dlYnNvY2tldC93ZWJzb2NrZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFrQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQUc1QyxJQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUM3QyxJQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUs3QztJQWNJLDBCQUE2QixzQkFBOEM7UUFBOUMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQWIxRCxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakQsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3BDLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNuQyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWEsQ0FBQztRQUNsQyxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUF5QixD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QWUsRUFBRSxrQkFBZSxDQUFDO0lBQzNFLENBQUM7O2dCQXRZb0Qsc0JBQXNCOzs7SUFkbEUsZ0JBQWdCO1FBSDVCLFVBQVUsQ0FBQztZQUNSLFVBQVUsRUFBRSxNQUFNO1NBQ3JCLENBQUM7T0FDVyxnQkFBZ0IsQ0FxWjVCOzJCQXJhRDtDQXFhQyxBQXJaRCxJQXFaQztTQXJaWSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZpbHRlciwgZmluYWxpemUsIG1hcCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDbGllbnQsIEZyYW1lSW1wbCwgU3RvbXBDb25maWcsIFN0b21wU3Vic2NyaXB0aW9uIH0gZnJvbSAnQHN0b21wL3N0b21wanMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgU29ja0pTIGZyb20gJ3NvY2tqcy1jbGllbnQnO1xyXG5pbXBvcnQgeyBBc3luY0xvY2sgfSBmcm9tICcuLi91dGlscy9hc3luYy1sb2NrJztcclxuaW1wb3J0IHsgVXNlckluZm9ybWF0aW9uU2VydmljZSB9IGZyb20gJy4vdXNlci1pbmZvcm1hdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJpbWl0aXZlTWFuYWdlciB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgT25FdmVudE9wdGlvbnMsIFByaW1pdGl2ZUV2ZW50IH0gZnJvbSAnLi9wcm90b2NvbHMnO1xyXG5cclxuY29uc3QgUkVDT05ORUNUX0lOVEVSVkFMX01JTExJU0VDT05EUyA9IDMwMDA7XHJcbmNvbnN0IENPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVNFQ09ORFMgPSA1MDAwO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXZWJzb2NrZXRTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNjb25uZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVjb25uZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3IkID0gbmV3IFN1YmplY3Q8RnJhbWVJbXBsPigpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpYmVkJCA9IG5ldyBTdWJqZWN0PFByaW1pdGl2ZU1hbmFnZXI8YW55Pj4oKTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW1pdGl2ZU1hbmFnZXJzOiBNYXA8c3RyaW5nLCBQcmltaXRpdmVNYW5hZ2VyPGFueT4+ID0gbmV3IE1hcDxzdHJpbmcsIFByaW1pdGl2ZU1hbmFnZXI8YW55Pj4oKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGlvbkxvY2sgPSBuZXcgQXN5bmNMb2NrKCk7XHJcblxyXG4gICAgcHJpdmF0ZSBzdG9tcENsaWVudDogQ2xpZW50O1xyXG4gICAgcHJpdmF0ZSBkZWJ1Z0VuYWJsZSA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBsb3N0Q29ubmVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdXNlckluZm9ybWF0aW9uU2VydmljZTogVXNlckluZm9ybWF0aW9uU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlcyBzdG9tcGpzIGRlYnVnIGxvZ3MgYW5kIGFkZGl0aW9uYWwgaW5mb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW5hYmxlRGVidWdMb2dzKCkge1xyXG4gICAgICAgIHRoaXMuZGVidWdFbmFibGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFudWFsbHkgc3RhcnRzIHRoZSBjb25uZWN0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBjb25uZWN0KCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2suYWNxdWlyZSgpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpIHx8IHRoaXMuaXNDb25uZWN0aW5nKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxvc3RDb25uZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdG9tcENvbmZpZzogU3RvbXBDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICB3ZWJTb2NrZXRGYWN0b3J5OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTb2NrSlMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uVXJsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IENPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVNFQ09ORFNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvblRpbWVvdXQ6IENPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVNFQ09ORFMsXHJcbiAgICAgICAgICAgICAgICByZWNvbm5lY3REZWxheTogUkVDT05ORUNUX0lOVEVSVkFMX01JTExJU0VDT05EUyxcclxuICAgICAgICAgICAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBvbkNvbm5lY3Q6IHRoaXMuaGFuZGxlT25Db25uZWN0ZWQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9uRGlzY29ubmVjdDogdGhpcy5oYW5kbGVPbkRpc2Nvbm5lY3QuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9uV2ViU29ja2V0Q2xvc2U6IHRoaXMuaGFuZGxlT25XZWJTb2NrZXRDbG9zZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb25TdG9tcEVycm9yOiB0aGlzLmhhbmRsZU9uU3RvbXBFcnJvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb25XZWJTb2NrZXRFcnJvcjogdGhpcy5oYW5kbGVPbldlYlNvY2tldEVycm9yLmJpbmQodGhpcylcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ0Nvbm5lY3RpbmcgdGhlIFdlYnNjb2tldCcpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdG9tcENsaWVudCA9IG5ldyBDbGllbnQoc3RvbXBDb25maWcpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50LmFjdGl2YXRlKCk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uTG9jay5yZWxlYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFudWFsbHkgZGlzY29ubmVjdCB0aGUgd2Vic29ja2V0LiBUaGUgcmVjb25uZWN0IGxvb3Agd2lsbCBiZSBzdG9wcGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLmFjcXVpcmUoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByaW1pdGl2ZU1hbmFnZXIgb2YgdGhpcy5wcmltaXRpdmVNYW5hZ2Vycy52YWx1ZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGVkJC5uZXh0KGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0b21wQ2xpZW50KSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b21wQ2xpZW50LmRlYWN0aXZhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2sucmVsZWFzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGlmIHRoZSB3ZWJzb2NrZXQgaXMgY29ubmVjdGVkXHJcbiAgICAgKiBAcmV0dXJuIGBib29sZWFuYCByZXByZXNlbnRpbmcgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzQ29ubmVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zdG9tcENsaWVudC5jb25uZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiB0aGUgd2Vic29ja2V0IGlzIHRyaW5nIHRvIGNvbm5lY3RcclxuICAgICAqIEByZXR1cm4gYGJvb2xlYW5gIHJlcHJlc2VudGluZyBpZiB0aGUgd2Vic29ja2V0IHN0YXR1c1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNDb25uZWN0aW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gIXRoaXMuc3RvbXBDbGllbnQuY29ubmVjdGVkICYmIHRoaXMuc3RvbXBDbGllbnQuYWN0aXZlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLlxyXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXHJcbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPGJvb2xlYW4+YFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Db25uZWN0KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RlZCQuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKHAgPT4gcCA9PT0gdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC5cclxuICAgICAqIERvIG5vdCBmb3JnZXQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlLlxyXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTx2b2lkPmBcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRGlzY29ubmVjdCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kaXNjb25uZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHJlZXN0YWJsaXNoZWQuXHJcbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cclxuICAgICAqIEByZXR1cm4gYE9ic2VydmFibGU8dm9pZD5gXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblJlY29ubmVjdCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWNvbm5lY3RlZCQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYW4gZXJyb3Igb2N1cnJlZC5cclxuICAgICAqIERvIG5vdCBmb3JnZXQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlLlxyXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxGcmFtZUltcGw+YFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25FcnJvcigpOiBPYnNlcnZhYmxlPEZyYW1lSW1wbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IHJlc3BvbnNpYmxlIHRvIGVtaXQgYW4gZXZlbnQgd2hlbiBhIHByaW1pdGl2ZSBpcyBjYWxsZWQuXHJcbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cclxuICAgICAqIEB0eXBlUGFyYW0gYDxUPmAgT2JqZWN0IHR5cGUgdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIG9ic2VydmFibGUgZm9yIHRoZSBgZGF0YWAgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge09uRXZlbnRPcHRpb25zfSBvcHRpb25zIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgZXZlbnQuXHJcbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPFByaW1pdGl2ZUV2ZW50PFQ+PmAgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIHNlcnZpY2UgY2FsbHMgdGhlIHByaW1pdGl2ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRXZlbnQ8VD4ob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPFByaW1pdGl2ZUV2ZW50PFQ+PiB7XHJcbiAgICAgICAgY29uc3QgeyBkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSB9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmdldChrZXkpLmdldEV2ZW50T2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJpbWl0aXZlTWFuYWdlciA9IG5ldyBQcmltaXRpdmVNYW5hZ2VyPFQ+KGRvbWFpbiwgc2VydmljZSwgcHJpbWl0aXZlKTtcclxuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnNldChrZXksIHByaW1pdGl2ZU1hbmFnZXIpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkNvbm5lY3QoKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU3RvbXBTdWJzY3JpcHRpb25zKHByaW1pdGl2ZU1hbmFnZXIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBwcmltaXRpdmVNYW5hZ2VyXHJcbiAgICAgICAgICAgIC5nZXRFdmVudE9ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLnVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShwcmltaXRpdmVNYW5hZ2VyKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgcmVzcG9uc2libGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIGEgc3Vic2NyaXB0aW9uIGlzIGNyZWF0ZWQgZm9yIHRoZSBwcmltaXRpdmUuXHJcbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cclxuICAgICAqIEBwYXJhbSB7T25FdmVudE9wdGlvbnN9IG9wdGlvbnMgQ29uZmlndXJhdGlvbnMgZm9yIHRoZSBldmVudC5cclxuICAgICAqIE9ic2VydmFibGUgcmVzcG9uc8OhdmVsIHBvciBlbWl0aXIgdW1hIG5vdGlmaWNhw6fDo28gYXDDs3MgbyBzdWJzY3JpYmUgZG8gZXZlbnRvIHBlbGEgcHJpbWVpcmEgdmV6LlxyXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxib29sZWFuPmAgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIHNlcnZpY2UgY2FsbHMgdGhlIHByaW1pdGl2ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU3Vic2NyaWJlKG9wdGlvbnM6IE9uRXZlbnRPcHRpb25zKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc3QgeyBkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSB9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm9uQ29ubmVjdCgpLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmltaXRpdmVNYW5hZ2Vycy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoa2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U3Vic2NyaXB0aW9uT2JzZXJ2YWJsZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmliZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChwcmltaXRpdmVNYW5hZ2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSA9PT0ga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcclxuICAgICAgICAgICAgICAgICAgICB0YWtlKDEpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkge1xyXG4gICAgICAgIGlmICghdGhpcy5kZWJ1Z0VuYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdXUyBkZWJ1ZzogJyArIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluZm8obWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKCdXUyBpbmZvOiAnICsgbWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVPbkNvbm5lY3RlZCgpIHtcclxuICAgICAgICB0aGlzLmluZm8oJ1dlYnNjb2tldCBjb25uZWN0ZWQnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9zdENvbm5lY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5pbmZvKCdXZWJzY29rZXQgcmVjb25uZWN0ZWQsIHJlY3JpYXRpbmcgc3Vic2NyaXB0aW9ucycpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlY29ubmVjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU9uRGlzY29ubmVjdCgpIHtcclxuICAgICAgICB0aGlzLmluZm8oJ1dlYnNjb2tldCBkaXNjb25uZWN0ZWQnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdGVkJC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVPbldlYlNvY2tldENsb3NlKGRhdGE6IENsb3NlRXZlbnQpIHtcclxuICAgICAgICBpZiAoZGF0YT8ucmVhc29uID09PSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLmxvc3RDb25uZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcignRmFpbGVkIHRvIHNlbmQgbWVzc2FnZSB0byBFeGVjdXRvclN1YnNjcmliYWJsZUNoYW5uZWwnLCBuZXcgRnJhbWVJbXBsKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IGRhdGEudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEucmVhc29uXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGE/LnJlYXNvbj8udG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiZ28gYXdheVwiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0F1dGhlbnRpY2F0aW9uRXJyb3InLCBuZXcgRnJhbWVJbXBsKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IGRhdGEudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEucmVhc29uXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGE/LnJlYXNvbj8udG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiY2Fubm90IGNvbm5lY3QgdG8gc2VydmVyXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvc3RDb25uZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcignQ29ubmVjdGlvbkVycm9yJywgbmV3IEZyYW1lSW1wbChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBkYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLnJlYXNvblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkYXRhLndhc0NsZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlT25TdG9tcEVycm9yKGRhdGE6IEZyYW1lSW1wbCkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ1N0b21wRXJyb3InLCBkYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGlvbkVycm9yKGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5mbygnQXV0aGVudGljYXRpb24gZXJyb3IsIHJlY3JpYXRpbmcgc3Vic2NyaXB0aW9ucycpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlY29ubmVjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzQXV0aGVudGljYXRpb25FcnJvcihkYXRhOiBGcmFtZUltcGwpIHtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBkYXRhPy5oZWFkZXJzPy5tZXNzYWdlO1xyXG4gICAgICAgIGlmICghZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmb3JiaWRkZW5leGNlcHRpb24nKSAhPT0gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVPbldlYlNvY2tldEVycm9yKGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ1dlYlNvY2tldEVycm9yJywgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcihvcmlnaW46IHN0cmluZywgZGF0YTogRnJhbWVJbXBsKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihvcmlnaW4sIGRhdGEpO1xyXG4gICAgICAgIHRoaXMuZXJyb3IkLm5leHQoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVSZWNvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVjb25uZWN0UHJpbWl0aXZlcygpO1xyXG4gICAgICAgIHRoaXMucmVjb25uZWN0ZWQkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlY29ubmVjdFByaW1pdGl2ZXMoKTogdm9pZCB7XHJcbiAgICAgICAgZm9yIChjb25zdCBwcmltaXRpdmVNYW5hZ2VyIG9mIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMudmFsdWVzKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnMocHJpbWl0aXZlTWFuYWdlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRTdWJzY3JpcHRpb25VcmxXaXRoVG9rZW4oZG9tYWluOiBzdHJpbmcsIHNlcnZpY2U6IHN0cmluZywgcHJpbWl0aXZlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGF1dGhUb2tlbiA9IHRoaXMudXNlckluZm9ybWF0aW9uU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuICAgICAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0VGVuYW50RG9tYWluKCk7XHJcbiAgICAgICAgcmV0dXJuIGAvdG9waWMvJHt0ZW5hbnR9LyR7YXV0aFRva2VufS8ke2RvbWFpbn0vJHtzZXJ2aWNlfS8ke3ByaW1pdGl2ZX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaXB0aW9uVXJsV2l0aG91dFRva2VuKGRvbWFpbjogc3RyaW5nLCBzZXJ2aWNlOiBzdHJpbmcsIHByaW1pdGl2ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0VGVuYW50RG9tYWluKCk7XHJcbiAgICAgICAgcmV0dXJuIGAvdG9waWMvJHt0ZW5hbnR9LyR7ZG9tYWlufS8ke3NlcnZpY2V9LyR7cHJpbWl0aXZlfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZFByaW1pdGl2ZU1hbmFnZXJLZXkoZG9tYWluOiBzdHJpbmcsIHNlcnZpY2U6IHN0cmluZywgcHJpbWl0aXZlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShwcmltaXRpdmVNYW5hZ2VyOiBQcmltaXRpdmVNYW5hZ2VyPGFueT4pIHtcclxuICAgICAgICBpZiAocHJpbWl0aXZlTWFuYWdlci5oYXNPYnNlcnZlcnMoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLCBwcmltaXRpdmVNYW5hZ2VyLnNlcnZpY2UsIHByaW1pdGl2ZU1hbmFnZXIucHJpbWl0aXZlKTtcclxuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmRlbGV0ZShrZXkpO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3RJZk5vTW9yZU9ic2VydmFibGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBkaXNjb25uZWN0SWZOb01vcmVPYnNlcnZhYmxlcygpIHtcclxuICAgICAgICBpZiAodGhpcy5nZXRPYnNlcnZlcnNDb3VudCgpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ01hbnVhbGx5IGRpc2Nvbm5lY3RpbmcgYmVjYXVzZSB0aGVyZSBhcmUgbm8gbW9yZSBvYnNlcnZlcnMnKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T2JzZXJ2ZXJzQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgb2JzZXJ2ZXJzQ291bnQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmZvckVhY2gocHJpbWl0aXZlTWFuYWdlciA9PiB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyc0NvdW50ICs9IHByaW1pdGl2ZU1hbmFnZXIuZ2V0T2JzZXJ2ZXJzQ291bnQoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyc0NvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlU3RvbXBTdWJzY3JpcHRpb248VD4oZGVzdGluYXRpb246IHN0cmluZywgcHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxUPik6IFN0b21wU3Vic2NyaXB0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdG9tcENsaWVudC5zdWJzY3JpYmUoZGVzdGluYXRpb24sIChtZXNzYWdlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBKU09OLnBhcnNlKG1lc3NhZ2UuYm9keSB8fCAne30nKTtcclxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5maXJlRXZlbnQoZXZlbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlU3RvbXBTdWJzY3JpcHRpb25zPFQ+KHByaW1pdGl2ZU1hbmFnZXI6IFByaW1pdGl2ZU1hbmFnZXI8VD4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25VcmxXaXRoVG9rZW4gPSB0aGlzLmJ1aWxkU3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuKFxyXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbixcclxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxyXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnByaW1pdGl2ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uVXJsV2l0aG91dFRva2VuID0gdGhpcy5nZXRTdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4oXHJcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxyXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnNlcnZpY2UsXHJcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIucHJpbWl0aXZlXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3RvbXBTdWJzY3JpcHRpb25XaXRoVG9rZW4gPSB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvblVybFdpdGhUb2tlbiwgcHJpbWl0aXZlTWFuYWdlcik7XHJcbiAgICAgICAgY29uc3Qgc3RvbXBTdWJzY3JpcHRpb25XaXRob3V0VG9rZW4gPSB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvblVybFdpdGhvdXRUb2tlbiwgcHJpbWl0aXZlTWFuYWdlcik7XHJcbiAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zdWJzY3JpYmUoc3RvbXBTdWJzY3JpcHRpb25XaXRoVG9rZW4sIHN0b21wU3Vic2NyaXB0aW9uV2l0aG91dFRva2VuKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmliZWQkLm5leHQocHJpbWl0aXZlTWFuYWdlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb25VcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudXNlckluZm9ybWF0aW9uU2VydmljZS5nZXRXZWJTb2NrZXRVcmwoKX0vc3Vic2NyaXB0aW9uYDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -213,6 +213,12 @@ var EnumLogicalOperator;
213
213
  /** Contains string value (Ex: /Products?$filter=containing(lower(name), lower('my name'))) */
214
214
  EnumLogicalOperator["Contains"] = "containing";
215
215
  })(EnumLogicalOperator || (EnumLogicalOperator = {}));
216
+ class ErpLookupsFormField extends FormField {
217
+ constructor(erpLookupsFormField, ...args) {
218
+ super(...args);
219
+ this.erpLookupsFormField = erpLookupsFormField;
220
+ }
221
+ }
216
222
  let ErpLookups =
217
223
  /**
218
224
  * Erp Lookups
@@ -258,6 +264,9 @@ class ErpLookups {
258
264
  translationKey = `${prefix}.lookup_${this.toSnakeCase(this.entity)}_${this.toSnakeCase(fieldName)}`;
259
265
  label = this.translate.instant(translationKey);
260
266
  }
267
+ if ("erpLookupsFormField" in field) {
268
+ return new ErpLookupsFormField(field.erpLookupsFormField, Object.assign(Object.assign({}, field), { label }));
269
+ }
261
270
  return new FormField(Object.assign(Object.assign({}, field), { label }));
262
271
  });
263
272
  }
@@ -291,6 +300,27 @@ class ErpLookups {
291
300
  }).join(" and ");
292
301
  }
293
302
  }
303
+ mountCustomFilter({ erpLookupsSearchField, filterData, }) {
304
+ const { erpLookupsFormField, name } = erpLookupsSearchField;
305
+ return `(${erpLookupsFormField.customFilters
306
+ .map(({ operator, value }) => {
307
+ value =
308
+ typeof value === "function"
309
+ ? value({
310
+ value: filterData[name],
311
+ filterData,
312
+ })
313
+ : value;
314
+ if (operator === EnumLogicalOperator.Contains) {
315
+ return `(containing(lower(${name}), lower('${value}')))`;
316
+ }
317
+ if ((operator === EnumLogicalOperator.IsNot || operator === EnumLogicalOperator.Is) && !value) {
318
+ return `(${name} ${operator} null)`;
319
+ }
320
+ return `(${name} ${operator} '${value}')`;
321
+ })
322
+ .join(" and ")})`;
323
+ }
294
324
  mountFilterQuery(value, lookupFields, defaultFilter, dynamicFilter) {
295
325
  let filterQuery;
296
326
  if (Number.isInteger(Number(value))) {
@@ -427,8 +457,15 @@ class ErpLookups {
427
457
  const lookupDisplayFields = options.lookupFields.map(field => field.name);
428
458
  let filterQuery = (options.searchFields || this.searchFields)
429
459
  .filter(({ name }) => filterData[name] != undefined && filterData[name] != "")
430
- .map(({ name, type, multiple }) => {
460
+ .map((formField) => {
461
+ const { name, type, multiple, erpLookupsFormField } = formField;
431
462
  const value = filterData[name];
463
+ if (erpLookupsFormField) {
464
+ return this.mountCustomFilter({
465
+ erpLookupsSearchField: formField,
466
+ filterData,
467
+ });
468
+ }
432
469
  if (typeof value == "number")
433
470
  return `${name} eq ${value}`;
434
471
  else if (type == FieldType.Date)
@@ -443,8 +480,7 @@ class ErpLookups {
443
480
  return `(containing(lower(${name}), lower('${value}')))`;
444
481
  else if (type === FieldType.Lookup)
445
482
  return `(${name} eq '${value.id}')`;
446
- else
447
- return `${name} eq '${value}'`;
483
+ return `${name} eq '${value}'`;
448
484
  })
449
485
  .join(" and ");
450
486
  if (options.entityDependency) {
@@ -7833,6 +7869,16 @@ let WebsocketService = class WebsocketService {
7833
7869
  }
7834
7870
  handleOnWebSocketClose(data) {
7835
7871
  var _a, _b;
7872
+ if ((data === null || data === void 0 ? void 0 : data.reason) === '') {
7873
+ this.lostConnection = true;
7874
+ this.handleError('Failed to send message to ExecutorSubscribableChannel', new FrameImpl({
7875
+ command: data.type,
7876
+ headers: {
7877
+ message: data.reason
7878
+ }
7879
+ }));
7880
+ return;
7881
+ }
7836
7882
  if (((_a = data === null || data === void 0 ? void 0 : data.reason) === null || _a === void 0 ? void 0 : _a.toLowerCase().indexOf("go away")) !== -1) {
7837
7883
  this.lostConnection = true;
7838
7884
  this.handleError('AuthenticationError', new FrameImpl({
@@ -8101,5 +8147,5 @@ var ModulesEnum;
8101
8147
  * Generated bundle index. Do not edit.
8102
8148
  */
8103
8149
 
8104
- export { AgreementLookup, BankLookup, BeneficioFiscalLookup, BreadcrumbComponent, BreadcrumbModule, Breakpoints, CaracteristicaFiscalLookup, ClassificacaoTributariaLookup, ComposicaoBaseCalculoLookup, ContaInternaFilialLookup, CountryLookup, CplTriNotaSaidaE001EndLookup, CplTriNotaSaidaE001PesLookup, CplTriNotaSaidaE001TnsLookup, CplTriNotaSaidaE007UfsLookup, CplTriNotaSaidaE008RaiLookup, CplTriNotaSaidaE015MedLookup, CplTriNotaSaidaE020SnfLookup, CplTriNotaSaidaE024MsgLookup, CplTriNotaSaidaE028CpgLookup, CplTriNotaSaidaE032EdcLookup, CplTriNotaSaidaE051DisLookup, CplTriNotaSaidaE066FpgLookup, CplTriNotaSaidaE070EmpLookup, CplTriNotaSaidaE070FilLookup, CplTriNotaSaidaE075DerLookup, CplTriNotaSaidaE080SerLookup, CplTriNotaSaidaNaturezaReceitaPisCofinsLookup, CplTriNotaSaidaNcmLookup, CplTriNotaSaidaNfEntradaLookup, CplTriNotaSaidaNfSaidaLookup, CurrencyLookup, DocumentoLookup, E001EndLookup, E001PesLookup, E001TnsLookup, E001TnsSupEstLookup, E002TptLookup, E006PaiLookup, E007UfsLookup, E008CepLookup, E008RaiLookup, E012FamLookup, E015MedLookup, E020SnfLookup, E021MotLookup, E023CrpLookup, E024MsgLookup, E027EqiLookup, E027StrLookup, E028CpgLookup, E030AgeLookup, E030BanLookup, E031MoeLookup, E032EdcLookup, E034TccLookup, E035OcrLookup, E036InsLookup, E039PorLookup, E041CebLookup, E043MpcLookup, E043PcmLookup, E044CcuLookup, E045PlaLookup, E046HpdLookup, E047NtgLookup, E048FctLookup, E048SfcLookup, E051DisLookup, E066FpgLookup, E067FinLookup, E069GreLookup, E070EmpLookup, E070EntLookup, E070FilLookup, E073PesLookup, E073VeiLookup, E075DerLookup, E076MarLookup, E080SerLookup, E081TabLookup, E082TprLookup, E085PesLookup, E089DocLookup, E090HrpComGerLookup, E090PesLookup, E091PlfLookup, E095HfoSupGerLookup, E095PesLookup, E099UsuComGerLookup, E099UsuSupCprLookup, E140InsLookup, E140NfsLookup, E200LotLookup, E200SerLookup, E205DepLookup, E210DxpE075DerLookup, E210DxpLookup, E301TcrLookup, E403FprLookup, E420IcpLookup, E420IpcLookup, E420OcpLookup, E501TcpLookup, E600CcoLookup, E640LotLookup, EntityPersonProductLookup, EnumLogicalOperator, EquipmentLookup, ErpLookups, ErpLookupsModule, ErpLookupsService, ErpPolling, ExportUtils, FiltersStorageService, FormUtilsService, HTTP_STATUS_CODE, IndOperacaoFornecimentoLookup, LeiComplementar1162003Lookup, LigacaoItemFornecedorLookup, ListaServicoNacionalLookup, LookupValidationUtils, ModulesEnum, NbsLookup, NcmLookup, NotaFiscalEntradaLookup, NpsService, OperacoesLookup, OrigemDestinoLookup, OrigemMercadoriaLookup, ParametersLookup, PrimitiveManager, ProdutoServicoLookup, QuantidadeDisponivelDemandaLookup, RequisicaoLookup, SegmentoLookup, TypeTaxesLookup, UnidadeMedidaLookup, UtilsModule, VerifyModulePermission, VerifyModulePermissions, WebsocketService, naturezaReceitaPisCofins, ɵ0, ɵ1, ɵ2, EnumAnaSin as ɵa, EnumNatCtb as ɵb, StorageService as ɵc, UserInformationService as ɵd, VerifyModulePermissionService as ɵe, VerifyModulePermissionsService as ɵf };
8150
+ export { AgreementLookup, BankLookup, BeneficioFiscalLookup, BreadcrumbComponent, BreadcrumbModule, Breakpoints, CaracteristicaFiscalLookup, ClassificacaoTributariaLookup, ComposicaoBaseCalculoLookup, ContaInternaFilialLookup, CountryLookup, CplTriNotaSaidaE001EndLookup, CplTriNotaSaidaE001PesLookup, CplTriNotaSaidaE001TnsLookup, CplTriNotaSaidaE007UfsLookup, CplTriNotaSaidaE008RaiLookup, CplTriNotaSaidaE015MedLookup, CplTriNotaSaidaE020SnfLookup, CplTriNotaSaidaE024MsgLookup, CplTriNotaSaidaE028CpgLookup, CplTriNotaSaidaE032EdcLookup, CplTriNotaSaidaE051DisLookup, CplTriNotaSaidaE066FpgLookup, CplTriNotaSaidaE070EmpLookup, CplTriNotaSaidaE070FilLookup, CplTriNotaSaidaE075DerLookup, CplTriNotaSaidaE080SerLookup, CplTriNotaSaidaNaturezaReceitaPisCofinsLookup, CplTriNotaSaidaNcmLookup, CplTriNotaSaidaNfEntradaLookup, CplTriNotaSaidaNfSaidaLookup, CurrencyLookup, DocumentoLookup, E001EndLookup, E001PesLookup, E001TnsLookup, E001TnsSupEstLookup, E002TptLookup, E006PaiLookup, E007UfsLookup, E008CepLookup, E008RaiLookup, E012FamLookup, E015MedLookup, E020SnfLookup, E021MotLookup, E023CrpLookup, E024MsgLookup, E027EqiLookup, E027StrLookup, E028CpgLookup, E030AgeLookup, E030BanLookup, E031MoeLookup, E032EdcLookup, E034TccLookup, E035OcrLookup, E036InsLookup, E039PorLookup, E041CebLookup, E043MpcLookup, E043PcmLookup, E044CcuLookup, E045PlaLookup, E046HpdLookup, E047NtgLookup, E048FctLookup, E048SfcLookup, E051DisLookup, E066FpgLookup, E067FinLookup, E069GreLookup, E070EmpLookup, E070EntLookup, E070FilLookup, E073PesLookup, E073VeiLookup, E075DerLookup, E076MarLookup, E080SerLookup, E081TabLookup, E082TprLookup, E085PesLookup, E089DocLookup, E090HrpComGerLookup, E090PesLookup, E091PlfLookup, E095HfoSupGerLookup, E095PesLookup, E099UsuComGerLookup, E099UsuSupCprLookup, E140InsLookup, E140NfsLookup, E200LotLookup, E200SerLookup, E205DepLookup, E210DxpE075DerLookup, E210DxpLookup, E301TcrLookup, E403FprLookup, E420IcpLookup, E420IpcLookup, E420OcpLookup, E501TcpLookup, E600CcoLookup, E640LotLookup, EntityPersonProductLookup, EnumLogicalOperator, EquipmentLookup, ErpLookups, ErpLookupsFormField, ErpLookupsModule, ErpLookupsService, ErpPolling, ExportUtils, FiltersStorageService, FormUtilsService, HTTP_STATUS_CODE, IndOperacaoFornecimentoLookup, LeiComplementar1162003Lookup, LigacaoItemFornecedorLookup, ListaServicoNacionalLookup, LookupValidationUtils, ModulesEnum, NbsLookup, NcmLookup, NotaFiscalEntradaLookup, NpsService, OperacoesLookup, OrigemDestinoLookup, OrigemMercadoriaLookup, ParametersLookup, PrimitiveManager, ProdutoServicoLookup, QuantidadeDisponivelDemandaLookup, RequisicaoLookup, SegmentoLookup, TypeTaxesLookup, UnidadeMedidaLookup, UtilsModule, VerifyModulePermission, VerifyModulePermissions, WebsocketService, naturezaReceitaPisCofins, ɵ0, ɵ1, ɵ2, EnumAnaSin as ɵa, EnumNatCtb as ɵb, StorageService as ɵc, UserInformationService as ɵd, VerifyModulePermissionService as ɵe, VerifyModulePermissionsService as ɵf };
8105
8151
  //# sourceMappingURL=senior-gestao-empresarial-angular-components.js.map