@mediusinc/mng-commons 0.4.6 → 0.5.0

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.
Files changed (40) hide show
  1. package/esm2020/lib/api/services/api.abstract.service.mjs +15 -4
  2. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +3 -3
  3. package/esm2020/lib/components/action/action.component.mjs +52 -8
  4. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +25 -1
  5. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +12 -3
  6. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +26 -1
  7. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +17 -0
  8. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +8 -4
  9. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +3 -3
  10. package/esm2020/lib/components/form/formly/fields/index.mjs +2 -1
  11. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +3 -3
  12. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +3 -3
  13. package/esm2020/lib/config/formly.config.mjs +7 -2
  14. package/esm2020/lib/descriptors/action.descriptor.mjs +34 -6
  15. package/esm2020/lib/descriptors/field.descriptor.mjs +48 -10
  16. package/esm2020/lib/descriptors/table.descriptor.mjs +3 -13
  17. package/esm2020/lib/mng-commons.module.mjs +5 -2
  18. package/esm2020/lib/pipes/enum.pipe.mjs +2 -2
  19. package/esm2020/lib/services/action-executor.service.mjs +28 -5
  20. package/esm2020/lib/utils/editor-formly.util.mjs +5 -5
  21. package/fesm2015/mediusinc-mng-commons.mjs +278 -60
  22. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  23. package/fesm2020/mediusinc-mng-commons.mjs +270 -59
  24. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  25. package/lib/api/services/api.abstract.service.d.ts +1 -1
  26. package/lib/api/services/crud-api.abstract.service.d.ts +8 -8
  27. package/lib/components/action/action.component.d.ts +13 -2
  28. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +4 -2
  29. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +7 -1
  30. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +4 -2
  31. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +6 -0
  32. package/lib/components/form/formly/fields/index.d.ts +1 -0
  33. package/lib/descriptors/action.descriptor.d.ts +28 -3
  34. package/lib/descriptors/field.descriptor.d.ts +26 -12
  35. package/lib/descriptors/table.descriptor.d.ts +0 -1
  36. package/lib/mng-commons.module.d.ts +58 -57
  37. package/lib/pipes/enum.pipe.d.ts +2 -1
  38. package/package.json +1 -1
  39. package/scss/mng-overrides/_layout_dialog.scss +44 -14
  40. package/scss/mng-overrides/_theme_dialog.scss +2 -3
@@ -79,6 +79,9 @@ export class AFieldDescriptor extends AGenericFieldDescriptor {
79
79
  get className() {
80
80
  return this._className;
81
81
  }
82
+ get fieldClassName() {
83
+ return this._fieldClassName;
84
+ }
82
85
  get labelClassName() {
83
86
  return this._labelClassName;
84
87
  }
@@ -140,10 +143,11 @@ export class AFieldDescriptor extends AGenericFieldDescriptor {
140
143
  this._validators.push(new FieldValidator(name, expression, message));
141
144
  return this;
142
145
  }
143
- withClassName(className, labelClassName = '', inputClassName = '') {
146
+ withClassName(className, labelClassName = '', inputClassName = '', fieldClassName) {
144
147
  this._className = className;
145
148
  this._labelClassName = labelClassName;
146
149
  this._inputClassName = inputClassName;
150
+ this._fieldClassName = fieldClassName;
147
151
  return this;
148
152
  }
149
153
  withSize(size = FieldDescriptor.SizeEnum.Normal) {
@@ -252,6 +256,10 @@ export class FieldInputDescriptor extends AFieldDescriptor {
252
256
  this._fieldType = FieldInputDescriptor.TypeEnum.Hidden;
253
257
  return this;
254
258
  }
259
+ asLabel() {
260
+ this._fieldType = FieldInputDescriptor.TypeEnum.Label;
261
+ return this;
262
+ }
255
263
  asText(minLength, maxLength, pattern, isEmail) {
256
264
  this._fieldType = FieldInputDescriptor.TypeEnum.Text;
257
265
  this._minLength = minLength;
@@ -347,14 +355,15 @@ export class FieldInputDescriptor extends AFieldDescriptor {
347
355
  let TypeEnum;
348
356
  (function (TypeEnum) {
349
357
  TypeEnum[TypeEnum["Hidden"] = 0] = "Hidden";
350
- TypeEnum[TypeEnum["Text"] = 1] = "Text";
351
- TypeEnum[TypeEnum["Textarea"] = 2] = "Textarea";
352
- TypeEnum[TypeEnum["Number"] = 3] = "Number";
353
- TypeEnum[TypeEnum["Switch"] = 4] = "Switch";
354
- TypeEnum[TypeEnum["Radio"] = 5] = "Radio";
355
- TypeEnum[TypeEnum["Datepicker"] = 6] = "Datepicker";
356
- TypeEnum[TypeEnum["Mask"] = 7] = "Mask";
357
- TypeEnum[TypeEnum["Custom"] = 8] = "Custom";
358
+ TypeEnum[TypeEnum["Label"] = 1] = "Label";
359
+ TypeEnum[TypeEnum["Text"] = 2] = "Text";
360
+ TypeEnum[TypeEnum["Textarea"] = 3] = "Textarea";
361
+ TypeEnum[TypeEnum["Number"] = 4] = "Number";
362
+ TypeEnum[TypeEnum["Switch"] = 5] = "Switch";
363
+ TypeEnum[TypeEnum["Radio"] = 6] = "Radio";
364
+ TypeEnum[TypeEnum["Datepicker"] = 7] = "Datepicker";
365
+ TypeEnum[TypeEnum["Mask"] = 8] = "Mask";
366
+ TypeEnum[TypeEnum["Custom"] = 9] = "Custom";
358
367
  })(TypeEnum = FieldInputDescriptor.TypeEnum || (FieldInputDescriptor.TypeEnum = {}));
359
368
  })(FieldInputDescriptor || (FieldInputDescriptor = {}));
360
369
  export class FieldLookupDescriptor extends AFieldDescriptor {
@@ -512,6 +521,16 @@ export class FieldLookupEnumDescriptor extends FieldLookupDescriptor {
512
521
  }
513
522
  return this;
514
523
  }
524
+ withDefaultValueEnum(defaultValue) {
525
+ const defaultOptionValue = this._nameAsValue ? EnumUtil.getConstantName(this._enumType, defaultValue) : defaultValue;
526
+ if (defaultOptionValue) {
527
+ const option = this._optionEnumValues.find(o => o.value === defaultOptionValue);
528
+ if (option) {
529
+ this.withDefaultValue(option);
530
+ }
531
+ }
532
+ return this;
533
+ }
515
534
  asAutocomplete(openOnFocus = true) {
516
535
  super.asAutocomplete(openOnFocus, true);
517
536
  return this;
@@ -734,6 +753,13 @@ export class FieldTabGroupDescriptor extends AFieldGroupDescriptor {
734
753
  export class FieldGroupDescriptor extends AFieldGroupDescriptor {
735
754
  constructor(editor, name) {
736
755
  super(editor, name);
756
+ this._type = FieldGroupDescriptor.TypeEnum.Fieldset;
757
+ if (this._default) {
758
+ this.asLogical();
759
+ }
760
+ }
761
+ get type() {
762
+ return this._type;
737
763
  }
738
764
  get fields() {
739
765
  return this._fields;
@@ -745,11 +771,23 @@ export class FieldGroupDescriptor extends AFieldGroupDescriptor {
745
771
  this._fields.push(field);
746
772
  return this;
747
773
  }
774
+ asLogical() {
775
+ this._type = FieldGroupDescriptor.TypeEnum.Logical;
776
+ return this;
777
+ }
748
778
  copy() {
749
779
  const group = new FieldGroupDescriptor(this._editor, this.name.substring(this.baseName.length));
780
+ group._type = this._type;
750
781
  group._title = this._title;
751
782
  group._fields = this.fields.map(f => f.copy());
752
783
  return group;
753
784
  }
754
785
  }
755
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvZmllbGQuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWtCLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRzNELE9BQU8sRUFBYSxPQUFPLEVBQUUsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRzdDLE9BQU8sRUFBQyxpQkFBaUIsRUFBbUQsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RyxPQUFPLEVBQTBDLGtCQUFrQixFQUFFLHFCQUFxQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHckgsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNsRSxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBMEQsTUFBTSxJQUFJLENBQUM7QUFHdkosTUFBTSxPQUFnQix1QkFBdUI7SUFJekMsWUFBc0IsTUFBNEI7UUFGeEMsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFHaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxVQUFVLENBQUMsTUFBbUI7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFnQixnQkFBd0IsU0FBUSx1QkFBMkI7SUF5QjdFLFlBQXNCLE1BQTRCLEVBQUUsUUFBZ0I7UUFDaEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFD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QUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7Rm9ybWx5RmllbGRDb25maWd9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0LCBvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbSwgTWVkaXVzUXVlcnlSZXN1bHR9IGZyb20gJy4uL2FwaS9tb2RlbHMnO1xuaW1wb3J0IHtNbmdGb3JtRmllbGRFdmVudCwgTW5nRm9ybUZpZWxkRXZlbnREYXRhLCBNbmdGb3JtRmllbGRFdmVudFR5cGVFbnVtfSBmcm9tICcuLi9jb21wb25lbnRzL2Zvcm0vbW9kZWxzJztcbmltcG9ydCB7SUxvb2t1cERhdGFQcm92aWRlciwgSVRhYmxlRGF0YVByb3ZpZGVyLCBMb29rdXBEYXRhUHJvdmlkZXIsIFRhYmxldmlld0RhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtFbnVtVmFsdWV9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0NsYXNzVHlwZSwgRW51bUNvbnN0YW50VHlwZSwgRW51bVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7RW51bVV0aWwsIEkxOG5VdGlscywgTW9kZWxVdGlsLCBUeXBlVXRpbH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBFZGl0b3JEZXNjcmlwdG9yLCBGaWVsZFZhbGlkYXRvciwgRmlsdGVyTG9va3VwRGVzY3JpcHRvciwgSUxvb2t1cERlc2NyaXB0b3IsIFRhYmxlRGVzY3JpcHRvciwgVGFibGV2aWV3RGVzY3JpcHRvcn0gZnJvbSAnLi8nO1xuaW1wb3J0IHtGaWVsZENvbmZpZywgRmllbGRMb29rdXBDb25maWd9IGZyb20gJy4vZmllbGQuZGVzY3JpcHRvci5pbnRlcmZhY2UnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2VkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD47XG4gICAgcHJvdGVjdGVkIF9jb25maWc6IEZpZWxkQ29uZmlnID0ge307XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPikge1xuICAgICAgICB0aGlzLl9lZGl0b3IgPSBlZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb25maWcoY29uZmlnOiBGaWVsZENvbmZpZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZERlc2NyaXB0b3I8VCwgRVQ+IGV4dGVuZHMgQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9ncm91cD86IEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD47XG4gICAgcHJvdGVjdGVkIF9sYWJlbD86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9oZWxwVGV4dD86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfcmVxdWlyZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0VmFsdWU/OiBUO1xuICAgIHByb3RlY3RlZCBfZ2V0dGVyPzogKGl0ZW06IEVUKSA9PiBUO1xuICAgIHByb3RlY3RlZCBfc2V0dGVyPzogKGl0ZW06IEVULCB2YWx1ZTogVCkgPT4gdm9pZDtcbiAgICBwcm90ZWN0ZWQgX3ZhbGlkYXRvcnM6IEFycmF5PEZpZWxkVmFsaWRhdG9yPiA9IFtdO1xuICAgIHByb3RlY3RlZCBfcmVxdWlyZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChtb2RlbDogYW55LCBmb3JtU3RhdGU/OiBhbnksIGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2Rpc2FibGVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgobW9kZWw6IGFueSwgZm9ybVN0YXRlPzogYW55LCBmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJvdGVjdGVkIF9oaWRkZW5FeHByZXNzaW9uPzogc3RyaW5nIHwgKChtb2RlbDogYW55LCBmb3JtU3RhdGU/OiBhbnksIGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIHByb3RlY3RlZCBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJvdGVjdGVkIF9sYWJlbENsYXNzTmFtZSA9ICcnO1xuICAgIHByb3RlY3RlZCBfaW5wdXRDbGFzc05hbWUgPSAnJztcbiAgICBwcm90ZWN0ZWQgX3NpemU6IEZpZWxkRGVzY3JpcHRvci5TaXplRW51bSA9IEZpZWxkRGVzY3JpcHRvci5TaXplRW51bS5Ob3JtYWw7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2V2ZW50c1N1YmplY3QgPSBuZXcgU3ViamVjdDxNbmdGb3JtRmllbGRFdmVudDxULCBFVD4+KCk7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3IpO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLl9sYWJlbCA9IEkxOG5VdGlscy5UeXBlLmdldFByb3BlcnR5S2V5KHRoaXMuX2VkaXRvci5tb2RlbC50eXBlTmFtZSwgcHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdyb3VwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JvdXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhlbHBUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVscFRleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZhbGlkYXRvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3JzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWRFeHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWRFeHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGlkZGVuRXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYWJlbENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5wdXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dENsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTaXplU21hbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplID09PSBGaWVsZERlc2NyaXB0b3IuU2l6ZUVudW0uU21hbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NpemVMYXJnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IEZpZWxkRGVzY3JpcHRvci5TaXplRW51bS5MYXJnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgY29weSgpOiBBRmllbGREZXNjcmlwdG9yPFQsIEVUPjtcblxuICAgIHB1YmxpYyB3aXRoTGFiZWwobGFiZWw6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sYWJlbCA9IGxhYmVsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIZWxwVGV4dChoZWxwVGV4dDogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hlbHBUZXh0ID0gaGVscFRleHQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVxdWlyZWQocmVxdWlyZWQgPSB0cnVlLCByZXF1aXJlZEV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKG1vZGVsOiBhbnksIGZvcm1TdGF0ZT86IGFueSwgZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gcmVxdWlyZWQ7XG4gICAgICAgIGlmIChyZXF1aXJlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVpcmVkRXhwcmVzc2lvbiA9IHJlcXVpcmVkRXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERpc2FibGVkKGRpc2FibGVkID0gdHJ1ZSwgZGlzYWJsZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChtb2RlbDogYW55LCBmb3JtU3RhdGU/OiBhbnksIGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICBpZiAoZGlzYWJsZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb24gPSBkaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRkZW4oaGlkZGVuRXhwcmVzc2lvbjogc3RyaW5nIHwgKChtb2RlbDogYW55LCBmb3JtU3RhdGU/OiBhbnksIGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9oaWRkZW5FeHByZXNzaW9uID0gaGlkZGVuRXhwcmVzc2lvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlOiBUKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhHZXR0ZXIoZ2V0dGVyOiAoaXRlbTogRVQpID0+IFQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNldHRlcihzZXR0ZXI6IChpdGVtOiBFVCwgdmFsdWU6IFQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFZhbGlkYXRvcihuYW1lOiBzdHJpbmcsIGV4cHJlc3Npb246IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW4sIG1lc3NhZ2U/OiAoZXJyOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMucHVzaChuZXcgRmllbGRWYWxpZGF0b3IobmFtZSwgZXhwcmVzc2lvbiwgbWVzc2FnZSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZywgbGFiZWxDbGFzc05hbWUgPSAnJywgaW5wdXRDbGFzc05hbWUgPSAnJyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHRoaXMuX2xhYmVsQ2xhc3NOYW1lID0gbGFiZWxDbGFzc05hbWU7XG4gICAgICAgIHRoaXMuX2lucHV0Q2xhc3NOYW1lID0gaW5wdXRDbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2l6ZShzaXplOiBGaWVsZERlc2NyaXB0b3IuU2l6ZUVudW0gPSBGaWVsZERlc2NyaXB0b3IuU2l6ZUVudW0uTm9ybWFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NpemUgPSBzaXplO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dEV2ZW50KHR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW0sIGNtcFR5cGU6IFR5cGU8YW55PiwgY21wSW5zdGFuY2U6IGFueSwgZGF0YT86IE1uZ0Zvcm1GaWVsZEV2ZW50RGF0YTxULCBFVD4pIHtcbiAgICAgICAgdGhpcy5fZXZlbnRzU3ViamVjdC5uZXh0KG5ldyBNbmdGb3JtRmllbGRFdmVudCh0eXBlLCBjbXBUeXBlLCBjbXBJbnN0YW5jZSwgZGF0YSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXZlbnRzJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhvYmo6IEFGaWVsZERlc2NyaXB0b3I8VCwgRVQ+KSB7XG4gICAgICAgIG9iai5fbGFiZWwgPSB0aGlzLl9sYWJlbDtcbiAgICAgICAgb2JqLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBvYmouX2hlbHBUZXh0ID0gdGhpcy5faGVscFRleHQ7XG4gICAgICAgIG9iai5fcmVxdWlyZWQgPSB0aGlzLl9yZXF1aXJlZDtcbiAgICAgICAgb2JqLl9kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICBvYmouX2RlZmF1bHRWYWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICAgICAgb2JqLl9yZXF1aXJlZEV4cHJlc3Npb24gPSB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIG9iai5faGlkZGVuRXhwcmVzc2lvbiA9IHRoaXMuX2hpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIG9iai5fZGlzYWJsZWRFeHByZXNzaW9uID0gdGhpcy5fZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgICAgICBvYmouX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9zaXplID0gdGhpcy5zaXplO1xuICAgICAgICBvYmouX2dldHRlciA9IHRoaXMuX2dldHRlcjtcbiAgICAgICAgb2JqLl9zZXR0ZXIgPSB0aGlzLl9zZXR0ZXI7XG4gICAgICAgIG9iai5fdmFsaWRhdG9ycyA9IHRoaXMuX3ZhbGlkYXRvcnM7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpZWxkRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gU2l6ZUVudW0ge1xuICAgICAgICBTbWFsbCxcbiAgICAgICAgTm9ybWFsLFxuICAgICAgICBMYXJnZVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkSW5wdXREZXNjcmlwdG9yPEVUPiBleHRlbmRzIEFGaWVsZERlc2NyaXB0b3I8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGUsIEVUPiB7XG4gICAgcHJpdmF0ZSBfZmllbGRUeXBlOiBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlRleHQ7XG5cbiAgICAvLyB0ZXh0YXJlYSBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfcm93cz86IG51bWJlcjtcblxuICAgIC8vIG51bWJlciBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfbnVtYmVyTWluPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlck1heD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9udW1iZXJTdGVwPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlck1pbkZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlck1heEZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlclVzZUdyb3VwaW5nID0gdHJ1ZTtcblxuICAgIC8vIHJhZGlvIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9yYWRpb09wdGlvbnM6IEFycmF5PEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZT4+ID0gW107XG5cbiAgICAvLyBkYXRlcGlja2VyIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyRm9ybWF0Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2RhdGVQaWNrZXJNaW4/OiBEYXRlO1xuICAgIHByaXZhdGUgX2RhdGVQaWNrZXJNYXg/OiBEYXRlO1xuICAgIHByaXZhdGUgX2RhdGVQaWNrZXJTaG93VGltZSA9IGZhbHNlO1xuXG4gICAgLy8gaW5wdXQgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX21heExlbmd0aD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9taW5MZW5ndGg/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cDtcblxuICAgIC8vIG1hc2sgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX21hc2s/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfc2xvdENoYXI/OiBzdHJpbmc7XG5cbiAgICAvLyBjdXN0b20gY29tcG9uZW50IHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9jdXN0b21Db21wb25lbnROYW1lPzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3IsIHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyTWluO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyTWF4O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyU3RlcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlclN0ZXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNaW5GcmFjdGlvbkRpZ2l0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlclVzZUdyb3VwaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyVXNlR3JvdXBpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByYWRpb09wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYWRpb09wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpY2tlckZvcm1hdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJNaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyTWluO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlck1heCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJNYXg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyU2hvd1RpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhMZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtaW5MZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5MZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1hc2soKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXNrO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2xvdENoYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zbG90Q2hhcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1c3RvbUNvbXBvbmVudE5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21Db21wb25lbnROYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0hpZGRlbigpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uSGlkZGVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNUZXh0KG1pbkxlbmd0aD86IG51bWJlciwgbWF4TGVuZ3RoPzogbnVtYmVyLCBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwLCBpc0VtYWlsPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5UZXh0O1xuICAgICAgICB0aGlzLl9taW5MZW5ndGggPSBtaW5MZW5ndGg7XG4gICAgICAgIHRoaXMuX21heExlbmd0aCA9IG1heExlbmd0aDtcbiAgICAgICAgdGhpcy5fcGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIGlmIChpc0VtYWlsKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhWYWxpZGF0b3IoJ2VtYWlsJywgY29udHJvbCA9PiAhVmFsaWRhdG9ycy5lbWFpbChjb250cm9sKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzVGV4dGFyZWEocm93cyA9IDMsIG1pbkxlbmd0aD86IG51bWJlciwgbWF4TGVuZ3RoPzogbnVtYmVyLCBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlRleHRhcmVhO1xuICAgICAgICB0aGlzLl9yb3dzID0gcm93cztcbiAgICAgICAgdGhpcy5fbWluTGVuZ3RoID0gbWluTGVuZ3RoO1xuICAgICAgICB0aGlzLl9tYXhMZW5ndGggPSBtYXhMZW5ndGg7XG4gICAgICAgIHRoaXMuX3BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNOdW1iZXIoc3RlcD86IG51bWJlciwgbWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIsIG1pbkZyYWN0aW9uRGlnaXRzPzogbnVtYmVyLCBtYXhGcmFjdGlvbkRpZ2l0cz86IG51bWJlciwgbnVtYmVyVXNlR3JvdXBpbmcgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fbnVtYmVyU3RlcCA9IHN0ZXA7XG4gICAgICAgIHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzID0gbWluRnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIHRoaXMuX251bWJlck1heEZyYWN0aW9uRGlnaXRzID0gbWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIHRoaXMuX251bWJlck1pbiA9IG1pbiA/PyBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUjtcbiAgICAgICAgdGhpcy5fbnVtYmVyTWF4ID0gbWF4ID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgICB0aGlzLl9udW1iZXJVc2VHcm91cGluZyA9IG51bWJlclVzZUdyb3VwaW5nO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1N3aXRjaCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uU3dpdGNoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNSYWRpbyhvcHRpb25zOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+LCBvcHRpb25zVGl0bGVQYXRoPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlJhZGlvO1xuICAgICAgICB0aGlzLl9yYWRpb09wdGlvbnMgPSBvcHRpb25zLm1hcChvID0+IDxFbnVtVmFsdWU8c3RyaW5nIHwgbnVtYmVyPj57dmFsdWU6IG8sIHRpdGxlOiBgJHtvcHRpb25zVGl0bGVQYXRoID8gYCR7b3B0aW9uc1RpdGxlUGF0aH0uYCA6ICcnfSR7b31gfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1JhZGlvRnJvbUVudW0oZW51bVR5cGU6IEVudW1UeXBlLCBvcHRpb25zVGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbCwgdmFsdWVzPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4sIG5hbWVBc1ZhbHVlID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uUmFkaW87XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1RpdGxlUGF0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9wdGlvbnNUaXRsZVBhdGggPSBUeXBlVXRpbC5maW5kRW51bU5hbWUoZW51bVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JhZGlvT3B0aW9ucyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKVxuICAgICAgICAgICAgPyBFbnVtVXRpbC5mcm9tVmFsdWVzQXNFbnVtVmFsdWVBcnJheShlbnVtVHlwZSwgdmFsdWVzLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICA6IEVudW1VdGlsLmZyb21Db25zdGFudHNBc0VudW1WYWx1ZUFycmF5KGVudW1UeXBlLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCA/PyB1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNEYXRlUGlja2VyKGZvcm1hdD86IHN0cmluZywgbWluPzogRGF0ZSwgbWF4PzogRGF0ZSwgc2hvd1RpbWU/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLkRhdGVwaWNrZXI7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQgPSBmb3JtYXQgPyBmb3JtYXQgOiAnZGQubW0ueXknO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyTWluID0gbWluO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyTWF4ID0gbWF4O1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWUgPSBzaG93VGltZSA/PyBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzTWFzayhtYXNrOiBzdHJpbmcsIHNsb3RDaGFyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uTWFzaztcbiAgICAgICAgdGhpcy5fbWFzayA9IG1hc2s7XG4gICAgICAgIHRoaXMuX3Nsb3RDaGFyID0gc2xvdENoYXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0N1c3RvbUNvbXBvbmVudChjdXN0b21Db21wb25lbnROYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uQ3VzdG9tO1xuICAgICAgICB0aGlzLl9jdXN0b21Db21wb25lbnROYW1lID0gY3VzdG9tQ29tcG9uZW50TmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRJbnB1dERlc2NyaXB0b3I8RVQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRJbnB1dERlc2NyaXB0b3I8RVQ+KHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9maWVsZFR5cGUgPSB0aGlzLl9maWVsZFR5cGU7XG4gICAgICAgIGZpZWxkLl9yb3dzID0gdGhpcy5fcm93cztcbiAgICAgICAgZmllbGQuX251bWJlck1pbiA9IHRoaXMuX251bWJlck1pbjtcbiAgICAgICAgZmllbGQuX251bWJlck1heCA9IHRoaXMuX251bWJlck1heDtcbiAgICAgICAgZmllbGQuX251bWJlclN0ZXAgPSB0aGlzLl9udW1iZXJTdGVwO1xuICAgICAgICBmaWVsZC5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPSB0aGlzLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgZmllbGQuX251bWJlck1heEZyYWN0aW9uRGlnaXRzID0gdGhpcy5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIGZpZWxkLl9udW1iZXJVc2VHcm91cGluZyA9IHRoaXMuX251bWJlclVzZUdyb3VwaW5nO1xuICAgICAgICBmaWVsZC5fcmFkaW9PcHRpb25zID0gWy4uLnRoaXMuX3JhZGlvT3B0aW9uc107XG4gICAgICAgIGZpZWxkLl9kYXRlUGlja2VyRm9ybWF0ID0gdGhpcy5fZGF0ZVBpY2tlckZvcm1hdDtcbiAgICAgICAgZmllbGQuX2RhdGVQaWNrZXJNaW4gPSB0aGlzLl9kYXRlUGlja2VyTWluO1xuICAgICAgICBmaWVsZC5fZGF0ZVBpY2tlck1heCA9IHRoaXMuX2RhdGVQaWNrZXJNYXg7XG4gICAgICAgIGZpZWxkLl9kYXRlUGlja2VyU2hvd1RpbWUgPSB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWU7XG4gICAgICAgIGZpZWxkLl9tYXhMZW5ndGggPSB0aGlzLl9tYXhMZW5ndGg7XG4gICAgICAgIGZpZWxkLl9taW5MZW5ndGggPSB0aGlzLl9taW5MZW5ndGg7XG4gICAgICAgIGZpZWxkLl9wYXR0ZXJuID0gdGhpcy5fcGF0dGVybjtcbiAgICAgICAgZmllbGQuX21hc2sgPSB0aGlzLl9tYXNrO1xuICAgICAgICBmaWVsZC5fc2xvdENoYXIgPSB0aGlzLl9zbG90Q2hhcjtcbiAgICAgICAgZmllbGQuX2N1c3RvbUNvbXBvbmVudE5hbWUgPSB0aGlzLl9jdXN0b21Db21wb25lbnROYW1lO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpZWxkSW5wdXREZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIEhpZGRlbixcbiAgICAgICAgVGV4dCxcbiAgICAgICAgVGV4dGFyZWEsXG4gICAgICAgIE51bWJlcixcbiAgICAgICAgU3dpdGNoLFxuICAgICAgICBSYWRpbyxcbiAgICAgICAgRGF0ZXBpY2tlcixcbiAgICAgICAgTWFzayxcbiAgICAgICAgQ3VzdG9tXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRMb29rdXBEZXNjcmlwdG9yPFQsIEVUPiBleHRlbmRzIEFGaWVsZERlc2NyaXB0b3I8VCwgRVQ+IGltcGxlbWVudHMgSUxvb2t1cERlc2NyaXB0b3I8VD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4gfCBudWxsO1xuICAgIHByb3RlY3RlZCBfbG9va3VwVHlwZTogRmllbGRMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtID0gRmllbGRMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtLkRyb3Bkb3duO1xuICAgIHByb3RlY3RlZCBfaXRlbXNMYWJlbFByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfaXRlbXNMYWJlbFRyYW5zbGF0ZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfaXRlbXNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfaXRlbXNEaXNhYmxlZFByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfZGF0YUtleVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfZGF0YVByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxULCBhbnk+O1xuXG4gICAgcHJvdGVjdGVkIF9kcm9wZG93bkNsYXNzTmFtZSA9ICdtbmctZmlsdGVyLWxvb2t1cC1kcm9wZG93bic7XG5cbiAgICBwcm90ZWN0ZWQgX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2ggPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBfZGlhbG9nVGFibGVEZXNjcmlwdG9yPzogVGFibGVEZXNjcmlwdG9yPFQ+O1xuICAgIHByb3RlY3RlZCBfZGlhbG9nVGFibGVEYXRhUHJvdmlkZXI/OiBJVGFibGVEYXRhUHJvdmlkZXI8VCwgYW55PjtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+IHwgbnVsbCkge1xuICAgICAgICBzdXBlcihlZGl0b3IsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fbW9kZWxUeXBlID0gbW9kZWxUeXBlO1xuICAgICAgICBNb2RlbFV0aWwudHJ5U2V0TG9va3VwSXRlbXNQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvb2t1cFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc0xhYmVsUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc0xhYmVsVHJhbnNsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNMYWJlbFRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zVmFsdWVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zRGlzYWJsZWRQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zRGlzYWJsZWRQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFLZXlQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZU9wZW5PbkZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRvY29tcGxldGVJbmxpbmVTZWFyY2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2g7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkcm9wZG93bkNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3Bkb3duQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlhbG9nVGFibGVEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlhbG9nVGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlhbG9nVGFibGVEYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaWFsb2dUYWJsZURhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEl0ZW1zTGFiZWxQcm9wZXJ0eShpdGVtc0xhYmVsUHJvcGVydHk6IHN0cmluZywgdHJhbnNsYXRlID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5ID0gaXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICB0aGlzLl9pdGVtc0xhYmVsVHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEl0ZW1zVmFsdWVQcm9wZXJ0eShpdGVtc1ZhbHVlUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgPSBpdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJdGVtc0Rpc2FibGVkUHJvcGVydHkoaXRlbXNEaXNhYmxlZFByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXRlbXNEaXNhYmxlZFByb3BlcnR5ID0gaXRlbXNEaXNhYmxlZFByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGFLZXlQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwPFM+KGxvb2t1cDogKHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtLCBzZXJ2aWNlPzogUywgc2VhcmNoPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEFycmF5PFQ+Piwgc2VydmljZVR5cGU/OiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBMb29rdXBEYXRhUHJvdmlkZXI8VCwgUz4odGhpcy5fbW9kZWxUeXBlKTtcbiAgICAgICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aFNlcnZpY2VUeXBlKHNlcnZpY2VUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhUHJvdmlkZXIud2l0aExvb2t1cChsb29rdXApO1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxULCBhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhDb25maWcoY29uZmlnOiBGaWVsZExvb2t1cENvbmZpZyk6IHRoaXMge1xuICAgICAgICByZXR1cm4gc3VwZXIud2l0aENvbmZpZyhjb25maWcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0F1dG9jb21wbGV0ZShvcGVuT25Gb2N1cyA9IGZhbHNlLCBpbmxpbmVTZWFyY2ggPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb29rdXBUeXBlID0gRmlsdGVyTG9va3VwRGVzY3JpcHRvci5Mb29rdXBUeXBlRW51bS5BdXRvY29tcGxldGU7XG4gICAgICAgIHRoaXMuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzID0gb3Blbk9uRm9jdXM7XG4gICAgICAgIHRoaXMuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaCA9IGlubGluZVNlYXJjaDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRGlhbG9nKGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPFQ+LCB0YWJsZURhdGFQcm92aWRlcj86IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvb2t1cFR5cGUgPSBGaWVsZExvb2t1cERlc2NyaXB0b3IuTG9va3VwVHlwZUVudW0uRGlhbG9nO1xuICAgICAgICB0aGlzLl9kaWFsb2dUYWJsZURlc2NyaXB0b3IgPSBsb29rdXBUYWJsZURlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1RhYmxlRGF0YVByb3ZpZGVyID0gdGFibGVEYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxULCBFVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3IodGhpcy5fZWRpdG9yLCB0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fbW9kZWxUeXBlKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZmllbGQpO1xuICAgICAgICBmaWVsZC5fbG9va3VwVHlwZSA9IHRoaXMuX2xvb2t1cFR5cGU7XG4gICAgICAgIGZpZWxkLl9pdGVtc0xhYmVsUHJvcGVydHkgPSB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgICAgIGZpZWxkLl9pdGVtc0xhYmVsVHJhbnNsYXRlID0gdGhpcy5faXRlbXNMYWJlbFRyYW5zbGF0ZTtcbiAgICAgICAgZmllbGQuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2l0ZW1zRGlzYWJsZWRQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zRGlzYWJsZWRQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2RhdGFQcm92aWRlciA9IHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICAgICAgZmllbGQuX2Ryb3Bkb3duQ2xhc3NOYW1lID0gdGhpcy5fZHJvcGRvd25DbGFzc05hbWU7XG4gICAgICAgIGZpZWxkLl9hdXRvY29tcGxldGVPcGVuT25Gb2N1cyA9IHRoaXMuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzO1xuICAgICAgICBmaWVsZC5fYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoID0gdGhpcy5fYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoO1xuICAgICAgICBmaWVsZC5fZGlhbG9nVGFibGVEZXNjcmlwdG9yID0gdGhpcy5fZGlhbG9nVGFibGVEZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpZWxkTG9va3VwRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gTG9va3VwVHlwZUVudW0ge1xuICAgICAgICBEcm9wZG93bixcbiAgICAgICAgQXV0b2NvbXBsZXRlLFxuICAgICAgICBEaWFsb2dcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVUPiBleHRlbmRzIEZpZWxkTG9va3VwRGVzY3JpcHRvcjxFbnVtVmFsdWU8c3RyaW5nIHwgbnVtYmVyPiwgRVQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbnVtVHlwZTogRW51bVR5cGU7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uRW51bVZhbHVlczogRW51bVZhbHVlPHN0cmluZyB8IG51bWJlcj5bXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9uYW1lQXNWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZywgZW51bVR5cGU6IEVudW1UeXBlLCBvcHRpb25zPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4sIG5hbWVBc1ZhbHVlID0gZmFsc2UsIG9wdGlvbnNUaXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHksIG51bGwpO1xuICAgICAgICB0aGlzLl9lbnVtVHlwZSA9IGVudW1UeXBlO1xuICAgICAgICB0aGlzLl9uYW1lQXNWYWx1ZSA9IG5hbWVBc1ZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNUaXRsZVBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBvcHRpb25zVGl0bGVQYXRoID0gVHlwZVV0aWwuZmluZEVudW1OYW1lKGVudW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcHRpb25FbnVtVmFsdWVzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKVxuICAgICAgICAgICAgPyBFbnVtVXRpbC5mcm9tVmFsdWVzQXNFbnVtVmFsdWVBcnJheShlbnVtVHlwZSwgb3B0aW9ucywgbmFtZUFzVmFsdWUsIG9wdGlvbnNUaXRsZVBhdGggPz8gdW5kZWZpbmVkKVxuICAgICAgICAgICAgOiBFbnVtVXRpbC5mcm9tQ29uc3RhbnRzQXNFbnVtVmFsdWVBcnJheShlbnVtVHlwZSwgbmFtZUFzVmFsdWUsIG9wdGlvbnNUaXRsZVBhdGggPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IExvb2t1cERhdGFQcm92aWRlcjxFbnVtVmFsdWU8c3RyaW5nIHwgbnVtYmVyPiwgYW55PihudWxsKS53aXRoTG9va3VwKCgpID0+IG9mKHRoaXMuX29wdGlvbkVudW1WYWx1ZXMpKTtcbiAgICAgICAgdGhpcy53aXRoTG9va3VwRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcik7XG4gICAgICAgIHRoaXMud2l0aEl0ZW1zTGFiZWxQcm9wZXJ0eSgndGl0bGUnLCBvcHRpb25zVGl0bGVQYXRoICE9PSBudWxsKTtcbiAgICAgICAgdGhpcy53aXRoSXRlbXNWYWx1ZVByb3BlcnR5KCd2YWx1ZScpO1xuICAgICAgICB0aGlzLndpdGhJdGVtc0Rpc2FibGVkUHJvcGVydHkoJ2Rpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWRPcHRpb25zKC4uLmRpc2FibGVkT3B0aW9uczogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4pOiB0aGlzIHtcbiAgICAgICAgZm9yIChjb25zdCBkaXNhYmxlZE9wdGlvbiBvZiBkaXNhYmxlZE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2FibGVkT3B0aW9uVmFsdWUgPSB0aGlzLl9uYW1lQXNWYWx1ZSA/IEVudW1VdGlsLmdldENvbnN0YW50TmFtZSh0aGlzLl9lbnVtVHlwZSwgZGlzYWJsZWRPcHRpb24pIDogZGlzYWJsZWRPcHRpb247XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWRPcHRpb25WYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX29wdGlvbkVudW1WYWx1ZXMuZmluZChvID0+IG8udmFsdWUgPT09IGRpc2FibGVkT3B0aW9uVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGFzQXV0b2NvbXBsZXRlKG9wZW5PbkZvY3VzID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICBzdXBlci5hc0F1dG9jb21wbGV0ZShvcGVuT25Gb2N1cywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RVQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcjxFVD4odGhpcy5fZWRpdG9yLCB0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fZW51bVR5cGUsIFtdKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZmllbGQpO1xuICAgICAgICBmaWVsZC5fbG9va3VwVHlwZSA9IHRoaXMuX2xvb2t1cFR5cGU7XG4gICAgICAgIGZpZWxkLl9pdGVtc0xhYmVsUHJvcGVydHkgPSB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgICAgIGZpZWxkLl9pdGVtc1ZhbHVlUHJvcGVydHkgPSB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgICAgIGZpZWxkLl9pdGVtc0Rpc2FibGVkUHJvcGVydHkgPSB0aGlzLl9pdGVtc0Rpc2FibGVkUHJvcGVydHk7XG4gICAgICAgIGZpZWxkLl9kYXRhS2V5UHJvcGVydHkgPSB0aGlzLl9kYXRhS2V5UHJvcGVydHk7XG4gICAgICAgIGZpZWxkLl9kYXRhUHJvdmlkZXIgPSB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yPFQsIEVUPiBleHRlbmRzIEFGaWVsZERlc2NyaXB0b3I8VCwgRVQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD47IC8vIHRhYmxlIGRlc2NyaXB0b3IgZm9yIG1haW4gdGFibGUgY29tcG9uZW50XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD47IC8vIHRhYmxlIGRlc2NyaXB0b3IgZm9yIHdoZXJlIHNlbGVjdCB3aWxsIGJlIGFwcGxpZWRcbiAgICBwcml2YXRlIF9maWVsZFR5cGU6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuVHlwZUVudW0gPSBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLlR5cGVFbnVtLkRpYWxvZ1RhYmxlTXVsdGlzZWxlY3Q7XG4gICAgcHJpdmF0ZSBfbG9va3VwVGFibGVEYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfYWN0aW9uczogQXJyYXk8RmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtPiA9IFtdO1xuICAgIHByaXZhdGUgX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXMgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9leGNsdWRlRmlsdGVyUHJvcGVydHkgPSAnJztcbiAgICBwcml2YXRlIF9leGNsdWRlVmFsdWVQcm9wZXJ0eSA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZywgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPFQ+LCBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3IsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fbWFpblRhYmxlRGVzY3JpcHRvciA9IG1haW5UYWJsZURlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2xvb2t1cFRhYmxlRGVzY3JpcHRvciA9IGxvb2t1cFRhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fYWN0aW9ucy5wdXNoKEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bS5BZGQsIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bS5EZWxldGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVGFibGVEYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb29rdXBUYWJsZURhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzTG9va3VwRXhjbHVkZVZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGNsdWRlRmlsdGVyUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leGNsdWRlRmlsdGVyUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGNsdWRlVmFsdWVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4Y2x1ZGVWYWx1ZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWFpblRhYmxlRGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21haW5UYWJsZURlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb29rdXBUYWJsZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb29rdXBUYWJsZURlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXA8Uz4oZ2V0QWxsOiAocXVlcnlQYXJhbTogTWVkaXVzUXVlcnlQYXJhbSwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8TWVkaXVzUXVlcnlSZXN1bHQ8VD4+LCBzZXJ2aWNlVHlwZT86IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IFRhYmxldmlld0RhdGFQcm92aWRlcjxULCBTPih0aGlzLl9tYWluVGFibGVEZXNjcmlwdG9yLm1vZGVsLnR5cGUpO1xuICAgICAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoU2VydmljZVR5cGUoc2VydmljZVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFQcm92aWRlci53aXRoR2V0QWxsKGdldEFsbCk7XG4gICAgICAgIHRoaXMuX2xvb2t1cFRhYmxlRGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvb2t1cFRhYmxlRGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEFjdGlvbnMoYWN0aW9uczogQXJyYXk8RmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtPiA9IFtdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLmFjdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cEV4Y2x1ZGUoZmlsdGVyUHJvcGVydHk6IHN0cmluZywgdmFsdWVQcm9wZXJ0eTogc3RyaW5nLCBoYXNMb29rdXBFeGNsdWRlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNMb29rdXBFeGNsdWRlVmFsdWVzID0gaGFzTG9va3VwRXhjbHVkZTtcbiAgICAgICAgdGhpcy5fZXhjbHVkZUZpbHRlclByb3BlcnR5ID0gZmlsdGVyUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2V4Y2x1ZGVWYWx1ZVByb3BlcnR5ID0gdmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcjxULCBFVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yKHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHksIHRoaXMuX21haW5UYWJsZURlc2NyaXB0b3IuY29weSgpLCB0aGlzLl9sb29rdXBUYWJsZURlc2NyaXB0b3IuY29weSgpKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZmllbGQpO1xuICAgICAgICBmaWVsZC5fZmllbGRUeXBlID0gdGhpcy5fZmllbGRUeXBlO1xuICAgICAgICBmaWVsZC5fYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMubWFwKGEgPT4gYSk7XG4gICAgICAgIGZpZWxkLl9sb29rdXBUYWJsZURhdGFQcm92aWRlciA9IHRoaXMuX2xvb2t1cFRhYmxlRGF0YVByb3ZpZGVyO1xuICAgICAgICBmaWVsZC5faGFzTG9va3VwRXhjbHVkZVZhbHVlcyA9IHRoaXMuX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXM7XG4gICAgICAgIGZpZWxkLl9leGNsdWRlRmlsdGVyUHJvcGVydHkgPSB0aGlzLl9leGNsdWRlRmlsdGVyUHJvcGVydHk7XG4gICAgICAgIGZpZWxkLl9leGNsdWRlVmFsdWVQcm9wZXJ0eSA9IHRoaXMuX2V4Y2x1ZGVWYWx1ZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIFR5cGVFbnVtIHtcbiAgICAgICAgRGlhbG9nVGFibGVNdWx0aXNlbGVjdFxuICAgIH1cblxuICAgIGV4cG9ydCBlbnVtIEFjdGlvbkVudW0ge1xuICAgICAgICBBZGQsXG4gICAgICAgIERlbGV0ZVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+IGV4dGVuZHMgQUZpZWxkRGVzY3JpcHRvcjxULCBFVD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSBfZmllbGRUeXBlOiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLlR5cGVFbnVtID0gRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5UeXBlRW51bS5EaWFsb2dFZGl0b3I7XG4gICAgcHJpdmF0ZSBfZmllbGRBY3Rpb25zOiBBcnJheTxGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0+ID0gW107XG4gICAgcHJpdmF0ZSBfYWN0aW9uczogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcsIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBwcm9wZXJ0eSk7XG4gICAgICAgIC8vIHRoaXMuX21vZGVsVHlwZSA9IG1vZGVsVHlwZTtcbiAgICAgICAgdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvciA9IHRhYmxldmlld0Rlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2ZpZWxkQWN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtLlZpZXcsXG4gICAgICAgICAgICBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uQWRkLFxuICAgICAgICAgICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtLkVkaXQsXG4gICAgICAgICAgICBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uRGVsZXRlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZEFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZEFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxldmlld0Rlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGVEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci50YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckZvckNyZWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IuYWRkRWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yRm9yUmVhZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3Iudmlld0VkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckZvclVwZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IuZWRpdEVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpZWxkQWN0aW9uKGFjdGlvbjogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkQWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmllbGRBY3Rpb25zKGFjdGlvbnM6IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bVtdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkQWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWN0aW9uKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9hY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxULCBFVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yKHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHksIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IuY29weSgpKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZmllbGQpO1xuICAgICAgICBmaWVsZC5fZmllbGRUeXBlID0gdGhpcy5fZmllbGRUeXBlO1xuICAgICAgICBmaWVsZC5fZmllbGRBY3Rpb25zID0gdGhpcy5fZmllbGRBY3Rpb25zLm1hcChhID0+IGEpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIFR5cGVFbnVtIHtcbiAgICAgICAgRGlhbG9nRWRpdG9yXG4gICAgfVxuXG4gICAgZXhwb3J0IGVudW0gQWN0aW9uRW51bSB7XG4gICAgICAgIFZpZXcsXG4gICAgICAgIEFkZCxcbiAgICAgICAgRWRpdCxcbiAgICAgICAgRGVsZXRlXG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQUZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPiBleHRlbmRzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9uYW1lOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kZWZhdWx0OiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWVsZHM6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPltdID0gW107XG4gICAgcHJvdGVjdGVkIF92YWxpZGF0b3JzOiBBcnJheTxGaWVsZFZhbGlkYXRvcj4gPSBbXTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IGAke3RoaXMuYmFzZU5hbWV9JHtuYW1lfWA7XG4gICAgICAgIHRoaXMuX2RlZmF1bHQgPSBuYW1lID09PSBFZGl0b3JEZXNjcmlwdG9yLmRlZmF1bHRHcm91cE5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIGFic3RyYWN0IGdldCBmaWVsZHMoKTogQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+W107XG5cbiAgICBwdWJsaWMgZ2V0IHZhbGlkYXRvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3JzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYmFzZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmdyb3VwTmFtZSgpfV9gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdDtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBncm91cE5hbWUoKTogc3RyaW5nO1xuXG4gICAgYWJzdHJhY3QgYWRkRmllbGQoZmllbGQ6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPik6IHRoaXM7XG5cbiAgICBhYnN0cmFjdCBjb3B5KCk6IEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD47XG5cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWxpZGF0b3IobmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMucHVzaChuZXcgRmllbGRWYWxpZGF0b3IobmFtZSwgZXhwcmVzc2lvbiwgdW5kZWZpbmVkKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVUPiBleHRlbmRzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4ge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3IsIG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRzKCk6IEFycmF5PEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzIGFzIEFycmF5PEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPj47XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ3RhYic7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkKGZpZWxkOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFVD4ge1xuICAgICAgICBjb25zdCB0YWIgPSBuZXcgRmllbGRUYWJHcm91cERlc2NyaXB0b3I8RVQ+KHRoaXMuX2VkaXRvciwgdGhpcy5uYW1lLnN1YnN0cmluZyh0aGlzLmJhc2VOYW1lLmxlbmd0aCkpO1xuICAgICAgICB0YWIuX3RpdGxlID0gdGhpcy5fdGl0bGU7XG4gICAgICAgIHRhYi5fZmllbGRzID0gdGhpcy5maWVsZHMubWFwKGYgPT4gZi5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gdGFiO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPiBleHRlbmRzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4ge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3IsIG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRzKCk6IEFycmF5PEFGaWVsZERlc2NyaXB0b3I8YW55LCBFVD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcyBhcyBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgRVQ+PjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnZ3JvdXAnO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZChmaWVsZDogQUZpZWxkRGVzY3JpcHRvcjxhbnksIEVUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPiB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPih0aGlzLl9lZGl0b3IsIHRoaXMubmFtZS5zdWJzdHJpbmcodGhpcy5iYXNlTmFtZS5sZW5ndGgpKTtcbiAgICAgICAgZ3JvdXAuX3RpdGxlID0gdGhpcy5fdGl0bGU7XG4gICAgICAgIGdyb3VwLl9maWVsZHMgPSB0aGlzLmZpZWxkcy5tYXAoZiA9PiBmLmNvcHkoKSk7XG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG59XG4iXX0=
786
+ (function (FieldGroupDescriptor) {
787
+ let TypeEnum;
788
+ (function (TypeEnum) {
789
+ TypeEnum[TypeEnum["Fieldset"] = 0] = "Fieldset";
790
+ TypeEnum[TypeEnum["Logical"] = 1] = "Logical";
791
+ })(TypeEnum = FieldGroupDescriptor.TypeEnum || (FieldGroupDescriptor.TypeEnum = {}));
792
+ })(FieldGroupDescriptor || (FieldGroupDescriptor = {}));
793
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvZmllbGQuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWtCLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRzNELE9BQU8sRUFBYSxPQUFPLEVBQUUsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRzdDLE9BQU8sRUFBQyxpQkFBaUIsRUFBbUQsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RyxPQUFPLEVBQTBDLGtCQUFrQixFQUFFLHFCQUFxQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHckgsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNsRSxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBMEQsTUFBTSxJQUFJLENBQUM7QUFHdkosTUFBTSxPQUFnQix1QkFBdUI7SUFJekMsWUFBc0IsTUFBNEI7UUFGeEMsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFHaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxVQUFVLENBQUMsTUFBbUI7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFnQixnQkFBd0IsU0FBUSx1QkFBMkI7SUEwQjdFLFlBQXNCLE1BQTRCLEVBQUUsUUFBZ0I7UUFDaEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFD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SSxDQUFDLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQUVELFdBQWlCLG9CQUFvQjtJQUNqQyxJQUFZLFFBR1g7SUFIRCxXQUFZLFFBQVE7UUFDaEIsK0NBQVEsQ0FBQTtRQUNSLDZDQUFPLENBQUE7SUFDWCxDQUFDLEVBSFcsUUFBUSxHQUFSLDZCQUFRLEtBQVIsNkJBQVEsUUFHbkI7QUFDTCxDQUFDLEVBTGdCLG9CQUFvQixLQUFwQixvQkFBb0IsUUFLcEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3QsIG9mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtNZWRpdXNRdWVyeVBhcmFtLCBNZWRpdXNRdWVyeVJlc3VsdH0gZnJvbSAnLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge01uZ0Zvcm1GaWVsZEV2ZW50LCBNbmdGb3JtRmllbGRFdmVudERhdGEsIE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW19IGZyb20gJy4uL2NvbXBvbmVudHMvZm9ybS9tb2RlbHMnO1xuaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyLCBJVGFibGVEYXRhUHJvdmlkZXIsIExvb2t1cERhdGFQcm92aWRlciwgVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0VudW1WYWx1ZX0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7Q2xhc3NUeXBlLCBFbnVtQ29uc3RhbnRUeXBlLCBFbnVtVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtFbnVtVXRpbCwgSTE4blV0aWxzLCBNb2RlbFV0aWwsIFR5cGVVdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIEVkaXRvckRlc2NyaXB0b3IsIEZpZWxkVmFsaWRhdG9yLCBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLCBJTG9va3VwRGVzY3JpcHRvciwgVGFibGVEZXNjcmlwdG9yLCBUYWJsZXZpZXdEZXNjcmlwdG9yfSBmcm9tICcuLyc7XG5pbXBvcnQge0ZpZWxkQ29uZmlnLCBGaWVsZExvb2t1cENvbmZpZ30gZnJvbSAnLi9maWVsZC5kZXNjcmlwdG9yLmludGVyZmFjZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPjtcbiAgICBwcm90ZWN0ZWQgX2NvbmZpZzogRmllbGRDb25maWcgPSB7fTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+KSB7XG4gICAgICAgIHRoaXMuX2VkaXRvciA9IGVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbmZpZyhjb25maWc6IEZpZWxkQ29uZmlnKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQUZpZWxkRGVzY3JpcHRvcjxULCBFVD4gZXh0ZW5kcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcHJvcGVydHk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2dyb3VwPzogQUZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPjtcbiAgICBwcm90ZWN0ZWQgX2xhYmVsPzogc3RyaW5nIHwgbnVsbDtcblxuICAgIHByb3RlY3RlZCBfcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9oZWxwVGV4dD86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfcmVxdWlyZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0VmFsdWU/OiBUO1xuICAgIHByb3RlY3RlZCBfZ2V0dGVyPzogKGl0ZW06IEVUKSA9PiBUO1xuICAgIHByb3RlY3RlZCBfc2V0dGVyPzogKGl0ZW06IEVULCB2YWx1ZTogVCkgPT4gdm9pZDtcbiAgICBwcm90ZWN0ZWQgX3ZhbGlkYXRvcnM6IEFycmF5PEZpZWxkVmFsaWRhdG9yPiA9IFtdO1xuICAgIHByb3RlY3RlZCBfcmVxdWlyZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChtb2RlbDogYW55LCBmb3JtU3RhdGU/OiBhbnksIGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2Rpc2FibGVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgobW9kZWw6IGFueSwgZm9ybVN0YXRlPzogYW55LCBmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJvdGVjdGVkIF9oaWRkZW5FeHByZXNzaW9uPzogc3RyaW5nIHwgKChtb2RlbDogYW55LCBmb3JtU3RhdGU/OiBhbnksIGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIHByb3RlY3RlZCBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJvdGVjdGVkIF9maWVsZENsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2xhYmVsQ2xhc3NOYW1lID0gJyc7XG4gICAgcHJvdGVjdGVkIF9pbnB1dENsYXNzTmFtZSA9ICcnO1xuICAgIHByb3RlY3RlZCBfc2l6ZTogRmllbGREZXNjcmlwdG9yLlNpemVFbnVtID0gRmllbGREZXNjcmlwdG9yLlNpemVFbnVtLk5vcm1hbDtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBfZXZlbnRzU3ViamVjdCA9IG5ldyBTdWJqZWN0PE1uZ0Zvcm1GaWVsZEV2ZW50PFQsIEVUPj4oKTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvcik7XG4gICAgICAgIHRoaXMuX3Byb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gSTE4blV0aWxzLlR5cGUuZ2V0UHJvcGVydHlLZXkodGhpcy5fZWRpdG9yLm1vZGVsLnR5cGVOYW1lLCBwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGVscFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWxwVGV4dDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0dGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmFsaWRhdG9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRkZW5FeHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYWJlbENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5wdXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dENsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTaXplU21hbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplID09PSBGaWVsZERlc2NyaXB0b3IuU2l6ZUVudW0uU21hbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NpemVMYXJnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IEZpZWxkRGVzY3JpcHRvci5TaXplRW51bS5MYXJnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgY29weSgpOiBBRmllbGREZXNjcmlwdG9yPFQsIEVUPjtcblxuICAgIHB1YmxpYyB3aXRoTGFiZWwobGFiZWw6IHN0cmluZyB8IG51bGwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSBsYWJlbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSGVscFRleHQoaGVscFRleHQ6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oZWxwVGV4dCA9IGhlbHBUZXh0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJlcXVpcmVkKHJlcXVpcmVkID0gdHJ1ZSwgcmVxdWlyZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChtb2RlbDogYW55LCBmb3JtU3RhdGU/OiBhbnksIGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICBpZiAocmVxdWlyZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb24gPSByZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEaXNhYmxlZChkaXNhYmxlZCA9IHRydWUsIGRpc2FibGVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgobW9kZWw6IGFueSwgZm9ybVN0YXRlPzogYW55LCBmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgaWYgKGRpc2FibGVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWRFeHByZXNzaW9uID0gZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSGlkZGVuKGhpZGRlbkV4cHJlc3Npb246IHN0cmluZyB8ICgobW9kZWw6IGFueSwgZm9ybVN0YXRlPzogYW55LCBmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGlkZGVuRXhwcmVzc2lvbiA9IGhpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZTogVCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoR2V0dGVyKGdldHRlcjogKGl0ZW06IEVUKSA9PiBUKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2dldHRlciA9IGdldHRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXR0ZXIoc2V0dGVyOiAoaXRlbTogRVQsIHZhbHVlOiBUKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NldHRlciA9IHNldHRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWxpZGF0b3IobmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuLCBtZXNzYWdlPzogKGVycjogYW55LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl92YWxpZGF0b3JzLnB1c2gobmV3IEZpZWxkVmFsaWRhdG9yKG5hbWUsIGV4cHJlc3Npb24sIG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcsIGxhYmVsQ2xhc3NOYW1lID0gJycsIGlucHV0Q2xhc3NOYW1lID0gJycsIGZpZWxkQ2xhc3NOYW1lPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fbGFiZWxDbGFzc05hbWUgPSBsYWJlbENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5faW5wdXRDbGFzc05hbWUgPSBpbnB1dENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fZmllbGRDbGFzc05hbWUgPSBmaWVsZENsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTaXplKHNpemU6IEZpZWxkRGVzY3JpcHRvci5TaXplRW51bSA9IEZpZWxkRGVzY3JpcHRvci5TaXplRW51bS5Ob3JtYWwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0RXZlbnQodHlwZTogTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bSwgY21wVHlwZTogVHlwZTxhbnk+LCBjbXBJbnN0YW5jZTogYW55LCBkYXRhPzogTW5nRm9ybUZpZWxkRXZlbnREYXRhPFQsIEVUPikge1xuICAgICAgICB0aGlzLl9ldmVudHNTdWJqZWN0Lm5leHQobmV3IE1uZ0Zvcm1GaWVsZEV2ZW50KHR5cGUsIGNtcFR5cGUsIGNtcEluc3RhbmNlLCBkYXRhKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBldmVudHMkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogQUZpZWxkRGVzY3JpcHRvcjxULCBFVD4pIHtcbiAgICAgICAgb2JqLl9sYWJlbCA9IHRoaXMuX2xhYmVsO1xuICAgICAgICBvYmouX3BsYWNlaG9sZGVyID0gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgICAgIG9iai5faGVscFRleHQgPSB0aGlzLl9oZWxwVGV4dDtcbiAgICAgICAgb2JqLl9yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xuICAgICAgICBvYmouX2Rpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XG4gICAgICAgIG9iai5fZGVmYXVsdFZhbHVlID0gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgICAgICBvYmouX3JlcXVpcmVkRXhwcmVzc2lvbiA9IHRoaXMuX3JlcXVpcmVkRXhwcmVzc2lvbjtcbiAgICAgICAgb2JqLl9oaWRkZW5FeHByZXNzaW9uID0gdGhpcy5faGlkZGVuRXhwcmVzc2lvbjtcbiAgICAgICAgb2JqLl9kaXNhYmxlZEV4cHJlc3Npb24gPSB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIG9iai5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuICAgICAgICBvYmouX3NpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIG9iai5fZ2V0dGVyID0gdGhpcy5fZ2V0dGVyO1xuICAgICAgICBvYmouX3NldHRlciA9IHRoaXMuX3NldHRlcjtcbiAgICAgICAgb2JqLl92YWxpZGF0b3JzID0gdGhpcy5fdmFsaWRhdG9ycztcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmllbGREZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBTaXplRW51bSB7XG4gICAgICAgIFNtYWxsLFxuICAgICAgICBOb3JtYWwsXG4gICAgICAgIExhcmdlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRJbnB1dERlc2NyaXB0b3I8RVQ+IGV4dGVuZHMgQUZpZWxkRGVzY3JpcHRvcjxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSwgRVQ+IHtcbiAgICBwcml2YXRlIF9maWVsZFR5cGU6IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uVGV4dDtcblxuICAgIC8vIHRleHRhcmVhIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9yb3dzPzogbnVtYmVyO1xuXG4gICAgLy8gbnVtYmVyIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9udW1iZXJNaW4/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbnVtYmVyTWF4PzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlclN0ZXA/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbnVtYmVyVXNlR3JvdXBpbmcgPSB0cnVlO1xuXG4gICAgLy8gcmFkaW8gc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX3JhZGlvT3B0aW9uczogQXJyYXk8RW51bVZhbHVlPHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlPj4gPSBbXTtcblxuICAgIC8vIGRhdGVwaWNrZXIgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX2RhdGVQaWNrZXJGb3JtYXQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlck1pbj86IERhdGU7XG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlck1heD86IERhdGU7XG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlclNob3dUaW1lID0gZmFsc2U7XG5cbiAgICAvLyBpbnB1dCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX21pbkxlbmd0aD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9wYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwO1xuXG4gICAgLy8gbWFzayBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfbWFzaz86IHN0cmluZztcbiAgICBwcml2YXRlIF9zbG90Q2hhcj86IHN0cmluZztcblxuICAgIC8vIGN1c3RvbSBjb21wb25lbnQgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX2N1c3RvbUNvbXBvbmVudE5hbWU/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNaW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNYXg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJTdGVwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyU3RlcDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlck1pbkZyYWN0aW9uRGlnaXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNYXhGcmFjdGlvbkRpZ2l0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck1heEZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyVXNlR3JvdXBpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJVc2VHcm91cGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJhZGlvT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhZGlvT3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyRm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlck1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJNaW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyTWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpY2tlck1heDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJTaG93VGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heExlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pbkxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWFzaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzbG90Q2hhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nsb3RDaGFyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VzdG9tQ29tcG9uZW50TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNvbXBvbmVudE5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzSGlkZGVuKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5IaWRkZW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0xhYmVsKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5MYWJlbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzVGV4dChtaW5MZW5ndGg/OiBudW1iZXIsIG1heExlbmd0aD86IG51bWJlciwgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCwgaXNFbWFpbD86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uVGV4dDtcbiAgICAgICAgdGhpcy5fbWluTGVuZ3RoID0gbWluTGVuZ3RoO1xuICAgICAgICB0aGlzLl9tYXhMZW5ndGggPSBtYXhMZW5ndGg7XG4gICAgICAgIHRoaXMuX3BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICBpZiAoaXNFbWFpbCkge1xuICAgICAgICAgICAgdGhpcy53aXRoVmFsaWRhdG9yKCdlbWFpbCcsIGNvbnRyb2wgPT4gIVZhbGlkYXRvcnMuZW1haWwoY29udHJvbCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1RleHRhcmVhKHJvd3MgPSAzLCBtaW5MZW5ndGg/OiBudW1iZXIsIG1heExlbmd0aD86IG51bWJlciwgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5UZXh0YXJlYTtcbiAgICAgICAgdGhpcy5fcm93cyA9IHJvd3M7XG4gICAgICAgIHRoaXMuX21pbkxlbmd0aCA9IG1pbkxlbmd0aDtcbiAgICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xuICAgICAgICB0aGlzLl9wYXR0ZXJuID0gcGF0dGVybjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzTnVtYmVyKHN0ZXA/OiBudW1iZXIsIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyLCBtaW5GcmFjdGlvbkRpZ2l0cz86IG51bWJlciwgbWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXIsIG51bWJlclVzZUdyb3VwaW5nID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5OdW1iZXI7XG4gICAgICAgIHRoaXMuX251bWJlclN0ZXAgPSBzdGVwO1xuICAgICAgICB0aGlzLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cyA9IG1pbkZyYWN0aW9uRGlnaXRzO1xuICAgICAgICB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cyA9IG1heEZyYWN0aW9uRGlnaXRzO1xuICAgICAgICB0aGlzLl9udW1iZXJNaW4gPSBtaW4gPz8gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XG4gICAgICAgIHRoaXMuX251bWJlck1heCA9IG1heCA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgdGhpcy5fbnVtYmVyVXNlR3JvdXBpbmcgPSBudW1iZXJVc2VHcm91cGluZztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNTd2l0Y2goKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlN3aXRjaDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzUmFkaW8ob3B0aW9uczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiwgb3B0aW9uc1RpdGxlUGF0aD86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5SYWRpbztcbiAgICAgICAgdGhpcy5fcmFkaW9PcHRpb25zID0gb3B0aW9ucy5tYXAobyA9PiA8RW51bVZhbHVlPHN0cmluZyB8IG51bWJlcj4+e3ZhbHVlOiBvLCB0aXRsZTogYCR7b3B0aW9uc1RpdGxlUGF0aCA/IGAke29wdGlvbnNUaXRsZVBhdGh9LmAgOiAnJ30ke299YH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNSYWRpb0Zyb21FbnVtKGVudW1UeXBlOiBFbnVtVHlwZSwgb3B0aW9uc1RpdGxlUGF0aD86IHN0cmluZyB8IG51bGwsIHZhbHVlcz86IEFycmF5PEVudW1Db25zdGFudFR5cGU+LCBuYW1lQXNWYWx1ZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlJhZGlvO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNUaXRsZVBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBvcHRpb25zVGl0bGVQYXRoID0gVHlwZVV0aWwuZmluZEVudW1OYW1lKGVudW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yYWRpb09wdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlcylcbiAgICAgICAgICAgID8gRW51bVV0aWwuZnJvbVZhbHVlc0FzRW51bVZhbHVlQXJyYXkoZW51bVR5cGUsIHZhbHVlcywgbmFtZUFzVmFsdWUsIG9wdGlvbnNUaXRsZVBhdGggPz8gdW5kZWZpbmVkKVxuICAgICAgICAgICAgOiBFbnVtVXRpbC5mcm9tQ29uc3RhbnRzQXNFbnVtVmFsdWVBcnJheShlbnVtVHlwZSwgbmFtZUFzVmFsdWUsIG9wdGlvbnNUaXRsZVBhdGggPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRGF0ZVBpY2tlcihmb3JtYXQ/OiBzdHJpbmcsIG1pbj86IERhdGUsIG1heD86IERhdGUsIHNob3dUaW1lPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5EYXRlcGlja2VyO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyRm9ybWF0ID0gZm9ybWF0ID8gZm9ybWF0IDogJ2RkLm1tLnl5JztcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlck1pbiA9IG1pbjtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlck1heCA9IG1heDtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlclNob3dUaW1lID0gc2hvd1RpbWUgPz8gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc01hc2sobWFzazogc3RyaW5nLCBzbG90Q2hhcjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLk1hc2s7XG4gICAgICAgIHRoaXMuX21hc2sgPSBtYXNrO1xuICAgICAgICB0aGlzLl9zbG90Q2hhciA9IHNsb3RDaGFyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNDdXN0b21Db21wb25lbnQoY3VzdG9tQ29tcG9uZW50TmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLkN1c3RvbTtcbiAgICAgICAgdGhpcy5fY3VzdG9tQ29tcG9uZW50TmFtZSA9IGN1c3RvbUNvbXBvbmVudE5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkSW5wdXREZXNjcmlwdG9yPEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkSW5wdXREZXNjcmlwdG9yPEVUPih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZmllbGQpO1xuICAgICAgICBmaWVsZC5fZmllbGRUeXBlID0gdGhpcy5fZmllbGRUeXBlO1xuICAgICAgICBmaWVsZC5fcm93cyA9IHRoaXMuX3Jvd3M7XG4gICAgICAgIGZpZWxkLl9udW1iZXJNaW4gPSB0aGlzLl9udW1iZXJNaW47XG4gICAgICAgIGZpZWxkLl9udW1iZXJNYXggPSB0aGlzLl9udW1iZXJNYXg7XG4gICAgICAgIGZpZWxkLl9udW1iZXJTdGVwID0gdGhpcy5fbnVtYmVyU3RlcDtcbiAgICAgICAgZmllbGQuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzID0gdGhpcy5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIGZpZWxkLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cyA9IHRoaXMuX251bWJlck1heEZyYWN0aW9uRGlnaXRzO1xuICAgICAgICBmaWVsZC5fbnVtYmVyVXNlR3JvdXBpbmcgPSB0aGlzLl9udW1iZXJVc2VHcm91cGluZztcbiAgICAgICAgZmllbGQuX3JhZGlvT3B0aW9ucyA9IFsuLi50aGlzLl9yYWRpb09wdGlvbnNdO1xuICAgICAgICBmaWVsZC5fZGF0ZVBpY2tlckZvcm1hdCA9IHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQ7XG4gICAgICAgIGZpZWxkLl9kYXRlUGlja2VyTWluID0gdGhpcy5fZGF0ZVBpY2tlck1pbjtcbiAgICAgICAgZmllbGQuX2RhdGVQaWNrZXJNYXggPSB0aGlzLl9kYXRlUGlja2VyTWF4O1xuICAgICAgICBmaWVsZC5fZGF0ZVBpY2tlclNob3dUaW1lID0gdGhpcy5fZGF0ZVBpY2tlclNob3dUaW1lO1xuICAgICAgICBmaWVsZC5fbWF4TGVuZ3RoID0gdGhpcy5fbWF4TGVuZ3RoO1xuICAgICAgICBmaWVsZC5fbWluTGVuZ3RoID0gdGhpcy5fbWluTGVuZ3RoO1xuICAgICAgICBmaWVsZC5fcGF0dGVybiA9IHRoaXMuX3BhdHRlcm47XG4gICAgICAgIGZpZWxkLl9tYXNrID0gdGhpcy5fbWFzaztcbiAgICAgICAgZmllbGQuX3Nsb3RDaGFyID0gdGhpcy5fc2xvdENoYXI7XG4gICAgICAgIGZpZWxkLl9jdXN0b21Db21wb25lbnROYW1lID0gdGhpcy5fY3VzdG9tQ29tcG9uZW50TmFtZTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBGaWVsZElucHV0RGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gVHlwZUVudW0ge1xuICAgICAgICBIaWRkZW4sXG4gICAgICAgIExhYmVsLFxuICAgICAgICBUZXh0LFxuICAgICAgICBUZXh0YXJlYSxcbiAgICAgICAgTnVtYmVyLFxuICAgICAgICBTd2l0Y2gsXG4gICAgICAgIFJhZGlvLFxuICAgICAgICBEYXRlcGlja2VyLFxuICAgICAgICBNYXNrLFxuICAgICAgICBDdXN0b21cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZExvb2t1cERlc2NyaXB0b3I8VCwgRVQ+IGV4dGVuZHMgQUZpZWxkRGVzY3JpcHRvcjxULCBFVD4gaW1wbGVtZW50cyBJTG9va3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPiB8IG51bGw7XG4gICAgcHJvdGVjdGVkIF9sb29rdXBUeXBlOiBGaWVsZExvb2t1cERlc2NyaXB0b3IuTG9va3VwVHlwZUVudW0gPSBGaWVsZExvb2t1cERlc2NyaXB0b3IuTG9va3VwVHlwZUVudW0uRHJvcGRvd247XG4gICAgcHJvdGVjdGVkIF9pdGVtc0xhYmVsUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9pdGVtc0xhYmVsVHJhbnNsYXRlID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9pdGVtc1ZhbHVlUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9pdGVtc0Rpc2FibGVkUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9kYXRhS2V5UHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9kYXRhUHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPFQsIGFueT47XG5cbiAgICBwcm90ZWN0ZWQgX2Ryb3Bkb3duQ2xhc3NOYW1lID0gJ21uZy1maWx0ZXItbG9va3VwLWRyb3Bkb3duJztcblxuICAgIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXMgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIF9kaWFsb2dUYWJsZURlc2NyaXB0b3I/OiBUYWJsZURlc2NyaXB0b3I8VD47XG4gICAgcHJvdGVjdGVkIF9kaWFsb2dUYWJsZURhdGFQcm92aWRlcj86IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+O1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4gfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIE1vZGVsVXRpbC50cnlTZXRMb29rdXBJdGVtc1Byb3BlcnRpZXModGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb29rdXBUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9va3VwVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zTGFiZWxQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zTGFiZWxUcmFuc2xhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0xhYmVsVHJhbnNsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbXNWYWx1ZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbXNEaXNhYmxlZFByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNEaXNhYmxlZFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0YUtleVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0YVByb3ZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVPcGVuT25Gb2N1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZUlubGluZVNlYXJjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRyb3Bkb3duQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJvcGRvd25DbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaWFsb2dUYWJsZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaWFsb2dUYWJsZURlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaWFsb2dUYWJsZURhdGFQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpYWxvZ1RhYmxlRGF0YVByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNMYWJlbFByb3BlcnR5KGl0ZW1zTGFiZWxQcm9wZXJ0eTogc3RyaW5nLCB0cmFuc2xhdGUgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHkgPSBpdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2l0ZW1zTGFiZWxUcmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNWYWx1ZVByb3BlcnR5KGl0ZW1zVmFsdWVQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IGl0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fZGF0YUtleVByb3BlcnR5ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEl0ZW1zRGlzYWJsZWRQcm9wZXJ0eShpdGVtc0Rpc2FibGVkUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc0Rpc2FibGVkUHJvcGVydHkgPSBpdGVtc0Rpc2FibGVkUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0YUtleVByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YUtleVByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXA8Uz4obG9va3VwOiAocXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW0sIHNlcnZpY2U/OiBTLCBzZWFyY2g/OiBzdHJpbmcpID0+IE9ic2VydmFibGU8QXJyYXk8VD4+LCBzZXJ2aWNlVHlwZT86IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IExvb2t1cERhdGFQcm92aWRlcjxULCBTPih0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoU2VydmljZVR5cGUoc2VydmljZVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFQcm92aWRlci53aXRoTG9va3VwKGxvb2t1cCk7XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXBEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyOiBJTG9va3VwRGF0YVByb3ZpZGVyPFQsIGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aENvbmZpZyhjb25maWc6IEZpZWxkTG9va3VwQ29uZmlnKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBzdXBlci53aXRoQ29uZmlnKGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQXV0b2NvbXBsZXRlKG9wZW5PbkZvY3VzID0gZmFsc2UsIGlubGluZVNlYXJjaCA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvb2t1cFR5cGUgPSBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtLkF1dG9jb21wbGV0ZTtcbiAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXMgPSBvcGVuT25Gb2N1cztcbiAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoID0gaW5saW5lU2VhcmNoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNEaWFsb2cobG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD4sIHRhYmxlRGF0YVByb3ZpZGVyPzogSVRhYmxlRGF0YVByb3ZpZGVyPFQsIGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9va3VwVHlwZSA9IEZpZWxkTG9va3VwRGVzY3JpcHRvci5Mb29rdXBUeXBlRW51bS5EaWFsb2c7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1RhYmxlRGVzY3JpcHRvciA9IGxvb2t1cFRhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fZGlhbG9nVGFibGVEYXRhUHJvdmlkZXIgPSB0YWJsZURhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRMb29rdXBEZXNjcmlwdG9yPFQsIEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9sb29rdXBUeXBlID0gdGhpcy5fbG9va3VwVHlwZTtcbiAgICAgICAgZmllbGQuX2l0ZW1zTGFiZWxQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2l0ZW1zTGFiZWxUcmFuc2xhdGUgPSB0aGlzLl9pdGVtc0xhYmVsVHJhbnNsYXRlO1xuICAgICAgICBmaWVsZC5faXRlbXNWYWx1ZVByb3BlcnR5ID0gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgICAgICBmaWVsZC5faXRlbXNEaXNhYmxlZFByb3BlcnR5ID0gdGhpcy5faXRlbXNEaXNhYmxlZFByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZGF0YVByb3ZpZGVyID0gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgICAgICBmaWVsZC5fZHJvcGRvd25DbGFzc05hbWUgPSB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZTtcbiAgICAgICAgZmllbGQuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzID0gdGhpcy5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXM7XG4gICAgICAgIGZpZWxkLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2ggPSB0aGlzLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2g7XG4gICAgICAgIGZpZWxkLl9kaWFsb2dUYWJsZURlc2NyaXB0b3IgPSB0aGlzLl9kaWFsb2dUYWJsZURlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmllbGRMb29rdXBEZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBMb29rdXBUeXBlRW51bSB7XG4gICAgICAgIERyb3Bkb3duLFxuICAgICAgICBBdXRvY29tcGxldGUsXG4gICAgICAgIERpYWxvZ1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RVQ+IGV4dGVuZHMgRmllbGRMb29rdXBEZXNjcmlwdG9yPEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+LCBFVD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VudW1UeXBlOiBFbnVtVHlwZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25FbnVtVmFsdWVzOiBFbnVtVmFsdWU8c3RyaW5nIHwgbnVtYmVyPltdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX25hbWVBc1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nLCBlbnVtVHlwZTogRW51bVR5cGUsIG9wdGlvbnM/OiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPiwgbmFtZUFzVmFsdWUgPSBmYWxzZSwgb3B0aW9uc1RpdGxlUGF0aD86IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBwcm9wZXJ0eSwgbnVsbCk7XG4gICAgICAgIHRoaXMuX2VudW1UeXBlID0gZW51bVR5cGU7XG4gICAgICAgIHRoaXMuX25hbWVBc1ZhbHVlID0gbmFtZUFzVmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1RpdGxlUGF0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9wdGlvbnNUaXRsZVBhdGggPSBUeXBlVXRpbC5maW5kRW51bU5hbWUoZW51bVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29wdGlvbkVudW1WYWx1ZXMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMpXG4gICAgICAgICAgICA/IEVudW1VdGlsLmZyb21WYWx1ZXNBc0VudW1WYWx1ZUFycmF5KGVudW1UeXBlLCBvcHRpb25zLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICA6IEVudW1VdGlsLmZyb21Db25zdGFudHNBc0VudW1WYWx1ZUFycmF5KGVudW1UeXBlLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCA/PyB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgTG9va3VwRGF0YVByb3ZpZGVyPEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+LCBhbnk+KG51bGwpLndpdGhMb29rdXAoKCkgPT4gb2YodGhpcy5fb3B0aW9uRW51bVZhbHVlcykpO1xuICAgICAgICB0aGlzLndpdGhMb29rdXBEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyKTtcbiAgICAgICAgdGhpcy53aXRoSXRlbXNMYWJlbFByb3BlcnR5KCd0aXRsZScsIG9wdGlvbnNUaXRsZVBhdGggIT09IG51bGwpO1xuICAgICAgICB0aGlzLndpdGhJdGVtc1ZhbHVlUHJvcGVydHkoJ3ZhbHVlJyk7XG4gICAgICAgIHRoaXMud2l0aEl0ZW1zRGlzYWJsZWRQcm9wZXJ0eSgnZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVudW1UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bVR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEaXNhYmxlZE9wdGlvbnMoLi4uZGlzYWJsZWRPcHRpb25zOiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPik6IHRoaXMge1xuICAgICAgICBmb3IgKGNvbnN0IGRpc2FibGVkT3B0aW9uIG9mIGRpc2FibGVkT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGlzYWJsZWRPcHRpb25WYWx1ZSA9IHRoaXMuX25hbWVBc1ZhbHVlID8gRW51bVV0aWwuZ2V0Q29uc3RhbnROYW1lKHRoaXMuX2VudW1UeXBlLCBkaXNhYmxlZE9wdGlvbikgOiBkaXNhYmxlZE9wdGlvbjtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZE9wdGlvblZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fb3B0aW9uRW51bVZhbHVlcy5maW5kKG8gPT4gby52YWx1ZSA9PT0gZGlzYWJsZWRPcHRpb25WYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRWYWx1ZUVudW0oZGVmYXVsdFZhbHVlOiBFbnVtQ29uc3RhbnRUeXBlKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25WYWx1ZSA9IHRoaXMuX25hbWVBc1ZhbHVlID8gRW51bVV0aWwuZ2V0Q29uc3RhbnROYW1lKHRoaXMuX2VudW1UeXBlLCBkZWZhdWx0VmFsdWUpIDogZGVmYXVsdFZhbHVlO1xuICAgICAgICBpZiAoZGVmYXVsdE9wdGlvblZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9vcHRpb25FbnVtVmFsdWVzLmZpbmQobyA9PiBvLnZhbHVlID09PSBkZWZhdWx0T3B0aW9uVmFsdWUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMud2l0aERlZmF1bHRWYWx1ZShvcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBhc0F1dG9jb21wbGV0ZShvcGVuT25Gb2N1cyA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgc3VwZXIuYXNBdXRvY29tcGxldGUob3Blbk9uRm9jdXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RVQ+KHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHksIHRoaXMuX2VudW1UeXBlLCBbXSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGZpZWxkKTtcbiAgICAgICAgZmllbGQuX2xvb2t1cFR5cGUgPSB0aGlzLl9sb29rdXBUeXBlO1xuICAgICAgICBmaWVsZC5faXRlbXNMYWJlbFByb3BlcnR5ID0gdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICBmaWVsZC5faXRlbXNWYWx1ZVByb3BlcnR5ID0gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgICAgICBmaWVsZC5faXRlbXNEaXNhYmxlZFByb3BlcnR5ID0gdGhpcy5faXRlbXNEaXNhYmxlZFByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZGF0YVByb3ZpZGVyID0gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcjxULCBFVD4gZXh0ZW5kcyBBRmllbGREZXNjcmlwdG9yPFQsIEVUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPFQ+OyAvLyB0YWJsZSBkZXNjcmlwdG9yIGZvciBtYWluIHRhYmxlIGNvbXBvbmVudFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPFQ+OyAvLyB0YWJsZSBkZXNjcmlwdG9yIGZvciB3aGVyZSBzZWxlY3Qgd2lsbCBiZSBhcHBsaWVkXG4gICAgcHJpdmF0ZSBfZmllbGRUeXBlOiBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLlR5cGVFbnVtID0gRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvci5UeXBlRW51bS5EaWFsb2dUYWJsZU11bHRpc2VsZWN0O1xuICAgIHByaXZhdGUgX2xvb2t1cFRhYmxlRGF0YVByb3ZpZGVyOiBJVGFibGVEYXRhUHJvdmlkZXI8VCwgYW55PiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2FjdGlvbnM6IEFycmF5PEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bT4gPSBbXTtcbiAgICBwcml2YXRlIF9oYXNMb29rdXBFeGNsdWRlVmFsdWVzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZUZpbHRlclByb3BlcnR5ID0gJyc7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZVZhbHVlUHJvcGVydHkgPSAnJztcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcsIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxUPiwgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX21haW5UYWJsZURlc2NyaXB0b3IgPSBtYWluVGFibGVEZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9sb29rdXBUYWJsZURlc2NyaXB0b3IgPSBsb29rdXBUYWJsZURlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMucHVzaChGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uQWRkLCBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uRGVsZXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvb2t1cFRhYmxlRGF0YVByb3ZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNMb29rdXBFeGNsdWRlVmFsdWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhjbHVkZUZpbHRlclByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhjbHVkZUZpbHRlclByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhjbHVkZVZhbHVlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leGNsdWRlVmFsdWVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1haW5UYWJsZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWluVGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVGFibGVEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9va3VwVGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwPFM+KGdldEFsbDogKHF1ZXJ5UGFyYW06IE1lZGl1c1F1ZXJ5UGFyYW0sIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+Piwgc2VydmljZVR5cGU/OiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXI8VCwgUz4odGhpcy5fbWFpblRhYmxlRGVzY3JpcHRvci5tb2RlbC50eXBlKTtcbiAgICAgICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aFNlcnZpY2VUeXBlKHNlcnZpY2VUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhUHJvdmlkZXIud2l0aEdldEFsbChnZXRBbGwpO1xuICAgICAgICB0aGlzLl9sb29rdXBUYWJsZURhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXBEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyOiBJVGFibGVEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb29rdXBUYWJsZURhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBY3Rpb25zKGFjdGlvbnM6IEFycmF5PEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bT4gPSBbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5hY3Rpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXBFeGNsdWRlKGZpbHRlclByb3BlcnR5OiBzdHJpbmcsIHZhbHVlUHJvcGVydHk6IHN0cmluZywgaGFzTG9va3VwRXhjbHVkZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzTG9va3VwRXhjbHVkZVZhbHVlcyA9IGhhc0xvb2t1cEV4Y2x1ZGU7XG4gICAgICAgIHRoaXMuX2V4Y2x1ZGVGaWx0ZXJQcm9wZXJ0eSA9IGZpbHRlclByb3BlcnR5O1xuICAgICAgICB0aGlzLl9leGNsdWRlVmFsdWVQcm9wZXJ0eSA9IHZhbHVlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9tYWluVGFibGVEZXNjcmlwdG9yLmNvcHkoKSwgdGhpcy5fbG9va3VwVGFibGVEZXNjcmlwdG9yLmNvcHkoKSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGZpZWxkKTtcbiAgICAgICAgZmllbGQuX2ZpZWxkVHlwZSA9IHRoaXMuX2ZpZWxkVHlwZTtcbiAgICAgICAgZmllbGQuX2FjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLm1hcChhID0+IGEpO1xuICAgICAgICBmaWVsZC5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXIgPSB0aGlzLl9sb29rdXBUYWJsZURhdGFQcm92aWRlcjtcbiAgICAgICAgZmllbGQuX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXMgPSB0aGlzLl9oYXNMb29rdXBFeGNsdWRlVmFsdWVzO1xuICAgICAgICBmaWVsZC5fZXhjbHVkZUZpbHRlclByb3BlcnR5ID0gdGhpcy5fZXhjbHVkZUZpbHRlclByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZXhjbHVkZVZhbHVlUHJvcGVydHkgPSB0aGlzLl9leGNsdWRlVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIERpYWxvZ1RhYmxlTXVsdGlzZWxlY3RcbiAgICB9XG5cbiAgICBleHBvcnQgZW51bSBBY3Rpb25FbnVtIHtcbiAgICAgICAgQWRkLFxuICAgICAgICBEZWxldGVcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPFQsIEVUPiBleHRlbmRzIEFGaWVsZERlc2NyaXB0b3I8VCwgRVQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+O1xuICAgIHByaXZhdGUgX2ZpZWxkVHlwZTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5UeXBlRW51bSA9IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuVHlwZUVudW0uRGlhbG9nRWRpdG9yO1xuICAgIHByaXZhdGUgX2ZpZWxkQWN0aW9uczogQXJyYXk8RmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtPiA9IFtdO1xuICAgIHByaXZhdGUgX2FjdGlvbnM6IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8VD4+ID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nLCB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHkpO1xuICAgICAgICAvLyB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IgPSB0YWJsZXZpZXdEZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9maWVsZEFjdGlvbnMucHVzaChcbiAgICAgICAgICAgIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bS5WaWV3LFxuICAgICAgICAgICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtLkFkZCxcbiAgICAgICAgICAgIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bS5FZGl0LFxuICAgICAgICAgICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvci5BY3Rpb25FbnVtLkRlbGV0ZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRBY3Rpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZXZpZXdEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlRGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IudGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JGb3JDcmVhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yLmFkZEVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckZvclJlYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yLnZpZXdFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JGb3JVcGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yLmVkaXRFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWVsZEFjdGlvbihhY3Rpb246IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpZWxkQWN0aW9ucyhhY3Rpb25zOiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW1bXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZEFjdGlvbnMgPSBhY3Rpb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEFjdGlvbihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5LCB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yLmNvcHkoKSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGZpZWxkKTtcbiAgICAgICAgZmllbGQuX2ZpZWxkVHlwZSA9IHRoaXMuX2ZpZWxkVHlwZTtcbiAgICAgICAgZmllbGQuX2ZpZWxkQWN0aW9ucyA9IHRoaXMuX2ZpZWxkQWN0aW9ucy5tYXAoYSA9PiBhKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIERpYWxvZ0VkaXRvclxuICAgIH1cblxuICAgIGV4cG9ydCBlbnVtIEFjdGlvbkVudW0ge1xuICAgICAgICBWaWV3LFxuICAgICAgICBBZGQsXG4gICAgICAgIEVkaXQsXG4gICAgICAgIERlbGV0ZVxuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4gZXh0ZW5kcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbmFtZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZGVmYXVsdDogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfZmllbGRzOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD5bXSA9IFtdO1xuICAgIHByb3RlY3RlZCBfdmFsaWRhdG9yczogQXJyYXk8RmllbGRWYWxpZGF0b3I+ID0gW107XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvcik7XG4gICAgICAgIHRoaXMuX25hbWUgPSBgJHt0aGlzLmJhc2VOYW1lfSR7bmFtZX1gO1xuICAgICAgICB0aGlzLl9kZWZhdWx0ID0gbmFtZSA9PT0gRWRpdG9yRGVzY3JpcHRvci5kZWZhdWx0R3JvdXBOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBnZXQgZmllbGRzKCk6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPltdO1xuXG4gICAgcHVibGljIGdldCB2YWxpZGF0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9ycztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJhc2VOYW1lKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5ncm91cE5hbWUoKX1fYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHQ7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZ3JvdXBOYW1lKCk6IHN0cmluZztcblxuICAgIGFic3RyYWN0IGFkZEZpZWxkKGZpZWxkOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD4pOiB0aGlzO1xuXG4gICAgYWJzdHJhY3QgY29weSgpOiBBRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+O1xuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVmFsaWRhdG9yKG5hbWU6IHN0cmluZywgZXhwcmVzc2lvbjogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gYm9vbGVhbikge1xuICAgICAgICB0aGlzLl92YWxpZGF0b3JzLnB1c2gobmV3IEZpZWxkVmFsaWRhdG9yKG5hbWUsIGV4cHJlc3Npb24sIHVuZGVmaW5lZCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFVD4gZXh0ZW5kcyBBRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcyBhcyBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4+O1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICd0YWInO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZChmaWVsZDogRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8RVQ+IHtcbiAgICAgICAgY29uc3QgdGFiID0gbmV3IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVUPih0aGlzLl9lZGl0b3IsIHRoaXMubmFtZS5zdWJzdHJpbmcodGhpcy5iYXNlTmFtZS5sZW5ndGgpKTtcbiAgICAgICAgdGFiLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICB0YWIuX2ZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmID0+IGYuY29weSgpKTtcbiAgICAgICAgcmV0dXJuIHRhYjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4gZXh0ZW5kcyBBRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+IHtcbiAgICBwcml2YXRlIF90eXBlID0gRmllbGRHcm91cERlc2NyaXB0b3IuVHlwZUVudW0uRmllbGRzZXQ7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBuYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuYXNMb2dpY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRzKCk6IEFycmF5PEFGaWVsZERlc2NyaXB0b3I8YW55LCBFVD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcyBhcyBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgRVQ+PjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnZ3JvdXAnO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZChmaWVsZDogQUZpZWxkRGVzY3JpcHRvcjxhbnksIEVUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0xvZ2ljYWwoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSBGaWVsZEdyb3VwRGVzY3JpcHRvci5UeXBlRW51bS5Mb2dpY2FsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4ge1xuICAgICAgICBjb25zdCBncm91cCA9IG5ldyBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4odGhpcy5fZWRpdG9yLCB0aGlzLm5hbWUuc3Vic3RyaW5nKHRoaXMuYmFzZU5hbWUubGVuZ3RoKSk7XG4gICAgICAgIGdyb3VwLl90eXBlID0gdGhpcy5fdHlwZTtcbiAgICAgICAgZ3JvdXAuX3RpdGxlID0gdGhpcy5fdGl0bGU7XG4gICAgICAgIGdyb3VwLl9maWVsZHMgPSB0aGlzLmZpZWxkcy5tYXAoZiA9PiBmLmNvcHkoKSk7XG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmllbGRHcm91cERlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIFR5cGVFbnVtIHtcbiAgICAgICAgRmllbGRzZXQsXG4gICAgICAgIExvZ2ljYWxcbiAgICB9XG59XG4iXX0=
@@ -1,3 +1,4 @@
1
+ import { ModelUtil } from '../utils';
1
2
  import { ColumnDescriptor } from './column.descriptor';
2
3
  import { ModelDescriptor } from './model.descriptor';
3
4
  export class TableDescriptor {
@@ -12,6 +13,7 @@ export class TableDescriptor {
12
13
  this._rowHeight = 45;
13
14
  this._tableFullHeightOffset = 315;
14
15
  this._model = new ModelDescriptor(modelType, idProperty, titleProperty);
16
+ this._dataKeyProperty = idProperty ?? ModelUtil.findIdAttribute(modelType) ?? undefined;
15
17
  }
16
18
  get filterDisplay() {
17
19
  return this._filterDisplay;
@@ -51,48 +53,41 @@ export class TableDescriptor {
51
53
  }
52
54
  addColumnDescriptor(column) {
53
55
  this._columns.push(column);
54
- this.setDataKeyFromColumn();
55
56
  return this;
56
57
  }
57
58
  addColumn(property) {
58
59
  const column = new ColumnDescriptor(this, property);
59
60
  this._columns.push(column);
60
- this.setDataKeyFromColumn();
61
61
  return column;
62
62
  }
63
63
  addColumnNumber(property, displayFormat) {
64
64
  const column = new ColumnDescriptor(this, property);
65
65
  column.asNumber(displayFormat);
66
66
  this._columns.push(column);
67
- this.setDataKeyFromColumn();
68
67
  return column;
69
68
  }
70
69
  addColumnDate(property, displayFormat) {
71
70
  const column = new ColumnDescriptor(this, property);
72
71
  column.asDate(displayFormat);
73
72
  this._columns.push(column);
74
- this.setDataKeyFromColumn();
75
73
  return column;
76
74
  }
77
75
  addColumnBoolean(property, yes, no, asIcon = false) {
78
76
  const column = new ColumnDescriptor(this, property);
79
77
  column.asBoolean(yes, no, asIcon);
80
78
  this._columns.push(column);
81
- this.setDataKeyFromColumn();
82
79
  return column;
83
80
  }
84
81
  addColumnEnum(property, enumType, nameAsValue = false, titlePath) {
85
82
  const column = new ColumnDescriptor(this, property);
86
83
  column.asEnum(enumType, nameAsValue, titlePath);
87
84
  this._columns.push(column);
88
- this.setDataKeyFromColumn();
89
85
  return column;
90
86
  }
91
87
  addColumnCustomComponent(property, customComponentType) {
92
88
  const column = new ColumnDescriptor(this, property);
93
89
  column.asCustomComponent(customComponentType);
94
90
  this._columns.push(column);
95
- this.setDataKeyFromColumn();
96
91
  return column;
97
92
  }
98
93
  withFilterDisplay(filterDisplayType) {
@@ -140,11 +135,6 @@ export class TableDescriptor {
140
135
  descriptor._filterDisplay = this._filterDisplay;
141
136
  return descriptor;
142
137
  }
143
- setDataKeyFromColumn() {
144
- if (!this._dataKeyProperty && this._columns.length === 1) {
145
- this._dataKeyProperty = this._columns[0].property;
146
- }
147
- }
148
138
  }
149
139
  (function (TableDescriptor) {
150
140
  let PaginationModeEnum;
@@ -158,4 +148,4 @@ export class TableDescriptor {
158
148
  FilterDisplayEnum[FilterDisplayEnum["Menu"] = 1] = "Menu";
159
149
  })(FilterDisplayEnum = TableDescriptor.FilterDisplayEnum || (TableDescriptor.FilterDisplayEnum = {}));
160
150
  })(TableDescriptor || (TableDescriptor = {}));
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsTUFBTSxPQUFPLGVBQWU7SUFleEIsWUFBWSxTQUF1QixFQUFFLFVBQW1CLEVBQUUsYUFBc0I7UUFieEUsbUJBQWMsR0FBc0MsZUFBZSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUMzRixvQkFBZSxHQUF1QyxlQUFlLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO1FBQ3BHLGFBQVEsR0FBb0MsRUFBRSxDQUFDO1FBRS9DLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHlCQUFvQixHQUFhLEVBQUUsQ0FBQztRQUNwQyxvQkFBZSxHQUFjLEVBQUUsQ0FBQztRQUVoQyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLDJCQUFzQixHQUFHLEdBQUcsQ0FBQztRQUdqQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELElBQVcsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsY0FBYztRQUNyQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFF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QUMsQ0FBQztRQUM5RCxVQUFVLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDaEQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7U0FDckQ7SUFDTCxDQUFDO0NBQ0o7QUFFRCxXQUFpQixlQUFlO0lBQzVCLElBQVksa0JBR1g7SUFIRCxXQUFZLGtCQUFrQjtRQUMxQix1RUFBVSxDQUFBO1FBQ1YsK0VBQWMsQ0FBQTtJQUNsQixDQUFDLEVBSFcsa0JBQWtCLEdBQWxCLGtDQUFrQixLQUFsQixrQ0FBa0IsUUFHN0I7SUFFRCxJQUFZLGlCQUdYO0lBSEQsV0FBWSxpQkFBaUI7UUFDekIsdURBQUcsQ0FBQTtRQUNILHlEQUFJLENBQUE7SUFDUixDQUFDLEVBSFcsaUJBQWlCLEdBQWpCLGlDQUFpQixLQUFqQixpQ0FBaUIsUUFHNUI7QUFDTCxDQUFDLEVBVmdCLGVBQWUsS0FBZixlQUFlLFFBVS9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtJQ29sdW1uVmFsdWVDb21wb25lbnR9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0NsYXNzVHlwZSwgRW51bVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7Q29sdW1uRGVzY3JpcHRvcn0gZnJvbSAnLi9jb2x1bW4uZGVzY3JpcHRvcic7XG5pbXBvcnQge01vZGVsRGVzY3JpcHRvcn0gZnJvbSAnLi9tb2RlbC5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIF9maWx0ZXJEaXNwbGF5OiBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0gPSBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0uTWVudTtcbiAgICBwcml2YXRlIF9wYWdpbmF0aW9uTW9kZTogVGFibGVEZXNjcmlwdG9yLlBhZ2luYXRpb25Nb2RlRW51bSA9IFRhYmxlRGVzY3JpcHRvci5QYWdpbmF0aW9uTW9kZUVudW0uUGFnaW5hdGlvbjtcbiAgICBwcml2YXRlIF9jb2x1bW5zOiBBcnJheTxDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4+ID0gW107XG4gICAgcHJpdmF0ZSBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaGlkZUhlYWRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2RhdGFLZXlQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9oYXNEZWZhdWx0U29ydCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2RlZmF1bHRTb3J0UHJvcGVydHk6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNvcnRBc2M6IGJvb2xlYW5bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0ID0gNDU7XG4gICAgcHJpdmF0ZSBfdGFibGVGdWxsSGVpZ2h0T2Zmc2V0ID0gMzE1O1xuXG4gICAgY29uc3RydWN0b3IobW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4sIGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBuZXcgTW9kZWxEZXNjcmlwdG9yPFQ+KG1vZGVsVHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJEaXNwbGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRGlzcGxheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhZ2luYXRpb25Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRlSGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUhlYWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFLZXlQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0RlZmF1bHRTb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzRGVmYXVsdFNvcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0U29ydFByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRTb3J0QXNjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNvcnRBc2M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZUZ1bGxIZWlnaHRPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5EZXNjcmlwdG9yPENUPihjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8Q1QsIFQ+KTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHRoaXMuc2V0RGF0YUtleUZyb21Db2x1bW4oKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8c3RyaW5nLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB0aGlzLnNldERhdGFLZXlGcm9tQ29sdW1uKCk7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbk51bWJlcihwcm9wZXJ0eTogc3RyaW5nLCBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxudW1iZXIsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8bnVtYmVyLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi5hc051bWJlcihkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHRoaXMuc2V0RGF0YUtleUZyb21Db2x1bW4oKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uRGF0ZShwcm9wZXJ0eTogc3RyaW5nLCBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxEYXRlLCBUPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPERhdGUsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLmFzRGF0ZShkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHRoaXMuc2V0RGF0YUtleUZyb21Db2x1bW4oKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uQm9vbGVhbihwcm9wZXJ0eTogc3RyaW5nLCB5ZXM/OiBzdHJpbmcsIG5vPzogc3RyaW5nLCBhc0ljb24gPSBmYWxzZSk6IENvbHVtbkRlc2NyaXB0b3I8Ym9vbGVhbiwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxib29sZWFuLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi5hc0Jvb2xlYW4oeWVzLCBubywgYXNJY29uKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHRoaXMuc2V0RGF0YUtleUZyb21Db2x1bW4oKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uRW51bShwcm9wZXJ0eTogc3RyaW5nLCBlbnVtVHlwZTogRW51bVR5cGUsIG5hbWVBc1ZhbHVlID0gZmFsc2UsIHRpdGxlUGF0aD86IHN0cmluZyB8IG51bGwpOiBDb2x1bW5EZXNjcmlwdG9yPEVudW1UeXBlLCBUPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPEVudW1UeXBlLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi5hc0VudW0oZW51bVR5cGUsIG5hbWVBc1ZhbHVlLCB0aXRsZVBhdGgpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgdGhpcy5zZXREYXRhS2V5RnJvbUNvbHVtbigpO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5DdXN0b21Db21wb25lbnQocHJvcGVydHk6IHN0cmluZywgY3VzdG9tQ29tcG9uZW50VHlwZTogVHlwZTxJQ29sdW1uVmFsdWVDb21wb25lbnQ8VD4+KTogQ29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8YW55LCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi5hc0N1c3RvbUNvbXBvbmVudChjdXN0b21Db21wb25lbnRUeXBlKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHRoaXMuc2V0RGF0YUtleUZyb21Db2x1bW4oKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlckRpc3BsYXkoZmlsdGVyRGlzcGxheVR5cGU6IFRhYmxlRGVzY3JpcHRvci5GaWx0ZXJEaXNwbGF5RW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWx0ZXJEaXNwbGF5ID0gZmlsdGVyRGlzcGxheVR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGFnaW5hdGlvbk1vZGUocGFnaW5hdGlvbk1vZGU6IFRhYmxlRGVzY3JpcHRvci5QYWdpbmF0aW9uTW9kZUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbk1vZGUgPSBwYWdpbmF0aW9uTW9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRlSGVhZGVyKGhpZGVIZWFkZXIgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hpZGVIZWFkZXIgPSBoaWRlSGVhZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGFLZXlQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fZGF0YUtleVByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnQocHJvcGVydHk6IHN0cmluZywgYXNjID0gdHJ1ZSk6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX2hhc0RlZmF1bHRTb3J0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eS5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFNvcnRBc2MucHVzaChhc2MpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd0hlaWdodChyb3dIZWlnaHQ6IG51bWJlcik6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX3Jvd0hlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUYWJsZUZ1bGxIZWlnaHRPZmZzZXQodGFibGVGdWxsSGVpZ2h0T2Zmc2V0OiBudW1iZXIpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQgPSB0YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEZXNjcmlwdG9yKHRoaXMubW9kZWwudHlwZSwgdGhpcy5tb2RlbC5pZFByb3BlcnR5TmFtZSwgdGhpcy5tb2RlbC50aXRsZVByb3BlcnR5TmFtZSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGMgPT4gYy5jb3B5KCkpO1xuICAgICAgICBkZXNjcmlwdG9yLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBkZXNjcmlwdG9yLl9oaWRlSGVhZGVyID0gdGhpcy5faGlkZUhlYWRlcjtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9kZWZhdWx0U29ydFByb3BlcnR5ID0gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eS5tYXAocCA9PiBwKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGVmYXVsdFNvcnRBc2MgPSB0aGlzLl9kZWZhdWx0U29ydEFzYy5tYXAocCA9PiBwKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyRGlzcGxheSA9IHRoaXMuX2ZpbHRlckRpc3BsYXk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0YUtleUZyb21Db2x1bW4oKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0YUtleVByb3BlcnR5ICYmIHRoaXMuX2NvbHVtbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhS2V5UHJvcGVydHkgPSB0aGlzLl9jb2x1bW5zWzBdLnByb3BlcnR5O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFRhYmxlRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gUGFnaW5hdGlvbk1vZGVFbnVtIHtcbiAgICAgICAgUGFnaW5hdGlvbixcbiAgICAgICAgSW5maW5pdGVTY3JvbGxcbiAgICB9XG5cbiAgICBleHBvcnQgZW51bSBGaWx0ZXJEaXNwbGF5RW51bSB7XG4gICAgICAgIFJvdyxcbiAgICAgICAgTWVudVxuICAgIH1cbn1cbiJdfQ==
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxNQUFNLE9BQU8sZUFBZTtJQWV4QixZQUFZLFNBQXVCLEVBQUUsVUFBbUIsRUFBRSxhQUFzQjtRQWJ4RSxtQkFBYyxHQUFzQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQzNGLG9CQUFlLEdBQXVDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7UUFDcEcsYUFBUSxHQUFvQyxFQUFFLENBQUM7UUFFL0MsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIseUJBQW9CLEdBQWEsRUFBRSxDQUFDO1FBQ3BDLG9CQUFlLEdBQWMsRUFBRSxDQUFDO1FBRWhDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsMkJBQXNCLEdBQUcsR0FBRyxDQUFDO1FBR2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxJQUFJLFNBQVMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQzVGLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lB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SUFDNUIsSUFBWSxrQkFHWDtJQUhELFdBQVksa0JBQWtCO1FBQzFCLHVFQUFVLENBQUE7UUFDViwrRUFBYyxDQUFBO0lBQ2xCLENBQUMsRUFIVyxrQkFBa0IsR0FBbEIsa0NBQWtCLEtBQWxCLGtDQUFrQixRQUc3QjtJQUVELElBQVksaUJBR1g7SUFIRCxXQUFZLGlCQUFpQjtRQUN6Qix1REFBRyxDQUFBO1FBQ0gseURBQUksQ0FBQTtJQUNSLENBQUMsRUFIVyxpQkFBaUIsR0FBakIsaUNBQWlCLEtBQWpCLGlDQUFpQixRQUc1QjtBQUNMLENBQUMsRUFWZ0IsZUFBZSxLQUFmLGVBQWUsUUFVL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0lDb2x1bW5WYWx1ZUNvbXBvbmVudH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7Q2xhc3NUeXBlLCBFbnVtVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtNb2RlbFV0aWx9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7Q29sdW1uRGVzY3JpcHRvcn0gZnJvbSAnLi9jb2x1bW4uZGVzY3JpcHRvcic7XG5pbXBvcnQge01vZGVsRGVzY3JpcHRvcn0gZnJvbSAnLi9tb2RlbC5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIF9maWx0ZXJEaXNwbGF5OiBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0gPSBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0uTWVudTtcbiAgICBwcml2YXRlIF9wYWdpbmF0aW9uTW9kZTogVGFibGVEZXNjcmlwdG9yLlBhZ2luYXRpb25Nb2RlRW51bSA9IFRhYmxlRGVzY3JpcHRvci5QYWdpbmF0aW9uTW9kZUVudW0uUGFnaW5hdGlvbjtcbiAgICBwcml2YXRlIF9jb2x1bW5zOiBBcnJheTxDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4+ID0gW107XG4gICAgcHJpdmF0ZSBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaGlkZUhlYWRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2RhdGFLZXlQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9oYXNEZWZhdWx0U29ydCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2RlZmF1bHRTb3J0UHJvcGVydHk6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNvcnRBc2M6IGJvb2xlYW5bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0ID0gNDU7XG4gICAgcHJpdmF0ZSBfdGFibGVGdWxsSGVpZ2h0T2Zmc2V0ID0gMzE1O1xuXG4gICAgY29uc3RydWN0b3IobW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4sIGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBuZXcgTW9kZWxEZXNjcmlwdG9yPFQ+KG1vZGVsVHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eSA9IGlkUHJvcGVydHkgPz8gTW9kZWxVdGlsLmZpbmRJZEF0dHJpYnV0ZShtb2RlbFR5cGUpID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEaXNwbGF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFnaW5hdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uTW9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhpZGVIZWFkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlSGVhZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0YUtleVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzRGVmYXVsdFNvcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNEZWZhdWx0U29ydDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRTb3J0UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0U29ydFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdFNvcnRBc2MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0U29ydEFzYztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0hlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0hlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlRnVsbEhlaWdodE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkRlc2NyaXB0b3I8Q1Q+KGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxDVCwgVD4pOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8c3RyaW5nLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5OdW1iZXIocHJvcGVydHk6IHN0cmluZywgZGlzcGxheUZvcm1hdD86IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8bnVtYmVyLCBUPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPG51bWJlciwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNOdW1iZXIoZGlzcGxheUZvcm1hdCk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5EYXRlKHByb3BlcnR5OiBzdHJpbmcsIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPERhdGUsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8RGF0ZSwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNEYXRlKGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uQm9vbGVhbihwcm9wZXJ0eTogc3RyaW5nLCB5ZXM/OiBzdHJpbmcsIG5vPzogc3RyaW5nLCBhc0ljb24gPSBmYWxzZSk6IENvbHVtbkRlc2NyaXB0b3I8Ym9vbGVhbiwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxib29sZWFuLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi5hc0Jvb2xlYW4oeWVzLCBubywgYXNJY29uKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkVudW0ocHJvcGVydHk6IHN0cmluZywgZW51bVR5cGU6IEVudW1UeXBlLCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCB0aXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsKTogQ29sdW1uRGVzY3JpcHRvcjxFbnVtVHlwZSwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxFbnVtVHlwZSwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNFbnVtKGVudW1UeXBlLCBuYW1lQXNWYWx1ZSwgdGl0bGVQYXRoKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkN1c3RvbUNvbXBvbmVudChwcm9wZXJ0eTogc3RyaW5nLCBjdXN0b21Db21wb25lbnRUeXBlOiBUeXBlPElDb2x1bW5WYWx1ZUNvbXBvbmVudDxUPj4pOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLmFzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUNvbXBvbmVudFR5cGUpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlckRpc3BsYXkoZmlsdGVyRGlzcGxheVR5cGU6IFRhYmxlRGVzY3JpcHRvci5GaWx0ZXJEaXNwbGF5RW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWx0ZXJEaXNwbGF5ID0gZmlsdGVyRGlzcGxheVR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGFnaW5hdGlvbk1vZGUocGFnaW5hdGlvbk1vZGU6IFRhYmxlRGVzY3JpcHRvci5QYWdpbmF0aW9uTW9kZUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbk1vZGUgPSBwYWdpbmF0aW9uTW9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRlSGVhZGVyKGhpZGVIZWFkZXIgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hpZGVIZWFkZXIgPSBoaWRlSGVhZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGFLZXlQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgdGhpcy5fZGF0YUtleVByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnQocHJvcGVydHk6IHN0cmluZywgYXNjID0gdHJ1ZSk6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX2hhc0RlZmF1bHRTb3J0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eS5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFNvcnRBc2MucHVzaChhc2MpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd0hlaWdodChyb3dIZWlnaHQ6IG51bWJlcik6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX3Jvd0hlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUYWJsZUZ1bGxIZWlnaHRPZmZzZXQodGFibGVGdWxsSGVpZ2h0T2Zmc2V0OiBudW1iZXIpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQgPSB0YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEZXNjcmlwdG9yKHRoaXMubW9kZWwudHlwZSwgdGhpcy5tb2RlbC5pZFByb3BlcnR5TmFtZSwgdGhpcy5tb2RlbC50aXRsZVByb3BlcnR5TmFtZSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGMgPT4gYy5jb3B5KCkpO1xuICAgICAgICBkZXNjcmlwdG9yLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBkZXNjcmlwdG9yLl9oaWRlSGVhZGVyID0gdGhpcy5faGlkZUhlYWRlcjtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBkZXNjcmlwdG9yLl9kZWZhdWx0U29ydFByb3BlcnR5ID0gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eS5tYXAocCA9PiBwKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZGVmYXVsdFNvcnRBc2MgPSB0aGlzLl9kZWZhdWx0U29ydEFzYy5tYXAocCA9PiBwKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyRGlzcGxheSA9IHRoaXMuX2ZpbHRlckRpc3BsYXk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUYWJsZURlc2NyaXB0b3Ige1xuICAgIGV4cG9ydCBlbnVtIFBhZ2luYXRpb25Nb2RlRW51bSB7XG4gICAgICAgIFBhZ2luYXRpb24sXG4gICAgICAgIEluZmluaXRlU2Nyb2xsXG4gICAgfVxuXG4gICAgZXhwb3J0IGVudW0gRmlsdGVyRGlzcGxheUVudW0ge1xuICAgICAgICBSb3csXG4gICAgICAgIE1lbnVcbiAgICB9XG59XG4iXX0=