@jax-data-science/sci-image-visualizer 0.2.4 → 0.2.5

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.
@@ -10,6 +10,7 @@ import { ConfirmationService, MessageService } from 'primeng/api';
10
10
  import { REGION_EDITOR_API } from '../contracts/region-editor-api.contract';
11
11
  import { REGION_IO_PORT } from '../contracts/ports/region-io.port';
12
12
  import { regionToParts, scaleParts, maskScaleFor } from './mask-raster';
13
+ import { VIZ_TOAST_KEY } from '../toast-outlets';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "primeng/api";
15
16
  import * as i2 from "@angular/common";
@@ -853,11 +854,11 @@ export class RegionEditorComponent {
853
854
  this.regionApi.setPresetSet(set);
854
855
  this.presetDraft = this.clonePresetSet(this.regionApi.getPresetSet());
855
856
  this.setRegionsFromEditor();
856
- this.messageService.add({ key: 'app-toast', severity: 'success',
857
+ this.messageService.add({ key: VIZ_TOAST_KEY, severity: 'success',
857
858
  summary: 'Classes imported', detail: 'Annotation classes loaded.' });
858
859
  }
859
860
  catch (err) {
860
- this.messageService.add({ key: 'app-toast', severity: 'error',
861
+ this.messageService.add({ key: VIZ_TOAST_KEY, severity: 'error',
861
862
  summary: 'Import failed', detail: `${err}` });
862
863
  }
863
864
  };
@@ -958,7 +959,7 @@ export class RegionEditorComponent {
958
959
  const height = Math.max(1, Math.round(size.height * scale));
959
960
  if (scale < 1) {
960
961
  this.messageService.add({
961
- key: 'app-toast',
962
+ key: VIZ_TOAST_KEY,
962
963
  severity: 'info',
963
964
  summary: 'Mask downscaled',
964
965
  detail: `Image too large for a full-resolution mask; saving at ${width}×${height}.`,
@@ -1031,7 +1032,7 @@ export class RegionEditorComponent {
1031
1032
  this.maskBusy = false;
1032
1033
  this.maskEncoding = false;
1033
1034
  this.messageService.add({
1034
- key: 'app-toast',
1035
+ key: VIZ_TOAST_KEY,
1035
1036
  severity: 'error',
1036
1037
  summary: 'Could not create mask',
1037
1038
  detail,
@@ -1078,7 +1079,7 @@ export class RegionEditorComponent {
1078
1079
  next: () => {
1079
1080
  this.saveAsBusy = false;
1080
1081
  this.messageService.add({
1081
- key: 'app-toast',
1082
+ key: VIZ_TOAST_KEY,
1082
1083
  severity: 'success',
1083
1084
  summary: 'Regions saved',
1084
1085
  detail: `Saved ROIs for ${slices.length} slice${slices.length === 1 ? '' : 's'}`,
@@ -1087,7 +1088,7 @@ export class RegionEditorComponent {
1087
1088
  error: (err) => {
1088
1089
  this.saveAsBusy = false;
1089
1090
  this.messageService.add({
1090
- key: 'app-toast',
1091
+ key: VIZ_TOAST_KEY,
1091
1092
  severity: 'error',
1092
1093
  summary: 'Error saving regions',
1093
1094
  detail: `${err?.message ?? err}`,
@@ -1118,7 +1119,7 @@ export class RegionEditorComponent {
1118
1119
  catch (err) {
1119
1120
  this.saveAsBusy = false;
1120
1121
  this.messageService.add({
1121
- key: 'app-toast',
1122
+ key: VIZ_TOAST_KEY,
1122
1123
  severity: 'error',
1123
1124
  summary: 'Error saving regions',
1124
1125
  detail: `${err?.message ?? err}`,
@@ -1130,7 +1131,7 @@ export class RegionEditorComponent {
1130
1131
  this.saveAsBusy = false;
1131
1132
  this.showSaveAsDialog = false;
1132
1133
  this.messageService.add({
1133
- key: 'app-toast',
1134
+ key: VIZ_TOAST_KEY,
1134
1135
  severity: 'success',
1135
1136
  summary: 'Regions saved',
1136
1137
  detail: `Saved as ${filename}`,
@@ -1139,7 +1140,7 @@ export class RegionEditorComponent {
1139
1140
  error: (err) => {
1140
1141
  this.saveAsBusy = false;
1141
1142
  this.messageService.add({
1142
- key: 'app-toast',
1143
+ key: VIZ_TOAST_KEY,
1143
1144
  severity: 'error',
1144
1145
  summary: 'Error saving regions',
1145
1146
  detail: `${err.message || err}`,
@@ -1187,4 +1188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
1187
1188
  type: ViewChild,
1188
1189
  args: ['op']
1189
1190
  }] } });
1190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlZ2lvbi1lZGl0b3IvcmVnaW9uLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3JlZ2lvbi1lZGl0b3IvcmVnaW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBMEIsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUYsT0FBTyxFQUFnQixjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVN4RSxNQUFNLE9BQU8scUJBQXFCO0lBa0doQyxZQUNxQyxT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QUMsY0FBYzt5Q0FuR1AsWUFBWTtzQkFBNUIsU0FBUzt1QkFBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUG9seWdvbiwgUmVjdGFuZ2xlLCBSZWdpb24sIE11bHRpUG9seWdvbiB9IGZyb20gJy4uL21vZGVscy9yZWdpb24nO1xuaW1wb3J0IHsgUHJlc2V0U2V0LCBDbGFzc1ByZXNldCwgZGVmYXVsdFByZXNldFNldCB9IGZyb20gJy4uL21vZGVscy9jbGFzcy1wcmVzZXQnO1xuaW1wb3J0IHsgY29sb3JGb3JMYWJlbCB9IGZyb20gJy4uL3N0b3JlL2NsYXNzLWNvbG9yLnV0aWwnO1xuaW1wb3J0IHsgSUltYWdlTWV0YWRhdGEgfSBmcm9tICcuLi9jb250cmFjdHMvaW1hZ2UuY29udHJhY3QnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBJUmVnaW9uRWRpdG9yQXBpLCBSRUdJT05fRURJVE9SX0FQSSB9IGZyb20gJy4uL2NvbnRyYWN0cy9yZWdpb24tZWRpdG9yLWFwaS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZWdpb25Jb1BvcnQsIFJFR0lPTl9JT19QT1JUIH0gZnJvbSAnLi4vY29udHJhY3RzL3BvcnRzL3JlZ2lvbi1pby5wb3J0JztcbmltcG9ydCB7IHJlZ2lvblRvUGFydHMsIHNjYWxlUGFydHMsIG1hc2tTY2FsZUZvciB9IGZyb20gJy4vbWFzay1yYXN0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gQ2Fub25pY2FsIHByZWZpeGVkIHNlbGVjdG9yIGZpcnN0OyB0aGUgdW5wcmVmaXhlZCBvcmlnaW5hbCBpcyBrZXB0IGFzIGFuXG4gIC8vIGFsaWFzIGZvciBvbmUgcmVsZWFzZSAocHJlLXB1YmxpY2F0aW9uIGJhY2stY29tcGF0KS5cbiAgc2VsZWN0b3I6ICdyZWdpb24tZWRpdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZ2lvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWdpb24tZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2lvbkVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEFycmF5ID0gQXJyYXk7XG5cbiAgQFZpZXdDaGlsZCgnb3AnKSBvdmVybGF5UGFuZWwhOiBPdmVybGF5UGFuZWw7XG5cbiAgcmVnaW9uczogUmVnaW9uW10gPSBbXTtcbiAgcmVnaW9uc0NvcHk6IFJlZ2lvbltdID0gW107XG4gIHNlbGVjdGVkUmVnaW9uczogUmVnaW9uW10gPSBbXTtcbiAgc2hvd1NoYXBlTGFiZWwhOiBib29sZWFuO1xuICBzaGFwZUNvbG9yITogc3RyaW5nO1xuICBmaWxsQ29sb3IhOiBzdHJpbmc7XG4gIGRpc3BsYXlIZWxwRGlhbG9nID0gZmFsc2U7XG4gIHNob3dDb2xvckRpYWxvZyA9IGZhbHNlO1xuICAvKiogT25lIGNvbG91ciBlZGl0b3IgcGVyIHVuaXF1ZSBjbGFzcyBhbW9uZyB0aGUgc2VsZWN0ZWQgcmVnaW9ucywgc2hvd24gaW4gdGhlXG4gICAqICBcImVkaXQgY29sb3VyIG9mIHNlbGVjdGVkIHJlZ2lvbnNcIiBkaWFsb2cuIFVuY2xhc3NpZmllZCByZWdpb25zIChubyBsYWJlbClcbiAgICogIGFyZSBncm91cGVkIHVuZGVyIGEgc2luZ2xlIGVudHJ5IHdpdGggYW4gZW1wdHkgYGxhYmVsYC4gKi9cbiAgY2xhc3NDb2xvckVkaXRzOiB7IGxhYmVsOiBzdHJpbmc7IGNvbG9yOiBzdHJpbmcgfVtdID0gW107XG4gIGxhYmVsQ29sb3JzOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICBzZWxlY3RlZExhYmVsQ29sb3IgPSAnJztcbiAgLyoqIFwiRWRpdCBjbGFzcyBvbiBzZWxlY3RlZCByb3dzXCIgcG9wdXA6IGNob3NlbiBleGlzdGluZyBjbGFzcywgYW5kIGEgbmV3LWNsYXNzIG5hbWUuICovXG4gIGJ1bGtDbGFzcyA9ICcnO1xuICBuZXdCdWxrQ2xhc3MgPSAnJztcblxuICAvLyDilIDilIAgYW5ub3RhdGlvbi1jbGFzcyBwcmVzZXRzIChqaXQtdWkjNzApIOKUgOKUgFxuICAvKiogTG9jYWwgbWlycm9yIG9mIHRoZSBwZXItdXNlciBwcmVzZXQgc2V0IChjaGlwIHN0cmlwLCBDbGFzcyBkcm9wZG93biwgZGlhbG9nKS4gKi9cbiAgcHJlc2V0U2V0OiBQcmVzZXRTZXQgPSBkZWZhdWx0UHJlc2V0U2V0KCk7XG4gIC8qKiBDbGFzcyBhcHBsaWVkIHRvIG5ld2x5IGRyYXduL2FkZGVkIHJlZ2lvbnMgYW5kIHRvIGJ1bGsgY2hpcC1jbGlja3MuICovXG4gIGFjdGl2ZUNsYXNzOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc2hvd01hbmFnZURpYWxvZyA9IGZhbHNlO1xuICAvKiogV29ya2luZyBjb3B5IGVkaXRlZCBpbnNpZGUgdGhlIE1hbmFnZS1jbGFzc2VzIGRpYWxvZzsgY29tbWl0dGVkIG9uIEFwcGx5L0RvbmUuICovXG4gIHByZXNldERyYWZ0OiBQcmVzZXRTZXQgfCBudWxsID0gbnVsbDtcbiAgLyoqIGNsYXNzIG5hbWUgKG1hdGNoLW1vZGUga2V5ZWQpIOKGkiBudW1iZXIgb2YgcmVnaW9ucyBjdXJyZW50bHkgdXNpbmcgaXQuICovXG4gIGNsYXNzQ291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgLyoqIEZhbGxiYWNrIGNsYXNzIHRoYXQgYSByZWdpb24gcmV2ZXJ0cyB0byB3aGVuIGl0cyBjbGFzcyBpcyBkZWxldGVkIChqaXQtdWkjNzApLiAqL1xuICByZWFkb25seSBkZWZhdWx0Q2xhc3NOYW1lID0gJ1JlZ2lvbic7XG4gIC8qKiBDbGFzc2VzIGFzIHNob3duIGluIHRoZSBwYW5lbDogc29ydGVkIGJ5IHJlZ2lvbiBjb3VudCAoZGVzYyksIHRoZW4gbmFtZS4gKi9cbiAgZGlzcGxheUNsYXNzZXM6IENsYXNzUHJlc2V0W10gPSBbXTtcbiAgcmVhZG9ubHkgbWF0Y2hNb2RlT3B0aW9ucyA9IFtcbiAgICB7IGxhYmVsOiAnRXhhY3QnLCB2YWx1ZTogJ2V4YWN0JyB9LFxuICAgIHsgbGFiZWw6ICdOb3JtYWxpemVkJywgdmFsdWU6ICdub3JtYWxpemVkJyB9LFxuICBdO1xuXG4gIHBhZ2luYXRvckZpcnN0ID0gMDtcbiAgcGFnaW5hdG9yUm93cyA9IDEwO1xuICByZWFkb25seSByb3dzUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDI1LCA1MF07XG4gIC8qKiBSZWdpb25zIHdob3NlIENsYXNzIGNlbGwgaXMgY3VycmVudGx5IGluIGVkaXQgbW9kZS5cbiAgICogIFVzaW5nIG9iamVjdCBpZGVudGl0eSBhcyB0aGUga2V5IGF2b2lkcyBuZWVkaW5nIGEgdW5pcXVlIGlkIGZpZWxkLiAqL1xuICBlZGl0aW5nTGFiZWxSZWdpb25zID0gbmV3IFNldDxhbnk+KCk7XG5cbiAgc2hvd1NhdmVBc0RpYWxvZyA9IGZhbHNlO1xuICBzYXZlQXNGaWxlbmFtZSA9ICcnO1xuICBzYXZlQXNGaWxlRXhpc3RzID0gZmFsc2U7XG4gIC8qKiBUcnVlIHdoaWxlIGEgR2VvSlNPTiBwZXJzaXN0IGlzIHNlcmlhbGl6aW5nL3VwbG9hZGluZyDigJQgZHJpdmVzIHRoZSBkaWFsb2cnc1xuICAgKiAgcHJvZ3Jlc3MgYmFyIGFuZCBDYW5jZWwgYnV0dG9uIChwYXJpdHkgd2l0aCB0aGUgU2F2ZS1tYXNrIGRpYWxvZykuICovXG4gIHNhdmVBc0J1c3kgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2F2ZUFzQ2hlY2skID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIF9zYXZlQXNTdWI/OiBTdWJzY3JpcHRpb247XG4gIC8qKiBIYW5kbGUgZm9yIHRoZSBkZWZlcnJlZC1zZXJpYWxpemUgdGltZXIgc28gQ2FuY2VsL2Rlc3Ryb3kgY2FuIGFib3J0IGl0XG4gICAqICBiZWZvcmUgaXQgZmlyZXMgKG90aGVyd2lzZSB0aGUgdXBsb2FkIHdvdWxkIHN0aWxsIHN0YXJ0KS4gKi9cbiAgcHJpdmF0ZSBfc2F2ZUFzVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuICBzaG93RXhwb3J0RGlhbG9nID0gZmFsc2U7XG4gIGV4cG9ydEZpbGVuYW1lID0gJyc7XG5cbiAgc2hvd1NhdmVNYXNrRGlhbG9nID0gZmFsc2U7XG4gIHNhdmVNYXNrRmlsZW5hbWUgPSAnJztcbiAgLyoqIE1hc2sgdHlwZSBjaG9zZW4gaW4gdGhlIFNhdmUtbWFzayBkaWFsb2c6IGEgYmluYXJ5IGZvcmVncm91bmQvYmFja2dyb3VuZFxuICAgKiAgbWFzaywgb3IgYSBtdWx0aS1jbGFzcyBtYXNrIHdpdGggYSBkaXN0aW5jdCBpZCBwZXIgcmVnaW9uLiAqL1xuICBtYXNrTW9kZTogJ2JpbmFyeScgfCAnbXVsdGljbGFzcycgPSAnYmluYXJ5JztcbiAgLyoqIFRydWUgd2hpbGUgdGhlIG1hc2sgd29ya2VyIGlzIHJhc3Rlcml6aW5nL2VuY29kaW5nIOKAlCBkcml2ZXMgdGhlIHByb2dyZXNzXG4gICAqICBiYXIgYW5kIHRoZSBDYW5jZWwgYnV0dG9uIGluIHRoZSBkaWFsb2cuICovXG4gIG1hc2tCdXN5ID0gZmFsc2U7XG4gIC8qKiAw4oCTMTAwIHJhc3Rlcml6YXRpb24gcHJvZ3Jlc3M7IHN3aXRjaGVzIHRvIGluZGV0ZXJtaW5hdGUgZHVyaW5nIGVuY29kaW5nLiAqL1xuICBtYXNrUHJvZ3Jlc3MgPSAwO1xuICBtYXNrRW5jb2RpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtYXNrV29ya2VyPzogV29ya2VyO1xuICBwcml2YXRlIHBlbmRpbmdNYXNrRmlsZW5hbWUgPSAnJztcblxuICAvKipcbiAgICogUHJpbWVORyBwLXRhYmxlIG11bHRpLXNlbGVjdGlvbiBtb2RlIHRvZ2dsZS4gV2hlbiB0cnVlLCBzaW5nbGUtY2xpY2tcbiAgICogc2VsZWN0cyBvbmUgcm93IChyZXBsYWNpbmcgcHJpb3IpOyBtZXRhL2N0cmwtY2xpY2sgdG9nZ2xlcyBhIHJvdyBpbi9vdXRcbiAgICogb2YgdGhlIHNlbGVjdGlvbi4gV2hlbiBmYWxzZSwgZXZlcnkgY2xpY2sgdG9nZ2xlcy4gRGVmYXVsdCB0cnVlIHRvXG4gICAqIG1hdGNoIHRoZSBtb3N0IGNvbW1vbiBzcHJlYWRzaGVldC1saWtlIFVYLlxuICAgKi9cbiAgbWV0YUtleSA9IHRydWU7XG5cbiAgcHJpdmF0ZSBfdXBkYXRpbmdGcm9tRWRpdG9yID0gZmFsc2U7XG4gIHByaXZhdGUgX3N1cHByZXNzU2VsZWN0aW9uU3luY1RvUGxvdCA9IGZhbHNlO1xuICBwcml2YXRlIF9yZWdpb25TdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX3NlbGVjdGVkSWR4U3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9tZXRhU3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9wcmVzZXRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgLyoqIFBoeXNpY2FsIHBpeGVsIHNpemUgKMK1bS9waXhlbCkgb2YgdGhlIGFjdGl2ZSBpbWFnZSwgZm9yIHJlZ2lvbiBhcmVhcyBpblxuICAgKiAgwrVtwrIuIFVuZGVmaW5lZCB3aGVuIHRoZSBmb3JtYXQgcmVwb3J0cyBubyBwaHlzaWNhbCBzaXplLiAqL1xuICBwcml2YXRlIG1wcFg/OiBudW1iZXI7XG4gIHByaXZhdGUgbXBwWT86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFJFR0lPTl9FRElUT1JfQVBJKSBwcml2YXRlIHJlZ2lvbkFwaTogSVJlZ2lvbkVkaXRvckFwaSxcbiAgICBwdWJsaWMgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBASW5qZWN0KFJFR0lPTl9JT19QT1JUKSBwcml2YXRlIHJlZ2lvbklvOiBSZWdpb25Jb1BvcnQsXG4gICkge31cblxuICAvKipcbiAgICogRGVlcCBjb3B5IG9mIHJlZ2lvbnMgZm9yIGRpcnR5LXRyYWNraW5nIChgcmVnaW9uc0NvcHlgKS4gUmV0dXJucyBwbGFpbi1vYmplY3RcbiAgICogY2xvbmVzIOKAlCBvbmx5IHN0cnVjdHVyYWwgZXF1YWxpdHkgbWF0dGVycyBoZXJlLCBub3QgcHJvdG90eXBlcy5cbiAgICogVE9ETzogcmVwbGFjZSB3aXRoIGBzdHJ1Y3R1cmVkQ2xvbmVgIG9uY2UgdmVyaWZpZWQuXG4gICAqL1xuICBwcml2YXRlIGRlZXBDbG9uZTxUPihpdGVtczogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWVwQ2xvbmUoaXRlbSkgYXMgdW5rbm93biBhcyBUO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjbG9uZWQ6IGFueSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBpdGVtKSB7XG4gICAgICAgICAgY2xvbmVkW2tleV0gPSB0aGlzLmRlZXBDbG9uZShbaXRlbVtrZXldXSlbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zaG93U2hhcGVMYWJlbCA9IHRoaXMucmVnaW9uQXBpLmdldFNob3dTaGFwZUxhYmVsKCk7XG4gICAgdGhpcy5zaGFwZUNvbG9yID0gdGhpcy5yZWdpb25BcGkuZ2V0U2hhcGVDb2xvcigpO1xuICAgIHRoaXMuZmlsbENvbG9yID0gdGhpcy5yZWdpb25BcGkuZ2V0RmlsbENvbG9yKCk7XG5cbiAgICAvLyBBbm5vdGF0aW9uLWNsYXNzIHByZXNldHMgKGppdC11aSM3MCk6IG1pcnJvciB0aGUgc2V0IGZvciB0aGUgY2hpcCBzdHJpcCxcbiAgICAvLyB0aGUgQ2xhc3MgZHJvcGRvd24gYW5kIHRoZSBtYW5hZ2UgZGlhbG9nLiBHdWFyZGVkIHdpdGggb3B0aW9uYWwgY2FsbHMgc29cbiAgICAvLyBwYXJ0aWFsIEFQSSBtb2NrcyBpbiB0ZXN0cyAod2hpY2ggb21pdCB0aGUgcHJlc2V0IG1ldGhvZHMpIGRvbid0IHRocm93LlxuICAgIGNvbnN0IGluaXRpYWxQcmVzZXRzID0gdGhpcy5yZWdpb25BcGkuZ2V0UHJlc2V0U2V0Py4oKTtcbiAgICBpZiAoaW5pdGlhbFByZXNldHMpIHRoaXMucHJlc2V0U2V0ID0gaW5pdGlhbFByZXNldHM7XG4gICAgY29uc3QgcHJlc2V0cyQgPSB0aGlzLnJlZ2lvbkFwaS5nZXRQcmVzZXRTZXQkPy4oKTtcbiAgICBpZiAocHJlc2V0cyQpIHtcbiAgICAgIHRoaXMuX3ByZXNldFN1YiA9IHByZXNldHMkLnN1YnNjcmliZSgoc2V0KSA9PiB7XG4gICAgICAgIGlmIChzZXQpIHRoaXMucHJlc2V0U2V0ID0gc2V0O1xuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlDbGFzc2VzKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gU2VlZCBmcm9tIHRoZSB2aXN1YWxpemVyJ3MgY3VycmVudCByZWdpb25zIOKAlCBhbHJlYWR5IHNjb3BlZCB0byB0aGVcbiAgICAvLyBhY3RpdmUgaW1hZ2UgYnkgdGhlIHBlci1pbWFnZSBjYWNoZSwgYW5kIGhhbmRlZCBiYWNrIGFzIG5ldXRyYWwgUmVnaW9uXG4gICAgLy8gb2JqZWN0cyAobm8gYmFja2VuZCBzaGFwZSBmb3JtYXQgaW52b2x2ZWQpLlxuICAgIC8vIEFubm90YXRpb24gcmVnaW9ucyBvbmx5IOKAlCBpbnRlbnNpdHktcHJvZmlsZSBsaW5lcyBhcmUgb3duZWQgYnkgdGhlXG4gICAgLy8gaW50ZW5zaXR5IHRvb2wgYW5kIGV4Y2x1ZGVkIGJ5IHRoZSBjb250cmFjdCwgc28gdGhlIGVkaXRvciBuZXZlciBzZWVzIHRoZW0uXG4gICAgdGhpcy5yZWdpb25zID0gdGhpcy5hcHBseVJlZ2lvbkNvbG9ycyh0aGlzLnJlZ2lvbkFwaS5nZXRBbm5vdGF0aW9uUmVnaW9ucygpKTtcbiAgICB0aGlzLnJlZ2lvbnNDb3B5ID0gdGhpcy5kZWVwQ2xvbmUodGhpcy5yZWdpb25zKTtcbiAgICB0aGlzLnN5bmNDbGFzc2VzRnJvbVJlZ2lvbnModGhpcy5yZWdpb25zKTtcbiAgICB0aGlzLnJlY29tcHV0ZUNsYXNzQ291bnRzKCk7XG5cbiAgICAvLyBUaGUgdXBkYXRlIGV2ZW50IGlzIGp1c3QgYSBjaGFuZ2Ugc2lnbmFsOyByZS1yZWFkIHRoZSByZWdpb25zIGZyb20gdGhlXG4gICAgLy8gdmlzdWFsaXplciByYXRoZXIgdGhhbiBwYXJzaW5nIHdoYXRldmVyIHBheWxvYWQgaXQgY2Fycmllcy5cbiAgICB0aGlzLl9yZWdpb25TdWIgPSB0aGlzLnJlZ2lvbkFwaS5nZXRSZWdpb25VcGRhdGVFdmVudCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fdXBkYXRpbmdGcm9tRWRpdG9yKSByZXR1cm47XG4gICAgICBjb25zdCB1cGRhdGVkID0gdGhpcy5hcHBseVJlZ2lvbkNvbG9ycyh0aGlzLnJlZ2lvbkFwaS5nZXRBbm5vdGF0aW9uUmVnaW9ucygpKTtcbiAgICAgIC8vIHByZXNlcnZlIHNlbGVjdGlvbiBmb3IgcmVnaW9ucyB0aGF0IHN0aWxsIGV4aXN0IChieSBpZCwgc2luY2UgbmFtZVxuICAgICAgLy8gaXMgYSB1c2VyLWVkaXRhYmxlIGRpc3BsYXkgbGFiZWwgYW5kIG1heSBjb2xsaWRlKVxuICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRSZWdpb25zLm1hcCgocikgPT4gci5pZCkpO1xuICAgICAgdGhpcy5yZWdpb25zID0gdXBkYXRlZDtcbiAgICAgIHRoaXMucmVnaW9uc0NvcHkgPSB0aGlzLmRlZXBDbG9uZSh0aGlzLnJlZ2lvbnMpO1xuICAgICAgdGhpcy5zZWxlY3RlZFJlZ2lvbnMgPSB1cGRhdGVkLmZpbHRlcigocikgPT4gc2VsZWN0ZWRJZHMuaGFzKHIuaWQpKTtcbiAgICAgIHRoaXMuY2xhbXBQYWdpbmF0b3JGaXJzdCgpO1xuICAgICAgdGhpcy5zeW5jQ2xhc3Nlc0Zyb21SZWdpb25zKHVwZGF0ZWQpO1xuICAgICAgdGhpcy5yZWNvbXB1dGVDbGFzc0NvdW50cygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc2F2ZUFzQ2hlY2skLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoNDAwKSxcbiAgICAgIHN3aXRjaE1hcChuYW1lID0+IHRoaXMucmVnaW9uSW8ucm9pRmlsZUV4aXN0cyhuYW1lKSksXG4gICAgKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZXhpc3RzID0+IHsgdGhpcy5zYXZlQXNGaWxlRXhpc3RzID0gZXhpc3RzOyB9LFxuICAgICAgZXJyb3I6ICgpID0+IHsgdGhpcy5zYXZlQXNGaWxlRXhpc3RzID0gZmFsc2U7IH0sXG4gICAgfSk7XG5cbiAgICAvLyBQaHlzaWNhbCBwaXhlbCBzaXplIG9mIHRoZSBhY3RpdmUgaW1hZ2UgKGZvciByZWdpb24gYXJlYXMgaW4gwrVtwrIvbW3CsikuXG4gICAgLy8gTWlycm9yIFBsb3RseVNlcnZpY2UuY3VycmVudE1wcDogdGhlIGNhbGlicmF0aW9uIG1heSBzaXQgb24gYW55IGNoYW5uZWxcbiAgICAvLyBlbnRyeSwgbm90IG5lY2Vzc2FyaWx5IFswXSwgc28gcGljayB0aGUgZmlyc3QgZW50cnkgd2l0aCBhIHBvc2l0aXZlIG1wcFhcbiAgICAvLyByYXRoZXIgdGhhbiByZWFkaW5nIFswXSBibGluZGx5LiBGYWxsIGJhY2sgdG8gc3F1YXJlIHBpeGVscyAobXBwWSA9IG1wcFgpXG4gICAgLy8gd2hlbiBvbmx5IG9uZSBheGlzIGlzIHJlcG9ydGVkLlxuICAgIHRoaXMuX21ldGFTdWIgPSB0aGlzLnJlZ2lvbkFwaS5nZXRJbWFnZU1ldGEoKS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgIGNvbnN0IHsgbXBwWCwgbXBwWSB9ID0gdGhpcy5waWNrTXBwKG1ldGEpO1xuICAgICAgdGhpcy5tcHBYID0gbXBwWDtcbiAgICAgIHRoaXMubXBwWSA9IG1wcFk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zZWxlY3RlZElkeFN1YiA9IHRoaXMucmVnaW9uQXBpLmdldFNlbGVjdGVkUmVnaW9ucyQoKS5zdWJzY3JpYmUoKHNlbGVjdGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5fc3VwcHJlc3NTZWxlY3Rpb25TeW5jVG9QbG90KSByZXR1cm47XG4gICAgICAvLyBNYXAgdGhlIGNvbnRyYWN0J3Mgc2VsZWN0ZWQgcmVnaW9ucyB0byB0aGUgZWRpdG9yJ3Mgb3duIGluc3RhbmNlcyBieSBpZC5cbiAgICAgIGNvbnN0IG5leHQgPSBzZWxlY3RlZFxuICAgICAgICAubWFwKChzKSA9PiB0aGlzLnJlZ2lvbnMuZmluZCgocikgPT4gci5pZCA9PT0gcy5pZCkpXG4gICAgICAgIC5maWx0ZXIoKHIpOiByIGlzIFJlZ2lvbiA9PiAhIXIpO1xuICAgICAgY29uc3Qgc2FtZSA9XG4gICAgICAgIG5leHQubGVuZ3RoID09PSB0aGlzLnNlbGVjdGVkUmVnaW9ucy5sZW5ndGggJiZcbiAgICAgICAgbmV4dC5ldmVyeSgociwgaSkgPT4gci5pZCA9PT0gdGhpcy5zZWxlY3RlZFJlZ2lvbnNbaV0/LmlkKTtcbiAgICAgIGlmICghc2FtZSkgdGhpcy5zZWxlY3RlZFJlZ2lvbnMgPSBuZXh0O1xuICAgICAgLy8gU2Nyb2xsIHRoZSBwYWdpbmF0b3Igc28gdGhlIG1vc3QtcmVjZW50bHktc2VsZWN0ZWQgcm93IGlzIHZpc2libGUuXG4gICAgICBpZiAobmV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGxhc3RJZHggPSB0aGlzLnJlZ2lvbnMuZmluZEluZGV4KChyKSA9PiByLmlkID09PSBuZXh0W25leHQubGVuZ3RoIC0gMV0uaWQpO1xuICAgICAgICBpZiAobGFzdElkeCA+PSAwKSB7XG4gICAgICAgICAgY29uc3QgcGFnZVN0YXJ0ID0gTWF0aC5mbG9vcihsYXN0SWR4IC8gdGhpcy5wYWdpbmF0b3JSb3dzKSAqIHRoaXMucGFnaW5hdG9yUm93cztcbiAgICAgICAgICBpZiAocGFnZVN0YXJ0ICE9PSB0aGlzLnBhZ2luYXRvckZpcnN0KSB0aGlzLnBhZ2luYXRvckZpcnN0ID0gcGFnZVN0YXJ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpb25TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zZWxlY3RlZElkeFN1Yi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX21ldGFTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9wcmVzZXRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5fc2F2ZUFzVGltZXIgIT09IHVuZGVmaW5lZCkgY2xlYXJUaW1lb3V0KHRoaXMuX3NhdmVBc1RpbWVyKTtcbiAgICB0aGlzLl9zYXZlQXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy50ZWFyZG93bk1hc2tXb3JrZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWJsZSDihpIgUGxvdDogUHJpbWVORyBmaXJlcyBvblJvd1NlbGVjdC9vblJvd1Vuc2VsZWN0IGFmdGVyIHVwZGF0aW5nXG4gICAqIGBzZWxlY3RlZFJlZ2lvbnNgLiBQdXNoIHRoZSBzZWxlY3RlZCByZWdpb25zIHRvIHRoZSBjb250cmFjdCBieSBpZGVudGl0eSDigJRcbiAgICogdGhlIHBhY2thZ2UgbWFwcyB0aGVtIHRvIGl0cyBpbnRlcm5hbCBpbmRleCBzcGFjZSAod2hpY2ggaW5jbHVkZXMgdGhlXG4gICAqIGludGVuc2l0eS1wcm9maWxlIGxpbmVzIHRoZSBlZGl0b3IgbmV2ZXIgc2VlcykuXG4gICAqL1xuICBvblNlbGVjdGlvbkNoYW5nZWQoKSB7XG4gICAgdGhpcy5fc3VwcHJlc3NTZWxlY3Rpb25TeW5jVG9QbG90ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5yZWdpb25BcGkuc2V0U2VsZWN0ZWRSZWdpb25zKHRoaXMuc2VsZWN0ZWRSZWdpb25zID8/IFtdKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3VwcHJlc3NTZWxlY3Rpb25TeW5jVG9QbG90ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGNsYXNzaWZpY2F0aW9uIGNvbG91cnMgYW5kIHJlZnJlc2ggdGhlIGxhYmVs4oaSY29sb3VyIG1hcCBmb3IgcmVnaW9uc1xuICAgKiBjb21pbmcgZnJvbSB0aGUgdmlzdWFsaXplci4gVGhlIHZpc3VhbGl6ZXIgaGFuZHMgYmFjayBuZXV0cmFsIGBSZWdpb25gXG4gICAqIG9iamVjdHMgd2l0aCBib3VuZHMsIGNvbG91ciBhbmQgbGFiZWwgYWxyZWFkeSBwb3B1bGF0ZWQsIHNvIHRoZSBlZGl0b3Igbm9cbiAgICogbG9uZ2VyIHBhcnNlcyBhbnkgYmFja2VuZC1zcGVjaWZpYyBzaGFwZSBmb3JtYXQg4oCUIGl0IG9ubHkgZmlsbHMgaW4gYVxuICAgKiBmYWxsYmFjayBjb2xvdXIgYW5kIHJlYnVpbGRzIGl0cyBsb2NhbCBsYWJlbOKGkmNvbG91ciBsb29rdXAuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5UmVnaW9uQ29sb3JzKHJlZ2lvbnM6IFJlZ2lvbltdKTogUmVnaW9uW10ge1xuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHJlZ2lvbnMpIHtcbiAgICAgIHJlZ2lvbi5jb2xvciA9XG4gICAgICAgIHJlZ2lvbi5jb2xvciB8fFxuICAgICAgICB0aGlzLnJlZ2lvbkFwaS5nZXRDbGFzc2lmaWNhdGlvbkNvbG9ycygpLmdldChyZWdpb24ubGFiZWwgPz8gJycpIHx8XG4gICAgICAgIHRoaXMuc2hhcGVDb2xvcjtcbiAgICB9XG4gICAgLy8gUmVidWlsZCBsYWJlbENvbG9yczogc2VlZCBmcm9tIHBlcnNpc3RlZCBtYXAsIHRoZW4gb3ZlcmxheSBhY3R1YWwgcmVnaW9uIGNvbG9yc1xuICAgIHRoaXMubGFiZWxDb2xvcnMuY2xlYXIoKTtcbiAgICBmb3IgKGNvbnN0IFtsYWJlbCwgY29sb3JdIG9mIHRoaXMucmVnaW9uQXBpLmdldENsYXNzaWZpY2F0aW9uQ29sb3JzKCkpIHtcbiAgICAgIHRoaXMubGFiZWxDb2xvcnMuc2V0KGxhYmVsLCBjb2xvcik7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHJlZ2lvbnMpIHtcbiAgICAgIGlmIChyZWdpb24ubGFiZWwgJiYgcmVnaW9uLmNvbG9yKSB7XG4gICAgICAgIHRoaXMubGFiZWxDb2xvcnMuc2V0KHJlZ2lvbi5sYWJlbCwgcmVnaW9uLmNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlZ2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogUHVzaCBlZGl0cyBmcm9tIHRoZSBlZGl0b3IgdG8gdGhlIGRpYWdyYW0gaW4gbGl2ZS1lZGl0IG1vZGUgKG5vIHNhdmUgL1xuICAgKiBjYW5jZWwgYnV0dG9ucykuIFRoZSBgX3VwZGF0aW5nRnJvbUVkaXRvcmAgZ3VhcmQgaXMgc3RpbGwgdXNlZCBzbyB0aGVcbiAgICogcmVzdWx0aW5nIHJlZ2lvblVwZGF0ZUV2ZW50IGRvZXNuJ3QgYm91bmNlIGJhY2sgYXMgYW4gZXh0ZXJuYWwgY2hhbmdlLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRSZWdpb25zRnJvbUVkaXRvcihmaWxsQ29sb3I/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl91cGRhdGluZ0Zyb21FZGl0b3IgPSB0cnVlO1xuICAgIC8vIGlzUmVnaW9uU2F2ZU9uPXRydWUgc28gY2hhbmdlcyBjb21taXQgdG8gdGhlIHJlZ2lvbiBzdG9yZSAoYW5kIHRoZSBwZXItaW1hZ2VcbiAgICAvLyBjYWNoZSkgaW1tZWRpYXRlbHkuIHNldEFubm90YXRpb25SZWdpb25zIHByZXNlcnZlcyB0aGUgaW50ZW5zaXR5LXByb2ZpbGVcbiAgICAvLyBsaW5lcyBpbnRlcm5hbGx5LCBzbyBlZGl0b3IgZWRpdHMgbmV2ZXIgZGlzdHVyYiB0aGVtLlxuICAgIHRoaXMucmVnaW9uQXBpLnNldEFubm90YXRpb25SZWdpb25zKHRoaXMucmVnaW9ucywgdGhpcy5zaG93U2hhcGVMYWJlbCwgdHJ1ZSwgZmlsbENvbG9yID8/IHRoaXMuZmlsbENvbG9yKTtcbiAgICB0aGlzLl91cGRhdGluZ0Zyb21FZGl0b3IgPSBmYWxzZTtcbiAgICAvLyBUaGUgZWRpdG9yJ3Mgb3duIGNvbW1pdCBpcyBpZ25vcmVkIGJ5IHRoZSByZWdpb24tdXBkYXRlIHN1YnNjcmlwdGlvbiAodGhlXG4gICAgLy8gX3VwZGF0aW5nRnJvbUVkaXRvciBndWFyZCksIHNvIHJlZnJlc2ggaGVyZTogYSBjbGFzcyBsYWJlbCB0eXBlZCBpbiB0aGVcbiAgICAvLyBDbGFzcyBjb2x1bW4gZ2V0cyBhZGRlZCB0byB0aGUgbGlzdCwgYW5kIHRoZSBwYW5lbCBjb3VudHMvb3JkZXIgc3RheSBpblxuICAgIC8vIHN5bmMgYWZ0ZXIgYW55IGVkaXQuIChqaXQtdWkjNzApXG4gICAgdGhpcy5zeW5jQ2xhc3Nlc0Zyb21SZWdpb25zKHRoaXMucmVnaW9ucyk7XG4gICAgdGhpcy5yZWNvbXB1dGVDbGFzc0NvdW50cygpO1xuICB9XG5cbiAgLyoqIFNldCBvbmUgcmVnaW9uJ3Mgb3V0bGluZSBjb2xvdXIgZnJvbSB0aGUgcGVyLXJvdyBwaWNrZXIgYW5kIGNvbW1pdCBsaXZlLlxuICAgKiAgUmVtZW1iZXJzIGl0IGFzIHRoZSBsYWJlbCdzIGNvbG91ciBzbyBzYW1lLWNsYXNzIHJlZ2lvbnMgYWRkZWQgbGF0ZXIgbWF0Y2hcbiAgICogIChqaXQtdWkjODUg4oCUIHRoZSBSZWdpb24gRWRpdG9yJ3MgcGVyLXJlZ2lvbiBDb2xvciBjb2x1bW4pLiAqL1xuICBjaGFuZ2VSZWdpb25Db2xvcihyZWdpb246IFJlZ2lvbiwgY29sb3I6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghY29sb3IgfHwgcmVnaW9uLmNvbG9yID09PSBjb2xvcikgcmV0dXJuO1xuICAgIHJlZ2lvbi5jb2xvciA9IGNvbG9yO1xuICAgIHJlZ2lvbi5jb2xvck92ZXJyaWRkZW4gPSB0cnVlOyAvLyBleHBsaWNpdCBwZXItcmVnaW9uIGNvbG91ciDigJQgcHJlc2VydmUgaXQgYWdhaW5zdCBwcmVzZXQgKHJlKWFwcGx5IChqaXQtdWkjNzApXG4gICAgaWYgKHJlZ2lvbi5sYWJlbCkgdGhpcy5sYWJlbENvbG9ycy5zZXQocmVnaW9uLmxhYmVsLCBjb2xvcik7XG4gICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICB9XG5cbiAgYWRkUmVjdGFuZ2xlKCkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBSZWdpb24oKTtcbiAgICByZWdpb24uYm91bmRzID0gbmV3IFJlY3RhbmdsZSgpO1xuICAgIHJlZ2lvbi5ib3VuZHMud2lkdGggPSA1MTI7XG4gICAgcmVnaW9uLmJvdW5kcy5oZWlnaHQgPSA1MTI7XG4gICAgcmVnaW9uLmxhYmVsID0gdGhpcy5hY3RpdmVDbGFzcyA/PyAnUmVnaW9uJztcbiAgICAvLyBpZCBhbmQgYSBub24tY29sbGlkaW5nIG5hbWUgYXJlIG1pbnRlZCBieSB0aGUgdmlzdWFsaXplcidzIHNldFJlZ2lvbnNcbiAgICB0aGlzLnJlZ2lvbnMgPSBbLi4udGhpcy5yZWdpb25zLCByZWdpb25dO1xuICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICB0aGlzLnJlZ2lvbnNDb3B5ID0gdGhpcy5kZWVwQ2xvbmUodGhpcy5yZWdpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxhYmVsIG9mIHRoZSByZWdpb24gb24gZW50ZXIga2V5IHByZXNzZWQgKHdoZW4gZWRpdGluZyBhIGxhYmVsIGNlbGwgaW4gdGhlIHRhYmxlKVxuICAgKiBAcGFyYW0gcmVnaW9uXG4gICAqIEBwYXJhbSBzZXRSZWdpb25cbiAgICovXG4gIGxhYmVsUmVnaW9uVXBkYXRlKHJlZ2lvbjogUmVnaW9uLCBzZXRSZWdpb24gPSBmYWxzZSkge1xuICAgIGlmIChyZWdpb24ubGFiZWwpIHtcbiAgICAgIC8vIGlmIGxhYmVsIGRvZXNuJ3QgZXhpc3RcbiAgICAgIGlmICghdGhpcy5sYWJlbENvbG9ycy5oYXMocmVnaW9uLmxhYmVsKSkge1xuICAgICAgICB0aGlzLmxhYmVsQ29sb3JzLnNldChyZWdpb24ubGFiZWwsIHRoaXMuc2hhcGVDb2xvcik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVwZGF0ZSBjb2xvcnMgb2YgdGhlIHJlZ2lvbnNcbiAgICBmb3IgKGNvbnN0IHJlZyBvZiB0aGlzLnJlZ2lvbnMpIHtcbiAgICAgIGlmICghcmVnLmNvbG9yKSB7XG4gICAgICAgIGlmIChyZWcubGFiZWwgJiYgdGhpcy5sYWJlbENvbG9ycy5oYXMocmVnLmxhYmVsKSkge1xuICAgICAgICAgIHJlZy5jb2xvciA9IHRoaXMubGFiZWxDb2xvcnMuZ2V0KHJlZy5sYWJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXBkYXRlIGxhYmVscyBtYXBcbiAgICB0aGlzLmxhYmVsQ29sb3JzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCByZWcgb2YgdGhpcy5yZWdpb25zKSB7XG4gICAgICBpZiAocmVnLmxhYmVsICYmIHJlZy5jb2xvcikge1xuICAgICAgICB0aGlzLmxhYmVsQ29sb3JzLnNldChyZWcubGFiZWwsIHJlZy5jb2xvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZXRSZWdpb24pIHtcbiAgICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICB9XG4gIH1cbiAgeFJlY3RVcGRhdGUocmVnaW9uOiBSZWdpb24sIGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCByZWN0YW5nbGUgPSByZWdpb24uYm91bmRzO1xuICAgIGlmIChyZWN0YW5nbGUgJiYgcmVjdGFuZ2xlIGluc3RhbmNlb2YgUmVjdGFuZ2xlKSB7XG4gICAgICByZWN0YW5nbGUueCA9IGV2ZW50LnZhbHVlO1xuICAgICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICAgIH1cbiAgfVxuICB5UmVjdFVwZGF0ZShyZWdpb246IFJlZ2lvbiwgZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IHJlZ2lvbi5ib3VuZHM7XG4gICAgaWYgKHJlY3RhbmdsZSAmJiByZWN0YW5nbGUgaW5zdGFuY2VvZiBSZWN0YW5nbGUpIHtcbiAgICAgIHJlY3RhbmdsZS55ID0gZXZlbnQudmFsdWU7XG4gICAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gICAgfVxuICB9XG4gIHdpZHRoUmVjdFVwZGF0ZShyZWdpb246IFJlZ2lvbiwgZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudC52YWx1ZSA9PT0gbnVsbCB8fCBldmVudC52YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gcmVnaW9uLmJvdW5kcztcbiAgICBpZiAocmVjdGFuZ2xlICYmIHJlY3RhbmdsZSBpbnN0YW5jZW9mIFJlY3RhbmdsZSkge1xuICAgICAgY29uc3QgcmVnID0gdGhpcy5yZWdpb25zQ29weS5maWx0ZXIoKGVsZW1lbnQ6IFJlZ2lvbikgPT4gZWxlbWVudC5pZCA9PT0gcmVnaW9uLmlkKTtcbiAgICAgIGlmIChyZWcubGVuZ3RoKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBvbGRXaWR0aCA9IHJlZ1swXS5ib3VuZHMud2lkdGg7XG4gICAgICAgIGNvbnN0IGRpZmZXaWR0aCA9IGV2ZW50LnZhbHVlIC0gb2xkV2lkdGg7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZWN0YW5nbGUueCA9IE1hdGgucm91bmQocmVnWzBdLmJvdW5kcy54IC0gZGlmZldpZHRoIC8gMik7XG4gICAgICB9XG4gICAgICByZWN0YW5nbGUud2lkdGggPSBldmVudC52YWx1ZTtcbiAgICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICAgIHRoaXMucmVnaW9uc0NvcHkgPSB0aGlzLmRlZXBDbG9uZSh0aGlzLnJlZ2lvbnMpO1xuICAgIH1cbiAgfVxuICBoZWlnaHRSZWN0VXBkYXRlKHJlZ2lvbjogUmVnaW9uLCBldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50LnZhbHVlID09PSBudWxsIHx8IGV2ZW50LnZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBjb25zdCByZWN0YW5nbGUgPSByZWdpb24uYm91bmRzO1xuICAgIGlmIChyZWN0YW5nbGUgJiYgcmVjdGFuZ2xlIGluc3RhbmNlb2YgUmVjdGFuZ2xlKSB7XG4gICAgICBjb25zdCByZWcgPSB0aGlzLnJlZ2lvbnNDb3B5LmZpbHRlcigoZWxlbWVudDogUmVnaW9uKSA9PiBlbGVtZW50LmlkID09PSByZWdpb24uaWQpO1xuICAgICAgaWYgKHJlZy5sZW5ndGgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IG9sZEhlaWdodCA9IHJlZ1swXS5ib3VuZHMuaGVpZ2h0O1xuICAgICAgICBjb25zdCBkaWZmSGVpZ2h0ID0gZXZlbnQudmFsdWUgLSBvbGRIZWlnaHQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZWN0YW5nbGUueSA9IE1hdGgucm91bmQocmVnWzBdLmJvdW5kcy55IC0gZGlmZkhlaWdodCAvIDIpO1xuICAgICAgfVxuICAgICAgcmVjdGFuZ2xlLmhlaWdodCA9IGV2ZW50LnZhbHVlO1xuICAgICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICAgICAgdGhpcy5yZWdpb25zQ29weSA9IHRoaXMuZGVlcENsb25lKHRoaXMucmVnaW9ucyk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiB7IGZpcnN0PzogbnVtYmVyOyByb3dzPzogbnVtYmVyIH0pIHtcbiAgICB0aGlzLnBhZ2luYXRvckZpcnN0ID0gZXZlbnQuZmlyc3QgPz8gMDtcbiAgICB0aGlzLnBhZ2luYXRvclJvd3MgPSBldmVudC5yb3dzID8/IHRoaXMucGFnaW5hdG9yUm93cztcbiAgfVxuXG4gIC8qKiBTZWxlY3QgZXZlcnkgcmVnaW9uIGluIHRoZSB0YWJsZSAoYW5kIGhpZ2hsaWdodCB0aGVtIG9uIHRoZSBkaWFncmFtKS4gKi9cbiAgc2VsZWN0QWxsUmVnaW9ucygpIHtcbiAgICB0aGlzLnNlbGVjdGVkUmVnaW9ucyA9IFsuLi50aGlzLnJlZ2lvbnNdO1xuICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkKCk7XG4gIH1cblxuICBkZWxldGVTZWxlY3RlZFJlZ2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSZWdpb25zICYmIHRoaXMuc2VsZWN0ZWRSZWdpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEZpbHRlciBieSBpZCDigJQgb2JqZWN0IGlkZW50aXR5IGlzbid0IHJlbGlhYmxlIGFjcm9zcyByZS1wYXJzZXMsXG4gICAgICAvLyBhbmQgbmFtZSBpcyBhIHVzZXItZWRpdGFibGUgbGFiZWwgdGhhdCBtYXkgY29sbGlkZS5cbiAgICAgIGNvbnN0IHJlbW92ZWQgPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRSZWdpb25zLm1hcCgocikgPT4gci5pZCkpO1xuICAgICAgdGhpcy5yZWdpb25zID0gdGhpcy5yZWdpb25zLmZpbHRlcigocikgPT4gIXJlbW92ZWQuaGFzKHIuaWQpKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWdpb25zID0gW107XG4gICAgICB0aGlzLmNsYW1wUGFnaW5hdG9yRmlyc3QoKTtcbiAgICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICAgIC8vIFN5bmMgdGhlIGNsZWFyZWQgc2VsZWN0aW9uIHdpdGggdGhlIHBsb3QncyBoaWdobGlnaHQgc3RhdGUuXG4gICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQWxsUmVnaW9ucygpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBrZXk6ICdwb3NpdGlvbkRpYWxvZycsXG4gICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVnaW9ucz8nLFxuICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVnaW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUmVnaW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnBhZ2luYXRvckZpcnN0ID0gMDtcbiAgICAgICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZCgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFBvbHlnb24oKSB7XG4gICAgY29uc3QgcmVnaW9uID0gbmV3IFJlZ2lvbigpO1xuICAgIHJlZ2lvbi5ib3VuZHMgPSBuZXcgUG9seWdvbigpO1xuICAgIHJlZ2lvbi5sYWJlbCA9IHRoaXMuYWN0aXZlQ2xhc3MgPz8gJ1JlZ2lvbic7XG4gICAgcmVnaW9uLmJvdW5kcy55cG9pbnRzID0gWzAsIDAsIDBdO1xuICAgIHJlZ2lvbi5ib3VuZHMueHBvaW50cyA9IFswLCAwLCAwXTtcbiAgICByZWdpb24uYm91bmRzLmNvb3JkaW5hdGVzID0gW1xuICAgICAgWzAsIDBdLFxuICAgICAgWzAsIDBdLFxuICAgICAgWzAsIDBdLFxuICAgIF07XG4gICAgcmVnaW9uLmJvdW5kcy5ucG9pbnRzID0gMztcbiAgICB0aGlzLnJlZ2lvbnMgPSBbLi4udGhpcy5yZWdpb25zLCByZWdpb25dO1xuICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICB0aGlzLnJlZ2lvbnNDb3B5ID0gdGhpcy5kZWVwQ2xvbmUodGhpcy5yZWdpb25zKTtcbiAgfVxuICBkZWxldGVSZWdpb24oc2hhcGVJZHg6IG51bWJlcikge1xuICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLnJlZ2lvbnNbc2hhcGVJZHhdO1xuICAgIHRoaXMucmVnaW9ucyA9IHRoaXMucmVnaW9ucy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IHNoYXBlSWR4KTtcbiAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJlZ2lvbnMgPSB0aGlzLnNlbGVjdGVkUmVnaW9ucy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IHJlbW92ZWQuaWQpO1xuICAgIH1cbiAgICB0aGlzLmNsYW1wUGFnaW5hdG9yRmlyc3QoKTtcbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gICAgLy8gUmUtZW1pdCB0aGUgKHBvc3NpYmx5IHRyaW1tZWQpIHNlbGVjdGlvbiBzbyB0aGUgcGxvdCdzIGhpZ2hsaWdodCBzdGF5c1xuICAgIC8vIGluIHN5bmMgd2l0aCB3aGF0J3Mgc3RpbGwgaW4gdGhlIHRhYmxlLlxuICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGNsYW1wUGFnaW5hdG9yRmlyc3QoKSB7XG4gICAgY29uc3QgbWF4Rmlyc3QgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLmZsb29yKCh0aGlzLnJlZ2lvbnMubGVuZ3RoIC0gMSkgLyB0aGlzLnBhZ2luYXRvclJvd3MpICogdGhpcy5wYWdpbmF0b3JSb3dzLFxuICAgICk7XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yRmlyc3QgPiBtYXhGaXJzdCkge1xuICAgICAgdGhpcy5wYWdpbmF0b3JGaXJzdCA9IG1heEZpcnN0O1xuICAgIH1cbiAgfVxuICBjaGFuZ2VTaG93U2hhcGVMYWJlbChzaG93TGFiZWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gIH1cblxuICBpc0VkaXRpbmdMYWJlbChyZWdpb246IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdMYWJlbFJlZ2lvbnMuaGFzKHJlZ2lvbik7XG4gIH1cblxuICBzdGFydEVkaXRMYWJlbChyZWdpb246IGFueSwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTsgLy8gZG9uJ3QgdG9nZ2xlIHJvdyBzZWxlY3Rpb25cbiAgICB0aGlzLmVkaXRpbmdMYWJlbFJlZ2lvbnMuYWRkKHJlZ2lvbik7XG4gIH1cblxuICBzdG9wRWRpdExhYmVsKHJlZ2lvbjogYW55LCBjb21taXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5lZGl0aW5nTGFiZWxSZWdpb25zLmRlbGV0ZShyZWdpb24pO1xuICAgIGlmIChjb21taXQpIHtcbiAgICAgIHRoaXMubGFiZWxSZWdpb25VcGRhdGUocmVnaW9uLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBpc1JlY3RhbmdsZShyZWdpb246IFJlZ2lvbikge1xuICAgIHJldHVybiByZWdpb24uYm91bmRzIGluc3RhbmNlb2YgUmVjdGFuZ2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lvbiBhcmVhIGZvciBkaXNwbGF5OiBpbiDCtW3CsiAob3IgbW3Csikgd2hlbiB0aGUgaW1hZ2UgcmVwb3J0cyBhIHBoeXNpY2FsXG4gICAqIHBpeGVsIHNpemUsIG90aGVyd2lzZSBpbiBweMKyLiBFbXB0eSBzdHJpbmcgZm9yIGRlZ2VuZXJhdGUgcmVnaW9ucy5cbiAgICovXG4gIHJlZ2lvbkFyZWEocmVnaW9uOiBSZWdpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHB4ID0gdGhpcy5hcmVhSW5QaXhlbHMocmVnaW9uKTtcbiAgICBpZiAocHggPD0gMCkgcmV0dXJuICcnO1xuICAgIGlmICh0aGlzLm1wcFggJiYgdGhpcy5tcHBZICYmIHRoaXMubXBwWCA+IDAgJiYgdGhpcy5tcHBZID4gMCkge1xuICAgICAgY29uc3QgdW0yID0gcHggKiB0aGlzLm1wcFggKiB0aGlzLm1wcFk7XG4gICAgICByZXR1cm4gdW0yID49IDFlNiA/IGAke3RoaXMuZm10QXJlYSh1bTIgLyAxZTYpfSBtbcKyYCA6IGAke3RoaXMuZm10QXJlYSh1bTIpfSDCtW3CsmA7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLmZtdEFyZWEocHgpfSBweMKyYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaG9vc2UgdGhlIHBoeXNpY2FsIHBpeGVsIHNpemUgKMK1bS9waXhlbCkgZm9yIGFyZWEgZGlzcGxheSBmcm9tIHRoZSBpbWFnZVxuICAgKiBtZXRhLiBUaGUgY2FsaWJyYXRpb24gbWF5IHNpdCBvbiBhbnkgY2hhbm5lbCBlbnRyeSDigJQgbm90IG5lY2Vzc2FyaWx5IFswXSDigJRcbiAgICogc28gcGljayB0aGUgZmlyc3QgZW50cnkgd2l0aCBhIHBvc2l0aXZlIG1wcFggKG1pcnJvcnNcbiAgICogUGxvdGx5U2VydmljZS5jdXJyZW50TXBwKS4gRmFsbHMgYmFjayB0byBzcXVhcmUgcGl4ZWxzIChtcHBZID0gbXBwWCkgd2hlblxuICAgKiBvbmx5IG9uZSBheGlzIGlzIHJlcG9ydGVkLCBzbyBhIHNjYWxlZCBpbWFnZSBzaG93cyDCtW3Csi9tbcKyIHJhdGhlciB0aGFuIHB4wrIuXG4gICAqL1xuICBwcml2YXRlIHBpY2tNcHAobWV0YTogSUltYWdlTWV0YWRhdGFbXSB8IHVuZGVmaW5lZCk6IHsgbXBwWD86IG51bWJlcjsgbXBwWT86IG51bWJlciB9IHtcbiAgICBjb25zdCBtID0gQXJyYXkuaXNBcnJheShtZXRhKVxuICAgICAgPyAobWV0YS5maW5kKChlKSA9PiBlICYmIChlLm1wcFggPz8gMCkgPiAwKSA/PyBtZXRhWzBdKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbXggPSBtICYmIChtLm1wcFggPz8gMCkgPiAwID8gKG0ubXBwWCBhcyBudW1iZXIpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG15ID0gbSAmJiAobS5tcHBZID8/IDApID4gMCA/IChtLm1wcFkgYXMgbnVtYmVyKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyBtcHBYOiBteCwgbXBwWTogbXkgPz8gbXggfTtcbiAgfVxuXG4gIC8qKiBQaXhlbCBhcmVhOiB3aWR0aMK3aGVpZ2h0IGZvciByZWN0YW5nbGVzLCBzaG9lbGFjZSBmb3JtdWxhIGZvciBwb2x5Z29ucy5cbiAgICogIEludGVyaW9yIHJpbmdzIChob2xlcykgYXJlIHN1YnRyYWN0ZWQsIHNvIGEgZG9udXQgcmVwb3J0cyB0aGUgYW5udWx1cyBhcmVhLFxuICAgKiAgbm90IHRoZSBmaWxsZWQgZXh0ZXJpb3IgKGppdC11aSM4NSkuICovXG4gIHByaXZhdGUgYXJlYUluUGl4ZWxzKHJlZ2lvbjogUmVnaW9uKTogbnVtYmVyIHtcbiAgICBjb25zdCBiID0gcmVnaW9uLmJvdW5kcztcbiAgICBpZiAoYiBpbnN0YW5jZW9mIFJlY3RhbmdsZSkgcmV0dXJuIE1hdGguYWJzKGIud2lkdGggKiBiLmhlaWdodCk7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBQb2x5Z29uKSByZXR1cm4gdGhpcy5wb2x5Z29uQXJlYShiKTtcbiAgICAvLyBNdWx0aS1wYXJ0IHJlZ2lvbjogc3VtIGVhY2ggcGFydCdzIChleHRlcmlvciDiiJIgaG9sZXMpIGFyZWEgKGppdC11aSM4NSkuXG4gICAgaWYgKGIgaW5zdGFuY2VvZiBNdWx0aVBvbHlnb24pIHtcbiAgICAgIHJldHVybiBiLnBvbHlnb25zLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyB0aGlzLnBvbHlnb25BcmVhKHApLCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKiogUG9seWdvbiBhcmVhOiBleHRlcmlvciBzaG9lbGFjZSBtaW51cyBlYWNoIGludGVyaW9yIHJpbmcgKGhvbGUpLiAqL1xuICBwcml2YXRlIHBvbHlnb25BcmVhKHA6IFBvbHlnb24pOiBudW1iZXIge1xuICAgIGlmICgocC54cG9pbnRzPy5sZW5ndGggPz8gMCkgPCAzKSByZXR1cm4gMDtcbiAgICBsZXQgYSA9IHRoaXMucmluZ0FyZWEocC54cG9pbnRzLCBwLnlwb2ludHMpO1xuICAgIGlmIChwLmhvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcC5ob2xlcykgYSAtPSB0aGlzLnJpbmdBcmVhKHJpbmcubWFwKHB0ID0+IHB0WzBdKSwgcmluZy5tYXAocHQgPT4gcHRbMV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGEpO1xuICB9XG5cbiAgLyoqIEFic29sdXRlIHNob2VsYWNlIGFyZWEgb2YgYSBzaW5nbGUgcmluZy4gKi9cbiAgcHJpdmF0ZSByaW5nQXJlYSh4czogbnVtYmVyW10sIHlzOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgY29uc3QgbiA9IHhzPy5sZW5ndGggPz8gMDtcbiAgICBpZiAobiA8IDMpIHJldHVybiAwO1xuICAgIGxldCBhID0gMDtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IG4gLSAxOyBpIDwgbjsgaiA9IGkrKykgYSArPSAoeHNbal0gKyB4c1tpXSkgKiAoeXNbal0gLSB5c1tpXSk7XG4gICAgcmV0dXJuIE1hdGguYWJzKGEgLyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgZm10QXJlYShuOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiAobiA+PSAxMDAwID8gTWF0aC5yb3VuZChuKSA6IE1hdGgucm91bmQobiAqIDEwMCkgLyAxMDApLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgcm91bmRzIGFsbCB0aGUgcmVjdGFuZ2xlIHJlZ2lvbnMgbGVuZ3RocyB0byBtdWx0aXBsZSBvZiA1MTJcbiAgICovXG4gIHJvdW5kUmVjdGFuZ2xlTGVuZ3RocygpIHtcbiAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiB0aGlzLnJlZ2lvbnMpIHtcbiAgICAgIGlmIChyZWdpb24uYm91bmRzIGluc3RhbmNlb2YgUmVjdGFuZ2xlKSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSByZWdpb24uYm91bmRzO1xuICAgICAgICByZWN0LmhlaWdodCA9IE1hdGgucm91bmQocmVjdC5oZWlnaHQgLyA1MTIpICogNTEyO1xuICAgICAgICByZWN0LndpZHRoID0gTWF0aC5yb3VuZChyZWN0LndpZHRoIC8gNTEyKSAqIDUxMjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3Aga2V5IGFycm93IGV2ZW50IHByb3BhZ2F0aW9uXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgZGlzYWJsZUFycm93S2V5cyhldmVudDogYW55KSB7XG4gICAgaWYgKFxuICAgICAgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fFxuICAgICAgZXZlbnQua2V5ID09PSAnRG93bicgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8XG4gICAgICBldmVudC5rZXkgPT09ICdVcCcgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0xlZnQnIHx8XG4gICAgICBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JyB8fFxuICAgICAgZXZlbnQua2V5ID09PSAnUmlnaHQnXG4gICAgKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTaGFwZUNvbG9yKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNoYXBlQ29sb3IgPSBldmVudC52YWx1ZTtcbiAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiB0aGlzLnJlZ2lvbnMpIHtcbiAgICAgIGlmIChyZWdpb24ubGFiZWwgPT09IHRoaXMuc2VsZWN0ZWRMYWJlbENvbG9yICYmIHRoaXMubGFiZWxDb2xvcnMuaGFzKHJlZ2lvbi5sYWJlbCkpIHtcbiAgICAgICAgdGhpcy5sYWJlbENvbG9ycy5zZXQocmVnaW9uLmxhYmVsLCB0aGlzLnNoYXBlQ29sb3IpO1xuICAgICAgICByZWdpb24uY29sb3IgPSB0aGlzLnNoYXBlQ29sb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IodGhpcy5maWxsQ29sb3IpO1xuICB9XG5cbiAgc2hvd0hlbHAoKSB7XG4gICAgdGhpcy5kaXNwbGF5SGVscERpYWxvZyA9IHRydWU7XG4gIH1cblxuICAvKiogT3BlbiB0aGUgY29sb3VyIGRpYWxvZyBmb3IgdGhlIGN1cnJlbnRseS1zZWxlY3RlZCByZWdpb24ocyksIGJ1aWxkaW5nIG9uZVxuICAgKiAgY29sb3VyIHBpY2tlciBwZXIgdW5pcXVlIGNsYXNzIGluIHRoZSBzZWxlY3Rpb24uIEVhY2ggcGlja2VyIGlzIHNlZWRlZCB3aXRoXG4gICAqICB0aGUgY2xhc3MncyBjdXJyZW50IGNvbG91ciAodGhlIGxhYmVs4oaSY29sb3VyIG1hcCwgZmFsbGluZyBiYWNrIHRvIHRoZSBmaXJzdFxuICAgKiAgc2VsZWN0ZWQgcmVnaW9uIG9mIHRoYXQgY2xhc3MpLiAqL1xuICBvcGVuQ29sb3JEaWFsb2coKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUmVnaW9ucz8ubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3Qgc2VlZEJ5TGFiZWwgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHRoaXMuc2VsZWN0ZWRSZWdpb25zKSB7XG4gICAgICBjb25zdCBsYWJlbCA9IHJlZ2lvbi5sYWJlbD8udHJpbSgpID8/ICcnO1xuICAgICAgaWYgKHNlZWRCeUxhYmVsLmhhcyhsYWJlbCkpIGNvbnRpbnVlO1xuICAgICAgc2VlZEJ5TGFiZWwuc2V0KFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgKGxhYmVsID8gdGhpcy5sYWJlbENvbG9ycy5nZXQobGFiZWwpIDogdW5kZWZpbmVkKSA/PyByZWdpb24uY29sb3IgPz8gdGhpcy5zaGFwZUNvbG9yLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jbGFzc0NvbG9yRWRpdHMgPSBbLi4uc2VlZEJ5TGFiZWxdLm1hcCgoW2xhYmVsLCBjb2xvcl0pID0+ICh7IGxhYmVsLCBjb2xvciB9KSk7XG4gICAgdGhpcy5zaG93Q29sb3JEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgLyoqIEFwcGx5IGVhY2ggY2xhc3MncyBjaG9zZW4gY29sb3VyIHRvIHRoZSBzZWxlY3RlZCByZWdpb25zIG9mIHRoYXQgY2xhc3MgYW5kXG4gICAqICBjb21taXQgbGl2ZS4gUmVtZW1iZXJzIHRoZSBjb2xvdXIgcGVyIGNsYXNzIHNvIHNhbWUtY2xhc3MgcmVnaW9ucyBhZGRlZFxuICAgKiAgbGF0ZXIgbWF0Y2guICovXG4gIGFwcGx5Q29sb3JUb1NlbGVjdGVkKCkge1xuICAgIGNvbnN0IGNvbG9yQnlMYWJlbCA9IG5ldyBNYXAodGhpcy5jbGFzc0NvbG9yRWRpdHMubWFwKChlKSA9PiBbZS5sYWJlbCwgZS5jb2xvcl0pKTtcbiAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiB0aGlzLnNlbGVjdGVkUmVnaW9ucyA/PyBbXSkge1xuICAgICAgY29uc3QgbGFiZWwgPSByZWdpb24ubGFiZWw/LnRyaW0oKSA/PyAnJztcbiAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JCeUxhYmVsLmdldChsYWJlbCk7XG4gICAgICBpZiAoIWNvbG9yKSBjb250aW51ZTtcbiAgICAgIHJlZ2lvbi5jb2xvciA9IGNvbG9yO1xuICAgICAgcmVnaW9uLmNvbG9yT3ZlcnJpZGRlbiA9IHRydWU7IC8vIGV4cGxpY2l0IGNvbG91ciDigJQgcHJlc2VydmUgYWdhaW5zdCBwcmVzZXQgKHJlKWFwcGx5IChqaXQtdWkjNzApXG4gICAgICBpZiAobGFiZWwpIHRoaXMubGFiZWxDb2xvcnMuc2V0KGxhYmVsLCBjb2xvcik7XG4gICAgfVxuICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICB0aGlzLnNob3dDb2xvckRpYWxvZyA9IGZhbHNlO1xuICB9XG5cbiAgLy8g4pSA4pSAIGFubm90YXRpb24tY2xhc3MgcHJlc2V0cyAoaml0LXVpIzcwKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmVzb2x2ZSB0aGUgZGlzcGxheSBjb2xvdXIgZm9yIGEgY2xhc3MgbmFtZSAocHJlc2V0IGNvbG91ciBvciBkZXRlcm1pbmlzdGljIGZhbGxiYWNrKS4gKi9cbiAgY29sb3JGb3JOYW1lKG5hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lID8gY29sb3JGb3JMYWJlbChuYW1lLCB0aGlzLnByZXNldFNldCkgOiB0aGlzLnNoYXBlQ29sb3I7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGV2ZXJ5IGNsYXNzIGxhYmVsIHByZXNlbnQgaW4gdGhlIGxvYWRlZCByZWdpb25zIGV4aXN0cyBpbiB0aGUgcHJlc2V0XG4gICAqIGxpc3QsIGF1dG8tYWRkaW5nIGFueSB0aGF0IGFyZSBtaXNzaW5nICh1c2luZyB0aGUgcmVnaW9uJ3MgYWxyZWFkeS1yZXNvbHZlZFxuICAgKiBjb2xvdXIpLiBUaGlzIG1ha2VzIGNsYXNzZXMgY2FycmllZCBpbiBhIGxvYWRlZC9pbXBvcnRlZCBHZW9KU09OIHNob3cgdXAgYXNcbiAgICogY2hpcHMgKyBDbGFzcy1kcm9wZG93biBvcHRpb25zIChhIHAtZHJvcGRvd24gY2FuJ3QgZGlzcGxheSBhIHZhbHVlIHRoYXQgaXNuJ3RcbiAgICogYW4gb3B0aW9uKSBhbmQgbGV0cyB0aGUgdXNlciBtYW5hZ2UgdGhlbS4gVGhlIHBsYWNlaG9sZGVyICdsZWdlbmQnIGFuZCBlbXB0eVxuICAgKiBsYWJlbHMgYXJlIGlnbm9yZWQuIChqaXQtdWkjNzApXG4gICAqL1xuICBwcml2YXRlIHN5bmNDbGFzc2VzRnJvbVJlZ2lvbnMocmVnaW9uczogUmVnaW9uW10pOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5wcmVzZXRTZXQubWF0Y2hNb2RlID09PSAnbm9ybWFsaXplZCc7XG4gICAgY29uc3Qga2V5T2YgPSAobDogc3RyaW5nKSA9PiAobm9ybWFsaXplZCA/IGwudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiBsKTtcbiAgICBjb25zdCBrbm93biA9IG5ldyBTZXQodGhpcy5wcmVzZXRTZXQuY2xhc3Nlcy5tYXAoKGMpID0+IGtleU9mKGMubmFtZSkpKTtcbiAgICBjb25zdCBhZGRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgciBvZiByZWdpb25zKSB7XG4gICAgICBjb25zdCBsYWJlbCA9IHIubGFiZWw/LnRyaW0oKTtcbiAgICAgIGlmICghbGFiZWwgfHwgbGFiZWwgPT09ICdsZWdlbmQnKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGsgPSBrZXlPZihsYWJlbCk7XG4gICAgICBpZiAoa25vd24uaGFzKGspIHx8IGFkZGVkLmhhcyhrKSkgY29udGludWU7XG4gICAgICBhZGRlZC5hZGQoayk7XG4gICAgICB0aGlzLnJlZ2lvbkFwaS51cHNlcnRDbGFzcyh7XG4gICAgICAgIG5hbWU6IGxhYmVsLFxuICAgICAgICBjb2xvcjogci5jb2xvciB8fCBjb2xvckZvckxhYmVsKGxhYmVsLCB0aGlzLnByZXNldFNldCksXG4gICAgICAgIHNvdXJjZTogJ2F1dG8nLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIERvY2tlZCBDbGFzc2VzIHBhbmVsIChqaXQtdWkjNzApIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBSZWJ1aWxkIHRoZSBwZXItY2xhc3MgcmVnaW9uIGNvdW50cyBzaG93biBpbiB0aGUgcGFuZWwuICovXG4gIHByaXZhdGUgcmVjb21wdXRlQ2xhc3NDb3VudHMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMucHJlc2V0U2V0Lm1hdGNoTW9kZSA9PT0gJ25vcm1hbGl6ZWQnO1xuICAgIGNvbnN0IGNvdW50cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVnaW9ucykge1xuICAgICAgaWYgKCFyLmxhYmVsKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGsgPSBub3JtYWxpemVkID8gci5sYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSA6IHIubGFiZWw7XG4gICAgICBjb3VudHMuc2V0KGssIChjb3VudHMuZ2V0KGspID8/IDApICsgMSk7XG4gICAgfVxuICAgIHRoaXMuY2xhc3NDb3VudHMgPSBjb3VudHM7XG4gICAgdGhpcy51cGRhdGVEaXNwbGF5Q2xhc3NlcygpO1xuICB9XG5cbiAgLyoqIFJlYnVpbGQgdGhlIHBhbmVsJ3MgZGlzcGxheSBvcmRlciDigJQgbW9zdC11c2VkIGNsYXNzZXMgZmlyc3QsIHRoZW4gYnkgbmFtZS4gKi9cbiAgcHJpdmF0ZSB1cGRhdGVEaXNwbGF5Q2xhc3NlcygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlDbGFzc2VzID0gWy4uLnRoaXMucHJlc2V0U2V0LmNsYXNzZXNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGQgPSB0aGlzLmNsYXNzQ291bnQoYi5uYW1lKSAtIHRoaXMuY2xhc3NDb3VudChhLm5hbWUpO1xuICAgICAgcmV0dXJuIGQgIT09IDAgPyBkIDogYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiB0cmFja0J5IGZvciB0aGUgY2xhc3Mgcm93cyBzbyByZS1zb3J0aW5nIGRvZXNuJ3QgcmUtY3JlYXRlIHRoZSBwaWNrZXJzLiAqL1xuICB0cmFja0J5Q2xhc3NOYW1lID0gKF86IG51bWJlciwgYzogQ2xhc3NQcmVzZXQpOiBzdHJpbmcgPT4gYy5uYW1lO1xuXG4gIC8qKiBOdW1iZXIgb2YgcmVnaW9ucyBjdXJyZW50bHkgdXNpbmcgYSBjbGFzcyAoa2V5ZWQgYnkgdGhlIGFjdGl2ZSBtYXRjaCBtb2RlKS4gKi9cbiAgY2xhc3NDb3VudChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGsgPSB0aGlzLnByZXNldFNldC5tYXRjaE1vZGUgPT09ICdub3JtYWxpemVkJyA/IG5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiBuYW1lO1xuICAgIHJldHVybiB0aGlzLmNsYXNzQ291bnRzLmdldChrKSA/PyAwO1xuICB9XG5cbiAgLyoqIFJlY29sb3VyIGEgY2xhc3MgZnJvbSBpdHMgcGFuZWwgc3dhdGNoIGFuZCByZXBhaW50IGl0cyAobm9uLW92ZXJyaWRkZW4pIHJlZ2lvbnMuICovXG4gIHNldENsYXNzQ29sb3IobmFtZTogc3RyaW5nLCBjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFjb2xvcikgcmV0dXJuO1xuICAgIHRoaXMucmVnaW9uQXBpLnNldENsYXNzaWZpY2F0aW9uQ29sb3IobmFtZSwgY29sb3IpO1xuICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgfVxuXG4gIC8qKiBUb29sdGlwIGZvciBhIGNsYXNzJ3MgZGVsZXRlIGJ1dHRvbiBpbiB0aGUgcGFuZWwuICovXG4gIGRlbGV0ZUNsYXNzVG9vbHRpcChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGluVXNlID0gdGhpcy5jbGFzc0NvdW50KG5hbWUpID4gMDtcbiAgICBpZiAobmFtZSA9PT0gdGhpcy5kZWZhdWx0Q2xhc3NOYW1lICYmIGluVXNlKSByZXR1cm4gJ1RoZSBkZWZhdWx0IGNsYXNzIGNhbm5vdCBiZSByZW1vdmVkIHdoaWxlIGluIHVzZSc7XG4gICAgcmV0dXJuIGluVXNlID8gJ1JlbW92ZSBjbGFzcyDigJQgaXRzIHJlZ2lvbnMgcmV2ZXJ0IHRvIFJlZ2lvbicgOiAnUmVtb3ZlIGNsYXNzJztcbiAgfVxuXG4gIC8qKiBSZW1vdmUgYSBjbGFzcy4gQW55IHJlZ2lvbnMgc3RpbGwgdXNpbmcgaXQgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0XG4gICAqICBcIlJlZ2lvblwiIGNsYXNzLCBzbyB0aGV5IGFyZW4ndCBvcnBoYW5lZCAoYW5kIHRoZSBjbGFzcyBpc24ndCBpbW1lZGlhdGVseVxuICAgKiAgcmUtYWRkZWQgZnJvbSBpdHMgcmVnaW9ucyBieSBzeW5jQ2xhc3Nlc0Zyb21SZWdpb25zKS4gKi9cbiAgZGVsZXRlQ2xhc3MobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZWFzc2lnblJlZ2lvbnNUb0RlZmF1bHRDbGFzcyhbbmFtZV0pO1xuICAgIHRoaXMucmVnaW9uQXBpLnJlbW92ZUNsYXNzKG5hbWUpO1xuICAgIGlmICh0aGlzLmFjdGl2ZUNsYXNzID09PSBuYW1lKSB0aGlzLmFjdGl2ZUNsYXNzID0gbnVsbDtcbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gIH1cblxuICAvKiogUmVnaW9ucyBsYWJlbGxlZCB3aXRoIGFueSBvZiBgcmVtb3ZlZE5hbWVzYCByZXZlcnQgdG8gdGhlIGRlZmF1bHRcbiAgICogIHtAbGluayBkZWZhdWx0Q2xhc3NOYW1lfSAoXCJSZWdpb25cIik6IGl0cyBjbGFzcyBjb2xvdXIsIG92ZXJyaWRlIGNsZWFyZWQuXG4gICAqICBTa2lwcyB0aGUgZGVmYXVsdCBpdHNlbGYgc28gZGVsZXRpbmcgXCJSZWdpb25cIiBjYW4ndCBzZWxmLXJlYXNzaWduLiAoaml0LXVpIzcwKSAqL1xuICBwcml2YXRlIHJlYXNzaWduUmVnaW9uc1RvRGVmYXVsdENsYXNzKHJlbW92ZWROYW1lczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBub3JtID0gdGhpcy5wcmVzZXRTZXQubWF0Y2hNb2RlID09PSAnbm9ybWFsaXplZCc7XG4gICAgY29uc3Qga2V5T2YgPSAoczogc3RyaW5nKSA9PiAobm9ybSA/IHMudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiBzKTtcbiAgICBjb25zdCByZW1vdmVkID0gbmV3IFNldChyZW1vdmVkTmFtZXMubWFwKGtleU9mKSk7XG4gICAgcmVtb3ZlZC5kZWxldGUoa2V5T2YodGhpcy5kZWZhdWx0Q2xhc3NOYW1lKSk7XG4gICAgaWYgKCFyZW1vdmVkLnNpemUpIHJldHVybjtcbiAgICBjb25zdCBjb2xvciA9IGNvbG9yRm9yTGFiZWwodGhpcy5kZWZhdWx0Q2xhc3NOYW1lLCB0aGlzLnByZXNldFNldCk7XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVnaW9ucykge1xuICAgICAgaWYgKHIubGFiZWwgJiYgcmVtb3ZlZC5oYXMoa2V5T2Yoci5sYWJlbCkpKSB7XG4gICAgICAgIHIubGFiZWwgPSB0aGlzLmRlZmF1bHRDbGFzc05hbWU7XG4gICAgICAgIHIuY29sb3JPdmVycmlkZGVuID0gZmFsc2U7XG4gICAgICAgIHIuY29sb3IgPSBjb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogU3RhbXAgYSBjbGFzcyAoYW5kIGl0cyBwcmVzZXQvZmFsbGJhY2sgY29sb3VyKSBvbnRvIG9uZSByZWdpb24gZnJvbSB0aGUgQ2xhc3NcbiAgICogIGRyb3Bkb3duOyBjaG9vc2luZyBhIGNsYXNzIG9wdHMgdGhlIHJlZ2lvbiBiYWNrIGludG8gdGhlIHByZXNldCBjb2xvdXIuICovXG4gIGFwcGx5UHJlc2V0VG9SZWdpb24ocmVnaW9uOiBSZWdpb24sIGNsYXNzTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IChjbGFzc05hbWUgPz8gJycpLnRyaW0oKTtcbiAgICByZWdpb24ubGFiZWwgPSBuYW1lO1xuICAgIHJlZ2lvbi5jb2xvck92ZXJyaWRkZW4gPSBmYWxzZTtcbiAgICBpZiAobmFtZSkgcmVnaW9uLmNvbG9yID0gY29sb3JGb3JMYWJlbChuYW1lLCB0aGlzLnByZXNldFNldCk7XG4gICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICB9XG5cbiAgLyoqIE1ha2UgYSBjbGFzcyBhY3RpdmUgKHVzZWQgZm9yIG5ldyByZWdpb25zKSBhbmQsIGlmIHJvd3MgYXJlIHNlbGVjdGVkLCBhcHBseVxuICAgKiAgaXQgdG8gdGhlbSBpbiBvbmUgY29tbWl0LiAqL1xuICBzZWxlY3RBY3RpdmVDbGFzcyhuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNsYXNzID0gbmFtZTtcbiAgICB0aGlzLmFwcGx5Q2xhc3NUb1NlbGVjdGVkKG5hbWUpO1xuICB9XG5cbiAgLyoqIEFwcGx5IGEgY2xhc3MgKGxhYmVsICsgcHJlc2V0L2ZhbGxiYWNrIGNvbG91cikgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGFuZCBjb21taXQuICovXG4gIHByaXZhdGUgYXBwbHlDbGFzc1RvU2VsZWN0ZWQobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkUmVnaW9ucyA/PyBbXTtcbiAgICBpZiAoIXNlbGVjdGVkLmxlbmd0aCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgciBvZiBzZWxlY3RlZCkge1xuICAgICAgci5sYWJlbCA9IG5hbWU7XG4gICAgICByLmNvbG9yT3ZlcnJpZGRlbiA9IGZhbHNlO1xuICAgICAgci5jb2xvciA9IGNvbG9yRm9yTGFiZWwobmFtZSwgdGhpcy5wcmVzZXRTZXQpO1xuICAgIH1cbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gIH1cblxuICAvKiogXCJFZGl0IGNsYXNzIG9uIHNlbGVjdGVkIHJvd3NcIiBwb3B1cCDigJQgYXBwbHkgdGhlIGNob3NlbiBleGlzdGluZyBjbGFzcy4gKi9cbiAgYXBwbHlCdWxrQ2xhc3MoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmJ1bGtDbGFzcykgcmV0dXJuO1xuICAgIHRoaXMuYXBwbHlDbGFzc1RvU2VsZWN0ZWQodGhpcy5idWxrQ2xhc3MpO1xuICAgIHRoaXMub3ZlcmxheVBhbmVsPy5oaWRlKCk7XG4gIH1cblxuICAvKiogXCJFZGl0IGNsYXNzIG9uIHNlbGVjdGVkIHJvd3NcIiBwb3B1cCDigJQgYWRkIGEgbmV3IGNsYXNzIGFuZCBzZXQgaXQgb24gdGhlIHNlbGVjdGlvbi4gKi9cbiAgYWRkQW5kQXBwbHlCdWxrQ2xhc3MoKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMubmV3QnVsa0NsYXNzLnRyaW0oKTtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcbiAgICBjb25zdCBub3JtID0gdGhpcy5wcmVzZXRTZXQubWF0Y2hNb2RlID09PSAnbm9ybWFsaXplZCc7XG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5wcmVzZXRTZXQuY2xhc3Nlcy5zb21lKChjKSA9PlxuICAgICAgbm9ybSA/IGMubmFtZS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpIDogYy5uYW1lID09PSBuYW1lLFxuICAgICk7XG4gICAgaWYgKCFleGlzdHMpIHtcbiAgICAgIHRoaXMucmVnaW9uQXBpLnVwc2VydENsYXNzKHsgbmFtZSwgY29sb3I6IGNvbG9yRm9yTGFiZWwobmFtZSwgdGhpcy5wcmVzZXRTZXQpLCBzb3VyY2U6ICd1c2VyJyB9KTtcbiAgICB9XG4gICAgdGhpcy5hcHBseUNsYXNzVG9TZWxlY3RlZChuYW1lKTtcbiAgICB0aGlzLmJ1bGtDbGFzcyA9IG5hbWU7XG4gICAgdGhpcy5uZXdCdWxrQ2xhc3MgPSAnJztcbiAgICB0aGlzLm92ZXJsYXlQYW5lbD8uaGlkZSgpO1xuICB9XG5cbiAgLy8g4pSA4pSAIE1hbmFnZS1jbGFzc2VzIGRpYWxvZyDilIDilIBcbiAgb3Blbk1hbmFnZURpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLnByZXNldERyYWZ0ID0gdGhpcy5jbG9uZVByZXNldFNldCh0aGlzLnByZXNldFNldCk7XG4gICAgdGhpcy5zaG93TWFuYWdlRGlhbG9nID0gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGNsb25lUHJlc2V0U2V0KHM6IFByZXNldFNldCk6IFByZXNldFNldCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYXNzZXM6IChzLmNsYXNzZXMgPz8gW10pLm1hcCgoYykgPT4gKHsgLi4uYyB9KSksXG4gICAgICBmYWxsYmFja1BhbGV0dGU6IFsuLi4ocy5mYWxsYmFja1BhbGV0dGUgPz8gW10pXSxcbiAgICAgIGF1dG9Qcm9tb3RlOiAhIXMuYXV0b1Byb21vdGUsXG4gICAgICBtYXRjaE1vZGU6IHMubWF0Y2hNb2RlID09PSAnbm9ybWFsaXplZCcgPyAnbm9ybWFsaXplZCcgOiAnZXhhY3QnLFxuICAgIH07XG4gIH1cbiAgYWRkUHJlc2V0Q2xhc3MoKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZXREcmFmdD8uY2xhc3Nlcy5wdXNoKHsgbmFtZTogJycsIGNvbG9yOiAnIzg4ODg4OCcsIHNvdXJjZTogJ3VzZXInIH0pO1xuICB9XG4gIHJlbW92ZVByZXNldENsYXNzKGk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucHJlc2V0RHJhZnQ/LmNsYXNzZXMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGFkZEZhbGxiYWNrQ29sb3IoKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZXREcmFmdD8uZmFsbGJhY2tQYWxldHRlLnB1c2goJyM4ODg4ODgnKTtcbiAgfVxuICByZW1vdmVGYWxsYmFja0NvbG9yKGk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucHJlc2V0RHJhZnQ/LmZhbGxiYWNrUGFsZXR0ZS5zcGxpY2UoaSwgMSk7XG4gIH1cbiAgLyoqIENvbW1pdCB0aGUgZHJhZnQ6IGRyb3AgYmxhbmsvZHVwbGljYXRlIG5hbWVzLCBwZXJzaXN0LCBhbmQgcmVjb2xvdXJcbiAgICogIG5vbi1vdmVycmlkZGVuIHJlZ2lvbnMgd2l0aCB0aGUgdXBkYXRlZCBwcmVzZXRzLiAqL1xuICBhcHBseU1hbmFnZURpYWxvZyhjbG9zZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcmVzZXREcmFmdCkgcmV0dXJuO1xuICAgIC8vIERlLWR1cGxpY2F0ZSB1c2luZyB0aGUgYWN0aXZlIG1hdGNoIG1vZGUncyBrZXkgc28gbm9ybWFsaXplZCBtb2RlIGNhbid0IGtlZXBcbiAgICAvLyBib3RoIFwiVHVtb3JcIiBhbmQgXCJ0dW1vclwiICh3aGljaCB3b3VsZCBjb2xsaWRlIGF0IHJ1bnRpbWUgaW4gZmluZFByZXNldCgpKS5cbiAgICBjb25zdCBub3JtID0gdGhpcy5wcmVzZXREcmFmdC5tYXRjaE1vZGUgPT09ICdub3JtYWxpemVkJztcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgY2xhc3NlczogQ2xhc3NQcmVzZXRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLnByZXNldERyYWZ0LmNsYXNzZXMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSAoYy5uYW1lID8/ICcnKS50cmltKCk7XG4gICAgICBjb25zdCBrZXkgPSBub3JtID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZTtcbiAgICAgIGlmICghbmFtZSB8fCBzZWVuLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICBjbGFzc2VzLnB1c2goeyAuLi5jLCBuYW1lIH0pO1xuICAgIH1cbiAgICB0aGlzLnByZXNldERyYWZ0LmNsYXNzZXMgPSBjbGFzc2VzO1xuICAgIC8vIENsYXNzZXMgZHJvcHBlZCBpbiB0aGUgZGlhbG9nOiB0aGVpciByZWdpb25zIHJldmVydCB0byB0aGUgZGVmYXVsdCBcIlJlZ2lvblwiXG4gICAgLy8gY2xhc3MgKGVsc2Ugc3luY0NsYXNzZXNGcm9tUmVnaW9ucyB3b3VsZCBqdXN0IHJlLWFkZCB0aGVtKSAoaml0LXVpIzcwKS5cbiAgICBjb25zdCBrZXlPZiA9IChzOiBzdHJpbmcpID0+IChub3JtID8gcy50cmltKCkudG9Mb3dlckNhc2UoKSA6IHMpO1xuICAgIGNvbnN0IGtlcHQgPSBuZXcgU2V0KGNsYXNzZXMubWFwKChjKSA9PiBrZXlPZihjLm5hbWUpKSk7XG4gICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMucHJlc2V0U2V0LmNsYXNzZXNcbiAgICAgIC5tYXAoKGMpID0+IGMubmFtZSlcbiAgICAgIC5maWx0ZXIoKG4pID0+ICFrZXB0LmhhcyhrZXlPZihuKSkpO1xuICAgIHRoaXMucmVhc3NpZ25SZWdpb25zVG9EZWZhdWx0Q2xhc3MocmVtb3ZlZCk7XG4gICAgdGhpcy5yZWdpb25BcGkuc2V0UHJlc2V0U2V0KHRoaXMucHJlc2V0RHJhZnQpO1xuICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTsgLy8gcmVjb2xvdXIgZXhpc3RpbmcgKG5vbi1vdmVycmlkZGVuKSByZWdpb25zIGZyb20gdGhlIG5ldyBwcmVzZXRzXG4gICAgaWYgKGNsb3NlKSB0aGlzLnNob3dNYW5hZ2VEaWFsb2cgPSBmYWxzZTtcbiAgfVxuICByZXNldFByZXNldHNUb0RlZmF1bHRzKCk6IHZvaWQge1xuICAgIHRoaXMucmVnaW9uQXBpLnJlc2V0UHJlc2V0cygpO1xuICAgIHRoaXMucHJlc2V0RHJhZnQgPSB0aGlzLmNsb25lUHJlc2V0U2V0KHRoaXMucmVnaW9uQXBpLmdldFByZXNldFNldCgpKTtcbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gIH1cbiAgZXhwb3J0UHJlc2V0cygpOiB2b2lkIHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodGhpcy5yZWdpb25BcGkuZ2V0UHJlc2V0U2V0KCksIG51bGwsIDIpO1xuICAgIHNhdmVBcyhuZXcgQmxvYihbanNvbl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pLCAnYW5ub3RhdGlvbi1jbGFzc2VzLmpzb24nKTtcbiAgfVxuICBpbXBvcnRQcmVzZXRzKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07XG4gICAgaWYgKCFmaWxlKSByZXR1cm47XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2V0ID0gSlNPTi5wYXJzZShlLnRhcmdldC5yZXN1bHQpIGFzIFByZXNldFNldDtcbiAgICAgICAgdGhpcy5yZWdpb25BcGkuc2V0UHJlc2V0U2V0KHNldCk7XG4gICAgICAgIHRoaXMucHJlc2V0RHJhZnQgPSB0aGlzLmNsb25lUHJlc2V0U2V0KHRoaXMucmVnaW9uQXBpLmdldFByZXNldFNldCgpKTtcbiAgICAgICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IGtleTogJ2FwcC10b2FzdCcsIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgc3VtbWFyeTogJ0NsYXNzZXMgaW1wb3J0ZWQnLCBkZXRhaWw6ICdBbm5vdGF0aW9uIGNsYXNzZXMgbG9hZGVkLicgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBrZXk6ICdhcHAtdG9hc3QnLCBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBzdW1tYXJ5OiAnSW1wb3J0IGZhaWxlZCcsIGRldGFpbDogYCR7ZXJyfWAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgfVxuXG4gIGltcG9ydFJvaXMoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTtcbiAgICBpZiAoIWZpbGUpIHJldHVybjtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XG4gICAgICBjb25zdCBmaWxlQ29udGVudCA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVnaW9ucyA9IHRoaXMucmVnaW9uQXBpLmltcG9ydFJlZ2lvbnMoZmlsZUNvbnRlbnQpO1xuICAgICAgICAvLyBzZXQgbGFiZWwgY29sb3JzXG4gICAgICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHRoaXMucmVnaW9ucykge1xuICAgICAgICAgIHRoaXMubGFiZWxSZWdpb25VcGRhdGUocmVnaW9uLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zeW5jQ2xhc3Nlc0Zyb21SZWdpb25zKHRoaXMucmVnaW9ucyk7XG4gICAgICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICAgIH0gY2F0Y2ggKGV2ZW50KSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBzdW1tYXJ5OiAnRXJyb3IgaW1wb3J0aW5nIHRoZSBmaWxlJyxcbiAgICAgICAgICBkZXRhaWw6IGAke2V2ZW50fWAsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWFkaW5nIHRoZSBmaWxlOiAnICsgZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaW9ucyB0byBzZXJpYWxpemUgb24gc2F2ZS9leHBvcnQuIEZvciBhIHNpbmdsZS1maWxlIHotc3RhY2sgdGhlIHN0b3JlXG4gICAqIGtlZXBzIG9ubHkgdGhlIGN1cnJlbnQgc2xpY2UgbGl2ZSwgc28gcHVsbCBFVkVSWSBzbGljZSdzIGFubm90YXRpb25zIChlYWNoXG4gICAqIHRhZ2dlZCB3aXRoIGl0cyB6ZXJvLWJhc2VkIFJlZ2lvbi56KSB0byB3cml0ZSBvbmUgY29tYmluZWQgei1pbmRleGVkXG4gICAqIGdlb2pzb24gKGppdC11aSM5MykuIE90aGVyd2lzZSAoc2luZ2xlLXBsYW5lIGltYWdlLCBvciBhIGZvbGRlciBzdGFjayB3aG9zZVxuICAgKiBzbGljZXMgc2F2ZSB0byB0aGVpciBvd24gcGVyLXNsaWNlIGZpbGVzKSB0aGUgY3VycmVudCBzZXQuIChqaXQtdWkjOTMpXG4gICAqL1xuICBwcml2YXRlIHJlZ2lvbnNGb3JTYXZlKCk6IFJlZ2lvbltdIHtcbiAgICBpZiAodGhpcy5yZWdpb25BcGkuaXNTdGFja01vZGUoKSAmJiB0aGlzLnJlZ2lvbkFwaS5nZXRTdGFja1NhdmVMYXlvdXQoKSA9PT0gJ2NvbWJpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMucmVnaW9uQXBpLmdldFNsaWNlQW5ub3RhdGlvblJlZ2lvbnMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVnaW9ucztcbiAgfVxuXG4gIGV4cG9ydFJvaXMoKSB7XG4gICAgaWYgKCF0aGlzLnJlZ2lvbnNGb3JTYXZlKCkubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgbmFtZSA9IHRoaXMucmVnaW9uSW8uZ2V0U2VsZWN0ZWRGaWxlTmFtZSgpO1xuICAgIGNvbnN0IHN0ZW0gPSBuYW1lID8gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZignLicpKSA6ICdyb2lzJztcbiAgICB0aGlzLmV4cG9ydEZpbGVuYW1lID0gYCR7c3RlbX0uZ2VvanNvbmA7XG4gICAgdGhpcy5zaG93RXhwb3J0RGlhbG9nID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbmZpcm1FeHBvcnQoKSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmV4cG9ydEZpbGVuYW1lLnRyaW0oKTtcbiAgICBjb25zdCByZWdpb25zID0gdGhpcy5yZWdpb25zRm9yU2F2ZSgpO1xuICAgIGlmICghZmlsZW5hbWUgfHwgIXJlZ2lvbnMubGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5zaG93RXhwb3J0RGlhbG9nID0gZmFsc2U7XG4gICAgY29uc3QganNvblN0cmluZyA9IHRoaXMucmVnaW9uQXBpLmdldEdlb0pzb25TdHJpbmcocmVnaW9ucyk7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtqc29uU3RyaW5nXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gICAgc2F2ZUFzKGJsb2IsIGZpbGVuYW1lKTtcbiAgfVxuXG4gIC8qKiBPcGVuIHRoZSBcIlNhdmUgbWFza1wiIGRpYWxvZywgc2VlZGVkIHdpdGggYDxpbWFnZS1zdGVtPl9tYXNrLnBuZ2AuICovXG4gIG9wZW5TYXZlTWFza0RpYWxvZygpIHtcbiAgICBpZiAoIXRoaXMucmVnaW9ucy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5yZWdpb25Jby5nZXRTZWxlY3RlZEZpbGVOYW1lKCk7XG4gICAgLy8gU3RyaXAgdGhlIGV4dGVuc2lvbiBvbmx5IHdoZW4gdGhlcmUgaXMgb25lOyBhbiBleHRlbnNpb24tbGVzcyBuYW1lIGtlZXBzXG4gICAgLy8gaXRzIHdob2xlIHN0ZW0gKGEgbGVhZGluZy1kb3QgZG90ZmlsZSBpcyB0cmVhdGVkIGFzIGhhdmluZyBubyBleHRlbnNpb24pXG4gICAgLy8gc28gd2UgbmV2ZXIgcHJvZHVjZSBhIGJhcmUgXCJfbWFzay5wbmdcIi5cbiAgICBjb25zdCBkb3QgPSBuYW1lID8gbmFtZS5sYXN0SW5kZXhPZignLicpIDogLTE7XG4gICAgY29uc3Qgc3RlbSA9IG5hbWUgPyAoZG90ID4gMCA/IG5hbWUuc3Vic3RyaW5nKDAsIGRvdCkgOiBuYW1lKSA6ICdyZWdpb25zJztcbiAgICB0aGlzLnNhdmVNYXNrRmlsZW5hbWUgPSBgJHtzdGVtfV9tYXNrLnBuZ2A7XG4gICAgdGhpcy5tYXNrTW9kZSA9ICdiaW5hcnknO1xuICAgIHRoaXMuc2hvd1NhdmVNYXNrRGlhbG9nID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYXN0ZXJpemUgdGhlIHJlZ2lvbnMgdG8gdGhlIGNob3NlbiBtYXNrIHR5cGUgYW5kIGRvd25sb2FkIGFzIGEgUE5HLiBUaGVcbiAgICogaGVhdnkgd29yayAoZnVsbC1yZXMgcmFzdGVyaXplICsgUE5HIGVuY29kZSkgcnVucyBpbiBhIFdlYiBXb3JrZXIgc28gdGhlIFVJXG4gICAqIG5ldmVyIGZyZWV6ZXMgb24gbGFyZ2Uvd2hvbGUtc2xpZGUgaW1hZ2VzIGFuZCB0aGUgam9iIGNhbiBiZSBjYW5jZWxsZWRcbiAgICogKGppdC11aSM5NSkuIFRoZSBkaWFsb2cgc3RheXMgb3BlbiBzaG93aW5nIGEgcHJvZ3Jlc3MgYmFyIHVudGlsIGRvbmUuXG4gICAqL1xuICBjb25maXJtU2F2ZU1hc2soKSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnNhdmVNYXNrRmlsZW5hbWUudHJpbSgpO1xuICAgIGlmICghZmlsZW5hbWUgfHwgIXRoaXMucmVnaW9ucy5sZW5ndGggfHwgdGhpcy5tYXNrQnVzeSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMucmVnaW9uQXBpLmdldE1hc2tJbWFnZVNpemUoKTtcbiAgICBpZiAoIXNpemUpIHtcbiAgICAgIHRoaXMubWFza0Vycm9yKCdObyBpbWFnZSBzaXplIGlzIGF2YWlsYWJsZSwgc28gdGhlIG1hc2sgY2Fubm90IGJlIHNpemVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdob2xlLXNsaWRlIGltYWdlcyBleGNlZWQgdGhlIGJyb3dzZXIncyB0eXBlZC1hcnJheS9tZW1vcnkgbGltaXRzLCBzbyBjYXBcbiAgICAvLyB0aGUgbWFzayB0byBhIHNhZmUgcGl4ZWwgYnVkZ2V0IGFuZCBzY2FsZSB0aGUgZ2VvbWV0cnkgdG8gbWF0Y2guXG4gICAgY29uc3Qgc2NhbGUgPSBtYXNrU2NhbGVGb3Ioc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChzaXplLndpZHRoICogc2NhbGUpKTtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHNpemUuaGVpZ2h0ICogc2NhbGUpKTtcbiAgICBpZiAoc2NhbGUgPCAxKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgIGtleTogJ2FwcC10b2FzdCcsXG4gICAgICAgIHNldmVyaXR5OiAnaW5mbycsXG4gICAgICAgIHN1bW1hcnk6ICdNYXNrIGRvd25zY2FsZWQnLFxuICAgICAgICBkZXRhaWw6IGBJbWFnZSB0b28gbGFyZ2UgZm9yIGEgZnVsbC1yZXNvbHV0aW9uIG1hc2s7IHNhdmluZyBhdCAke3dpZHRofcOXJHtoZWlnaHR9LmAsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVnaW9ucyA9IHRoaXMucmVnaW9ucy5tYXAoKHIpID0+IHNjYWxlUGFydHMocmVnaW9uVG9QYXJ0cyhyKSwgc2NhbGUpKTtcblxuICAgIHRoaXMucGVuZGluZ01hc2tGaWxlbmFtZSA9IGZpbGVuYW1lO1xuICAgIHRoaXMubWFza0J1c3kgPSB0cnVlO1xuICAgIHRoaXMubWFza0VuY29kaW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXNrUHJvZ3Jlc3MgPSAwO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIHdpZHRoLCBoZWlnaHQsXG4gICAgICBvcmlnaW5hbFdpZHRoOiBzaXplLndpZHRoLCBvcmlnaW5hbEhlaWdodDogc2l6ZS5oZWlnaHQsIHNjYWxlLFxuICAgICAgbW9kZTogdGhpcy5tYXNrTW9kZSxcbiAgICAgIHNvdXJjZU5hbWU6IHRoaXMucmVnaW9uSW8uZ2V0U2VsZWN0ZWRGaWxlTmFtZSgpLFxuICAgICAgcmVnaW9ucyxcbiAgICB9O1xuICAgIC8vIGNyZWF0ZU1hc2tXb3JrZXIoKSBpcyBhc3luYyAodGhlIHdvcmtlciBtb2R1bGUgaXMgaW1wb3J0ZWQgZHluYW1pY2FsbHkgc29cbiAgICAvLyBpdHMgaW1wb3J0Lm1ldGEgbmV2ZXIgcmVhY2hlcyB0aGUgQ29tbW9uSlMgdGVzdCBjb21waWxlKS4gV2lyZSB1cCBvbmNlIGl0XG4gICAgLy8gcmVzb2x2ZXMg4oCUIHVubGVzcyB0aGUgdXNlciBjYW5jZWxsZWQgd2hpbGUgaXQgd2FzIGxvYWRpbmcuXG4gICAgdGhpcy5jcmVhdGVNYXNrV29ya2VyKCkudGhlbigod29ya2VyKSA9PiB7XG4gICAgICBpZiAoIXRoaXMubWFza0J1c3kpIHsgd29ya2VyLnRlcm1pbmF0ZSgpOyByZXR1cm47IH1cbiAgICAgIHRoaXMubWFza1dvcmtlciA9IHdvcmtlcjtcbiAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAoeyBkYXRhIH06IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGE/LnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdwcm9ncmVzcyc6XG4gICAgICAgICAgICB0aGlzLm1hc2tQcm9ncmVzcyA9IGRhdGEudG90YWwgPyBNYXRoLnJvdW5kKChkYXRhLmRvbmUgLyBkYXRhLnRvdGFsKSAqIDEwMCkgOiAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZW5jb2RpbmcnOlxuICAgICAgICAgICAgdGhpcy5tYXNrRW5jb2RpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZG9uZSc6XG4gICAgICAgICAgICB0aGlzLmZpbmlzaE1hc2sobmV3IEJsb2IoW2RhdGEucG5nXSwgeyB0eXBlOiAnaW1hZ2UvcG5nJyB9KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICB0aGlzLm1hc2tFcnJvcihkYXRhLmVycm9yIHx8ICdUaGUgbWFzayBjb3VsZCBub3QgYmUgZ2VuZXJhdGVkLicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB3b3JrZXIub25lcnJvciA9ICgpID0+IHRoaXMubWFza0Vycm9yKCdUaGUgbWFzayB3b3JrZXIgZmFpbGVkLicpO1xuICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHBheWxvYWQpO1xuICAgIH0pLmNhdGNoKCgpID0+IHRoaXMubWFza0Vycm9yKCdUaGUgbWFzayB3b3JrZXIgZmFpbGVkIHRvIHN0YXJ0LicpKTtcbiAgfVxuXG4gIC8qKiBDYW5jZWwgYW4gaW4tcHJvZ3Jlc3MgbWFzayBleHBvcnQ6IHRlcm1pbmF0ZSB0aGUgd29ya2VyIGFuZCByZXNldCBzdGF0ZS4gKi9cbiAgY2FuY2VsU2F2ZU1hc2soKSB7XG4gICAgdGhpcy50ZWFyZG93bk1hc2tXb3JrZXIoKTtcbiAgICB0aGlzLm1hc2tCdXN5ID0gZmFsc2U7XG4gICAgdGhpcy5tYXNrRW5jb2RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1hc2tQcm9ncmVzcyA9IDA7XG4gIH1cblxuICAvKiogV29ya2VyIGZhY3Rvcnkg4oCUIGFzeW5jIHNvIHRoZSB3b3JrZXIgbW9kdWxlIChhbmQgaXRzIGBpbXBvcnQubWV0YS51cmxgLFxuICAgKiAgd2hpY2ggdGhlIENvbW1vbkpTIHRlc3QgY29tcGlsZSByZWplY3RzKSBpcyBsb2FkZWQgdmlhIGEgZHluYW1pYyBpbXBvcnQsXG4gICAqICBleGFjdGx5IGxpa2UgdGhlIHNlZ21lbnRhdGlvbiB3b3JrZXIuIE92ZXJyaWRhYmxlIGluIHRlc3RzLiAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlTWFza1dvcmtlcigpOiBQcm9taXNlPFdvcmtlcj4ge1xuICAgIGNvbnN0IHsgY3JlYXRlTWFza1dvcmtlciB9ID0gYXdhaXQgaW1wb3J0KCcuL21hc2std29ya2VyJyk7XG4gICAgcmV0dXJuIGNyZWF0ZU1hc2tXb3JrZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluaXNoTWFzayhibG9iOiBCbG9iKSB7XG4gICAgdGhpcy50ZWFyZG93bk1hc2tXb3JrZXIoKTtcbiAgICB0aGlzLm1hc2tCdXN5ID0gZmFsc2U7XG4gICAgdGhpcy5tYXNrRW5jb2RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dTYXZlTWFza0RpYWxvZyA9IGZhbHNlO1xuICAgIHNhdmVBcyhibG9iLCB0aGlzLnBlbmRpbmdNYXNrRmlsZW5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXNrRXJyb3IoZGV0YWlsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlYXJkb3duTWFza1dvcmtlcigpO1xuICAgIHRoaXMubWFza0J1c3kgPSBmYWxzZTtcbiAgICB0aGlzLm1hc2tFbmNvZGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgIGtleTogJ2FwcC10b2FzdCcsXG4gICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgIHN1bW1hcnk6ICdDb3VsZCBub3QgY3JlYXRlIG1hc2snLFxuICAgICAgZGV0YWlsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZWFyZG93bk1hc2tXb3JrZXIoKSB7XG4gICAgdGhpcy5tYXNrV29ya2VyPy50ZXJtaW5hdGUoKTtcbiAgICB0aGlzLm1hc2tXb3JrZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwZXJzaXN0UmVnaW9ucygpIHtcbiAgICAvLyBGb2xkZXIgc3RhY2s6IHdyaXRlIGVhY2ggc2xpY2UncyByZWdpb25zIGJhY2sgdG8gaXRzIG93biBzbGljZS1maWxlJ3NcbiAgICAvLyBzaWJsaW5nIGdlb2pzb24g4oCUIG5vIHNpbmdsZS1maWxlbmFtZSBwcm9tcHQgKHRoZSBmaWxlbmFtZXMgYXJlIHRoZSBzbGljZVxuICAgIC8vIGZpbGVzJykuIChqaXQtdWkjOTMpXG4gICAgaWYgKHRoaXMucmVnaW9uQXBpLmlzU3RhY2tNb2RlKCkgJiYgdGhpcy5yZWdpb25BcGkuZ2V0U3RhY2tTYXZlTGF5b3V0KCkgPT09ICdwZXItc2xpY2UtZmlsZScpIHtcbiAgICAgIHRoaXMuc2F2ZVN0YWNrU2xpY2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnJlZ2lvbklvLmdldFNlbGVjdGVkRmlsZU5hbWUoKTtcbiAgICBpZiAoIW5hbWUgfHwgIXRoaXMucmVnaW9uc0ZvclNhdmUoKS5sZW5ndGgpIHJldHVybjtcblxuICAgIHRoaXMuc2F2ZUFzRmlsZW5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKCcuJykpICsgJy5nZW9qc29uJztcbiAgICB0aGlzLnNhdmVBc0ZpbGVFeGlzdHMgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dTYXZlQXNEaWFsb2cgPSB0cnVlO1xuICAgIHRoaXMuX3NhdmVBc0NoZWNrJC5uZXh0KHRoaXMuc2F2ZUFzRmlsZW5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYSBmb2xkZXIgc3RhY2sncyByZWdpb25zIGFzIG9uZSBnZW9qc29uIHBlciBzbGljZS1maWxlIChqaXQtdWkjOTMpLlxuICAgKiBHcm91cHMgdGhlIHN0b3JlJ3MgcGVyLXNsaWNlIHJlZ2lvbnMgYnkgc2xpY2UgaW5kZXggYW5kIHNlcmlhbGl6ZXMgZWFjaCBvblxuICAgKiB0aGUgZGVmYXVsdCBwbGFuZSAoej0wKSDigJQgZWFjaCBzbGljZS1maWxlIGlzIGl0c2VsZiBvbmUgcGxhbmUsIGFuZCB0aGVcbiAgICogbG9hZGVyIHJlLWRlcml2ZXMgdGhlIHNsaWNlIGluZGV4IGZyb20gdGhlIGZpbGUncyBwb3NpdGlvbiBpbiB0aGUgc2VyaWVzLlxuICAgKiBTbGljZXMgY2xlYXJlZCBzaW5jZSBsb2FkIGFyZSBpbmNsdWRlZCAoZW1wdHkpIHNvIHRoZWlyIGZpbGUgaXMgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBwcml2YXRlIHNhdmVTdGFja1NsaWNlcygpIHtcbiAgICBjb25zdCBieVNsaWNlID0gdGhpcy5yZWdpb25BcGkuZ2V0U3RhY2tTYXZlQW5ub3RhdGlvblNsaWNlcygpO1xuICAgIGlmICghYnlTbGljZS5zaXplKSByZXR1cm47XG4gICAgY29uc3Qgc2xpY2VzOiB7IHo6IG51bWJlcjsgZ2VvSnNvblN0cjogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW3osIHJlZ3NdIG9mIGJ5U2xpY2UpIHtcbiAgICAgIGNvbnN0IGZsYXQgPSByZWdzLm1hcCgocikgPT4gT2JqZWN0LmFzc2lnbihuZXcgUmVnaW9uKCksIHIsIHsgejogMCB9KSk7XG4gICAgICBzbGljZXMucHVzaCh7IHosIGdlb0pzb25TdHI6IHRoaXMucmVnaW9uQXBpLmdldEdlb0pzb25TdHJpbmcoZmxhdCkgfSk7XG4gICAgfVxuICAgIHRoaXMuc2F2ZUFzQnVzeSA9IHRydWU7XG4gICAgdGhpcy5fc2F2ZUFzU3ViID0gdGhpcy5yZWdpb25Jby5zYXZlU2xpY2VHZW9Kc29ucyhzbGljZXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2F2ZUFzQnVzeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAga2V5OiAnYXBwLXRvYXN0JyxcbiAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHN1bW1hcnk6ICdSZWdpb25zIHNhdmVkJyxcbiAgICAgICAgICBkZXRhaWw6IGBTYXZlZCBST0lzIGZvciAke3NsaWNlcy5sZW5ndGh9IHNsaWNlJHtzbGljZXMubGVuZ3RoID09PSAxID8gJycgOiAncyd9YCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlQXNCdXN5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICBrZXk6ICdhcHAtdG9hc3QnLFxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgIHN1bW1hcnk6ICdFcnJvciBzYXZpbmcgcmVnaW9ucycsXG4gICAgICAgICAgZGV0YWlsOiBgJHsoZXJyIGFzIEVycm9yKT8ubWVzc2FnZSA/PyBlcnJ9YCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tTYXZlQXNGaWxlRXhpc3RzKCkge1xuICAgIHRoaXMuX3NhdmVBc0NoZWNrJC5uZXh0KHRoaXMuc2F2ZUFzRmlsZW5hbWUpO1xuICB9XG5cbiAgY29uZmlybVNhdmVBcygpIHtcbiAgICBpZiAoIXRoaXMucmVnaW9uSW8uZ2V0U2VsZWN0ZWRGaWxlTmFtZSgpKSByZXR1cm47XG5cbiAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMuc2F2ZUFzRmlsZW5hbWUudHJpbSgpO1xuICAgIGlmICghZmlsZW5hbWUpIHJldHVybjtcblxuICAgIGNvbnN0IGRvU2F2ZSA9ICgpID0+IHtcbiAgICAgIC8vIEtlZXAgdGhlIGRpYWxvZyBvcGVuIHNob3dpbmcgYW4gKGluZGV0ZXJtaW5hdGUpIHByb2dyZXNzIGJhciB3aGlsZSB0aGVcbiAgICAgIC8vIHJlZ2lvbnMgc2VyaWFsaXplIGFuZCB1cGxvYWQsIHRoZW4gY2xvc2Ugb24gc3VjY2Vzcy4gRGVmZXIgb25lIHRpY2sgc29cbiAgICAgIC8vIHRoZSBiYXIgcGFpbnRzIGJlZm9yZSBhIGxhcmdlIHN5bmNocm9ub3VzIEdlb0pTT04gc2VyaWFsaXplLlxuICAgICAgdGhpcy5zYXZlQXNCdXN5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3NhdmVBc1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3NhdmVBc1RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgZ2VvSnNvblN0cjogc3RyaW5nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGdlb0pzb25TdHIgPSB0aGlzLnJlZ2lvbkFwaS5nZXRHZW9Kc29uU3RyaW5nKHRoaXMucmVnaW9uc0ZvclNhdmUoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMuc2F2ZUFzQnVzeSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIGtleTogJ2FwcC10b2FzdCcsXG4gICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHN1bW1hcnk6ICdFcnJvciBzYXZpbmcgcmVnaW9ucycsXG4gICAgICAgICAgICBkZXRhaWw6IGAkeyhlcnIgYXMgRXJyb3IpPy5tZXNzYWdlID8/IGVycn1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zYXZlQXNTdWIgPSB0aGlzLnJlZ2lvbklvLnNhdmVHZW9Kc29uKGdlb0pzb25TdHIsIGZpbGVuYW1lKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFzQnVzeSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93U2F2ZUFzRGlhbG9nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgIGtleTogJ2FwcC10b2FzdCcsXG4gICAgICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHN1bW1hcnk6ICdSZWdpb25zIHNhdmVkJyxcbiAgICAgICAgICAgICAgZGV0YWlsOiBgU2F2ZWQgYXMgJHtmaWxlbmFtZX1gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zYXZlQXNCdXN5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgIGtleTogJ2FwcC10b2FzdCcsXG4gICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgICBzdW1tYXJ5OiAnRXJyb3Igc2F2aW5nIHJlZ2lvbnMnLFxuICAgICAgICAgICAgICBkZXRhaWw6IGAke2Vyci5tZXNzYWdlIHx8IGVycn1gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc2F2ZUFzRmlsZUV4aXN0cykge1xuICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICBtZXNzYWdlOiBgXCIke2ZpbGVuYW1lfVwiIGFscmVhZHkgZXhpc3RzLiBEbyB5b3Ugd2FudCB0byBvdmVyd3JpdGUgaXQ/YCxcbiAgICAgICAgaGVhZGVyOiAnQ29uZmlybSBPdmVyd3JpdGUnLFxuICAgICAgICBpY29uOiAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxuICAgICAgICBhY2NlcHQ6IGRvU2F2ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb1NhdmUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FuY2VsIGFuIGluLXByb2dyZXNzIEdlb0pTT04gcGVyc2lzdDogYWJvcnQgdGhlIGRlZmVycmVkIHNlcmlhbGl6ZSBhbmQvb3JcbiAgICogIHRoZSBpbi1mbGlnaHQgdXBsb2FkLCBhbmQgcmVzZXQgc3RhdGUuICovXG4gIGNhbmNlbFNhdmVBcygpIHtcbiAgICBpZiAodGhpcy5fc2F2ZUFzVGltZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NhdmVBc1RpbWVyKTtcbiAgICAgIHRoaXMuX3NhdmVBc1RpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLl9zYXZlQXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc2F2ZUFzU3ViID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2F2ZUFzQnVzeSA9IGZhbHNlO1xuICB9XG59XG4iLCJcbjxwLXRvb2xiYXIgc3R5bGVDbGFzcz1cInJlZ2lvbi10b29sYmFyXCI+XG4gIDxkaXYgY2xhc3M9XCJwLXRvb2xiYXItZ3JvdXAtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMVwiPlxuICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktdGFnXCIgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgW3RleHRdPVwiIXNob3dTaGFwZUxhYmVsXCJcbiAgICAgICAgICAgICAgcFRvb2x0aXA9XCJTaG93IHJlZ2lvbiBsYWJlbHMuXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2hvd1NoYXBlTGFiZWwgPSAhc2hvd1NoYXBlTGFiZWw7IGNoYW5nZVNob3dTaGFwZUxhYmVsKHNob3dTaGFwZUxhYmVsKVwiPlxuICAgIDwvcC1idXR0b24+XG4gICAgPHNwYW4gY2xhc3M9XCJ0b29sYmFyLXNlcGFyYXRvclwiPjwvc3Bhbj5cbiAgICA8IS0tIE5ldyByZWdpb25zIGFyZSBub3cgY3JlYXRlZCBmcm9tIHRoZSBkaWFncmFtIHRvb2xiYXJcbiAgICAgICAgIChyZWN0YW5nbGUsIHBvbHlsaW5lLCBmcmVlZm9ybSwgd2FuZCkuIC0tPlxuICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktdXBsb2FkXCIgc2l6ZT1cInNtYWxsXCIgW3RleHRdPVwidHJ1ZVwiIHN0eWxlQ2xhc3M9XCJtci0yXCJcbiAgICAgICAgICAgICAgcFRvb2x0aXA9XCJVcGxvYWQgYW5kIGRpc3BsYXkgcmVnaW9ucyBmcm9tIGdlb2pzb24gZmlsZS5cIlxuICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicm9pRmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICA8L3AtYnV0dG9uPlxuICAgIDxpbnB1dCAjcm9pRmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLmdlb2pzb24sLmpzb25cIiBoaWRkZW5cbiAgICAgICAgICAgKGNoYW5nZSk9XCJpbXBvcnRSb2lzKCRldmVudCk7IHJvaUZpbGVJbnB1dC52YWx1ZSA9ICcnXCIvPlxuICAgIDxwLWJ1dHRvbiBzaXplPVwic21hbGxcIiBbdGV4dF09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cIm1yLTJcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIkRvd25sb2FkIHJlZ2lvbnMgYXMgZ2VvanNvbiBmaWxlLlwiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIGljb249XCJwaSBwaS1kb3dubG9hZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnRSb2lzKClcIj5cbiAgICA8L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktc2F2ZVwiIHNpemU9XCJzbWFsbFwiIFt0ZXh0XT1cInRydWVcIiBzdHlsZUNsYXNzPVwibXItMlwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiU2F2ZSByZWdpb25zIHRvIHNlcnZlci5cIlxuICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicGVyc2lzdFJlZ2lvbnMoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcmVnaW9ucyB8fCAhcmVnaW9ucy5sZW5ndGhcIj5cbiAgICA8L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiBzaXplPVwic21hbGxcIiBbdGV4dF09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cIm1yLTJcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIkRvd25sb2FkIG1hc2sgb2YgdGhlIHJlZ2lvbnMgYXMgUE5HXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TYXZlTWFza0RpYWxvZygpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFyZWdpb25zIHx8ICFyZWdpb25zLmxlbmd0aFwiPlxuICAgICAgPCEtLSBSZWZlcmVuY2VzIHRoZSBmaWxlIHNvIElua3NjYXBlIGVkaXRzIHRvIG1hc2suc3ZnIHNob3cgdXAgZGlyZWN0bHlcbiAgICAgICAgICAgKHRoZSBsaWIncyBhc3NldHMvKiogYXJlIHNlcnZlZCBhdCBhc3NldHMvcGxvdHRpbmcvKS4gVGhlXG4gICAgICAgICAgIHRvb2xiYXItaWNvbi1kYXJrIGZpbHRlciByZWNvbG91cnMgdGhlIGJsYWNrIFNWRyB0byB0aGUgdGhlbWUgYmx1ZSxcbiAgICAgICAgICAgc2FtZSBhcyByZWdpb24tZWRpdG9yLnN2ZyBhbmQgdGhlIG90aGVyIFNWRyB0b29sYmFyIGljb25zLiAtLT5cbiAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL3Bsb3R0aW5nL21hc2suc3ZnXCIgY2xhc3M9XCJ0b29sYmFyLWljb24tZGFya1wiXG4gICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDFyZW07IGhlaWdodDogMXJlbTsgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcIlxuICAgICAgICAgICBhbHQ9XCJEb3dubG9hZCBtYXNrXCIvPlxuICAgIDwvcC1idXR0b24+XG4gICAgPHAtYnV0dG9uIGxhYmVsPVwieDUxMlwiIHNpemU9XCJzbWFsbFwiIFt0ZXh0XT1cInRydWVcIiBzdHlsZUNsYXNzPVwibXItMlwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiUm91bmQgYWxsIHJlY3RhbmdsZSByZWdpb25zXG4gICAgICAgICAgICAgICAgICAgIHRvIHdpZHRoIGFuZCBoZWlnaHQgdGhhdCBhcmUgbXVsdGlwbGUgb2YgNTEyXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJvdW5kUmVjdGFuZ2xlTGVuZ3RocygpXCI+XG4gICAgPC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLWNoZWNrLXNxdWFyZVwiIHNpemU9XCJzbWFsbFwiIFt0ZXh0XT1cInRydWVcIiBzdHlsZUNsYXNzPVwibXItMlwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiU2VsZWN0IGFsbCByZWdpb25zXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbFJlZ2lvbnMoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcmVnaW9ucyB8fCAhcmVnaW9ucy5sZW5ndGhcIj5cbiAgICA8L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktdGFnc1wiIHNpemU9XCJzbWFsbFwiIFt0ZXh0XT1cInRydWVcIiBzdHlsZUNsYXNzPVwibXItMlwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiRWRpdCBjbGFzcyBvbiBzZWxlY3RlZCByb3dzXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIighc2VsZWN0ZWRSZWdpb25zIHx8ICFzZWxlY3RlZFJlZ2lvbnMubGVuZ3RoKT8gb3AuaGlkZSgpIDogb3AudG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkUmVnaW9ucyB8fCAhc2VsZWN0ZWRSZWdpb25zLmxlbmd0aFwiPlxuICAgIDwvcC1idXR0b24+XG4gICAgPHAtYnV0dG9uIGljb249XCJwaSBwaS1wYWxldHRlXCIgc2l6ZT1cInNtYWxsXCIgW3RleHRdPVwidHJ1ZVwiIHN0eWxlQ2xhc3M9XCJtci0yXCJcbiAgICAgICAgICAgICAgcFRvb2x0aXA9XCJFZGl0IGNvbG91ciBvZiBzZWxlY3RlZCByZWdpb25zXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Db2xvckRpYWxvZygpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFJlZ2lvbnMgfHwgIXNlbGVjdGVkUmVnaW9ucy5sZW5ndGhcIj5cbiAgICA8L3AtYnV0dG9uPlxuICAgIDxwLW92ZXJsYXlQYW5lbCAjb3AgKG9uSGlkZSk9XCJidWxrQ2xhc3M9Jyc7IG5ld0J1bGtDbGFzcz0nJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIiBzdHlsZT1cIndpZHRoOiAxOHJlbVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtOTAwXCI+U2V0IGNsYXNzIG9uIHt7IHNlbGVjdGVkUmVnaW9ucz8ubGVuZ3RoIHx8IDAgfX0gc2VsZWN0ZWQgcmVnaW9uKHMpPC9zcGFuPlxuICAgICAgICA8IS0tIFNlbGVjdGluZyBhIGNsYXNzIGFwcGxpZXMgaXQgaW1tZWRpYXRlbHkgKGNob29zaW5nIGFuIG9wdGlvbiBjbG9zZXMgdGhlXG4gICAgICAgICAgICAgb3ZlcmxheSwgc28gdGhlcmUncyBubyBzZXBhcmF0ZSBBcHBseSBidXR0b24pLiAtLT5cbiAgICAgICAgPHAtZHJvcGRvd24gc3R5bGVDbGFzcz1cInctZnVsbFwiIGFwcGVuZFRvPVwiYm9keVwiIFtvcHRpb25zXT1cInByZXNldFNldC5jbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJuYW1lXCIgWyhuZ01vZGVsKV09XCJidWxrQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNob29zZSBhIGNsYXNz4oCmXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJwcmVzZXRTZXQuY2xhc3Nlcy5sZW5ndGggPiA4XCIgZmlsdGVyQnk9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImFwcGx5QnVsa0NsYXNzKClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWMgcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZC12YWx1ZVwiPjxzcGFuIGNsYXNzPVwiY2hpcC1zd2F0Y2hcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJjLmNvbG9yXCI+PC9zcGFuPnt7IGMubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IHBsYWNlaG9sZGVyPVwi4oCmb3IgYSBuZXcgY2xhc3NcIiBbKG5nTW9kZWwpXT1cIm5ld0J1bGtDbGFzc1wiXG4gICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFkZEFuZEFwcGx5QnVsa0NsYXNzKClcIi8+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktcGx1c1wiIHBUb29sdGlwPVwiQWRkIGNsYXNzICZhbXA7IHNldCBpdFwiXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBbZGlzYWJsZWRdPVwiIW5ld0J1bGtDbGFzcy50cmltKClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEFuZEFwcGx5QnVsa0NsYXNzKClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Atb3ZlcmxheVBhbmVsPlxuICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktdHJhc2hcIiBzaXplPVwic21hbGxcIiBbdGV4dF09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cIm1yLTJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlU2VsZWN0ZWRSZWdpb25zKClcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIkRlbGV0ZSBzZWxlY3RlZCByZWdpb25zXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFJlZ2lvbnMgfHwgIXNlbGVjdGVkUmVnaW9ucy5sZW5ndGhcIj48L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktdGltZXMtY2lyY2xlXCIgc2l6ZT1cInNtYWxsXCIgW3RleHRdPVwidHJ1ZVwiIHN0eWxlQ2xhc3M9XCJtci0yXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyQWxsUmVnaW9ucygpXCJcbiAgICAgICAgICAgICAgcFRvb2x0aXA9XCJEZWxldGUgYWxsIHJlZ2lvbnNcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXJlZ2lvbnMgfHwgIXJlZ2lvbnMubGVuZ3RoXCI+PC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXF1ZXN0aW9uXCIgc2l6ZT1cInNtYWxsXCIgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzaG93SGVscCgpXCIgcFRvb2x0aXA9XCJIZWxwXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCI+PC9wLWJ1dHRvbj5cbiAgPC9kaXY+XG48L3AtdG9vbGJhcj5cblxuPCEtLSBEb2NrZWQgXCJDbGFzc2VzXCIgcGFuZWwgKGppdC11aSM3MCk6IHRoZSBhbHdheXMtdmlzaWJsZSBsaXN0IG9mIGFubm90YXRpb25cbiAgICAgY2xhc3NlcyBhYm92ZSB0aGUgcmVnaW9ucyB0YWJsZS4gQ2xpY2sgYSByb3cgdG8gbWFrZSBpdCB0aGUgYWN0aXZlIGNsYXNzXG4gICAgIChuZXcgcmVnaW9ucyBpbmhlcml0IGl0OyB3aXRoIHJvd3Mgc2VsZWN0ZWQgaXQgcmUtY2xhc3NpZmllcyB0aGVtKTsgcmVjb2xvdXJcbiAgICAgdmlhIHRoZSBzd2F0Y2g7IHRoZSBiYWRnZSBzaG93cyBob3cgbWFueSByZWdpb25zIHVzZSB0aGUgY2xhc3MuIFwiTWFuYWdlXCJcbiAgICAgb3BlbnMgdGhlIGZ1bGwgZWRpdG9yIChmYWxsYmFjayBwYWxldHRlLCBhdXRvLWFkZCwgbWF0Y2hpbmcsIGltcG9ydC9leHBvcnQpLiAtLT5cbjxkaXYgY2xhc3M9XCJjbGFzc2VzLXBhbmVsXCI+XG4gIDxkaXYgY2xhc3M9XCJjbGFzc2VzLXBhbmVsLWhlYWRlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY2xhc3Nlcy1wYW5lbC10aXRsZVwiPkNsYXNzZXM8L3NwYW4+XG4gICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktY29nXCIgbGFiZWw9XCJNYW5hZ2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zbSBwLWJ1dHRvbi10ZXh0XCJcbiAgICAgICAgICAgIHBUb29sdGlwPVwiTWFuYWdlIGNsYXNzZXMg4oCUIGFkZCAvIHJlbW92ZSwgcGFsZXR0ZSwgbWF0Y2hpbmcsIGltcG9ydC9leHBvcnRcIlxuICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgKGNsaWNrKT1cIm9wZW5NYW5hZ2VEaWFsb2coKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNsYXNzZXMtcGFuZWwtYm9keVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGMgb2YgZGlzcGxheUNsYXNzZXM7IHRyYWNrQnk6IHRyYWNrQnlDbGFzc05hbWVcIlxuICAgICAgICAgY2xhc3M9XCJjbGFzcy1yb3dcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUNsYXNzID09PSBjLm5hbWVcIlxuICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFjdGl2ZUNsYXNzKGMubmFtZSlcIlxuICAgICAgICAgW3BUb29sdGlwXT1cInNlbGVjdGVkUmVnaW9ucz8ubGVuZ3RoXG4gICAgICAgICAgID8gJ0FwcGx5IOKAnCcgKyBjLm5hbWUgKyAn4oCdIHRvIHRoZSBzZWxlY3RlZCByZWdpb24ocyknXG4gICAgICAgICAgIDogJ1NldCDigJwnICsgYy5uYW1lICsgJ+KAnSBhY3RpdmUg4oCUIG5ldyByZWdpb25zIHVzZSBpdCdcIlxuICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInJvdy1zd2F0Y2hcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgIDxoZXgtY29sb3ItcGlja2VyIFtjb2xvcl09XCJjLmNvbG9yXCIgKGNvbG9yQ2hhbmdlKT1cInNldENsYXNzQ29sb3IoYy5uYW1lLCAkZXZlbnQpXCI+PC9oZXgtY29sb3ItcGlja2VyPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJyb3ctbmFtZVwiPnt7IGMubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicm93LWNvdW50XCIgW2NsYXNzLnplcm9dPVwiY2xhc3NDb3VudChjLm5hbWUpID09PSAwXCI+e3sgY2xhc3NDb3VudChjLm5hbWUpIH19PC9zcGFuPlxuICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXNtIHAtYnV0dG9uLXRleHQgcC1idXR0b24td2FybmluZyByb3ctZGVsXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImMubmFtZSA9PT0gZGVmYXVsdENsYXNzTmFtZSAmJiBjbGFzc0NvdW50KGMubmFtZSkgPiAwXCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImRlbGV0ZUNsYXNzVG9vbHRpcChjLm5hbWUpXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZGVsZXRlQ2xhc3MoYy5uYW1lKVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhZGlzcGxheUNsYXNzZXMubGVuZ3RoXCIgY2xhc3M9XCJjbGFzc2VzLWVtcHR5XCI+XG4gICAgICBObyBjbGFzc2VzIHlldCDigJQgYWRkIG9uZSBmcm9tIE1hbmFnZS5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInJlZ2lvbi1lZGl0b3ItY29udGVudFwiPlxuICAgIDxwLXRhYmxlICNkdCBbdmFsdWVdPVwicmVnaW9ucy5zbGljZShwYWdpbmF0b3JGaXJzdCwgcGFnaW5hdG9yRmlyc3QgKyBwYWdpbmF0b3JSb3dzKVwiXG4gICAgICAgICAgICAgW3RhYmxlU3R5bGVdPVwieyd3aWR0aCc6ICcxMDAlJ31cIiBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRSZWdpb25zXCJcbiAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIiBbbWV0YUtleVNlbGVjdGlvbl09XCJtZXRhS2V5XCJcbiAgICAgICAgICAgICAob25Sb3dTZWxlY3QpPVwib25TZWxlY3Rpb25DaGFuZ2VkKClcIiAob25Sb3dVbnNlbGVjdCk9XCJvblNlbGVjdGlvbkNoYW5nZWQoKVwiXG4gICAgICAgICAgICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgW3Jvd0hvdmVyXT1cInRydWVcIiBkYXRhS2V5PVwiaWRcIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc20gcmVnaW9uLWVkaXRvci10YWJsZVwiXG4gICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiIHNjcm9sbEhlaWdodD1cIjEwMCVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgPCEtLSBIaWRlIHRoZSBjb2x1bW4gaGVhZGVyIHdoZW4gdGhlcmUgYXJlIG5vIHJlZ2lvbnMgdG8gc2hvdy4gLS0+XG4gICAgICAgIDx0ciAqbmdJZj1cInJlZ2lvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDwhLS0gQ2xhc3MgY29sdW1uOiBzaHJpbmtzIHRvIGZpdCBcIlJlZ2lvblwiIGJ5IGRlZmF1bHQsIGdyb3dzIHdpdGggbG9uZ2VyIGxhYmVscy4gLS0+XG4gICAgICAgICAgPHRoIGNsYXNzPVwiY2xhc3MtY29sLWhlYWRlclwiIHBSZXNpemFibGVDb2x1bW4+Q2xhc3MgPHAtc29ydEljb24gZmllbGQ9XCJsYWJlbFwiPjwvcC1zb3J0SWNvbj48L3RoPlxuICAgICAgICAgIDx0aCBjbGFzcz1cInN1cmZhY2UtY29sLWhlYWRlclwiIHBSZXNpemFibGVDb2x1bW4+U3VyZmFjZTwvdGg+XG4gICAgICAgICAgPCEtLSBUcmFzaCBjb2x1bW46IGp1c3QgZW5vdWdoIGZvciB0aGUgaWNvbi4gLS0+XG4gICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MnJlbVwiPjwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcmVnaW9uIGxldC1zaGFwZUlkeD1cInJvd0luZGV4XCI+XG4gICAgICAgIDx0ciBbcFNlbGVjdGFibGVSb3ddPVwicmVnaW9uXCIgW3BTZWxlY3RhYmxlUm93SW5kZXhdPVwic2hhcGVJZHhcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJjbGFzcy1jZWxsXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWRpdGluZ0xhYmVsKHJlZ2lvbik7IGVsc2UgZWRpdExhYmVsVHBsXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2xhc3MtY2VsbC1kaXNwbGF5XCI+XG4gICAgICAgICAgICAgICAgPCEtLSBRdWljay1waWNrIGEgcHJlc2V0IGNsYXNzIChpdHMgY29sb3VyIGZvbGxvd3MpOyB0aGUgcGVuY2lsIGlzIGZvclxuICAgICAgICAgICAgICAgICAgICAgYSBmcmVlLWZvcm0gbmFtZSAvIHJlbmFtZSAoaml0LXVpIzcwKS4gLS0+XG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCJjbGFzcy1kcm9wZG93blwiIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicHJlc2V0U2V0LmNsYXNzZXNcIiBvcHRpb25MYWJlbD1cIm5hbWVcIiBvcHRpb25WYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJlZ2lvbi5sYWJlbFwiIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwiYXBwbHlQcmVzZXRUb1JlZ2lvbihyZWdpb24sICRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcC1zd2F0Y2hcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJjb2xvckZvck5hbWUocmVnaW9uLmxhYmVsKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNsYXNzLW5hbWVcIiBbcFRvb2x0aXBdPVwicmVnaW9uLmxhYmVsXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCI+e3sgcmVnaW9uLmxhYmVsIHx8ICfigJQnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jIHBUZW1wbGF0ZT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcC1zd2F0Y2hcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJjLmNvbG9yXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGMubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1wZW5jaWwgaWNvbi1ob3ZlciBtbC0yXCJcbiAgICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIlJlbmFtZSAvIGZyZWUtZm9ybSBsYWJlbFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0RWRpdExhYmVsKHJlZ2lvbiwgJGV2ZW50KVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRMYWJlbFRwbD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0LWljb24tcmlnaHQgY2xhc3MtY2VsbC1lZGl0XCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS10aW1lcyBpY29uLWhvdmVyXCJcbiAgICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIkNsb3NlXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RvcEVkaXRMYWJlbChyZWdpb24sIGZhbHNlLCAkZXZlbnQpXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHQgY2xhc3M9XCJwLWlucHV0dGV4dC1zbSB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlZ2lvbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzdG9wRWRpdExhYmVsKHJlZ2lvbiwgdHJ1ZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJzdG9wRWRpdExhYmVsKHJlZ2lvbiwgZmFsc2UsICRldmVudClcIi8+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8IS0tIFN1cmZhY2UgYXJlYSAowrVtwrIvbW3CsiB3aGVuIHRoZSBpbWFnZSBpcyBzY2FsZWQsIGVsc2UgcHjCsikuIC0tPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cInN1cmZhY2UtY2VsbFwiPnt7IHJlZ2lvbkFyZWEocmVnaW9uKSB8fCAn4oCUJyB9fTwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgaWNvbj1cInBpIHBpLXRyYXNoXCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJwLWJ1dHRvbi1zbSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24td2FybmluZ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSZWdpb24ocGFnaW5hdG9yRmlyc3QgKyBzaGFwZUlkeClcIj48L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtdGFibGU+XG48L2Rpdj5cblxuPHAtcGFnaW5hdG9yICpuZ0lmPVwicmVnaW9ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICBbcm93c109XCJwYWdpbmF0b3JSb3dzXCIgW3RvdGFsUmVjb3Jkc109XCJyZWdpb25zLmxlbmd0aFwiXG4gICAgICAgICAgICAgW2ZpcnN0XT1cInBhZ2luYXRvckZpcnN0XCJcbiAgICAgICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlT3B0aW9uc1wiXG4gICAgICAgICAgICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcbiAgICAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSB0byB7bGFzdH0gb2Yge3RvdGFsUmVjb3Jkc31cIlxuICAgICAgICAgICAgIChvblBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJyZWdpb24tZWRpdG9yLXBhZ2luYXRvclwiPlxuPC9wLXBhZ2luYXRvcj5cblxuPCEtLSBMaXZlLWVkaXQgbW9kZTogbm8gU2F2ZS9DYW5jZWwg4oCUIGV2ZXJ5IGVkaXQgY29tbWl0cyBpbW1lZGlhdGVseSB0byB0aGVcbiAgICAgYWN0aXZlIGltYWdlJ3MgcmVnaW9uIGNhY2hlLiAtLT5cblxuXG48cC1jb25maXJtRGlhbG9nICNjZCBbc3R5bGVdPVwie3dpZHRoOiAnMjRyZW0nLCBoZWlnaHQ6ICcxNHJlbSd9XCIga2V5PVwicG9zaXRpb25EaWFsb2dcIlxuICAgICAgICAgICAgICAgICBbYmFzZVpJbmRleF09XCIxMDAwMFwiIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZFwiPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktY2hlY2tcIiBsYWJlbD1cIlllc1wiIChjbGljayk9XCJjZC5hY2NlcHQoKVwiPjwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIiBwQnV0dG9uIGljb249XCJwaSBwaS10aW1lc1wiIGxhYmVsPVwiTm9cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNkLnJlamVjdCgpXCI+PC9idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtY29uZmlybURpYWxvZz5cblxuPHAtZGlhbG9nIGhlYWRlcj1cIlNhdmUgUmVnaW9ucyBBc1wiIFsodmlzaWJsZSldPVwic2hvd1NhdmVBc0RpYWxvZ1wiIFttb2RhbF09XCJ0cnVlXCIgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICBbc3R5bGVdPVwie3dpZHRoOiAnMzByZW0nfVwiIFtkcmFnZ2FibGVdPVwiZmFsc2VcIiBbcmVzaXphYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICBbY2xvc2FibGVdPVwiIXNhdmVBc0J1c3lcIiBbY2xvc2VPbkVzY2FwZV09XCIhc2F2ZUFzQnVzeVwiPlxuICA8IS0tIElkbGU6IGZpbGVuYW1lICsgb3ZlcndyaXRlIHdhcm5pbmcuIC0tPlxuICA8ZGl2ICpuZ0lmPVwiIXNhdmVBc0J1c3lcIiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTMgcHQtMlwiPlxuICAgIDxsYWJlbCBmb3I9XCJnZW9qc29uLWZpbGVuYW1lXCIgY2xhc3M9XCJmb250LW1lZGl1bVwiPkdlb0pTT04gZmlsZW5hbWU8L2xhYmVsPlxuICAgIDxpbnB1dCBpZD1cImdlb2pzb24tZmlsZW5hbWVcIiB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHRcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzYXZlQXNGaWxlbmFtZVwiXG4gICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrU2F2ZUFzRmlsZUV4aXN0cygpXCJcbiAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIiAvPlxuICAgIDxzbWFsbCAqbmdJZj1cInNhdmVBc0ZpbGVFeGlzdHNcIiBjbGFzcz1cInAtZXJyb3JcIj5cbiAgICAgIDxpIGNsYXNzPVwicGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUgbXItMVwiPjwvaT5cbiAgICAgIFRoaXMgZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAgICA8L3NtYWxsPlxuICA8L2Rpdj5cblxuICA8IS0tIEJ1c3k6IHByb2dyZXNzIHdoaWxlIHJlZ2lvbnMgc2VyaWFsaXplICsgdXBsb2FkLiAtLT5cbiAgPGRpdiAqbmdJZj1cInNhdmVBc0J1c3lcIiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTMgcHQtMlwiPlxuICAgIDxzcGFuPlNhdmluZyByZWdpb25z4oCmPC9zcGFuPlxuICAgIDxwLXByb2dyZXNzQmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgW3N0eWxlXT1cIntoZWlnaHQ6ICcwLjc1cmVtJ31cIj48L3AtcHJvZ3Jlc3NCYXI+XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICA8cC1idXR0b24gKm5nSWY9XCIhc2F2ZUFzQnVzeVwiIGxhYmVsPVwiQ2FuY2VsXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInNob3dTYXZlQXNEaWFsb2cgPSBmYWxzZVwiPjwvcC1idXR0b24+XG4gICAgPHAtYnV0dG9uICpuZ0lmPVwiIXNhdmVBc0J1c3lcIiBsYWJlbD1cIlNhdmVcIiBpY29uPVwicGkgcGktc2F2ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2F2ZUFzRmlsZW5hbWUgfHwgIXNhdmVBc0ZpbGVuYW1lLnRyaW0oKVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImNvbmZpcm1TYXZlQXMoKVwiPjwvcC1idXR0b24+XG4gICAgPHAtYnV0dG9uICpuZ0lmPVwic2F2ZUFzQnVzeVwiIGxhYmVsPVwiQ2FuY2VsXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImNhbmNlbFNhdmVBcygpXCI+PC9wLWJ1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kaWFsb2c+XG5cbjxwLWRpYWxvZyBoZWFkZXI9XCJFeHBvcnQgUmVnaW9uc1wiIFsodmlzaWJsZSldPVwic2hvd0V4cG9ydERpYWxvZ1wiIFttb2RhbF09XCJ0cnVlXCIgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICBbc3R5bGVdPVwie3dpZHRoOiAnMzByZW0nfVwiIFtkcmFnZ2FibGVdPVwiZmFsc2VcIiBbcmVzaXphYmxlXT1cImZhbHNlXCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0zIHB0LTJcIj5cbiAgICA8bGFiZWwgZm9yPVwiZXhwb3J0LWZpbGVuYW1lXCIgY2xhc3M9XCJmb250LW1lZGl1bVwiPkdlb0pTT04gZmlsZW5hbWU8L2xhYmVsPlxuICAgIDxpbnB1dCBpZD1cImV4cG9ydC1maWxlbmFtZVwiIHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dFxuICAgICAgICAgICBbKG5nTW9kZWwpXT1cImV4cG9ydEZpbGVuYW1lXCJcbiAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIiAvPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxwLWJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIGljb249XCJwaSBwaS10aW1lc1wiIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJzaG93RXhwb3J0RGlhbG9nID0gZmFsc2VcIj48L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiBsYWJlbD1cIkV4cG9ydFwiIGljb249XCJwaSBwaS1kb3dubG9hZFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZXhwb3J0RmlsZW5hbWUgfHwgIWV4cG9ydEZpbGVuYW1lLnRyaW0oKVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImNvbmZpcm1FeHBvcnQoKVwiPjwvcC1idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuXG48cC1kaWFsb2cgaGVhZGVyPVwiU2F2ZSBNYXNrXCIgWyh2aXNpYmxlKV09XCJzaG93U2F2ZU1hc2tEaWFsb2dcIiBbbW9kYWxdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgW3N0eWxlXT1cInt3aWR0aDogJzMwcmVtJ31cIiBbZHJhZ2dhYmxlXT1cImZhbHNlXCIgW3Jlc2l6YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgW2Nsb3NhYmxlXT1cIiFtYXNrQnVzeVwiIFtjbG9zZU9uRXNjYXBlXT1cIiFtYXNrQnVzeVwiPlxuICA8IS0tIElkbGU6IGZpbGVuYW1lICsgbWFzay10eXBlIGZvcm0uIC0tPlxuICA8ZGl2ICpuZ0lmPVwiIW1hc2tCdXN5XCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0zIHB0LTJcIj5cbiAgICA8bGFiZWwgZm9yPVwibWFzay1maWxlbmFtZVwiIGNsYXNzPVwiZm9udC1tZWRpdW1cIj5NYXNrIGZpbGVuYW1lPC9sYWJlbD5cbiAgICA8aW5wdXQgaWQ9XCJtYXNrLWZpbGVuYW1lXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0XG4gICAgICAgICAgIFsobmdNb2RlbCldPVwic2F2ZU1hc2tGaWxlbmFtZVwiXG4gICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCIgLz5cbiAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+TWFzayB0eXBlPC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgPHAtcmFkaW9CdXR0b24gaW5wdXRJZD1cIm1hc2stYmluYXJ5XCIgbmFtZT1cIm1hc2tNb2RlXCIgdmFsdWU9XCJiaW5hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtYXNrTW9kZVwiPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgIDxsYWJlbCBmb3I9XCJtYXNrLWJpbmFyeVwiPkJpbmFyeSA8c3BhbiBjbGFzcz1cInRleHQtY29sb3Itc2Vjb25kYXJ5XCI+KHJlZ2lvbnMgMSwgYmFja2dyb3VuZCAwKTwvc3Bhbj48L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgPHAtcmFkaW9CdXR0b24gaW5wdXRJZD1cIm1hc2stbXVsdGljbGFzc1wiIG5hbWU9XCJtYXNrTW9kZVwiIHZhbHVlPVwibXVsdGljbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1hc2tNb2RlXCI+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgPGxhYmVsIGZvcj1cIm1hc2stbXVsdGljbGFzc1wiPk11bHRpLWNsYXNzIDxzcGFuIGNsYXNzPVwidGV4dC1jb2xvci1zZWNvbmRhcnlcIj4odW5pcXVlIGlkIHBlciByZWdpb24sIGJhY2tncm91bmQgMCk8L3NwYW4+PC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBCdXN5OiBwcm9ncmVzcyB3aGlsZSB0aGUgd29ya2VyIHJhc3Rlcml6ZXMgKyBlbmNvZGVzIHRoZSBQTkcuIC0tPlxuICA8ZGl2ICpuZ0lmPVwibWFza0J1c3lcIiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTMgcHQtMlwiPlxuICAgIDxzcGFuPnt7IG1hc2tFbmNvZGluZyA/ICdFbmNvZGluZyBQTkfigKYnIDogJ1Jhc3Rlcml6aW5nIHJlZ2lvbnPigKYnIH19PC9zcGFuPlxuICAgIDxwLXByb2dyZXNzQmFyIFttb2RlXT1cIm1hc2tFbmNvZGluZyA/ICdpbmRldGVybWluYXRlJyA6ICdkZXRlcm1pbmF0ZSdcIlxuICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJtYXNrUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7aGVpZ2h0OiAnMC43NXJlbSd9XCI+PC9wLXByb2dyZXNzQmFyPlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgPHAtYnV0dG9uICpuZ0lmPVwiIW1hc2tCdXN5XCIgbGFiZWw9XCJDYW5jZWxcIiBpY29uPVwicGkgcGktdGltZXNcIiBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2hvd1NhdmVNYXNrRGlhbG9nID0gZmFsc2VcIj48L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiAqbmdJZj1cIiFtYXNrQnVzeVwiIGxhYmVsPVwiRG93bmxvYWRcIiBpY29uPVwicGkgcGktZG93bmxvYWRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNhdmVNYXNrRmlsZW5hbWUgfHwgIXNhdmVNYXNrRmlsZW5hbWUudHJpbSgpXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiY29uZmlybVNhdmVNYXNrKClcIj48L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiAqbmdJZj1cIm1hc2tCdXN5XCIgbGFiZWw9XCJDYW5jZWxcIiBpY29uPVwicGkgcGktdGltZXNcIiBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiY2FuY2VsU2F2ZU1hc2soKVwiPjwvcC1idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuXG48cC1kaWFsb2cgaGVhZGVyPVwiUmVnaW9uIGNvbG91clwiIFsodmlzaWJsZSldPVwic2hvd0NvbG9yRGlhbG9nXCIgW21vZGFsXT1cImZhbHNlXCIgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICBbc3R5bGVdPVwie3dpZHRoOiAnMjRyZW0nfVwiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIFtyZXNpemFibGVdPVwiZmFsc2VcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTMgcHQtMlwiPlxuICAgIDxzcGFuPk91dGxpbmUgY29sb3VyIHBlciBjbGFzcyBmb3IgdGhlXG4gICAgICA8Yj57eyBzZWxlY3RlZFJlZ2lvbnM/Lmxlbmd0aCB8fCAwIH19PC9iPiBzZWxlY3RlZCByZWdpb24ocyk6PC9zcGFuPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGVkaXQgb2YgY2xhc3NDb2xvckVkaXRzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gZmxleC0xXCI+e3sgZWRpdC5sYWJlbCB8fCAnVW5jbGFzc2lmaWVkJyB9fTwvc3Bhbj5cbiAgICAgIDxoZXgtY29sb3ItcGlja2VyIFtjb2xvcl09XCJlZGl0LmNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvckNoYW5nZSk9XCJjbGFzc0NvbG9yRWRpdHNbaV0uY29sb3IgPSAkZXZlbnRcIj48L2hleC1jb2xvci1waWNrZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgPHAtYnV0dG9uIGxhYmVsPVwiQ2FuY2VsXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgW3RleHRdPVwidHJ1ZVwiIChvbkNsaWNrKT1cInNob3dDb2xvckRpYWxvZyA9IGZhbHNlXCI+XG4gICAgPC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b24gbGFiZWw9XCJBcHBseVwiIGljb249XCJwaSBwaS1jaGVja1wiIChvbkNsaWNrKT1cImFwcGx5Q29sb3JUb1NlbGVjdGVkKClcIj5cbiAgICA8L3AtYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRpYWxvZz5cblxuPCEtLSBNYW5hZ2UgYW5ub3RhdGlvbiBjbGFzc2VzIChqaXQtdWkjNzApOiBDUlVEICsgZmFsbGJhY2sgcGFsZXR0ZSArIG1hdGNoaW5nL2F1dG8tYWRkXG4gICAgIHNldHRpbmdzICsgcmVzZXQvaW1wb3J0L2V4cG9ydC4gRWRpdHMgYSB3b3JraW5nIGNvcHksIGNvbW1pdHRlZCBvbiBBcHBseS9Eb25lLiAtLT5cbjxwLWRpYWxvZyBoZWFkZXI9XCJNYW5hZ2UgYW5ub3RhdGlvbiBjbGFzc2VzXCIgWyh2aXNpYmxlKV09XCJzaG93TWFuYWdlRGlhbG9nXCIgW21vZGFsXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgIFtzdHlsZV09XCJ7d2lkdGg6ICczNHJlbSd9XCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgW3Jlc2l6YWJsZV09XCJmYWxzZVwiPlxuICA8ZGl2ICpuZ0lmPVwicHJlc2V0RHJhZnRcIiBjbGFzcz1cIm1hbmFnZS1kaWFsb2cgZmxleCBmbGV4LWNvbHVtbiBnYXAtMyBwdC0yXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1hbmFnZS1jbGFzc2VzIGZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGMgb2YgcHJlc2V0RHJhZnQuY2xhc3NlczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgIGNsYXNzPVwibWFuYWdlLWNsYXNzLXJvdyBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8aGV4LWNvbG9yLXBpY2tlciBbY29sb3JdPVwiYy5jb2xvclwiIChjb2xvckNoYW5nZSk9XCJjLmNvbG9yID0gJGV2ZW50XCI+PC9oZXgtY29sb3ItcGlja2VyPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IGNsYXNzPVwicC1pbnB1dHRleHQtc20gZmxleC0xXCJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYy5uYW1lXCIgcGxhY2Vob2xkZXI9XCJDbGFzcyBuYW1lXCIvPlxuICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zbSBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXdhcm5pbmdcIlxuICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiUmVtb3ZlIGNsYXNzXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUHJlc2V0Q2xhc3MoaSlcIj48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktcGx1c1wiIGxhYmVsPVwiQWRkIGNsYXNzXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zbSBwLWJ1dHRvbi10ZXh0IGFsaWduLXNlbGYtc3RhcnRcIiAoY2xpY2spPVwiYWRkUHJlc2V0Q2xhc3MoKVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1hbmFnZS1zZWN0aW9uIGZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2VjdGlvbi10aXRsZSBmb250LW1lZGl1bVwiPkZhbGxiYWNrIHBhbGV0dGVcbiAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1jb2xvci1zZWNvbmRhcnlcIj7igJQgY29sb3VycyBmb3IgY2xhc3NlcyBub3QgbGlzdGVkPC9zbWFsbD48L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmFsbGJhY2stcGFsZXR0ZSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXdyYXAgZ2FwLTJcIj5cbiAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGNvbCBvZiBwcmVzZXREcmFmdC5mYWxsYmFja1BhbGV0dGU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZhbGxiYWNrLXN3YXRjaCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxoZXgtY29sb3ItcGlja2VyIFtjb2xvcl09XCJjb2xcIiAoY29sb3JDaGFuZ2UpPVwicHJlc2V0RHJhZnQuZmFsbGJhY2tQYWxldHRlW2ldID0gJGV2ZW50XCI+PC9oZXgtY29sb3ItcGlja2VyPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdGltZXMgaWNvbi1ob3ZlciBtbC0xXCIgcFRvb2x0aXA9XCJSZW1vdmVcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGYWxsYmFja0NvbG9yKGkpXCI+PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tdGV4dFwiIHBUb29sdGlwPVwiQWRkIGZhbGxiYWNrIGNvbG91clwiXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgKGNsaWNrKT1cImFkZEZhbGxiYWNrQ29sb3IoKVwiPjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgIDxwLWNoZWNrYm94IFsobmdNb2RlbCldPVwicHJlc2V0RHJhZnQuYXV0b1Byb21vdGVcIiBbYmluYXJ5XT1cInRydWVcIiBpbnB1dElkPVwiYXV0b1Byb21vdGVcIj48L3AtY2hlY2tib3g+XG4gICAgICA8bGFiZWwgZm9yPVwiYXV0b1Byb21vdGVcIj5BdXRvLWFkZCBkZXRlY3RlZCBjbGFzc2VzIHRvIHRoaXMgbGlzdCBhcyB0aGV5IGFwcGVhcjwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW1cIj5MYWJlbCBtYXRjaGluZzwvc3Bhbj5cbiAgICAgIDxwLXNlbGVjdEJ1dHRvbiBbb3B0aW9uc109XCJtYXRjaE1vZGVPcHRpb25zXCIgWyhuZ01vZGVsKV09XCJwcmVzZXREcmFmdC5tYXRjaE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCI+PC9wLXNlbGVjdEJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYW5hZ2UtZm9vdGVyIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMiB3LWZ1bGxcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwIGdhcC0xXCI+XG4gICAgICAgIDxwLWJ1dHRvbiBsYWJlbD1cIlJlc2V0XCIgaWNvbj1cInBpIHBpLXJlZnJlc2hcIiBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInJlc2V0UHJlc2V0c1RvRGVmYXVsdHMoKVwiPjwvcC1idXR0b24+XG4gICAgICAgIDxwLWJ1dHRvbiBsYWJlbD1cIkltcG9ydFwiIGljb249XCJwaSBwaS11cGxvYWRcIiBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInByZXNldEZpbGVJbnB1dC5jbGljaygpXCI+PC9wLWJ1dHRvbj5cbiAgICAgICAgPGlucHV0ICNwcmVzZXRGaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCIuanNvbixhcHBsaWNhdGlvbi9qc29uXCIgaGlkZGVuXG4gICAgICAgICAgICAgICAoY2hhbmdlKT1cImltcG9ydFByZXNldHMoJGV2ZW50KTsgcHJlc2V0RmlsZUlucHV0LnZhbHVlID0gJydcIi8+XG4gICAgICAgIDxwLWJ1dHRvbiBsYWJlbD1cIkV4cG9ydFwiIGljb249XCJwaSBwaS1kb3dubG9hZFwiIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZXhwb3J0UHJlc2V0cygpXCI+PC9wLWJ1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC0xXCI+PC9zcGFuPlxuICAgICAgPCEtLSBBcHBseSBwZXJzaXN0cyB0byB0aGUgc2VydmVyIGFuZCBjbG9zZXM7IGl0IHJlcGxhY2VzIHRoZSBvbGQgQXBwbHkrRG9uZSBwYWlyLiAtLT5cbiAgICAgIDxwLWJ1dHRvbiBsYWJlbD1cIkFwcGx5XCIgaWNvbj1cInBpIHBpLWNoZWNrXCIgKG9uQ2xpY2spPVwiYXBwbHlNYW5hZ2VEaWFsb2codHJ1ZSlcIj48L3AtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRpYWxvZz5cblxuPHAtZGlhbG9nIGhlYWRlcj1cIlJlZ2lvbiBlZGl0b3IgaGVscFwiIFsodmlzaWJsZSldPVwiZGlzcGxheUhlbHBEaWFsb2dcIiBbc3R5bGVdPVwie3dpZHRoOiAnNTB2dyd9XCJcbiAgICAgICAgICBbbWF4aW1pemFibGVdPVwidHJ1ZVwiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiPlxuICA8cD5cbiAgICBUaGUgUmVnaW9uIEVkaXRvciBsaXN0cyBldmVyeSByZWdpb24gZHJhd24gb24gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgaW1hZ2UuXG4gICAgT3BlbiBpdCB3aXRoIHRoZVxuICAgIDxpbWcgc3JjPVwiYXNzZXRzL3Bsb3R0aW5nL3JlZ2lvbi1lZGl0b3Iuc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgYWx0PVwiUmVnaW9uIEVkaXRvclwiLz5cbiAgICBidXR0b24gaW4gdGhlIGRpYWdyYW0gdG9vbGJhcjogaXQgb3BlbnMgYXMgYSBmbG9hdGluZyBkaWFsb2cgeW91IGNhbiBkcmFnLFxuICAgIHJlc2l6ZSwgYW5kIGxlYXZlIG9wZW4gd2hpbGUgeW91IGRyYXcgb24gdGhlIGltYWdlLlxuICAgIFJlZ2lvbnMgYXJlIHRyYWNrZWQgPGI+cGVyIGltYWdlPC9iPjogc3dpdGNoaW5nIHRvIGFub3RoZXIgaW1hZ2UgaGlkZXNcbiAgICB0aGVzZSBhbmQgc2hvd3MgdGhhdCBpbWFnZSdzIHJlZ2lvbnM7IHN3aXRjaGluZyBiYWNrIHJlc3RvcmVzIHRoZW0uXG4gICAgRWRpdHMgaW4gdGhlIHRhYmxlIGFwcGx5IDxiPmxpdmU8L2I+IHRvIHRoZSBkaWFncmFtIOKAlCB0aGVyZSBpcyBubyBzYXZlIG9yXG4gICAgY2FuY2VsLlxuICA8L3A+XG5cbiAgPGgzPkNyZWF0aW5nIHJlZ2lvbnM8L2gzPlxuICA8cD5cbiAgICBVc2UgdGhlIGRpYWdyYW0gdG9vbGJhciB0b29scyB0byBkcmF3IG5ldyByZWdpb25zOlxuICAgIDxpIGNsYXNzPVwicGkgcGktc3RvcFwiPjwvaT4gcmVjdGFuZ2xlLFxuICAgIDxvYmplY3QgZGF0YT1cImFzc2V0cy9pY29ucy9wb2x5bGluZS5zdmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIj48L29iamVjdD4gcG9seWxpbmUsXG4gICAgPGkgY2xhc3M9XCJwaSBwaS1wZW5jaWxcIj48L2k+IGZyZWVmb3JtIHBhdGgsIGJydXNoLCBvclxuICAgIDxvYmplY3QgZGF0YT1cImFzc2V0cy9pY29ucy93YW5kLnN2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiPjwvb2JqZWN0PiB3YW5kLlxuICAgIEFueXRoaW5nIHlvdSBkcmF3IGFwcGVhcnMgaW1tZWRpYXRlbHkgaW4gdGhlIHRhYmxlLCB3aXRoIHRoZSBjbGFzcyBuYW1lXG4gICAgXCI8Yj5SZWdpb248L2I+XCIgYnkgZGVmYXVsdC5cbiAgPC9wPlxuXG4gIDxoMz5UaGUgdGFibGUgY29sdW1uczwvaDM+XG4gIDx1bD5cbiAgICA8bGk+PGI+Q2xhc3M8L2I+IOKAlCB0aGUgcmVnaW9uJ3MgY2xhc3MuIFBpY2sgYSBjbGFzcyBmcm9tIHRoZSBkcm9wZG93biAoaXRzXG4gICAgICBjb2xvdXIgZm9sbG93cyksIG9yIHVzZSB0aGUgPGkgY2xhc3M9XCJwaSBwaS1wZW5jaWxcIj48L2k+IGZvciBhIGZyZWUtZm9ybSBuYW1lLjwvbGk+XG4gICAgPGxpPjxiPlN1cmZhY2U8L2I+IOKAlCB0aGUgcmVnaW9uJ3MgYXJlYSwgaW4gwrVtwrIvbW3CsiB3aGVuIHRoZSBpbWFnZSBjYXJyaWVzIGFcbiAgICAgIHBoeXNpY2FsIHBpeGVsIHNpemUsIG90aGVyd2lzZSBpbiBweMKyLiBIb2xlcyAoZG9udXRzKSBhbmQgbXVsdGktcGFydFxuICAgICAgcmVnaW9ucyBhcmUgYWNjb3VudGVkIGZvci48L2xpPlxuICAgIDxsaT5UaGUgdHJhc2ggaWNvbiBhdCB0aGUgZW5kIG9mIGEgcm93IGRlbGV0ZXMgdGhhdCBvbmUgcmVnaW9uLjwvbGk+XG4gICAgPGxpPlVzZSBcIjxiPng1MTI8L2I+XCIgdG8gcm91bmQgYWxsIHJlY3RhbmdsZSB3aWR0aHMvaGVpZ2h0cyB0byB0aGVcbiAgICAgIG5lYXJlc3QgbXVsdGlwbGUgb2YgNTEyLjwvbGk+XG4gIDwvdWw+XG4gIDxwPlJlZ2lvbiBnZW9tZXRyeSBpcyBlZGl0ZWQgb24gdGhlIGRpYWdyYW0gaXRzZWxmIChkcmFnIHZlcnRpY2VzLCB0aGUgdmVydGV4XG4gICAgdG9vbHMsIGJydXNoL3dhbmQsIGFuZCB0aGUgcmlnaHQtY2xpY2sgcmVnaW9uIGFjdGlvbnMpLCBub3QgaW4gdGhpcyB0YWJsZS48L3A+XG5cbiAgPGgzPlNlbGVjdGluZyByb3dzPC9oMz5cbiAgPHVsPlxuICAgIDxsaT5DbGljayBhIHJvdyB0byBzZWxlY3QgaXQuIFRoZSBjb3JyZXNwb25kaW5nIHJlZ2lvbiBpcyBoaWdobGlnaHRlZCBpbiB0aGVcbiAgICAgIGRpYWdyYW0gKFBsb3RseSBzaG93cyBpdHMgZWRpdCBoYW5kbGVzOyB0aGUgT3BlblNlYWRyYWdvbiBpbWFnZSB2aWV3XG4gICAgICBoaWdobGlnaHRzIGl0IGFuZCBzaG93cyBpdHMgaGFuZGxlcyBpbiBzZWxlY3QgbW9kZSkuPC9saT5cbiAgICA8bGk+PGtiZD5DdHJsPC9rYmQ+LzxrYmQ+Q21kPC9rYmQ+K2NsaWNrIHRvIGFkZCBvciByZW1vdmUgYSByb3cgZnJvbSB0aGVcbiAgICAgIHNlbGVjdGlvbi4gPGtiZD5TaGlmdDwva2JkPitjbGljayB0byBleHRlbmQgdGhlIHNlbGVjdGlvbiBpbiBhIHJhbmdlLjwvbGk+XG4gICAgPGxpPlNlbGVjdGluZyBhIHJlZ2lvbiBpbiB0aGUgZGlhZ3JhbSBoaWdobGlnaHRzIHRoZSBtYXRjaGluZyByb3cgaW4gdGhlXG4gICAgICB0YWJsZS48L2xpPlxuICAgIDxsaT5DbGlja3Mgb24gdGhlIGNvbG91ciBwaWNrZXIsIHRoZSB0cmFzaCBpY29uLCBvciB0aGUgYWN0aXZlIGNsYXNzLWVkaXRcbiAgICAgIGlucHV0IGRvIG5vdCBjaGFuZ2UgdGhlIHNlbGVjdGlvbiDigJQgdGhhdCdzIHN0YW5kYXJkIFByaW1lTkcgYmVoYXZpb3VyLjwvbGk+XG4gIDwvdWw+XG5cbiAgPGgzPkJ1bGsgYWN0aW9ucyBvbiB0aGUgc2VsZWN0ZWQgcm93czwvaDM+XG4gIDx1bD5cbiAgICA8bGk+PGkgY2xhc3M9XCJwaSBwaS1jaGVjay1zcXVhcmVcIj48L2k+IFNlbGVjdCBldmVyeSByZWdpb24gaW4gdGhlIHRhYmxlIGF0IG9uY2UgKGFsc28gYVxuICAgICAgcmlnaHQtY2xpY2sgYWN0aW9uIG9uIHRoZSBpbWFnZSkuPC9saT5cbiAgICA8bGk+PGkgY2xhc3M9XCJwaSBwaS10YWdzXCI+PC9pPiBFZGl0IHRoZSBsYWJlbCBvbiBldmVyeSBzZWxlY3RlZCByb3cgYXQgb25jZS48L2xpPlxuICAgIDxsaT48aSBjbGFzcz1cInBpIHBpLXRyYXNoXCI+PC9pPiBEZWxldGUgZXZlcnkgc2VsZWN0ZWQgcmVnaW9uIOKAlCBib3RoIGZyb21cbiAgICAgIHRoZSB0YWJsZSBhbmQgdGhlIGRpYWdyYW0uPC9saT5cbiAgICA8bGk+PGkgY2xhc3M9XCJwaSBwaS10aW1lcy1jaXJjbGVcIj48L2k+IERlbGV0ZSBldmVyeSByZWdpb24gb24gdGhpcyBpbWFnZS48L2xpPlxuICA8L3VsPlxuXG4gIDxoMz5Bbm5vdGF0aW9uIGNsYXNzZXMgJmFtcDsgY29sb3VycyAocHJlc2V0cyk8L2gzPlxuICA8cD5cbiAgICBQcmVzZXQgYSBjbGFzcyBvbmNlIOKAlCBhIDxiPm5hbWU8L2I+IGFuZCBhIDxiPmNvbG91cjwvYj4g4oCUIGFuZCBldmVyeSByZWdpb24gd2l0aFxuICAgIHRoYXQgY2xhc3MgbmFtZSBpcyBkcmF3biBpbiB0aGF0IGNvbG91ciwgPGI+aW5jbHVkaW5nIHJlZ2lvbnMgbG9hZGVkIGZyb20gYVxuICAgIEdlb0pTT04gbGF0ZXI8L2I+LiBUaGUgcHJlc2V0IGNvbG91ciBpcyB0aGUgc291cmNlIG9mIHRydXRoOiBvbiBsb2FkIGl0XG4gICAgPGI+b3ZlcnJpZGVzIHRoZSBjb2xvdXIgc3RvcmVkIGluIHRoZSBmaWxlPC9iPiwgc28gYSBnaXZlbiBhbm5vdGF0aW9uIHR5cGUgYWx3YXlzXG4gICAgbG9va3MgdGhlIHNhbWUgYWNyb3NzIGltYWdlcyBhbmQgc2Vzc2lvbnMuXG4gIDwvcD5cbiAgPHA+U2V0IHVwIHlvdXIgY2xhc3NlcyBpbiB0aGUgYW5ub3RhdGlvbi1jbGFzcyBtYW5hZ2VyIOKAlFxuICAgIDxpIGNsYXNzPVwicGkgcGktY29nXCI+PC9pPiA8Yj5NYW5hZ2U8L2I+OjwvcD5cbiAgPG9sPlxuICAgIDxsaT48Yj5BZGQgY2xhc3M8L2I+LCB0aGVuIHR5cGUgdGhlIGNsYXNzIDxiPm5hbWUgZXhhY3RseSBhcyBpdCBhcHBlYXJzIGluIHlvdXJcbiAgICAgIGRhdGE8L2I+IChlLmcuIDxjb2RlPlR1bW9yPC9jb2RlPikgYW5kIHBpY2sgaXRzIDxiPmNvbG91cjwvYj4gZnJvbSB0aGUgc3dhdGNoLlxuICAgICAgUmVwZWF0IGZvciBlYWNoIGNsYXNzLjwvbGk+XG4gICAgPGxpPk9wdGlvbmFsbHk6IGVkaXQgdGhlIDxiPmZhbGxiYWNrIHBhbGV0dGU8L2I+IChjb2xvdXJzIGdpdmVuIHRvIGNsYXNzZXMgdGhhdFxuICAgICAgYXJlbid0IGluIHlvdXIgbGlzdCksIHRvZ2dsZSA8Yj5hdXRvLWFkZDwvYj4gKGFkZHMgdW5tYXRjaGVkIGNsYXNzZXMgZm91bmQgb25cbiAgICAgIGxvYWQpLCBhbmQgY2hvb3NlIDxiPmV4YWN0PC9iPiB2cy4gPGI+bm9ybWFsaXplZDwvYj4gbmFtZSBtYXRjaGluZyDigJQgbm9ybWFsaXplZFxuICAgICAgaWdub3JlcyBjYXNlIGFuZCBzdXJyb3VuZGluZyBzcGFjZXMsIHNvIDxjb2RlPnR1bW9yPC9jb2RlPiBtYXRjaGVzXG4gICAgICA8Y29kZT5UdW1vcjwvY29kZT4uPC9saT5cbiAgICA8bGk+PGI+QXBwbHkuPC9iPiBQcmVzZXRzIGFyZSBzYXZlZCA8Yj5wZXIgdXNlcjwvYj4gb24gdGhlIHNlcnZlciwgc28gdGhleSBmb2xsb3dcbiAgICAgIHlvdSBhY3Jvc3MgaW1hZ2VzIGFuZCBzZXNzaW9ucy4gWW91IGNhbiBhbHNvIDxiPnJlc2V0IHRvIGRlZmF1bHRzPC9iPiBvclxuICAgICAgPGI+aW1wb3J0IC8gZXhwb3J0PC9iPiB0aGUgc2V0IGFzIEpTT04gdG8gc2hhcmUgaXQuPC9saT5cbiAgPC9vbD5cbiAgPHA+XG4gICAgTmV4dCB0aW1lIHlvdSBvcGVuIG9yIDxpIGNsYXNzPVwicGkgcGktdXBsb2FkXCI+PC9pPiBpbXBvcnQgYSBHZW9KU09OIHdob3NlIHJlZ2lvbnNcbiAgICBjYXJyeSB0aG9zZSBjbGFzcyBuYW1lcywgZWFjaCByZWdpb24gaXMgc2hvd24gaW4gaXRzIHByZXNldCBjb2xvdXIgYXV0b21hdGljYWxseSDigJRcbiAgICBubyByZS1jb2xvdXJpbmcgbmVlZGVkLiBBIGNsYXNzIHRoYXQgaXNuJ3QgaW4geW91ciBsaXN0IGluc3RlYWQgZ2V0cyBhIHN0YWJsZVxuICAgIGNvbG91ciBmcm9tIHRoZSBmYWxsYmFjayBwYWxldHRlLlxuICA8L3A+XG4gIDxwPkRheSB0byBkYXk6PC9wPlxuICA8dWw+XG4gICAgPGxpPlRoZSA8Yj5jbGFzcyBzdHJpcDwvYj4gYWJvdmUgdGhlIHRhYmxlIGxpc3RzIHlvdXIgcHJlc2V0cyB3aXRoIHRoZWlyIGNvbG91cnMuXG4gICAgICBDbGljayBhIGNsYXNzIHRvIG1ha2UgaXQgPGI+YWN0aXZlPC9iPiAobmV3IHJlZ2lvbnMgaW5oZXJpdCBpdCk7IHdpdGggcm93c1xuICAgICAgc2VsZWN0ZWQsIGNsaWNraW5nIGEgY2xhc3MgcmUtY2xhc3NpZmllcyB0aGVtLjwvbGk+XG4gICAgPGxpPlRoZSA8Yj5DbGFzczwvYj4gY29sdW1uIGRyb3Bkb3duIHJlLWNsYXNzaWZpZXMgb25lIHJlZ2lvbiB0byBhIHByZXNldCAoaXRzXG4gICAgICBjb2xvdXIgZm9sbG93cyksIG9yIHVzZSB0aGUgPGkgY2xhc3M9XCJwaSBwaS1wZW5jaWxcIj48L2k+IGZvciBhIGZyZWUtZm9ybSBuYW1lLjwvbGk+XG4gICAgPGxpPlJlY29sb3VyIGEgY2xhc3MgZnJvbSBpdHMgc3dhdGNoIChjbGFzcyBzdHJpcCBvciBNYW5hZ2UpIGFuZCBldmVyeSByZWdpb24gb2ZcbiAgICAgIHRoYXQgY2xhc3MgdXBkYXRlcyBhdCBvbmNlLjwvbGk+XG4gICAgPGxpPkRlbGV0aW5nIGEgY2xhc3MgcmVhc3NpZ25zIGl0cyByZWdpb25zIHRvIHRoZSBkZWZhdWx0IDxiPlJlZ2lvbjwvYj4gY2xhc3MuPC9saT5cbiAgICA8bGk+QSBjb2xvdXIgeW91IHNldCBvbiBhIDxiPnNpbmdsZTwvYj4gcmVnaW9uICg8aSBjbGFzcz1cInBpIHBpLXBhbGV0dGVcIj48L2k+XG4gICAgICBTZWxlY3RlZCByZWdpb25zKSBpcyBrZXB0IGFuZCBpcyBub3Qgb3ZlcnJpZGRlbiBieSBpdHMgY2xhc3MuPC9saT5cbiAgPC91bD5cblxuICA8aDM+UmVnaW9uIGFjdGlvbnMgKHJpZ2h0LWNsaWNrIHRoZSBkaWFncmFtKTwvaDM+XG4gIDxwPlJpZ2h0LWNsaWNrIGEgcmVnaW9uIOKAlCBvciB0aGUgY3VycmVudCBtdWx0aS1zZWxlY3Rpb24g4oCUIG9uIHRoZSBkaWFncmFtIGZvclxuICAgIHRoZSBcIlNlbGVjdGVkIHJlZ2lvbihzKVwiIGFjdGlvbnM6PC9wPlxuICA8dWw+XG4gICAgPGxpPjxiPk1lcmdlIC8gZ3JvdXA8L2I+IOKAlCBjb21iaW5lIDIrIHNlbGVjdGVkIHJlZ2lvbnMgaW50byBvbmUgKGl0IG1heSBlbmRcbiAgICAgIHVwIG11bHRpLXBhcnQgaWYgdGhlIHBpZWNlcyBkb24ndCB0b3VjaCkuPC9saT5cbiAgICA8bGk+PGI+VW5ncm91cDwvYj4g4oCUIHNwbGl0IGEgbXVsdGktcGFydCByZWdpb24gYmFjayBpbnRvIHNlcGFyYXRlIHJlZ2lvbnMuPC9saT5cbiAgICA8bGk+PGI+SW52ZXJzZTwvYj4g4oCUIHJlcGxhY2UgdGhlIHNlbGVjdGlvbiB3aXRoIGV2ZXJ5dGhpbmcgb3V0c2lkZSBpdCAodGhlXG4gICAgICByZWdpb25zIGJlY29tZSBob2xlcyBpbiB0aGUgaW1hZ2UgcmVjdGFuZ2xlKS48L2xpPlxuICAgIDxsaT48Yj5TaW1wbGlmeTwvYj4g4oCUIHJlZHVjZSB0aGUgdmVydGV4IGNvdW50IChEb3VnbGFz4oCTUGV1Y2tlcikgYnkgYSBwaXhlbFxuICAgICAgdGhyZXNob2xkOyBwaWNrIGEgcHJlc2V0IG9yIGEgY3VzdG9tIHZhbHVlLjwvbGk+XG4gICAgPGxpPjxiPkNvbnZlcnQgdG8gQsOpemllciAvIHRvIHBvbHlnb248L2I+IGFuZCA8Yj5EZWxldGU8L2I+LjwvbGk+XG4gIDwvdWw+XG5cbiAgPGgzPkRpc3BsYXkgb3B0aW9uczwvaDM+XG4gIDx1bD5cbiAgICA8bGk+PGkgY2xhc3M9XCJwaSBwaS10YWdcIj48L2k+IFRvZ2dsZSBzaG93aW5nIGNsYXNzIGxhYmVscyBvbiBldmVyeVxuICAgICAgcmVnaW9uIGluIHRoZSBkaWFncmFtIChzbG93ZXIgd2l0aCBtYW55IHJlZ2lvbnMpLjwvbGk+XG4gIDwvdWw+XG5cbiAgPGgzPkltcG9ydCAvIGV4cG9ydDwvaDM+XG4gIDx1bD5cbiAgICA8bGk+PGkgY2xhc3M9XCJwaSBwaS11cGxvYWRcIj48L2k+IEltcG9ydCByZWdpb25zIGZyb20gYSBHZW9KU09OIGZpbGUuPC9saT5cbiAgICA8bGk+PGkgY2xhc3M9XCJwaSBwaS1kb3dubG9hZFwiPjwvaT4gRXhwb3J0IHRoZSBjdXJyZW50IGltYWdlJ3MgcmVnaW9ucyB0b1xuICAgICAgYSBHZW9KU09OIGZpbGUuIChUaGUgcGVyLWltYWdlIGNhY2hlIGlzIGluLW1lbW9yeSBvbmx5IOKAlCBleHBvcnRpbmcgaXNcbiAgICAgIGhvdyB5b3UgcGVyc2lzdCByZWdpb25zIGFjcm9zcyBzZXNzaW9ucy4pPC9saT5cbiAgPC91bD5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgPHAtYnV0dG9uIGljb249XCJwaSBwaS1jaGVja1wiIChjbGljayk9XCJkaXNwbGF5SGVscERpYWxvZz1mYWxzZVwiIGxhYmVsPVwiT2tcIiBzdHlsZUNsYXNzPVwicC1idXR0b24tdGV4dFwiPlxuICAgIDwvcC1idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuXG4iXX0=
1191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlZ2lvbi1lZGl0b3IvcmVnaW9uLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3JlZ2lvbi1lZGl0b3IvcmVnaW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBMEIsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUYsT0FBTyxFQUFnQixjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7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OzBCQXVHdEIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUd4QixNQUFNOzJCQUFDLGNBQWM7eUNBbkdQLFlBQVk7c0JBQTVCLFNBQVM7dUJBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFBvbHlnb24sIFJlY3RhbmdsZSwgUmVnaW9uLCBNdWx0aVBvbHlnb24gfSBmcm9tICcuLi9tb2RlbHMvcmVnaW9uJztcbmltcG9ydCB7IFByZXNldFNldCwgQ2xhc3NQcmVzZXQsIGRlZmF1bHRQcmVzZXRTZXQgfSBmcm9tICcuLi9tb2RlbHMvY2xhc3MtcHJlc2V0JztcbmltcG9ydCB7IGNvbG9yRm9yTGFiZWwgfSBmcm9tICcuLi9zdG9yZS9jbGFzcy1jb2xvci51dGlsJztcbmltcG9ydCB7IElJbWFnZU1ldGFkYXRhIH0gZnJvbSAnLi4vY29udHJhY3RzL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgSVJlZ2lvbkVkaXRvckFwaSwgUkVHSU9OX0VESVRPUl9BUEkgfSBmcm9tICcuLi9jb250cmFjdHMvcmVnaW9uLWVkaXRvci1hcGkuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVnaW9uSW9Qb3J0LCBSRUdJT05fSU9fUE9SVCB9IGZyb20gJy4uL2NvbnRyYWN0cy9wb3J0cy9yZWdpb24taW8ucG9ydCc7XG5pbXBvcnQgeyByZWdpb25Ub1BhcnRzLCBzY2FsZVBhcnRzLCBtYXNrU2NhbGVGb3IgfSBmcm9tICcuL21hc2stcmFzdGVyJztcbmltcG9ydCB7IFZJWl9UT0FTVF9LRVkgfSBmcm9tICcuLi90b2FzdC1vdXRsZXRzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIENhbm9uaWNhbCBwcmVmaXhlZCBzZWxlY3RvciBmaXJzdDsgdGhlIHVucHJlZml4ZWQgb3JpZ2luYWwgaXMga2VwdCBhcyBhblxuICAvLyBhbGlhcyBmb3Igb25lIHJlbGVhc2UgKHByZS1wdWJsaWNhdGlvbiBiYWNrLWNvbXBhdCkuXG4gIHNlbGVjdG9yOiAncmVnaW9uLWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWdpb24tZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVnaW9uLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSZWdpb25FZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBBcnJheSA9IEFycmF5O1xuXG4gIEBWaWV3Q2hpbGQoJ29wJykgb3ZlcmxheVBhbmVsITogT3ZlcmxheVBhbmVsO1xuXG4gIHJlZ2lvbnM6IFJlZ2lvbltdID0gW107XG4gIHJlZ2lvbnNDb3B5OiBSZWdpb25bXSA9IFtdO1xuICBzZWxlY3RlZFJlZ2lvbnM6IFJlZ2lvbltdID0gW107XG4gIHNob3dTaGFwZUxhYmVsITogYm9vbGVhbjtcbiAgc2hhcGVDb2xvciE6IHN0cmluZztcbiAgZmlsbENvbG9yITogc3RyaW5nO1xuICBkaXNwbGF5SGVscERpYWxvZyA9IGZhbHNlO1xuICBzaG93Q29sb3JEaWFsb2cgPSBmYWxzZTtcbiAgLyoqIE9uZSBjb2xvdXIgZWRpdG9yIHBlciB1bmlxdWUgY2xhc3MgYW1vbmcgdGhlIHNlbGVjdGVkIHJlZ2lvbnMsIHNob3duIGluIHRoZVxuICAgKiAgXCJlZGl0IGNvbG91ciBvZiBzZWxlY3RlZCByZWdpb25zXCIgZGlhbG9nLiBVbmNsYXNzaWZpZWQgcmVnaW9ucyAobm8gbGFiZWwpXG4gICAqICBhcmUgZ3JvdXBlZCB1bmRlciBhIHNpbmdsZSBlbnRyeSB3aXRoIGFuIGVtcHR5IGBsYWJlbGAuICovXG4gIGNsYXNzQ29sb3JFZGl0czogeyBsYWJlbDogc3RyaW5nOyBjb2xvcjogc3RyaW5nIH1bXSA9IFtdO1xuICBsYWJlbENvbG9yczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgc2VsZWN0ZWRMYWJlbENvbG9yID0gJyc7XG4gIC8qKiBcIkVkaXQgY2xhc3Mgb24gc2VsZWN0ZWQgcm93c1wiIHBvcHVwOiBjaG9zZW4gZXhpc3RpbmcgY2xhc3MsIGFuZCBhIG5ldy1jbGFzcyBuYW1lLiAqL1xuICBidWxrQ2xhc3MgPSAnJztcbiAgbmV3QnVsa0NsYXNzID0gJyc7XG5cbiAgLy8g4pSA4pSAIGFubm90YXRpb24tY2xhc3MgcHJlc2V0cyAoaml0LXVpIzcwKSDilIDilIBcbiAgLyoqIExvY2FsIG1pcnJvciBvZiB0aGUgcGVyLXVzZXIgcHJlc2V0IHNldCAoY2hpcCBzdHJpcCwgQ2xhc3MgZHJvcGRvd24sIGRpYWxvZykuICovXG4gIHByZXNldFNldDogUHJlc2V0U2V0ID0gZGVmYXVsdFByZXNldFNldCgpO1xuICAvKiogQ2xhc3MgYXBwbGllZCB0byBuZXdseSBkcmF3bi9hZGRlZCByZWdpb25zIGFuZCB0byBidWxrIGNoaXAtY2xpY2tzLiAqL1xuICBhY3RpdmVDbGFzczogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNob3dNYW5hZ2VEaWFsb2cgPSBmYWxzZTtcbiAgLyoqIFdvcmtpbmcgY29weSBlZGl0ZWQgaW5zaWRlIHRoZSBNYW5hZ2UtY2xhc3NlcyBkaWFsb2c7IGNvbW1pdHRlZCBvbiBBcHBseS9Eb25lLiAqL1xuICBwcmVzZXREcmFmdDogUHJlc2V0U2V0IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBjbGFzcyBuYW1lIChtYXRjaC1tb2RlIGtleWVkKSDihpIgbnVtYmVyIG9mIHJlZ2lvbnMgY3VycmVudGx5IHVzaW5nIGl0LiAqL1xuICBjbGFzc0NvdW50cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIC8qKiBGYWxsYmFjayBjbGFzcyB0aGF0IGEgcmVnaW9uIHJldmVydHMgdG8gd2hlbiBpdHMgY2xhc3MgaXMgZGVsZXRlZCAoaml0LXVpIzcwKS4gKi9cbiAgcmVhZG9ubHkgZGVmYXVsdENsYXNzTmFtZSA9ICdSZWdpb24nO1xuICAvKiogQ2xhc3NlcyBhcyBzaG93biBpbiB0aGUgcGFuZWw6IHNvcnRlZCBieSByZWdpb24gY291bnQgKGRlc2MpLCB0aGVuIG5hbWUuICovXG4gIGRpc3BsYXlDbGFzc2VzOiBDbGFzc1ByZXNldFtdID0gW107XG4gIHJlYWRvbmx5IG1hdGNoTW9kZU9wdGlvbnMgPSBbXG4gICAgeyBsYWJlbDogJ0V4YWN0JywgdmFsdWU6ICdleGFjdCcgfSxcbiAgICB7IGxhYmVsOiAnTm9ybWFsaXplZCcsIHZhbHVlOiAnbm9ybWFsaXplZCcgfSxcbiAgXTtcblxuICBwYWdpbmF0b3JGaXJzdCA9IDA7XG4gIHBhZ2luYXRvclJvd3MgPSAxMDtcbiAgcmVhZG9ubHkgcm93c1BlclBhZ2VPcHRpb25zID0gWzEwLCAyNSwgNTBdO1xuICAvKiogUmVnaW9ucyB3aG9zZSBDbGFzcyBjZWxsIGlzIGN1cnJlbnRseSBpbiBlZGl0IG1vZGUuXG4gICAqICBVc2luZyBvYmplY3QgaWRlbnRpdHkgYXMgdGhlIGtleSBhdm9pZHMgbmVlZGluZyBhIHVuaXF1ZSBpZCBmaWVsZC4gKi9cbiAgZWRpdGluZ0xhYmVsUmVnaW9ucyA9IG5ldyBTZXQ8YW55PigpO1xuXG4gIHNob3dTYXZlQXNEaWFsb2cgPSBmYWxzZTtcbiAgc2F2ZUFzRmlsZW5hbWUgPSAnJztcbiAgc2F2ZUFzRmlsZUV4aXN0cyA9IGZhbHNlO1xuICAvKiogVHJ1ZSB3aGlsZSBhIEdlb0pTT04gcGVyc2lzdCBpcyBzZXJpYWxpemluZy91cGxvYWRpbmcg4oCUIGRyaXZlcyB0aGUgZGlhbG9nJ3NcbiAgICogIHByb2dyZXNzIGJhciBhbmQgQ2FuY2VsIGJ1dHRvbiAocGFyaXR5IHdpdGggdGhlIFNhdmUtbWFzayBkaWFsb2cpLiAqL1xuICBzYXZlQXNCdXN5ID0gZmFsc2U7XG4gIHByaXZhdGUgX3NhdmVBc0NoZWNrJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfc2F2ZUFzU3ViPzogU3Vic2NyaXB0aW9uO1xuICAvKiogSGFuZGxlIGZvciB0aGUgZGVmZXJyZWQtc2VyaWFsaXplIHRpbWVyIHNvIENhbmNlbC9kZXN0cm95IGNhbiBhYm9ydCBpdFxuICAgKiAgYmVmb3JlIGl0IGZpcmVzIChvdGhlcndpc2UgdGhlIHVwbG9hZCB3b3VsZCBzdGlsbCBzdGFydCkuICovXG4gIHByaXZhdGUgX3NhdmVBc1RpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgc2hvd0V4cG9ydERpYWxvZyA9IGZhbHNlO1xuICBleHBvcnRGaWxlbmFtZSA9ICcnO1xuXG4gIHNob3dTYXZlTWFza0RpYWxvZyA9IGZhbHNlO1xuICBzYXZlTWFza0ZpbGVuYW1lID0gJyc7XG4gIC8qKiBNYXNrIHR5cGUgY2hvc2VuIGluIHRoZSBTYXZlLW1hc2sgZGlhbG9nOiBhIGJpbmFyeSBmb3JlZ3JvdW5kL2JhY2tncm91bmRcbiAgICogIG1hc2ssIG9yIGEgbXVsdGktY2xhc3MgbWFzayB3aXRoIGEgZGlzdGluY3QgaWQgcGVyIHJlZ2lvbi4gKi9cbiAgbWFza01vZGU6ICdiaW5hcnknIHwgJ211bHRpY2xhc3MnID0gJ2JpbmFyeSc7XG4gIC8qKiBUcnVlIHdoaWxlIHRoZSBtYXNrIHdvcmtlciBpcyByYXN0ZXJpemluZy9lbmNvZGluZyDigJQgZHJpdmVzIHRoZSBwcm9ncmVzc1xuICAgKiAgYmFyIGFuZCB0aGUgQ2FuY2VsIGJ1dHRvbiBpbiB0aGUgZGlhbG9nLiAqL1xuICBtYXNrQnVzeSA9IGZhbHNlO1xuICAvKiogMOKAkzEwMCByYXN0ZXJpemF0aW9uIHByb2dyZXNzOyBzd2l0Y2hlcyB0byBpbmRldGVybWluYXRlIGR1cmluZyBlbmNvZGluZy4gKi9cbiAgbWFza1Byb2dyZXNzID0gMDtcbiAgbWFza0VuY29kaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbWFza1dvcmtlcj86IFdvcmtlcjtcbiAgcHJpdmF0ZSBwZW5kaW5nTWFza0ZpbGVuYW1lID0gJyc7XG5cbiAgLyoqXG4gICAqIFByaW1lTkcgcC10YWJsZSBtdWx0aS1zZWxlY3Rpb24gbW9kZSB0b2dnbGUuIFdoZW4gdHJ1ZSwgc2luZ2xlLWNsaWNrXG4gICAqIHNlbGVjdHMgb25lIHJvdyAocmVwbGFjaW5nIHByaW9yKTsgbWV0YS9jdHJsLWNsaWNrIHRvZ2dsZXMgYSByb3cgaW4vb3V0XG4gICAqIG9mIHRoZSBzZWxlY3Rpb24uIFdoZW4gZmFsc2UsIGV2ZXJ5IGNsaWNrIHRvZ2dsZXMuIERlZmF1bHQgdHJ1ZSB0b1xuICAgKiBtYXRjaCB0aGUgbW9zdCBjb21tb24gc3ByZWFkc2hlZXQtbGlrZSBVWC5cbiAgICovXG4gIG1ldGFLZXkgPSB0cnVlO1xuXG4gIHByaXZhdGUgX3VwZGF0aW5nRnJvbUVkaXRvciA9IGZhbHNlO1xuICBwcml2YXRlIF9zdXBwcmVzc1NlbGVjdGlvblN5bmNUb1Bsb3QgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcmVnaW9uU3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9zZWxlY3RlZElkeFN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfbWV0YVN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfcHJlc2V0U3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIC8qKiBQaHlzaWNhbCBwaXhlbCBzaXplICjCtW0vcGl4ZWwpIG9mIHRoZSBhY3RpdmUgaW1hZ2UsIGZvciByZWdpb24gYXJlYXMgaW5cbiAgICogIMK1bcKyLiBVbmRlZmluZWQgd2hlbiB0aGUgZm9ybWF0IHJlcG9ydHMgbm8gcGh5c2ljYWwgc2l6ZS4gKi9cbiAgcHJpdmF0ZSBtcHBYPzogbnVtYmVyO1xuICBwcml2YXRlIG1wcFk/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChSRUdJT05fRURJVE9SX0FQSSkgcHJpdmF0ZSByZWdpb25BcGk6IElSZWdpb25FZGl0b3JBcGksXG4gICAgcHVibGljIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgQEluamVjdChSRUdJT05fSU9fUE9SVCkgcHJpdmF0ZSByZWdpb25JbzogUmVnaW9uSW9Qb3J0LFxuICApIHt9XG5cbiAgLyoqXG4gICAqIERlZXAgY29weSBvZiByZWdpb25zIGZvciBkaXJ0eS10cmFja2luZyAoYHJlZ2lvbnNDb3B5YCkuIFJldHVybnMgcGxhaW4tb2JqZWN0XG4gICAqIGNsb25lcyDigJQgb25seSBzdHJ1Y3R1cmFsIGVxdWFsaXR5IG1hdHRlcnMgaGVyZSwgbm90IHByb3RvdHlwZXMuXG4gICAqIFRPRE86IHJlcGxhY2Ugd2l0aCBgc3RydWN0dXJlZENsb25lYCBvbmNlIHZlcmlmaWVkLlxuICAgKi9cbiAgcHJpdmF0ZSBkZWVwQ2xvbmU8VD4oaXRlbXM6IFRbXSk6IFRbXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVlcENsb25lKGl0ZW0pIGFzIHVua25vd24gYXMgVDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkOiBhbnkgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaXRlbSkge1xuICAgICAgICAgIGNsb25lZFtrZXldID0gdGhpcy5kZWVwQ2xvbmUoW2l0ZW1ba2V5XV0pWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2hvd1NoYXBlTGFiZWwgPSB0aGlzLnJlZ2lvbkFwaS5nZXRTaG93U2hhcGVMYWJlbCgpO1xuICAgIHRoaXMuc2hhcGVDb2xvciA9IHRoaXMucmVnaW9uQXBpLmdldFNoYXBlQ29sb3IoKTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IHRoaXMucmVnaW9uQXBpLmdldEZpbGxDb2xvcigpO1xuXG4gICAgLy8gQW5ub3RhdGlvbi1jbGFzcyBwcmVzZXRzIChqaXQtdWkjNzApOiBtaXJyb3IgdGhlIHNldCBmb3IgdGhlIGNoaXAgc3RyaXAsXG4gICAgLy8gdGhlIENsYXNzIGRyb3Bkb3duIGFuZCB0aGUgbWFuYWdlIGRpYWxvZy4gR3VhcmRlZCB3aXRoIG9wdGlvbmFsIGNhbGxzIHNvXG4gICAgLy8gcGFydGlhbCBBUEkgbW9ja3MgaW4gdGVzdHMgKHdoaWNoIG9taXQgdGhlIHByZXNldCBtZXRob2RzKSBkb24ndCB0aHJvdy5cbiAgICBjb25zdCBpbml0aWFsUHJlc2V0cyA9IHRoaXMucmVnaW9uQXBpLmdldFByZXNldFNldD8uKCk7XG4gICAgaWYgKGluaXRpYWxQcmVzZXRzKSB0aGlzLnByZXNldFNldCA9IGluaXRpYWxQcmVzZXRzO1xuICAgIGNvbnN0IHByZXNldHMkID0gdGhpcy5yZWdpb25BcGkuZ2V0UHJlc2V0U2V0JD8uKCk7XG4gICAgaWYgKHByZXNldHMkKSB7XG4gICAgICB0aGlzLl9wcmVzZXRTdWIgPSBwcmVzZXRzJC5zdWJzY3JpYmUoKHNldCkgPT4ge1xuICAgICAgICBpZiAoc2V0KSB0aGlzLnByZXNldFNldCA9IHNldDtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5Q2xhc3NlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFNlZWQgZnJvbSB0aGUgdmlzdWFsaXplcidzIGN1cnJlbnQgcmVnaW9ucyDigJQgYWxyZWFkeSBzY29wZWQgdG8gdGhlXG4gICAgLy8gYWN0aXZlIGltYWdlIGJ5IHRoZSBwZXItaW1hZ2UgY2FjaGUsIGFuZCBoYW5kZWQgYmFjayBhcyBuZXV0cmFsIFJlZ2lvblxuICAgIC8vIG9iamVjdHMgKG5vIGJhY2tlbmQgc2hhcGUgZm9ybWF0IGludm9sdmVkKS5cbiAgICAvLyBBbm5vdGF0aW9uIHJlZ2lvbnMgb25seSDigJQgaW50ZW5zaXR5LXByb2ZpbGUgbGluZXMgYXJlIG93bmVkIGJ5IHRoZVxuICAgIC8vIGludGVuc2l0eSB0b29sIGFuZCBleGNsdWRlZCBieSB0aGUgY29udHJhY3QsIHNvIHRoZSBlZGl0b3IgbmV2ZXIgc2VlcyB0aGVtLlxuICAgIHRoaXMucmVnaW9ucyA9IHRoaXMuYXBwbHlSZWdpb25Db2xvcnModGhpcy5yZWdpb25BcGkuZ2V0QW5ub3RhdGlvblJlZ2lvbnMoKSk7XG4gICAgdGhpcy5yZWdpb25zQ29weSA9IHRoaXMuZGVlcENsb25lKHRoaXMucmVnaW9ucyk7XG4gICAgdGhpcy5zeW5jQ2xhc3Nlc0Zyb21SZWdpb25zKHRoaXMucmVnaW9ucyk7XG4gICAgdGhpcy5yZWNvbXB1dGVDbGFzc0NvdW50cygpO1xuXG4gICAgLy8gVGhlIHVwZGF0ZSBldmVudCBpcyBqdXN0IGEgY2hhbmdlIHNpZ25hbDsgcmUtcmVhZCB0aGUgcmVnaW9ucyBmcm9tIHRoZVxuICAgIC8vIHZpc3VhbGl6ZXIgcmF0aGVyIHRoYW4gcGFyc2luZyB3aGF0ZXZlciBwYXlsb2FkIGl0IGNhcnJpZXMuXG4gICAgdGhpcy5fcmVnaW9uU3ViID0gdGhpcy5yZWdpb25BcGkuZ2V0UmVnaW9uVXBkYXRlRXZlbnQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3VwZGF0aW5nRnJvbUVkaXRvcikgcmV0dXJuO1xuICAgICAgY29uc3QgdXBkYXRlZCA9IHRoaXMuYXBwbHlSZWdpb25Db2xvcnModGhpcy5yZWdpb25BcGkuZ2V0QW5ub3RhdGlvblJlZ2lvbnMoKSk7XG4gICAgICAvLyBwcmVzZXJ2ZSBzZWxlY3Rpb24gZm9yIHJlZ2lvbnMgdGhhdCBzdGlsbCBleGlzdCAoYnkgaWQsIHNpbmNlIG5hbWVcbiAgICAgIC8vIGlzIGEgdXNlci1lZGl0YWJsZSBkaXNwbGF5IGxhYmVsIGFuZCBtYXkgY29sbGlkZSlcbiAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gbmV3IFNldCh0aGlzLnNlbGVjdGVkUmVnaW9ucy5tYXAoKHIpID0+IHIuaWQpKTtcbiAgICAgIHRoaXMucmVnaW9ucyA9IHVwZGF0ZWQ7XG4gICAgICB0aGlzLnJlZ2lvbnNDb3B5ID0gdGhpcy5kZWVwQ2xvbmUodGhpcy5yZWdpb25zKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWdpb25zID0gdXBkYXRlZC5maWx0ZXIoKHIpID0+IHNlbGVjdGVkSWRzLmhhcyhyLmlkKSk7XG4gICAgICB0aGlzLmNsYW1wUGFnaW5hdG9yRmlyc3QoKTtcbiAgICAgIHRoaXMuc3luY0NsYXNzZXNGcm9tUmVnaW9ucyh1cGRhdGVkKTtcbiAgICAgIHRoaXMucmVjb21wdXRlQ2xhc3NDb3VudHMoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3NhdmVBc0NoZWNrJC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDQwMCksXG4gICAgICBzd2l0Y2hNYXAobmFtZSA9PiB0aGlzLnJlZ2lvbklvLnJvaUZpbGVFeGlzdHMobmFtZSkpLFxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGV4aXN0cyA9PiB7IHRoaXMuc2F2ZUFzRmlsZUV4aXN0cyA9IGV4aXN0czsgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7IHRoaXMuc2F2ZUFzRmlsZUV4aXN0cyA9IGZhbHNlOyB9LFxuICAgIH0pO1xuXG4gICAgLy8gUGh5c2ljYWwgcGl4ZWwgc2l6ZSBvZiB0aGUgYWN0aXZlIGltYWdlIChmb3IgcmVnaW9uIGFyZWFzIGluIMK1bcKyL21twrIpLlxuICAgIC8vIE1pcnJvciBQbG90bHlTZXJ2aWNlLmN1cnJlbnRNcHA6IHRoZSBjYWxpYnJhdGlvbiBtYXkgc2l0IG9uIGFueSBjaGFubmVsXG4gICAgLy8gZW50cnksIG5vdCBuZWNlc3NhcmlseSBbMF0sIHNvIHBpY2sgdGhlIGZpcnN0IGVudHJ5IHdpdGggYSBwb3NpdGl2ZSBtcHBYXG4gICAgLy8gcmF0aGVyIHRoYW4gcmVhZGluZyBbMF0gYmxpbmRseS4gRmFsbCBiYWNrIHRvIHNxdWFyZSBwaXhlbHMgKG1wcFkgPSBtcHBYKVxuICAgIC8vIHdoZW4gb25seSBvbmUgYXhpcyBpcyByZXBvcnRlZC5cbiAgICB0aGlzLl9tZXRhU3ViID0gdGhpcy5yZWdpb25BcGkuZ2V0SW1hZ2VNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICBjb25zdCB7IG1wcFgsIG1wcFkgfSA9IHRoaXMucGlja01wcChtZXRhKTtcbiAgICAgIHRoaXMubXBwWCA9IG1wcFg7XG4gICAgICB0aGlzLm1wcFkgPSBtcHBZO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc2VsZWN0ZWRJZHhTdWIgPSB0aGlzLnJlZ2lvbkFwaS5nZXRTZWxlY3RlZFJlZ2lvbnMkKCkuc3Vic2NyaWJlKChzZWxlY3RlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3N1cHByZXNzU2VsZWN0aW9uU3luY1RvUGxvdCkgcmV0dXJuO1xuICAgICAgLy8gTWFwIHRoZSBjb250cmFjdCdzIHNlbGVjdGVkIHJlZ2lvbnMgdG8gdGhlIGVkaXRvcidzIG93biBpbnN0YW5jZXMgYnkgaWQuXG4gICAgICBjb25zdCBuZXh0ID0gc2VsZWN0ZWRcbiAgICAgICAgLm1hcCgocykgPT4gdGhpcy5yZWdpb25zLmZpbmQoKHIpID0+IHIuaWQgPT09IHMuaWQpKVxuICAgICAgICAuZmlsdGVyKChyKTogciBpcyBSZWdpb24gPT4gISFyKTtcbiAgICAgIGNvbnN0IHNhbWUgPVxuICAgICAgICBuZXh0Lmxlbmd0aCA9PT0gdGhpcy5zZWxlY3RlZFJlZ2lvbnMubGVuZ3RoICYmXG4gICAgICAgIG5leHQuZXZlcnkoKHIsIGkpID0+IHIuaWQgPT09IHRoaXMuc2VsZWN0ZWRSZWdpb25zW2ldPy5pZCk7XG4gICAgICBpZiAoIXNhbWUpIHRoaXMuc2VsZWN0ZWRSZWdpb25zID0gbmV4dDtcbiAgICAgIC8vIFNjcm9sbCB0aGUgcGFnaW5hdG9yIHNvIHRoZSBtb3N0LXJlY2VudGx5LXNlbGVjdGVkIHJvdyBpcyB2aXNpYmxlLlxuICAgICAgaWYgKG5leHQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBsYXN0SWR4ID0gdGhpcy5yZWdpb25zLmZpbmRJbmRleCgocikgPT4gci5pZCA9PT0gbmV4dFtuZXh0Lmxlbmd0aCAtIDFdLmlkKTtcbiAgICAgICAgaWYgKGxhc3RJZHggPj0gMCkge1xuICAgICAgICAgIGNvbnN0IHBhZ2VTdGFydCA9IE1hdGguZmxvb3IobGFzdElkeCAvIHRoaXMucGFnaW5hdG9yUm93cykgKiB0aGlzLnBhZ2luYXRvclJvd3M7XG4gICAgICAgICAgaWYgKHBhZ2VTdGFydCAhPT0gdGhpcy5wYWdpbmF0b3JGaXJzdCkgdGhpcy5wYWdpbmF0b3JGaXJzdCA9IHBhZ2VTdGFydDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaW9uU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc2VsZWN0ZWRJZHhTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9tZXRhU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fcHJlc2V0U3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuX3NhdmVBc1RpbWVyICE9PSB1bmRlZmluZWQpIGNsZWFyVGltZW91dCh0aGlzLl9zYXZlQXNUaW1lcik7XG4gICAgdGhpcy5fc2F2ZUFzU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudGVhcmRvd25NYXNrV29ya2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogVGFibGUg4oaSIFBsb3Q6IFByaW1lTkcgZmlyZXMgb25Sb3dTZWxlY3Qvb25Sb3dVbnNlbGVjdCBhZnRlciB1cGRhdGluZ1xuICAgKiBgc2VsZWN0ZWRSZWdpb25zYC4gUHVzaCB0aGUgc2VsZWN0ZWQgcmVnaW9ucyB0byB0aGUgY29udHJhY3QgYnkgaWRlbnRpdHkg4oCUXG4gICAqIHRoZSBwYWNrYWdlIG1hcHMgdGhlbSB0byBpdHMgaW50ZXJuYWwgaW5kZXggc3BhY2UgKHdoaWNoIGluY2x1ZGVzIHRoZVxuICAgKiBpbnRlbnNpdHktcHJvZmlsZSBsaW5lcyB0aGUgZWRpdG9yIG5ldmVyIHNlZXMpLlxuICAgKi9cbiAgb25TZWxlY3Rpb25DaGFuZ2VkKCkge1xuICAgIHRoaXMuX3N1cHByZXNzU2VsZWN0aW9uU3luY1RvUGxvdCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVnaW9uQXBpLnNldFNlbGVjdGVkUmVnaW9ucyh0aGlzLnNlbGVjdGVkUmVnaW9ucyA/PyBbXSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3N1cHByZXNzU2VsZWN0aW9uU3luY1RvUGxvdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBjbGFzc2lmaWNhdGlvbiBjb2xvdXJzIGFuZCByZWZyZXNoIHRoZSBsYWJlbOKGkmNvbG91ciBtYXAgZm9yIHJlZ2lvbnNcbiAgICogY29taW5nIGZyb20gdGhlIHZpc3VhbGl6ZXIuIFRoZSB2aXN1YWxpemVyIGhhbmRzIGJhY2sgbmV1dHJhbCBgUmVnaW9uYFxuICAgKiBvYmplY3RzIHdpdGggYm91bmRzLCBjb2xvdXIgYW5kIGxhYmVsIGFscmVhZHkgcG9wdWxhdGVkLCBzbyB0aGUgZWRpdG9yIG5vXG4gICAqIGxvbmdlciBwYXJzZXMgYW55IGJhY2tlbmQtc3BlY2lmaWMgc2hhcGUgZm9ybWF0IOKAlCBpdCBvbmx5IGZpbGxzIGluIGFcbiAgICogZmFsbGJhY2sgY29sb3VyIGFuZCByZWJ1aWxkcyBpdHMgbG9jYWwgbGFiZWzihpJjb2xvdXIgbG9va3VwLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVJlZ2lvbkNvbG9ycyhyZWdpb25zOiBSZWdpb25bXSk6IFJlZ2lvbltdIHtcbiAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiByZWdpb25zKSB7XG4gICAgICByZWdpb24uY29sb3IgPVxuICAgICAgICByZWdpb24uY29sb3IgfHxcbiAgICAgICAgdGhpcy5yZWdpb25BcGkuZ2V0Q2xhc3NpZmljYXRpb25Db2xvcnMoKS5nZXQocmVnaW9uLmxhYmVsID8/ICcnKSB8fFxuICAgICAgICB0aGlzLnNoYXBlQ29sb3I7XG4gICAgfVxuICAgIC8vIFJlYnVpbGQgbGFiZWxDb2xvcnM6IHNlZWQgZnJvbSBwZXJzaXN0ZWQgbWFwLCB0aGVuIG92ZXJsYXkgYWN0dWFsIHJlZ2lvbiBjb2xvcnNcbiAgICB0aGlzLmxhYmVsQ29sb3JzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCBbbGFiZWwsIGNvbG9yXSBvZiB0aGlzLnJlZ2lvbkFwaS5nZXRDbGFzc2lmaWNhdGlvbkNvbG9ycygpKSB7XG4gICAgICB0aGlzLmxhYmVsQ29sb3JzLnNldChsYWJlbCwgY29sb3IpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiByZWdpb25zKSB7XG4gICAgICBpZiAocmVnaW9uLmxhYmVsICYmIHJlZ2lvbi5jb2xvcikge1xuICAgICAgICB0aGlzLmxhYmVsQ29sb3JzLnNldChyZWdpb24ubGFiZWwsIHJlZ2lvbi5jb2xvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZWdpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1c2ggZWRpdHMgZnJvbSB0aGUgZWRpdG9yIHRvIHRoZSBkaWFncmFtIGluIGxpdmUtZWRpdCBtb2RlIChubyBzYXZlIC9cbiAgICogY2FuY2VsIGJ1dHRvbnMpLiBUaGUgYF91cGRhdGluZ0Zyb21FZGl0b3JgIGd1YXJkIGlzIHN0aWxsIHVzZWQgc28gdGhlXG4gICAqIHJlc3VsdGluZyByZWdpb25VcGRhdGVFdmVudCBkb2Vzbid0IGJvdW5jZSBiYWNrIGFzIGFuIGV4dGVybmFsIGNoYW5nZS5cbiAgICovXG4gIHByaXZhdGUgc2V0UmVnaW9uc0Zyb21FZGl0b3IoZmlsbENvbG9yPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fdXBkYXRpbmdGcm9tRWRpdG9yID0gdHJ1ZTtcbiAgICAvLyBpc1JlZ2lvblNhdmVPbj10cnVlIHNvIGNoYW5nZXMgY29tbWl0IHRvIHRoZSByZWdpb24gc3RvcmUgKGFuZCB0aGUgcGVyLWltYWdlXG4gICAgLy8gY2FjaGUpIGltbWVkaWF0ZWx5LiBzZXRBbm5vdGF0aW9uUmVnaW9ucyBwcmVzZXJ2ZXMgdGhlIGludGVuc2l0eS1wcm9maWxlXG4gICAgLy8gbGluZXMgaW50ZXJuYWxseSwgc28gZWRpdG9yIGVkaXRzIG5ldmVyIGRpc3R1cmIgdGhlbS5cbiAgICB0aGlzLnJlZ2lvbkFwaS5zZXRBbm5vdGF0aW9uUmVnaW9ucyh0aGlzLnJlZ2lvbnMsIHRoaXMuc2hvd1NoYXBlTGFiZWwsIHRydWUsIGZpbGxDb2xvciA/PyB0aGlzLmZpbGxDb2xvcik7XG4gICAgdGhpcy5fdXBkYXRpbmdGcm9tRWRpdG9yID0gZmFsc2U7XG4gICAgLy8gVGhlIGVkaXRvcidzIG93biBjb21taXQgaXMgaWdub3JlZCBieSB0aGUgcmVnaW9uLXVwZGF0ZSBzdWJzY3JpcHRpb24gKHRoZVxuICAgIC8vIF91cGRhdGluZ0Zyb21FZGl0b3IgZ3VhcmQpLCBzbyByZWZyZXNoIGhlcmU6IGEgY2xhc3MgbGFiZWwgdHlwZWQgaW4gdGhlXG4gICAgLy8gQ2xhc3MgY29sdW1uIGdldHMgYWRkZWQgdG8gdGhlIGxpc3QsIGFuZCB0aGUgcGFuZWwgY291bnRzL29yZGVyIHN0YXkgaW5cbiAgICAvLyBzeW5jIGFmdGVyIGFueSBlZGl0LiAoaml0LXVpIzcwKVxuICAgIHRoaXMuc3luY0NsYXNzZXNGcm9tUmVnaW9ucyh0aGlzLnJlZ2lvbnMpO1xuICAgIHRoaXMucmVjb21wdXRlQ2xhc3NDb3VudHMoKTtcbiAgfVxuXG4gIC8qKiBTZXQgb25lIHJlZ2lvbidzIG91dGxpbmUgY29sb3VyIGZyb20gdGhlIHBlci1yb3cgcGlja2VyIGFuZCBjb21taXQgbGl2ZS5cbiAgICogIFJlbWVtYmVycyBpdCBhcyB0aGUgbGFiZWwncyBjb2xvdXIgc28gc2FtZS1jbGFzcyByZWdpb25zIGFkZGVkIGxhdGVyIG1hdGNoXG4gICAqICAoaml0LXVpIzg1IOKAlCB0aGUgUmVnaW9uIEVkaXRvcidzIHBlci1yZWdpb24gQ29sb3IgY29sdW1uKS4gKi9cbiAgY2hhbmdlUmVnaW9uQ29sb3IocmVnaW9uOiBSZWdpb24sIGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWNvbG9yIHx8IHJlZ2lvbi5jb2xvciA9PT0gY29sb3IpIHJldHVybjtcbiAgICByZWdpb24uY29sb3IgPSBjb2xvcjtcbiAgICByZWdpb24uY29sb3JPdmVycmlkZGVuID0gdHJ1ZTsgLy8gZXhwbGljaXQgcGVyLXJlZ2lvbiBjb2xvdXIg4oCUIHByZXNlcnZlIGl0IGFnYWluc3QgcHJlc2V0IChyZSlhcHBseSAoaml0LXVpIzcwKVxuICAgIGlmIChyZWdpb24ubGFiZWwpIHRoaXMubGFiZWxDb2xvcnMuc2V0KHJlZ2lvbi5sYWJlbCwgY29sb3IpO1xuICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgfVxuXG4gIGFkZFJlY3RhbmdsZSgpIHtcbiAgICBjb25zdCByZWdpb24gPSBuZXcgUmVnaW9uKCk7XG4gICAgcmVnaW9uLmJvdW5kcyA9IG5ldyBSZWN0YW5nbGUoKTtcbiAgICByZWdpb24uYm91bmRzLndpZHRoID0gNTEyO1xuICAgIHJlZ2lvbi5ib3VuZHMuaGVpZ2h0ID0gNTEyO1xuICAgIHJlZ2lvbi5sYWJlbCA9IHRoaXMuYWN0aXZlQ2xhc3MgPz8gJ1JlZ2lvbic7XG4gICAgLy8gaWQgYW5kIGEgbm9uLWNvbGxpZGluZyBuYW1lIGFyZSBtaW50ZWQgYnkgdGhlIHZpc3VhbGl6ZXIncyBzZXRSZWdpb25zXG4gICAgdGhpcy5yZWdpb25zID0gWy4uLnRoaXMucmVnaW9ucywgcmVnaW9uXTtcbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gICAgdGhpcy5yZWdpb25zQ29weSA9IHRoaXMuZGVlcENsb25lKHRoaXMucmVnaW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBsYWJlbCBvZiB0aGUgcmVnaW9uIG9uIGVudGVyIGtleSBwcmVzc2VkICh3aGVuIGVkaXRpbmcgYSBsYWJlbCBjZWxsIGluIHRoZSB0YWJsZSlcbiAgICogQHBhcmFtIHJlZ2lvblxuICAgKiBAcGFyYW0gc2V0UmVnaW9uXG4gICAqL1xuICBsYWJlbFJlZ2lvblVwZGF0ZShyZWdpb246IFJlZ2lvbiwgc2V0UmVnaW9uID0gZmFsc2UpIHtcbiAgICBpZiAocmVnaW9uLmxhYmVsKSB7XG4gICAgICAvLyBpZiBsYWJlbCBkb2Vzbid0IGV4aXN0XG4gICAgICBpZiAoIXRoaXMubGFiZWxDb2xvcnMuaGFzKHJlZ2lvbi5sYWJlbCkpIHtcbiAgICAgICAgdGhpcy5sYWJlbENvbG9ycy5zZXQocmVnaW9uLmxhYmVsLCB0aGlzLnNoYXBlQ29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1cGRhdGUgY29sb3JzIG9mIHRoZSByZWdpb25zXG4gICAgZm9yIChjb25zdCByZWcgb2YgdGhpcy5yZWdpb25zKSB7XG4gICAgICBpZiAoIXJlZy5jb2xvcikge1xuICAgICAgICBpZiAocmVnLmxhYmVsICYmIHRoaXMubGFiZWxDb2xvcnMuaGFzKHJlZy5sYWJlbCkpIHtcbiAgICAgICAgICByZWcuY29sb3IgPSB0aGlzLmxhYmVsQ29sb3JzLmdldChyZWcubGFiZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVwZGF0ZSBsYWJlbHMgbWFwXG4gICAgdGhpcy5sYWJlbENvbG9ycy5jbGVhcigpO1xuICAgIGZvciAoY29uc3QgcmVnIG9mIHRoaXMucmVnaW9ucykge1xuICAgICAgaWYgKHJlZy5sYWJlbCAmJiByZWcuY29sb3IpIHtcbiAgICAgICAgdGhpcy5sYWJlbENvbG9ycy5zZXQocmVnLmxhYmVsLCByZWcuY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2V0UmVnaW9uKSB7XG4gICAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gICAgfVxuICB9XG4gIHhSZWN0VXBkYXRlKHJlZ2lvbjogUmVnaW9uLCBldmVudDogYW55KSB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gcmVnaW9uLmJvdW5kcztcbiAgICBpZiAocmVjdGFuZ2xlICYmIHJlY3RhbmdsZSBpbnN0YW5jZW9mIFJlY3RhbmdsZSkge1xuICAgICAgcmVjdGFuZ2xlLnggPSBldmVudC52YWx1ZTtcbiAgICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICB9XG4gIH1cbiAgeVJlY3RVcGRhdGUocmVnaW9uOiBSZWdpb24sIGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCByZWN0YW5nbGUgPSByZWdpb24uYm91bmRzO1xuICAgIGlmIChyZWN0YW5nbGUgJiYgcmVjdGFuZ2xlIGluc3RhbmNlb2YgUmVjdGFuZ2xlKSB7XG4gICAgICByZWN0YW5nbGUueSA9IGV2ZW50LnZhbHVlO1xuICAgICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICAgIH1cbiAgfVxuICB3aWR0aFJlY3RVcGRhdGUocmVnaW9uOiBSZWdpb24sIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQudmFsdWUgPT09IG51bGwgfHwgZXZlbnQudmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IHJlZ2lvbi5ib3VuZHM7XG4gICAgaWYgKHJlY3RhbmdsZSAmJiByZWN0YW5nbGUgaW5zdGFuY2VvZiBSZWN0YW5nbGUpIHtcbiAgICAgIGNvbnN0IHJlZyA9IHRoaXMucmVnaW9uc0NvcHkuZmlsdGVyKChlbGVtZW50OiBSZWdpb24pID0+IGVsZW1lbnQuaWQgPT09IHJlZ2lvbi5pZCk7XG4gICAgICBpZiAocmVnLmxlbmd0aCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3Qgb2xkV2lkdGggPSByZWdbMF0uYm91bmRzLndpZHRoO1xuICAgICAgICBjb25zdCBkaWZmV2lkdGggPSBldmVudC52YWx1ZSAtIG9sZFdpZHRoO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmVjdGFuZ2xlLnggPSBNYXRoLnJvdW5kKHJlZ1swXS5ib3VuZHMueCAtIGRpZmZXaWR0aCAvIDIpO1xuICAgICAgfVxuICAgICAgcmVjdGFuZ2xlLndpZHRoID0gZXZlbnQudmFsdWU7XG4gICAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gICAgICB0aGlzLnJlZ2lvbnNDb3B5ID0gdGhpcy5kZWVwQ2xvbmUodGhpcy5yZWdpb25zKTtcbiAgICB9XG4gIH1cbiAgaGVpZ2h0UmVjdFVwZGF0ZShyZWdpb246IFJlZ2lvbiwgZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudC52YWx1ZSA9PT0gbnVsbCB8fCBldmVudC52YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gcmVnaW9uLmJvdW5kcztcbiAgICBpZiAocmVjdGFuZ2xlICYmIHJlY3RhbmdsZSBpbnN0YW5jZW9mIFJlY3RhbmdsZSkge1xuICAgICAgY29uc3QgcmVnID0gdGhpcy5yZWdpb25zQ29weS5maWx0ZXIoKGVsZW1lbnQ6IFJlZ2lvbikgPT4gZWxlbWVudC5pZCA9PT0gcmVnaW9uLmlkKTtcbiAgICAgIGlmIChyZWcubGVuZ3RoKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBvbGRIZWlnaHQgPSByZWdbMF0uYm91bmRzLmhlaWdodDtcbiAgICAgICAgY29uc3QgZGlmZkhlaWdodCA9IGV2ZW50LnZhbHVlIC0gb2xkSGVpZ2h0O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmVjdGFuZ2xlLnkgPSBNYXRoLnJvdW5kKHJlZ1swXS5ib3VuZHMueSAtIGRpZmZIZWlnaHQgLyAyKTtcbiAgICAgIH1cbiAgICAgIHJlY3RhbmdsZS5oZWlnaHQgPSBldmVudC52YWx1ZTtcbiAgICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICAgIHRoaXMucmVnaW9uc0NvcHkgPSB0aGlzLmRlZXBDbG9uZSh0aGlzLnJlZ2lvbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShldmVudDogeyBmaXJzdD86IG51bWJlcjsgcm93cz86IG51bWJlciB9KSB7XG4gICAgdGhpcy5wYWdpbmF0b3JGaXJzdCA9IGV2ZW50LmZpcnN0ID8/IDA7XG4gICAgdGhpcy5wYWdpbmF0b3JSb3dzID0gZXZlbnQucm93cyA/PyB0aGlzLnBhZ2luYXRvclJvd3M7XG4gIH1cblxuICAvKiogU2VsZWN0IGV2ZXJ5IHJlZ2lvbiBpbiB0aGUgdGFibGUgKGFuZCBoaWdobGlnaHQgdGhlbSBvbiB0aGUgZGlhZ3JhbSkuICovXG4gIHNlbGVjdEFsbFJlZ2lvbnMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZFJlZ2lvbnMgPSBbLi4udGhpcy5yZWdpb25zXTtcbiAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZCgpO1xuICB9XG5cbiAgZGVsZXRlU2VsZWN0ZWRSZWdpb25zKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUmVnaW9ucyAmJiB0aGlzLnNlbGVjdGVkUmVnaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBGaWx0ZXIgYnkgaWQg4oCUIG9iamVjdCBpZGVudGl0eSBpc24ndCByZWxpYWJsZSBhY3Jvc3MgcmUtcGFyc2VzLFxuICAgICAgLy8gYW5kIG5hbWUgaXMgYSB1c2VyLWVkaXRhYmxlIGxhYmVsIHRoYXQgbWF5IGNvbGxpZGUuXG4gICAgICBjb25zdCByZW1vdmVkID0gbmV3IFNldCh0aGlzLnNlbGVjdGVkUmVnaW9ucy5tYXAoKHIpID0+IHIuaWQpKTtcbiAgICAgIHRoaXMucmVnaW9ucyA9IHRoaXMucmVnaW9ucy5maWx0ZXIoKHIpID0+ICFyZW1vdmVkLmhhcyhyLmlkKSk7XG4gICAgICB0aGlzLnNlbGVjdGVkUmVnaW9ucyA9IFtdO1xuICAgICAgdGhpcy5jbGFtcFBhZ2luYXRvckZpcnN0KCk7XG4gICAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gICAgICAvLyBTeW5jIHRoZSBjbGVhcmVkIHNlbGVjdGlvbiB3aXRoIHRoZSBwbG90J3MgaGlnaGxpZ2h0IHN0YXRlLlxuICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckFsbFJlZ2lvbnMoKSB7XG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAga2V5OiAncG9zaXRpb25EaWFsb2cnLFxuICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZ2lvbnM/JyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZ2lvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlZ2lvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3JGaXJzdCA9IDA7XG4gICAgICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhZGRQb2x5Z29uKCkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBSZWdpb24oKTtcbiAgICByZWdpb24uYm91bmRzID0gbmV3IFBvbHlnb24oKTtcbiAgICByZWdpb24ubGFiZWwgPSB0aGlzLmFjdGl2ZUNsYXNzID8/ICdSZWdpb24nO1xuICAgIHJlZ2lvbi5ib3VuZHMueXBvaW50cyA9IFswLCAwLCAwXTtcbiAgICByZWdpb24uYm91bmRzLnhwb2ludHMgPSBbMCwgMCwgMF07XG4gICAgcmVnaW9uLmJvdW5kcy5jb29yZGluYXRlcyA9IFtcbiAgICAgIFswLCAwXSxcbiAgICAgIFswLCAwXSxcbiAgICAgIFswLCAwXSxcbiAgICBdO1xuICAgIHJlZ2lvbi5ib3VuZHMubnBvaW50cyA9IDM7XG4gICAgdGhpcy5yZWdpb25zID0gWy4uLnRoaXMucmVnaW9ucywgcmVnaW9uXTtcbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gICAgdGhpcy5yZWdpb25zQ29weSA9IHRoaXMuZGVlcENsb25lKHRoaXMucmVnaW9ucyk7XG4gIH1cbiAgZGVsZXRlUmVnaW9uKHNoYXBlSWR4OiBudW1iZXIpIHtcbiAgICBjb25zdCByZW1vdmVkID0gdGhpcy5yZWdpb25zW3NoYXBlSWR4XTtcbiAgICB0aGlzLnJlZ2lvbnMgPSB0aGlzLnJlZ2lvbnMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBzaGFwZUlkeCk7XG4gICAgaWYgKHJlbW92ZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWdpb25zID0gdGhpcy5zZWxlY3RlZFJlZ2lvbnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSByZW1vdmVkLmlkKTtcbiAgICB9XG4gICAgdGhpcy5jbGFtcFBhZ2luYXRvckZpcnN0KCk7XG4gICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICAgIC8vIFJlLWVtaXQgdGhlIChwb3NzaWJseSB0cmltbWVkKSBzZWxlY3Rpb24gc28gdGhlIHBsb3QncyBoaWdobGlnaHQgc3RheXNcbiAgICAvLyBpbiBzeW5jIHdpdGggd2hhdCdzIHN0aWxsIGluIHRoZSB0YWJsZS5cbiAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGFtcFBhZ2luYXRvckZpcnN0KCkge1xuICAgIGNvbnN0IG1heEZpcnN0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5mbG9vcigodGhpcy5yZWdpb25zLmxlbmd0aCAtIDEpIC8gdGhpcy5wYWdpbmF0b3JSb3dzKSAqIHRoaXMucGFnaW5hdG9yUm93cyxcbiAgICApO1xuICAgIGlmICh0aGlzLnBhZ2luYXRvckZpcnN0ID4gbWF4Rmlyc3QpIHtcbiAgICAgIHRoaXMucGFnaW5hdG9yRmlyc3QgPSBtYXhGaXJzdDtcbiAgICB9XG4gIH1cbiAgY2hhbmdlU2hvd1NoYXBlTGFiZWwoc2hvd0xhYmVsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICB9XG5cbiAgaXNFZGl0aW5nTGFiZWwocmVnaW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nTGFiZWxSZWdpb25zLmhhcyhyZWdpb24pO1xuICB9XG5cbiAgc3RhcnRFZGl0TGFiZWwocmVnaW9uOiBhbnksIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7IC8vIGRvbid0IHRvZ2dsZSByb3cgc2VsZWN0aW9uXG4gICAgdGhpcy5lZGl0aW5nTGFiZWxSZWdpb25zLmFkZChyZWdpb24pO1xuICB9XG5cbiAgc3RvcEVkaXRMYWJlbChyZWdpb246IGFueSwgY29tbWl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZWRpdGluZ0xhYmVsUmVnaW9ucy5kZWxldGUocmVnaW9uKTtcbiAgICBpZiAoY29tbWl0KSB7XG4gICAgICB0aGlzLmxhYmVsUmVnaW9uVXBkYXRlKHJlZ2lvbiwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgaXNSZWN0YW5nbGUocmVnaW9uOiBSZWdpb24pIHtcbiAgICByZXR1cm4gcmVnaW9uLmJvdW5kcyBpbnN0YW5jZW9mIFJlY3RhbmdsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpb24gYXJlYSBmb3IgZGlzcGxheTogaW4gwrVtwrIgKG9yIG1twrIpIHdoZW4gdGhlIGltYWdlIHJlcG9ydHMgYSBwaHlzaWNhbFxuICAgKiBwaXhlbCBzaXplLCBvdGhlcndpc2UgaW4gcHjCsi4gRW1wdHkgc3RyaW5nIGZvciBkZWdlbmVyYXRlIHJlZ2lvbnMuXG4gICAqL1xuICByZWdpb25BcmVhKHJlZ2lvbjogUmVnaW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBweCA9IHRoaXMuYXJlYUluUGl4ZWxzKHJlZ2lvbik7XG4gICAgaWYgKHB4IDw9IDApIHJldHVybiAnJztcbiAgICBpZiAodGhpcy5tcHBYICYmIHRoaXMubXBwWSAmJiB0aGlzLm1wcFggPiAwICYmIHRoaXMubXBwWSA+IDApIHtcbiAgICAgIGNvbnN0IHVtMiA9IHB4ICogdGhpcy5tcHBYICogdGhpcy5tcHBZO1xuICAgICAgcmV0dXJuIHVtMiA+PSAxZTYgPyBgJHt0aGlzLmZtdEFyZWEodW0yIC8gMWU2KX0gbW3CsmAgOiBgJHt0aGlzLmZtdEFyZWEodW0yKX0gwrVtwrJgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5mbXRBcmVhKHB4KX0gcHjCsmA7XG4gIH1cblxuICAvKipcbiAgICogQ2hvb3NlIHRoZSBwaHlzaWNhbCBwaXhlbCBzaXplICjCtW0vcGl4ZWwpIGZvciBhcmVhIGRpc3BsYXkgZnJvbSB0aGUgaW1hZ2VcbiAgICogbWV0YS4gVGhlIGNhbGlicmF0aW9uIG1heSBzaXQgb24gYW55IGNoYW5uZWwgZW50cnkg4oCUIG5vdCBuZWNlc3NhcmlseSBbMF0g4oCUXG4gICAqIHNvIHBpY2sgdGhlIGZpcnN0IGVudHJ5IHdpdGggYSBwb3NpdGl2ZSBtcHBYIChtaXJyb3JzXG4gICAqIFBsb3RseVNlcnZpY2UuY3VycmVudE1wcCkuIEZhbGxzIGJhY2sgdG8gc3F1YXJlIHBpeGVscyAobXBwWSA9IG1wcFgpIHdoZW5cbiAgICogb25seSBvbmUgYXhpcyBpcyByZXBvcnRlZCwgc28gYSBzY2FsZWQgaW1hZ2Ugc2hvd3MgwrVtwrIvbW3CsiByYXRoZXIgdGhhbiBweMKyLlxuICAgKi9cbiAgcHJpdmF0ZSBwaWNrTXBwKG1ldGE6IElJbWFnZU1ldGFkYXRhW10gfCB1bmRlZmluZWQpOiB7IG1wcFg/OiBudW1iZXI7IG1wcFk/OiBudW1iZXIgfSB7XG4gICAgY29uc3QgbSA9IEFycmF5LmlzQXJyYXkobWV0YSlcbiAgICAgID8gKG1ldGEuZmluZCgoZSkgPT4gZSAmJiAoZS5tcHBYID8/IDApID4gMCkgPz8gbWV0YVswXSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG14ID0gbSAmJiAobS5tcHBYID8/IDApID4gMCA/IChtLm1wcFggYXMgbnVtYmVyKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBteSA9IG0gJiYgKG0ubXBwWSA/PyAwKSA+IDAgPyAobS5tcHBZIGFzIG51bWJlcikgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgbXBwWDogbXgsIG1wcFk6IG15ID8/IG14IH07XG4gIH1cblxuICAvKiogUGl4ZWwgYXJlYTogd2lkdGjCt2hlaWdodCBmb3IgcmVjdGFuZ2xlcywgc2hvZWxhY2UgZm9ybXVsYSBmb3IgcG9seWdvbnMuXG4gICAqICBJbnRlcmlvciByaW5ncyAoaG9sZXMpIGFyZSBzdWJ0cmFjdGVkLCBzbyBhIGRvbnV0IHJlcG9ydHMgdGhlIGFubnVsdXMgYXJlYSxcbiAgICogIG5vdCB0aGUgZmlsbGVkIGV4dGVyaW9yIChqaXQtdWkjODUpLiAqL1xuICBwcml2YXRlIGFyZWFJblBpeGVscyhyZWdpb246IFJlZ2lvbik6IG51bWJlciB7XG4gICAgY29uc3QgYiA9IHJlZ2lvbi5ib3VuZHM7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBSZWN0YW5nbGUpIHJldHVybiBNYXRoLmFicyhiLndpZHRoICogYi5oZWlnaHQpO1xuICAgIGlmIChiIGluc3RhbmNlb2YgUG9seWdvbikgcmV0dXJuIHRoaXMucG9seWdvbkFyZWEoYik7XG4gICAgLy8gTXVsdGktcGFydCByZWdpb246IHN1bSBlYWNoIHBhcnQncyAoZXh0ZXJpb3Ig4oiSIGhvbGVzKSBhcmVhIChqaXQtdWkjODUpLlxuICAgIGlmIChiIGluc3RhbmNlb2YgTXVsdGlQb2x5Z29uKSB7XG4gICAgICByZXR1cm4gYi5wb2x5Z29ucy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgdGhpcy5wb2x5Z29uQXJlYShwKSwgMCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqIFBvbHlnb24gYXJlYTogZXh0ZXJpb3Igc2hvZWxhY2UgbWludXMgZWFjaCBpbnRlcmlvciByaW5nIChob2xlKS4gKi9cbiAgcHJpdmF0ZSBwb2x5Z29uQXJlYShwOiBQb2x5Z29uKTogbnVtYmVyIHtcbiAgICBpZiAoKHAueHBvaW50cz8ubGVuZ3RoID8/IDApIDwgMykgcmV0dXJuIDA7XG4gICAgbGV0IGEgPSB0aGlzLnJpbmdBcmVhKHAueHBvaW50cywgcC55cG9pbnRzKTtcbiAgICBpZiAocC5ob2xlcykge1xuICAgICAgZm9yIChjb25zdCByaW5nIG9mIHAuaG9sZXMpIGEgLT0gdGhpcy5yaW5nQXJlYShyaW5nLm1hcChwdCA9PiBwdFswXSksIHJpbmcubWFwKHB0ID0+IHB0WzFdKSk7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1heCgwLCBhKTtcbiAgfVxuXG4gIC8qKiBBYnNvbHV0ZSBzaG9lbGFjZSBhcmVhIG9mIGEgc2luZ2xlIHJpbmcuICovXG4gIHByaXZhdGUgcmluZ0FyZWEoeHM6IG51bWJlcltdLCB5czogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIGNvbnN0IG4gPSB4cz8ubGVuZ3RoID8/IDA7XG4gICAgaWYgKG4gPCAzKSByZXR1cm4gMDtcbiAgICBsZXQgYSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSBuIC0gMTsgaSA8IG47IGogPSBpKyspIGEgKz0gKHhzW2pdICsgeHNbaV0pICogKHlzW2pdIC0geXNbaV0pO1xuICAgIHJldHVybiBNYXRoLmFicyhhIC8gMik7XG4gIH1cblxuICBwcml2YXRlIGZtdEFyZWEobjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKG4gPj0gMTAwMCA/IE1hdGgucm91bmQobikgOiBNYXRoLnJvdW5kKG4gKiAxMDApIC8gMTAwKS50b0xvY2FsZVN0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHJvdW5kcyBhbGwgdGhlIHJlY3RhbmdsZSByZWdpb25zIGxlbmd0aHMgdG8gbXVsdGlwbGUgb2YgNTEyXG4gICAqL1xuICByb3VuZFJlY3RhbmdsZUxlbmd0aHMoKSB7XG4gICAgZm9yIChjb25zdCByZWdpb24gb2YgdGhpcy5yZWdpb25zKSB7XG4gICAgICBpZiAocmVnaW9uLmJvdW5kcyBpbnN0YW5jZW9mIFJlY3RhbmdsZSkge1xuICAgICAgICBjb25zdCByZWN0ID0gcmVnaW9uLmJvdW5kcztcbiAgICAgICAgcmVjdC5oZWlnaHQgPSBNYXRoLnJvdW5kKHJlY3QuaGVpZ2h0IC8gNTEyKSAqIDUxMjtcbiAgICAgICAgcmVjdC53aWR0aCA9IE1hdGgucm91bmQocmVjdC53aWR0aCAvIDUxMikgKiA1MTI7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIGtleSBhcnJvdyBldmVudCBwcm9wYWdhdGlvblxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIGRpc2FibGVBcnJvd0tleXMoZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0Rvd24nIHx8XG4gICAgICBldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fFxuICAgICAgZXZlbnQua2V5ID09PSAnVXAnIHx8XG4gICAgICBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8XG4gICAgICBldmVudC5rZXkgPT09ICdMZWZ0JyB8fFxuICAgICAgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ1JpZ2h0J1xuICAgICkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU2hhcGVDb2xvcihldmVudDogYW55KSB7XG4gICAgdGhpcy5zaGFwZUNvbG9yID0gZXZlbnQudmFsdWU7XG4gICAgZm9yIChjb25zdCByZWdpb24gb2YgdGhpcy5yZWdpb25zKSB7XG4gICAgICBpZiAocmVnaW9uLmxhYmVsID09PSB0aGlzLnNlbGVjdGVkTGFiZWxDb2xvciAmJiB0aGlzLmxhYmVsQ29sb3JzLmhhcyhyZWdpb24ubGFiZWwpKSB7XG4gICAgICAgIHRoaXMubGFiZWxDb2xvcnMuc2V0KHJlZ2lvbi5sYWJlbCwgdGhpcy5zaGFwZUNvbG9yKTtcbiAgICAgICAgcmVnaW9uLmNvbG9yID0gdGhpcy5zaGFwZUNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKHRoaXMuZmlsbENvbG9yKTtcbiAgfVxuXG4gIHNob3dIZWxwKCkge1xuICAgIHRoaXMuZGlzcGxheUhlbHBEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgLyoqIE9wZW4gdGhlIGNvbG91ciBkaWFsb2cgZm9yIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgcmVnaW9uKHMpLCBidWlsZGluZyBvbmVcbiAgICogIGNvbG91ciBwaWNrZXIgcGVyIHVuaXF1ZSBjbGFzcyBpbiB0aGUgc2VsZWN0aW9uLiBFYWNoIHBpY2tlciBpcyBzZWVkZWQgd2l0aFxuICAgKiAgdGhlIGNsYXNzJ3MgY3VycmVudCBjb2xvdXIgKHRoZSBsYWJlbOKGkmNvbG91ciBtYXAsIGZhbGxpbmcgYmFjayB0byB0aGUgZmlyc3RcbiAgICogIHNlbGVjdGVkIHJlZ2lvbiBvZiB0aGF0IGNsYXNzKS4gKi9cbiAgb3BlbkNvbG9yRGlhbG9nKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFJlZ2lvbnM/Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlZWRCeUxhYmVsID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiB0aGlzLnNlbGVjdGVkUmVnaW9ucykge1xuICAgICAgY29uc3QgbGFiZWwgPSByZWdpb24ubGFiZWw/LnRyaW0oKSA/PyAnJztcbiAgICAgIGlmIChzZWVkQnlMYWJlbC5oYXMobGFiZWwpKSBjb250aW51ZTtcbiAgICAgIHNlZWRCeUxhYmVsLnNldChcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIChsYWJlbCA/IHRoaXMubGFiZWxDb2xvcnMuZ2V0KGxhYmVsKSA6IHVuZGVmaW5lZCkgPz8gcmVnaW9uLmNvbG9yID8/IHRoaXMuc2hhcGVDb2xvcixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY2xhc3NDb2xvckVkaXRzID0gWy4uLnNlZWRCeUxhYmVsXS5tYXAoKFtsYWJlbCwgY29sb3JdKSA9PiAoeyBsYWJlbCwgY29sb3IgfSkpO1xuICAgIHRoaXMuc2hvd0NvbG9yRGlhbG9nID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBBcHBseSBlYWNoIGNsYXNzJ3MgY2hvc2VuIGNvbG91ciB0byB0aGUgc2VsZWN0ZWQgcmVnaW9ucyBvZiB0aGF0IGNsYXNzIGFuZFxuICAgKiAgY29tbWl0IGxpdmUuIFJlbWVtYmVycyB0aGUgY29sb3VyIHBlciBjbGFzcyBzbyBzYW1lLWNsYXNzIHJlZ2lvbnMgYWRkZWRcbiAgICogIGxhdGVyIG1hdGNoLiAqL1xuICBhcHBseUNvbG9yVG9TZWxlY3RlZCgpIHtcbiAgICBjb25zdCBjb2xvckJ5TGFiZWwgPSBuZXcgTWFwKHRoaXMuY2xhc3NDb2xvckVkaXRzLm1hcCgoZSkgPT4gW2UubGFiZWwsIGUuY29sb3JdKSk7XG4gICAgZm9yIChjb25zdCByZWdpb24gb2YgdGhpcy5zZWxlY3RlZFJlZ2lvbnMgPz8gW10pIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gcmVnaW9uLmxhYmVsPy50cmltKCkgPz8gJyc7XG4gICAgICBjb25zdCBjb2xvciA9IGNvbG9yQnlMYWJlbC5nZXQobGFiZWwpO1xuICAgICAgaWYgKCFjb2xvcikgY29udGludWU7XG4gICAgICByZWdpb24uY29sb3IgPSBjb2xvcjtcbiAgICAgIHJlZ2lvbi5jb2xvck92ZXJyaWRkZW4gPSB0cnVlOyAvLyBleHBsaWNpdCBjb2xvdXIg4oCUIHByZXNlcnZlIGFnYWluc3QgcHJlc2V0IChyZSlhcHBseSAoaml0LXVpIzcwKVxuICAgICAgaWYgKGxhYmVsKSB0aGlzLmxhYmVsQ29sb3JzLnNldChsYWJlbCwgY29sb3IpO1xuICAgIH1cbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gICAgdGhpcy5zaG93Q29sb3JEaWFsb2cgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBhbm5vdGF0aW9uLWNsYXNzIHByZXNldHMgKGppdC11aSM3MCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFJlc29sdmUgdGhlIGRpc3BsYXkgY29sb3VyIGZvciBhIGNsYXNzIG5hbWUgKHByZXNldCBjb2xvdXIgb3IgZGV0ZXJtaW5pc3RpYyBmYWxsYmFjaykuICovXG4gIGNvbG9yRm9yTmFtZShuYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmFtZSA/IGNvbG9yRm9yTGFiZWwobmFtZSwgdGhpcy5wcmVzZXRTZXQpIDogdGhpcy5zaGFwZUNvbG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSBldmVyeSBjbGFzcyBsYWJlbCBwcmVzZW50IGluIHRoZSBsb2FkZWQgcmVnaW9ucyBleGlzdHMgaW4gdGhlIHByZXNldFxuICAgKiBsaXN0LCBhdXRvLWFkZGluZyBhbnkgdGhhdCBhcmUgbWlzc2luZyAodXNpbmcgdGhlIHJlZ2lvbidzIGFscmVhZHktcmVzb2x2ZWRcbiAgICogY29sb3VyKS4gVGhpcyBtYWtlcyBjbGFzc2VzIGNhcnJpZWQgaW4gYSBsb2FkZWQvaW1wb3J0ZWQgR2VvSlNPTiBzaG93IHVwIGFzXG4gICAqIGNoaXBzICsgQ2xhc3MtZHJvcGRvd24gb3B0aW9ucyAoYSBwLWRyb3Bkb3duIGNhbid0IGRpc3BsYXkgYSB2YWx1ZSB0aGF0IGlzbid0XG4gICAqIGFuIG9wdGlvbikgYW5kIGxldHMgdGhlIHVzZXIgbWFuYWdlIHRoZW0uIFRoZSBwbGFjZWhvbGRlciAnbGVnZW5kJyBhbmQgZW1wdHlcbiAgICogbGFiZWxzIGFyZSBpZ25vcmVkLiAoaml0LXVpIzcwKVxuICAgKi9cbiAgcHJpdmF0ZSBzeW5jQ2xhc3Nlc0Zyb21SZWdpb25zKHJlZ2lvbnM6IFJlZ2lvbltdKTogdm9pZCB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMucHJlc2V0U2V0Lm1hdGNoTW9kZSA9PT0gJ25vcm1hbGl6ZWQnO1xuICAgIGNvbnN0IGtleU9mID0gKGw6IHN0cmluZykgPT4gKG5vcm1hbGl6ZWQgPyBsLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogbCk7XG4gICAgY29uc3Qga25vd24gPSBuZXcgU2V0KHRoaXMucHJlc2V0U2V0LmNsYXNzZXMubWFwKChjKSA9PiBrZXlPZihjLm5hbWUpKSk7XG4gICAgY29uc3QgYWRkZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgcmVnaW9ucykge1xuICAgICAgY29uc3QgbGFiZWwgPSByLmxhYmVsPy50cmltKCk7XG4gICAgICBpZiAoIWxhYmVsIHx8IGxhYmVsID09PSAnbGVnZW5kJykgY29udGludWU7XG4gICAgICBjb25zdCBrID0ga2V5T2YobGFiZWwpO1xuICAgICAgaWYgKGtub3duLmhhcyhrKSB8fCBhZGRlZC5oYXMoaykpIGNvbnRpbnVlO1xuICAgICAgYWRkZWQuYWRkKGspO1xuICAgICAgdGhpcy5yZWdpb25BcGkudXBzZXJ0Q2xhc3Moe1xuICAgICAgICBuYW1lOiBsYWJlbCxcbiAgICAgICAgY29sb3I6IHIuY29sb3IgfHwgY29sb3JGb3JMYWJlbChsYWJlbCwgdGhpcy5wcmVzZXRTZXQpLFxuICAgICAgICBzb3VyY2U6ICdhdXRvJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBEb2NrZWQgQ2xhc3NlcyBwYW5lbCAoaml0LXVpIzcwKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmVidWlsZCB0aGUgcGVyLWNsYXNzIHJlZ2lvbiBjb3VudHMgc2hvd24gaW4gdGhlIHBhbmVsLiAqL1xuICBwcml2YXRlIHJlY29tcHV0ZUNsYXNzQ291bnRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLnByZXNldFNldC5tYXRjaE1vZGUgPT09ICdub3JtYWxpemVkJztcbiAgICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlZ2lvbnMpIHtcbiAgICAgIGlmICghci5sYWJlbCkgY29udGludWU7XG4gICAgICBjb25zdCBrID0gbm9ybWFsaXplZCA/IHIubGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiByLmxhYmVsO1xuICAgICAgY291bnRzLnNldChrLCAoY291bnRzLmdldChrKSA/PyAwKSArIDEpO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzQ291bnRzID0gY291bnRzO1xuICAgIHRoaXMudXBkYXRlRGlzcGxheUNsYXNzZXMoKTtcbiAgfVxuXG4gIC8qKiBSZWJ1aWxkIHRoZSBwYW5lbCdzIGRpc3BsYXkgb3JkZXIg4oCUIG1vc3QtdXNlZCBjbGFzc2VzIGZpcnN0LCB0aGVuIGJ5IG5hbWUuICovXG4gIHByaXZhdGUgdXBkYXRlRGlzcGxheUNsYXNzZXMoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5Q2xhc3NlcyA9IFsuLi50aGlzLnByZXNldFNldC5jbGFzc2VzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBkID0gdGhpcy5jbGFzc0NvdW50KGIubmFtZSkgLSB0aGlzLmNsYXNzQ291bnQoYS5uYW1lKTtcbiAgICAgIHJldHVybiBkICE9PSAwID8gZCA6IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogdHJhY2tCeSBmb3IgdGhlIGNsYXNzIHJvd3Mgc28gcmUtc29ydGluZyBkb2Vzbid0IHJlLWNyZWF0ZSB0aGUgcGlja2Vycy4gKi9cbiAgdHJhY2tCeUNsYXNzTmFtZSA9IChfOiBudW1iZXIsIGM6IENsYXNzUHJlc2V0KTogc3RyaW5nID0+IGMubmFtZTtcblxuICAvKiogTnVtYmVyIG9mIHJlZ2lvbnMgY3VycmVudGx5IHVzaW5nIGEgY2xhc3MgKGtleWVkIGJ5IHRoZSBhY3RpdmUgbWF0Y2ggbW9kZSkuICovXG4gIGNsYXNzQ291bnQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBrID0gdGhpcy5wcmVzZXRTZXQubWF0Y2hNb2RlID09PSAnbm9ybWFsaXplZCcgPyBuYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogbmFtZTtcbiAgICByZXR1cm4gdGhpcy5jbGFzc0NvdW50cy5nZXQoaykgPz8gMDtcbiAgfVxuXG4gIC8qKiBSZWNvbG91ciBhIGNsYXNzIGZyb20gaXRzIHBhbmVsIHN3YXRjaCBhbmQgcmVwYWludCBpdHMgKG5vbi1vdmVycmlkZGVuKSByZWdpb25zLiAqL1xuICBzZXRDbGFzc0NvbG9yKG5hbWU6IHN0cmluZywgY29sb3I6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghY29sb3IpIHJldHVybjtcbiAgICB0aGlzLnJlZ2lvbkFwaS5zZXRDbGFzc2lmaWNhdGlvbkNvbG9yKG5hbWUsIGNvbG9yKTtcbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7XG4gIH1cblxuICAvKiogVG9vbHRpcCBmb3IgYSBjbGFzcydzIGRlbGV0ZSBidXR0b24gaW4gdGhlIHBhbmVsLiAqL1xuICBkZWxldGVDbGFzc1Rvb2x0aXAobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpblVzZSA9IHRoaXMuY2xhc3NDb3VudChuYW1lKSA+IDA7XG4gICAgaWYgKG5hbWUgPT09IHRoaXMuZGVmYXVsdENsYXNzTmFtZSAmJiBpblVzZSkgcmV0dXJuICdUaGUgZGVmYXVsdCBjbGFzcyBjYW5ub3QgYmUgcmVtb3ZlZCB3aGlsZSBpbiB1c2UnO1xuICAgIHJldHVybiBpblVzZSA/ICdSZW1vdmUgY2xhc3Mg4oCUIGl0cyByZWdpb25zIHJldmVydCB0byBSZWdpb24nIDogJ1JlbW92ZSBjbGFzcyc7XG4gIH1cblxuICAvKiogUmVtb3ZlIGEgY2xhc3MuIEFueSByZWdpb25zIHN0aWxsIHVzaW5nIGl0IGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdFxuICAgKiAgXCJSZWdpb25cIiBjbGFzcywgc28gdGhleSBhcmVuJ3Qgb3JwaGFuZWQgKGFuZCB0aGUgY2xhc3MgaXNuJ3QgaW1tZWRpYXRlbHlcbiAgICogIHJlLWFkZGVkIGZyb20gaXRzIHJlZ2lvbnMgYnkgc3luY0NsYXNzZXNGcm9tUmVnaW9ucykuICovXG4gIGRlbGV0ZUNsYXNzKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVhc3NpZ25SZWdpb25zVG9EZWZhdWx0Q2xhc3MoW25hbWVdKTtcbiAgICB0aGlzLnJlZ2lvbkFwaS5yZW1vdmVDbGFzcyhuYW1lKTtcbiAgICBpZiAodGhpcy5hY3RpdmVDbGFzcyA9PT0gbmFtZSkgdGhpcy5hY3RpdmVDbGFzcyA9IG51bGw7XG4gICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICB9XG5cbiAgLyoqIFJlZ2lvbnMgbGFiZWxsZWQgd2l0aCBhbnkgb2YgYHJlbW92ZWROYW1lc2AgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0XG4gICAqICB7QGxpbmsgZGVmYXVsdENsYXNzTmFtZX0gKFwiUmVnaW9uXCIpOiBpdHMgY2xhc3MgY29sb3VyLCBvdmVycmlkZSBjbGVhcmVkLlxuICAgKiAgU2tpcHMgdGhlIGRlZmF1bHQgaXRzZWxmIHNvIGRlbGV0aW5nIFwiUmVnaW9uXCIgY2FuJ3Qgc2VsZi1yZWFzc2lnbi4gKGppdC11aSM3MCkgKi9cbiAgcHJpdmF0ZSByZWFzc2lnblJlZ2lvbnNUb0RlZmF1bHRDbGFzcyhyZW1vdmVkTmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3Qgbm9ybSA9IHRoaXMucHJlc2V0U2V0Lm1hdGNoTW9kZSA9PT0gJ25vcm1hbGl6ZWQnO1xuICAgIGNvbnN0IGtleU9mID0gKHM6IHN0cmluZykgPT4gKG5vcm0gPyBzLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogcyk7XG4gICAgY29uc3QgcmVtb3ZlZCA9IG5ldyBTZXQocmVtb3ZlZE5hbWVzLm1hcChrZXlPZikpO1xuICAgIHJlbW92ZWQuZGVsZXRlKGtleU9mKHRoaXMuZGVmYXVsdENsYXNzTmFtZSkpO1xuICAgIGlmICghcmVtb3ZlZC5zaXplKSByZXR1cm47XG4gICAgY29uc3QgY29sb3IgPSBjb2xvckZvckxhYmVsKHRoaXMuZGVmYXVsdENsYXNzTmFtZSwgdGhpcy5wcmVzZXRTZXQpO1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlZ2lvbnMpIHtcbiAgICAgIGlmIChyLmxhYmVsICYmIHJlbW92ZWQuaGFzKGtleU9mKHIubGFiZWwpKSkge1xuICAgICAgICByLmxhYmVsID0gdGhpcy5kZWZhdWx0Q2xhc3NOYW1lO1xuICAgICAgICByLmNvbG9yT3ZlcnJpZGRlbiA9IGZhbHNlO1xuICAgICAgICByLmNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YW1wIGEgY2xhc3MgKGFuZCBpdHMgcHJlc2V0L2ZhbGxiYWNrIGNvbG91cikgb250byBvbmUgcmVnaW9uIGZyb20gdGhlIENsYXNzXG4gICAqICBkcm9wZG93bjsgY2hvb3NpbmcgYSBjbGFzcyBvcHRzIHRoZSByZWdpb24gYmFjayBpbnRvIHRoZSBwcmVzZXQgY29sb3VyLiAqL1xuICBhcHBseVByZXNldFRvUmVnaW9uKHJlZ2lvbjogUmVnaW9uLCBjbGFzc05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSAoY2xhc3NOYW1lID8/ICcnKS50cmltKCk7XG4gICAgcmVnaW9uLmxhYmVsID0gbmFtZTtcbiAgICByZWdpb24uY29sb3JPdmVycmlkZGVuID0gZmFsc2U7XG4gICAgaWYgKG5hbWUpIHJlZ2lvbi5jb2xvciA9IGNvbG9yRm9yTGFiZWwobmFtZSwgdGhpcy5wcmVzZXRTZXQpO1xuICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgfVxuXG4gIC8qKiBNYWtlIGEgY2xhc3MgYWN0aXZlICh1c2VkIGZvciBuZXcgcmVnaW9ucykgYW5kLCBpZiByb3dzIGFyZSBzZWxlY3RlZCwgYXBwbHlcbiAgICogIGl0IHRvIHRoZW0gaW4gb25lIGNvbW1pdC4gKi9cbiAgc2VsZWN0QWN0aXZlQ2xhc3MobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDbGFzcyA9IG5hbWU7XG4gICAgdGhpcy5hcHBseUNsYXNzVG9TZWxlY3RlZChuYW1lKTtcbiAgfVxuXG4gIC8qKiBBcHBseSBhIGNsYXNzIChsYWJlbCArIHByZXNldC9mYWxsYmFjayBjb2xvdXIpIHRvIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgY29tbWl0LiAqL1xuICBwcml2YXRlIGFwcGx5Q2xhc3NUb1NlbGVjdGVkKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFJlZ2lvbnMgPz8gW107XG4gICAgaWYgKCFzZWxlY3RlZC5sZW5ndGgpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgIHIubGFiZWwgPSBuYW1lO1xuICAgICAgci5jb2xvck92ZXJyaWRkZW4gPSBmYWxzZTtcbiAgICAgIHIuY29sb3IgPSBjb2xvckZvckxhYmVsKG5hbWUsIHRoaXMucHJlc2V0U2V0KTtcbiAgICB9XG4gICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICB9XG5cbiAgLyoqIFwiRWRpdCBjbGFzcyBvbiBzZWxlY3RlZCByb3dzXCIgcG9wdXAg4oCUIGFwcGx5IHRoZSBjaG9zZW4gZXhpc3RpbmcgY2xhc3MuICovXG4gIGFwcGx5QnVsa0NsYXNzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5idWxrQ2xhc3MpIHJldHVybjtcbiAgICB0aGlzLmFwcGx5Q2xhc3NUb1NlbGVjdGVkKHRoaXMuYnVsa0NsYXNzKTtcbiAgICB0aGlzLm92ZXJsYXlQYW5lbD8uaGlkZSgpO1xuICB9XG5cbiAgLyoqIFwiRWRpdCBjbGFzcyBvbiBzZWxlY3RlZCByb3dzXCIgcG9wdXAg4oCUIGFkZCBhIG5ldyBjbGFzcyBhbmQgc2V0IGl0IG9uIHRoZSBzZWxlY3Rpb24uICovXG4gIGFkZEFuZEFwcGx5QnVsa0NsYXNzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5ld0J1bGtDbGFzcy50cmltKCk7XG4gICAgaWYgKCFuYW1lKSByZXR1cm47XG4gICAgY29uc3Qgbm9ybSA9IHRoaXMucHJlc2V0U2V0Lm1hdGNoTW9kZSA9PT0gJ25vcm1hbGl6ZWQnO1xuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMucHJlc2V0U2V0LmNsYXNzZXMuc29tZSgoYykgPT5cbiAgICAgIG5vcm0gPyBjLm5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKSA6IGMubmFtZSA9PT0gbmFtZSxcbiAgICApO1xuICAgIGlmICghZXhpc3RzKSB7XG4gICAgICB0aGlzLnJlZ2lvbkFwaS51cHNlcnRDbGFzcyh7IG5hbWUsIGNvbG9yOiBjb2xvckZvckxhYmVsKG5hbWUsIHRoaXMucHJlc2V0U2V0KSwgc291cmNlOiAndXNlcicgfSk7XG4gICAgfVxuICAgIHRoaXMuYXBwbHlDbGFzc1RvU2VsZWN0ZWQobmFtZSk7XG4gICAgdGhpcy5idWxrQ2xhc3MgPSBuYW1lO1xuICAgIHRoaXMubmV3QnVsa0NsYXNzID0gJyc7XG4gICAgdGhpcy5vdmVybGF5UGFuZWw/LmhpZGUoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBNYW5hZ2UtY2xhc3NlcyBkaWFsb2cg4pSA4pSAXG4gIG9wZW5NYW5hZ2VEaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZXREcmFmdCA9IHRoaXMuY2xvbmVQcmVzZXRTZXQodGhpcy5wcmVzZXRTZXQpO1xuICAgIHRoaXMuc2hvd01hbmFnZURpYWxvZyA9IHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBjbG9uZVByZXNldFNldChzOiBQcmVzZXRTZXQpOiBQcmVzZXRTZXQge1xuICAgIHJldHVybiB7XG4gICAgICBjbGFzc2VzOiAocy5jbGFzc2VzID8/IFtdKS5tYXAoKGMpID0+ICh7IC4uLmMgfSkpLFxuICAgICAgZmFsbGJhY2tQYWxldHRlOiBbLi4uKHMuZmFsbGJhY2tQYWxldHRlID8/IFtdKV0sXG4gICAgICBhdXRvUHJvbW90ZTogISFzLmF1dG9Qcm9tb3RlLFxuICAgICAgbWF0Y2hNb2RlOiBzLm1hdGNoTW9kZSA9PT0gJ25vcm1hbGl6ZWQnID8gJ25vcm1hbGl6ZWQnIDogJ2V4YWN0JyxcbiAgICB9O1xuICB9XG4gIGFkZFByZXNldENsYXNzKCk6IHZvaWQge1xuICAgIHRoaXMucHJlc2V0RHJhZnQ/LmNsYXNzZXMucHVzaCh7IG5hbWU6ICcnLCBjb2xvcjogJyM4ODg4ODgnLCBzb3VyY2U6ICd1c2VyJyB9KTtcbiAgfVxuICByZW1vdmVQcmVzZXRDbGFzcyhpOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByZXNldERyYWZ0Py5jbGFzc2VzLnNwbGljZShpLCAxKTtcbiAgfVxuICBhZGRGYWxsYmFja0NvbG9yKCk6IHZvaWQge1xuICAgIHRoaXMucHJlc2V0RHJhZnQ/LmZhbGxiYWNrUGFsZXR0ZS5wdXNoKCcjODg4ODg4Jyk7XG4gIH1cbiAgcmVtb3ZlRmFsbGJhY2tDb2xvcihpOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByZXNldERyYWZ0Py5mYWxsYmFja1BhbGV0dGUuc3BsaWNlKGksIDEpO1xuICB9XG4gIC8qKiBDb21taXQgdGhlIGRyYWZ0OiBkcm9wIGJsYW5rL2R1cGxpY2F0ZSBuYW1lcywgcGVyc2lzdCwgYW5kIHJlY29sb3VyXG4gICAqICBub24tb3ZlcnJpZGRlbiByZWdpb25zIHdpdGggdGhlIHVwZGF0ZWQgcHJlc2V0cy4gKi9cbiAgYXBwbHlNYW5hZ2VEaWFsb2coY2xvc2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJlc2V0RHJhZnQpIHJldHVybjtcbiAgICAvLyBEZS1kdXBsaWNhdGUgdXNpbmcgdGhlIGFjdGl2ZSBtYXRjaCBtb2RlJ3Mga2V5IHNvIG5vcm1hbGl6ZWQgbW9kZSBjYW4ndCBrZWVwXG4gICAgLy8gYm90aCBcIlR1bW9yXCIgYW5kIFwidHVtb3JcIiAod2hpY2ggd291bGQgY29sbGlkZSBhdCBydW50aW1lIGluIGZpbmRQcmVzZXQoKSkuXG4gICAgY29uc3Qgbm9ybSA9IHRoaXMucHJlc2V0RHJhZnQubWF0Y2hNb2RlID09PSAnbm9ybWFsaXplZCc7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGNsYXNzZXM6IENsYXNzUHJlc2V0W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5wcmVzZXREcmFmdC5jbGFzc2VzKSB7XG4gICAgICBjb25zdCBuYW1lID0gKGMubmFtZSA/PyAnJykudHJpbSgpO1xuICAgICAgY29uc3Qga2V5ID0gbm9ybSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6IG5hbWU7XG4gICAgICBpZiAoIW5hbWUgfHwgc2Vlbi5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICBzZWVuLmFkZChrZXkpO1xuICAgICAgY2xhc3Nlcy5wdXNoKHsgLi4uYywgbmFtZSB9KTtcbiAgICB9XG4gICAgdGhpcy5wcmVzZXREcmFmdC5jbGFzc2VzID0gY2xhc3NlcztcbiAgICAvLyBDbGFzc2VzIGRyb3BwZWQgaW4gdGhlIGRpYWxvZzogdGhlaXIgcmVnaW9ucyByZXZlcnQgdG8gdGhlIGRlZmF1bHQgXCJSZWdpb25cIlxuICAgIC8vIGNsYXNzIChlbHNlIHN5bmNDbGFzc2VzRnJvbVJlZ2lvbnMgd291bGQganVzdCByZS1hZGQgdGhlbSkgKGppdC11aSM3MCkuXG4gICAgY29uc3Qga2V5T2YgPSAoczogc3RyaW5nKSA9PiAobm9ybSA/IHMudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiBzKTtcbiAgICBjb25zdCBrZXB0ID0gbmV3IFNldChjbGFzc2VzLm1hcCgoYykgPT4ga2V5T2YoYy5uYW1lKSkpO1xuICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLnByZXNldFNldC5jbGFzc2VzXG4gICAgICAubWFwKChjKSA9PiBjLm5hbWUpXG4gICAgICAuZmlsdGVyKChuKSA9PiAha2VwdC5oYXMoa2V5T2YobikpKTtcbiAgICB0aGlzLnJlYXNzaWduUmVnaW9uc1RvRGVmYXVsdENsYXNzKHJlbW92ZWQpO1xuICAgIHRoaXMucmVnaW9uQXBpLnNldFByZXNldFNldCh0aGlzLnByZXNldERyYWZ0KTtcbiAgICB0aGlzLnNldFJlZ2lvbnNGcm9tRWRpdG9yKCk7IC8vIHJlY29sb3VyIGV4aXN0aW5nIChub24tb3ZlcnJpZGRlbikgcmVnaW9ucyBmcm9tIHRoZSBuZXcgcHJlc2V0c1xuICAgIGlmIChjbG9zZSkgdGhpcy5zaG93TWFuYWdlRGlhbG9nID0gZmFsc2U7XG4gIH1cbiAgcmVzZXRQcmVzZXRzVG9EZWZhdWx0cygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lvbkFwaS5yZXNldFByZXNldHMoKTtcbiAgICB0aGlzLnByZXNldERyYWZ0ID0gdGhpcy5jbG9uZVByZXNldFNldCh0aGlzLnJlZ2lvbkFwaS5nZXRQcmVzZXRTZXQoKSk7XG4gICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICB9XG4gIGV4cG9ydFByZXNldHMoKTogdm9pZCB7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHRoaXMucmVnaW9uQXBpLmdldFByZXNldFNldCgpLCBudWxsLCAyKTtcbiAgICBzYXZlQXMobmV3IEJsb2IoW2pzb25dLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KSwgJ2Fubm90YXRpb24tY2xhc3Nlcy5qc29uJyk7XG4gIH1cbiAgaW1wb3J0UHJlc2V0cyhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdO1xuICAgIGlmICghZmlsZSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNldCA9IEpTT04ucGFyc2UoZS50YXJnZXQucmVzdWx0KSBhcyBQcmVzZXRTZXQ7XG4gICAgICAgIHRoaXMucmVnaW9uQXBpLnNldFByZXNldFNldChzZXQpO1xuICAgICAgICB0aGlzLnByZXNldERyYWZ0ID0gdGhpcy5jbG9uZVByZXNldFNldCh0aGlzLnJlZ2lvbkFwaS5nZXRQcmVzZXRTZXQoKSk7XG4gICAgICAgIHRoaXMuc2V0UmVnaW9uc0Zyb21FZGl0b3IoKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBrZXk6IFZJWl9UT0FTVF9LRVksIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgc3VtbWFyeTogJ0NsYXNzZXMgaW1wb3J0ZWQnLCBkZXRhaWw6ICdBbm5vdGF0aW9uIGNsYXNzZXMgbG9hZGVkLicgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBrZXk6IFZJWl9UT0FTVF9LRVksIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgIHN1bW1hcnk6ICdJbXBvcnQgZmFpbGVkJywgZGV0YWlsOiBgJHtlcnJ9YCB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuICB9XG5cbiAgaW1wb3J0Um9pcyhldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdO1xuICAgIGlmICghZmlsZSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZWdpb25zID0gdGhpcy5yZWdpb25BcGkuaW1wb3J0UmVnaW9ucyhmaWxlQ29udGVudCk7XG4gICAgICAgIC8vIHNldCBsYWJlbCBjb2xvcnNcbiAgICAgICAgZm9yIChjb25zdCByZWdpb24gb2YgdGhpcy5yZWdpb25zKSB7XG4gICAgICAgICAgdGhpcy5sYWJlbFJlZ2lvblVwZGF0ZShyZWdpb24sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN5bmNDbGFzc2VzRnJvbVJlZ2lvbnModGhpcy5yZWdpb25zKTtcbiAgICAgICAgdGhpcy5zZXRSZWdpb25zRnJvbUVkaXRvcigpO1xuICAgICAgfSBjYXRjaCAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgIHN1bW1hcnk6ICdFcnJvciBpbXBvcnRpbmcgdGhlIGZpbGUnLFxuICAgICAgICAgIGRldGFpbDogYCR7ZXZlbnR9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlYWRpbmcgdGhlIGZpbGU6ICcgKyBldmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpb25zIHRvIHNlcmlhbGl6ZSBvbiBzYXZlL2V4cG9ydC4gRm9yIGEgc2luZ2xlLWZpbGUgei1zdGFjayB0aGUgc3RvcmVcbiAgICoga2VlcHMgb25seSB0aGUgY3VycmVudCBzbGljZSBsaXZlLCBzbyBwdWxsIEVWRVJZIHNsaWNlJ3MgYW5ub3RhdGlvbnMgKGVhY2hcbiAgICogdGFnZ2VkIHdpdGggaXRzIHplcm8tYmFzZWQgUmVnaW9uLnopIHRvIHdyaXRlIG9uZSBjb21iaW5lZCB6LWluZGV4ZWRcbiAgICogZ2VvanNvbiAoaml0LXVpIzkzKS4gT3RoZXJ3aXNlIChzaW5nbGUtcGxhbmUgaW1hZ2UsIG9yIGEgZm9sZGVyIHN0YWNrIHdob3NlXG4gICAqIHNsaWNlcyBzYXZlIHRvIHRoZWlyIG93biBwZXItc2xpY2UgZmlsZXMpIHRoZSBjdXJyZW50IHNldC4gKGppdC11aSM5MylcbiAgICovXG4gIHByaXZhdGUgcmVnaW9uc0ZvclNhdmUoKTogUmVnaW9uW10ge1xuICAgIGlmICh0aGlzLnJlZ2lvbkFwaS5pc1N0YWNrTW9kZSgpICYmIHRoaXMucmVnaW9uQXBpLmdldFN0YWNrU2F2ZUxheW91dCgpID09PSAnY29tYmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWdpb25BcGkuZ2V0U2xpY2VBbm5vdGF0aW9uUmVnaW9ucygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZWdpb25zO1xuICB9XG5cbiAgZXhwb3J0Um9pcygpIHtcbiAgICBpZiAoIXRoaXMucmVnaW9uc0ZvclNhdmUoKS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5yZWdpb25Jby5nZXRTZWxlY3RlZEZpbGVOYW1lKCk7XG4gICAgY29uc3Qgc3RlbSA9IG5hbWUgPyBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKCcuJykpIDogJ3JvaXMnO1xuICAgIHRoaXMuZXhwb3J0RmlsZW5hbWUgPSBgJHtzdGVtfS5nZW9qc29uYDtcbiAgICB0aGlzLnNob3dFeHBvcnREaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgY29uZmlybUV4cG9ydCgpIHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMuZXhwb3J0RmlsZW5hbWUudHJpbSgpO1xuICAgIGNvbnN0IHJlZ2lvbnMgPSB0aGlzLnJlZ2lvbnNGb3JTYXZlKCk7XG4gICAgaWYgKCFmaWxlbmFtZSB8fCAhcmVnaW9ucy5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLnNob3dFeHBvcnREaWFsb2cgPSBmYWxzZTtcbiAgICBjb25zdCBqc29uU3RyaW5nID0gdGhpcy5yZWdpb25BcGkuZ2V0R2VvSnNvblN0cmluZyhyZWdpb25zKTtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2pzb25TdHJpbmddLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcbiAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUpO1xuICB9XG5cbiAgLyoqIE9wZW4gdGhlIFwiU2F2ZSBtYXNrXCIgZGlhbG9nLCBzZWVkZWQgd2l0aCBgPGltYWdlLXN0ZW0+X21hc2sucG5nYC4gKi9cbiAgb3BlblNhdmVNYXNrRGlhbG9nKCkge1xuICAgIGlmICghdGhpcy5yZWdpb25zLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnJlZ2lvbklvLmdldFNlbGVjdGVkRmlsZU5hbWUoKTtcbiAgICAvLyBTdHJpcCB0aGUgZXh0ZW5zaW9uIG9ubHkgd2hlbiB0aGVyZSBpcyBvbmU7IGFuIGV4dGVuc2lvbi1sZXNzIG5hbWUga2VlcHNcbiAgICAvLyBpdHMgd2hvbGUgc3RlbSAoYSBsZWFkaW5nLWRvdCBkb3RmaWxlIGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGV4dGVuc2lvbilcbiAgICAvLyBzbyB3ZSBuZXZlciBwcm9kdWNlIGEgYmFyZSBcIl9tYXNrLnBuZ1wiLlxuICAgIGNvbnN0IGRvdCA9IG5hbWUgPyBuYW1lLmxhc3RJbmRleE9mKCcuJykgOiAtMTtcbiAgICBjb25zdCBzdGVtID0gbmFtZSA/IChkb3QgPiAwID8gbmFtZS5zdWJzdHJpbmcoMCwgZG90KSA6IG5hbWUpIDogJ3JlZ2lvbnMnO1xuICAgIHRoaXMuc2F2ZU1hc2tGaWxlbmFtZSA9IGAke3N0ZW19X21hc2sucG5nYDtcbiAgICB0aGlzLm1hc2tNb2RlID0gJ2JpbmFyeSc7XG4gICAgdGhpcy5zaG93U2F2ZU1hc2tEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJhc3Rlcml6ZSB0aGUgcmVnaW9ucyB0byB0aGUgY2hvc2VuIG1hc2sgdHlwZSBhbmQgZG93bmxvYWQgYXMgYSBQTkcuIFRoZVxuICAgKiBoZWF2eSB3b3JrIChmdWxsLXJlcyByYXN0ZXJpemUgKyBQTkcgZW5jb2RlKSBydW5zIGluIGEgV2ViIFdvcmtlciBzbyB0aGUgVUlcbiAgICogbmV2ZXIgZnJlZXplcyBvbiBsYXJnZS93aG9sZS1zbGlkZSBpbWFnZXMgYW5kIHRoZSBqb2IgY2FuIGJlIGNhbmNlbGxlZFxuICAgKiAoaml0LXVpIzk1KS4gVGhlIGRpYWxvZyBzdGF5cyBvcGVuIHNob3dpbmcgYSBwcm9ncmVzcyBiYXIgdW50aWwgZG9uZS5cbiAgICovXG4gIGNvbmZpcm1TYXZlTWFzaygpIHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMuc2F2ZU1hc2tGaWxlbmFtZS50cmltKCk7XG4gICAgaWYgKCFmaWxlbmFtZSB8fCAhdGhpcy5yZWdpb25zLmxlbmd0aCB8fCB0aGlzLm1hc2tCdXN5KSByZXR1cm47XG5cbiAgICBjb25zdCBzaXplID0gdGhpcy5yZWdpb25BcGkuZ2V0TWFza0ltYWdlU2l6ZSgpO1xuICAgIGlmICghc2l6ZSkge1xuICAgICAgdGhpcy5tYXNrRXJyb3IoJ05vIGltYWdlIHNpemUgaXMgYXZhaWxhYmxlLCBzbyB0aGUgbWFzayBjYW5ub3QgYmUgc2l6ZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2hvbGUtc2xpZGUgaW1hZ2VzIGV4Y2VlZCB0aGUgYnJvd3NlcidzIHR5cGVkLWFycmF5L21lbW9yeSBsaW1pdHMsIHNvIGNhcFxuICAgIC8vIHRoZSBtYXNrIHRvIGEgc2FmZSBwaXhlbCBidWRnZXQgYW5kIHNjYWxlIHRoZSBnZW9tZXRyeSB0byBtYXRjaC5cbiAgICBjb25zdCBzY2FsZSA9IG1hc2tTY2FsZUZvcihzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHNpemUud2lkdGggKiBzY2FsZSkpO1xuICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoc2l6ZS5oZWlnaHQgKiBzY2FsZSkpO1xuICAgIGlmIChzY2FsZSA8IDEpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAga2V5OiBWSVpfVE9BU1RfS0VZLFxuICAgICAgICBzZXZlcml0eTogJ2luZm8nLFxuICAgICAgICBzdW1tYXJ5OiAnTWFzayBkb3duc2NhbGVkJyxcbiAgICAgICAgZGV0YWlsOiBgSW1hZ2UgdG9vIGxhcmdlIGZvciBhIGZ1bGwtcmVzb2x1dGlvbiBtYXNrOyBzYXZpbmcgYXQgJHt3aWR0aH3DlyR7aGVpZ2h0fS5gLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lvbnMgPSB0aGlzLnJlZ2lvbnMubWFwKChyKSA9PiBzY2FsZVBhcnRzKHJlZ2lvblRvUGFydHMociksIHNjYWxlKSk7XG5cbiAgICB0aGlzLnBlbmRpbmdNYXNrRmlsZW5hbWUgPSBmaWxlbmFtZTtcbiAgICB0aGlzLm1hc2tCdXN5ID0gdHJ1ZTtcbiAgICB0aGlzLm1hc2tFbmNvZGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWFza1Byb2dyZXNzID0gMDtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICB3aWR0aCwgaGVpZ2h0LFxuICAgICAgb3JpZ2luYWxXaWR0aDogc2l6ZS53aWR0aCwgb3JpZ2luYWxIZWlnaHQ6IHNpemUuaGVpZ2h0LCBzY2FsZSxcbiAgICAgIG1vZGU6IHRoaXMubWFza01vZGUsXG4gICAgICBzb3VyY2VOYW1lOiB0aGlzLnJlZ2lvbklvLmdldFNlbGVjdGVkRmlsZU5hbWUoKSxcbiAgICAgIHJlZ2lvbnMsXG4gICAgfTtcbiAgICAvLyBjcmVhdGVNYXNrV29ya2VyKCkgaXMgYXN5bmMgKHRoZSB3b3JrZXIgbW9kdWxlIGlzIGltcG9ydGVkIGR5bmFtaWNhbGx5IHNvXG4gICAgLy8gaXRzIGltcG9ydC5tZXRhIG5ldmVyIHJlYWNoZXMgdGhlIENvbW1vbkpTIHRlc3QgY29tcGlsZSkuIFdpcmUgdXAgb25jZSBpdFxuICAgIC8vIHJlc29sdmVzIOKAlCB1bmxlc3MgdGhlIHVzZXIgY2FuY2VsbGVkIHdoaWxlIGl0IHdhcyBsb2FkaW5nLlxuICAgIHRoaXMuY3JlYXRlTWFza1dvcmtlcigpLnRoZW4oKHdvcmtlcikgPT4ge1xuICAgICAgaWYgKCF0aGlzLm1hc2tCdXN5KSB7IHdvcmtlci50ZXJtaW5hdGUoKTsgcmV0dXJuOyB9XG4gICAgICB0aGlzLm1hc2tXb3JrZXIgPSB3b3JrZXI7XG4gICAgICB3b3JrZXIub25tZXNzYWdlID0gKHsgZGF0YSB9OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhPy50eXBlKSB7XG4gICAgICAgICAgY2FzZSAncHJvZ3Jlc3MnOlxuICAgICAgICAgICAgdGhpcy5tYXNrUHJvZ3Jlc3MgPSBkYXRhLnRvdGFsID8gTWF0aC5yb3VuZCgoZGF0YS5kb25lIC8gZGF0YS50b3RhbCkgKiAxMDApIDogMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2VuY29kaW5nJzpcbiAgICAgICAgICAgIHRoaXMubWFza0VuY29kaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2RvbmUnOlxuICAgICAgICAgICAgdGhpcy5maW5pc2hNYXNrKG5ldyBCbG9iKFtkYXRhLnBuZ10sIHsgdHlwZTogJ2ltYWdlL3BuZycgfSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgdGhpcy5tYXNrRXJyb3IoZGF0YS5lcnJvciB8fCAnVGhlIG1hc2sgY291bGQgbm90IGJlIGdlbmVyYXRlZC4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgd29ya2VyLm9uZXJyb3IgPSAoKSA9PiB0aGlzLm1hc2tFcnJvcignVGhlIG1hc2sgd29ya2VyIGZhaWxlZC4nKTtcbiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZShwYXlsb2FkKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB0aGlzLm1hc2tFcnJvcignVGhlIG1hc2sgd29ya2VyIGZhaWxlZCB0byBzdGFydC4nKSk7XG4gIH1cblxuICAvKiogQ2FuY2VsIGFuIGluLXByb2dyZXNzIG1hc2sgZXhwb3J0OiB0ZXJtaW5hdGUgdGhlIHdvcmtlciBhbmQgcmVzZXQgc3RhdGUuICovXG4gIGNhbmNlbFNhdmVNYXNrKCkge1xuICAgIHRoaXMudGVhcmRvd25NYXNrV29ya2VyKCk7XG4gICAgdGhpcy5tYXNrQnVzeSA9IGZhbHNlO1xuICAgIHRoaXMubWFza0VuY29kaW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXNrUHJvZ3Jlc3MgPSAwO1xuICB9XG5cbiAgLyoqIFdvcmtlciBmYWN0b3J5IOKAlCBhc3luYyBzbyB0aGUgd29ya2VyIG1vZHVsZSAoYW5kIGl0cyBgaW1wb3J0Lm1ldGEudXJsYCxcbiAgICogIHdoaWNoIHRoZSBDb21tb25KUyB0ZXN0IGNvbXBpbGUgcmVqZWN0cykgaXMgbG9hZGVkIHZpYSBhIGR5bmFtaWMgaW1wb3J0LFxuICAgKiAgZXhhY3RseSBsaWtlIHRoZSBzZWdtZW50YXRpb24gd29ya2VyLiBPdmVycmlkYWJsZSBpbiB0ZXN0cy4gKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZU1hc2tXb3JrZXIoKTogUHJvbWlzZTxXb3JrZXI+IHtcbiAgICBjb25zdCB7IGNyZWF0ZU1hc2tXb3JrZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9tYXNrLXdvcmtlcicpO1xuICAgIHJldHVybiBjcmVhdGVNYXNrV29ya2VyKCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmlzaE1hc2soYmxvYjogQmxvYikge1xuICAgIHRoaXMudGVhcmRvd25NYXNrV29ya2VyKCk7XG4gICAgdGhpcy5tYXNrQnVzeSA9IGZhbHNlO1xuICAgIHRoaXMubWFza0VuY29kaW5nID0gZmFsc2U7XG4gICAgdGhpcy5zaG93U2F2ZU1hc2tEaWFsb2cgPSBmYWxzZTtcbiAgICBzYXZlQXMoYmxvYiwgdGhpcy5wZW5kaW5nTWFza0ZpbGVuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFza0Vycm9yKGRldGFpbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZWFyZG93bk1hc2tXb3JrZXIoKTtcbiAgICB0aGlzLm1hc2tCdXN5ID0gZmFsc2U7XG4gICAgdGhpcy5tYXNrRW5jb2RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICBrZXk6IFZJWl9UT0FTVF9LRVksXG4gICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgIHN1bW1hcnk6ICdDb3VsZCBub3QgY3JlYXRlIG1hc2snLFxuICAgICAgZGV0YWlsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZWFyZG93bk1hc2tXb3JrZXIoKSB7XG4gICAgdGhpcy5tYXNrV29ya2VyPy50ZXJtaW5hdGUoKTtcbiAgICB0aGlzLm1hc2tXb3JrZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwZXJzaXN0UmVnaW9ucygpIHtcbiAgICAvLyBGb2xkZXIgc3RhY2s6IHdyaXRlIGVhY2ggc2xpY2UncyByZWdpb25zIGJhY2sgdG8gaXRzIG93biBzbGljZS1maWxlJ3NcbiAgICAvLyBzaWJsaW5nIGdlb2pzb24g4oCUIG5vIHNpbmdsZS1maWxlbmFtZSBwcm9tcHQgKHRoZSBmaWxlbmFtZXMgYXJlIHRoZSBzbGljZVxuICAgIC8vIGZpbGVzJykuIChqaXQtdWkjOTMpXG4gICAgaWYgKHRoaXMucmVnaW9uQXBpLmlzU3RhY2tNb2RlKCkgJiYgdGhpcy5yZWdpb25BcGkuZ2V0U3RhY2tTYXZlTGF5b3V0KCkgPT09ICdwZXItc2xpY2UtZmlsZScpIHtcbiAgICAgIHRoaXMuc2F2ZVN0YWNrU2xpY2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnJlZ2lvbklvLmdldFNlbGVjdGVkRmlsZU5hbWUoKTtcbiAgICBpZiAoIW5hbWUgfHwgIXRoaXMucmVnaW9uc0ZvclNhdmUoKS5sZW5ndGgpIHJldHVybjtcblxuICAgIHRoaXMuc2F2ZUFzRmlsZW5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKCcuJykpICsgJy5nZW9qc29uJztcbiAgICB0aGlzLnNhdmVBc0ZpbGVFeGlzdHMgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dTYXZlQXNEaWFsb2cgPSB0cnVlO1xuICAgIHRoaXMuX3NhdmVBc0NoZWNrJC5uZXh0KHRoaXMuc2F2ZUFzRmlsZW5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYSBmb2xkZXIgc3RhY2sncyByZWdpb25zIGFzIG9uZSBnZW9qc29uIHBlciBzbGljZS1maWxlIChqaXQtdWkjOTMpLlxuICAgKiBHcm91cHMgdGhlIHN0b3JlJ3MgcGVyLXNsaWNlIHJlZ2lvbnMgYnkgc2xpY2UgaW5kZXggYW5kIHNlcmlhbGl6ZXMgZWFjaCBvblxuICAgKiB0aGUgZGVmYXVsdCBwbGFuZSAoej0wKSDigJQgZWFjaCBzbGljZS1maWxlIGlzIGl0c2VsZiBvbmUgcGxhbmUsIGFuZCB0aGVcbiAgICogbG9hZGVyIHJlLWRlcml2ZXMgdGhlIHNsaWNlIGluZGV4IGZyb20gdGhlIGZpbGUncyBwb3NpdGlvbiBpbiB0aGUgc2VyaWVzLlxuICAgKiBTbGljZXMgY2xlYXJlZCBzaW5jZSBsb2FkIGFyZSBpbmNsdWRlZCAoZW1wdHkpIHNvIHRoZWlyIGZpbGUgaXMgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBwcml2YXRlIHNhdmVTdGFja1NsaWNlcygpIHtcbiAgICBjb25zdCBieVNsaWNlID0gdGhpcy5yZWdpb25BcGkuZ2V0U3RhY2tTYXZlQW5ub3RhdGlvblNsaWNlcygpO1xuICAgIGlmICghYnlTbGljZS5zaXplKSByZXR1cm47XG4gICAgY29uc3Qgc2xpY2VzOiB7IHo6IG51bWJlcjsgZ2VvSnNvblN0cjogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW3osIHJlZ3NdIG9mIGJ5U2xpY2UpIHtcbiAgICAgIGNvbnN0IGZsYXQgPSByZWdzLm1hcCgocikgPT4gT2JqZWN0LmFzc2lnbihuZXcgUmVnaW9uKCksIHIsIHsgejogMCB9KSk7XG4gICAgICBzbGljZXMucHVzaCh7IHosIGdlb0pzb25TdHI6IHRoaXMucmVnaW9uQXBpLmdldEdlb0pzb25TdHJpbmcoZmxhdCkgfSk7XG4gICAgfVxuICAgIHRoaXMuc2F2ZUFzQnVzeSA9IHRydWU7XG4gICAgdGhpcy5fc2F2ZUFzU3ViID0gdGhpcy5yZWdpb25Jby5zYXZlU2xpY2VHZW9Kc29ucyhzbGljZXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2F2ZUFzQnVzeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAga2V5OiBWSVpfVE9BU1RfS0VZLFxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgc3VtbWFyeTogJ1JlZ2lvbnMgc2F2ZWQnLFxuICAgICAgICAgIGRldGFpbDogYFNhdmVkIFJPSXMgZm9yICR7c2xpY2VzLmxlbmd0aH0gc2xpY2Uke3NsaWNlcy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ31gLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNhdmVBc0J1c3kgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgIGtleTogVklaX1RPQVNUX0tFWSxcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBzdW1tYXJ5OiAnRXJyb3Igc2F2aW5nIHJlZ2lvbnMnLFxuICAgICAgICAgIGRldGFpbDogYCR7KGVyciBhcyBFcnJvcik/Lm1lc3NhZ2UgPz8gZXJyfWAsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNoZWNrU2F2ZUFzRmlsZUV4aXN0cygpIHtcbiAgICB0aGlzLl9zYXZlQXNDaGVjayQubmV4dCh0aGlzLnNhdmVBc0ZpbGVuYW1lKTtcbiAgfVxuXG4gIGNvbmZpcm1TYXZlQXMoKSB7XG4gICAgaWYgKCF0aGlzLnJlZ2lvbklvLmdldFNlbGVjdGVkRmlsZU5hbWUoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnNhdmVBc0ZpbGVuYW1lLnRyaW0oKTtcbiAgICBpZiAoIWZpbGVuYW1lKSByZXR1cm47XG5cbiAgICBjb25zdCBkb1NhdmUgPSAoKSA9PiB7XG4gICAgICAvLyBLZWVwIHRoZSBkaWFsb2cgb3BlbiBzaG93aW5nIGFuIChpbmRldGVybWluYXRlKSBwcm9ncmVzcyBiYXIgd2hpbGUgdGhlXG4gICAgICAvLyByZWdpb25zIHNlcmlhbGl6ZSBhbmQgdXBsb2FkLCB0aGVuIGNsb3NlIG9uIHN1Y2Nlc3MuIERlZmVyIG9uZSB0aWNrIHNvXG4gICAgICAvLyB0aGUgYmFyIHBhaW50cyBiZWZvcmUgYSBsYXJnZSBzeW5jaHJvbm91cyBHZW9KU09OIHNlcmlhbGl6ZS5cbiAgICAgIHRoaXMuc2F2ZUFzQnVzeSA9IHRydWU7XG4gICAgICB0aGlzLl9zYXZlQXNUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zYXZlQXNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGdlb0pzb25TdHI6IHN0cmluZztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBnZW9Kc29uU3RyID0gdGhpcy5yZWdpb25BcGkuZ2V0R2VvSnNvblN0cmluZyh0aGlzLnJlZ2lvbnNGb3JTYXZlKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLnNhdmVBc0J1c3kgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBrZXk6IFZJWl9UT0FTVF9LRVksXG4gICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHN1bW1hcnk6ICdFcnJvciBzYXZpbmcgcmVnaW9ucycsXG4gICAgICAgICAgICBkZXRhaWw6IGAkeyhlcnIgYXMgRXJyb3IpPy5tZXNzYWdlID8/IGVycn1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zYXZlQXNTdWIgPSB0aGlzLnJlZ2lvbklvLnNhdmVHZW9Kc29uKGdlb0pzb25TdHIsIGZpbGVuYW1lKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFzQnVzeSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93U2F2ZUFzRGlhbG9nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgIGtleTogVklaX1RPQVNUX0tFWSxcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgc3VtbWFyeTogJ1JlZ2lvbnMgc2F2ZWQnLFxuICAgICAgICAgICAgICBkZXRhaWw6IGBTYXZlZCBhcyAke2ZpbGVuYW1lfWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNhdmVBc0J1c3kgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAga2V5OiBWSVpfVE9BU1RfS0VZLFxuICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgc3VtbWFyeTogJ0Vycm9yIHNhdmluZyByZWdpb25zJyxcbiAgICAgICAgICAgICAgZGV0YWlsOiBgJHtlcnIubWVzc2FnZSB8fCBlcnJ9YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNhdmVBc0ZpbGVFeGlzdHMpIHtcbiAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgbWVzc2FnZTogYFwiJHtmaWxlbmFtZX1cIiBhbHJlYWR5IGV4aXN0cy4gRG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIGl0P2AsXG4gICAgICAgIGhlYWRlcjogJ0NvbmZpcm0gT3ZlcndyaXRlJyxcbiAgICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgYWNjZXB0OiBkb1NhdmUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9TYXZlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbmNlbCBhbiBpbi1wcm9ncmVzcyBHZW9KU09OIHBlcnNpc3Q6IGFib3J0IHRoZSBkZWZlcnJlZCBzZXJpYWxpemUgYW5kL29yXG4gICAqICB0aGUgaW4tZmxpZ2h0IHVwbG9hZCwgYW5kIHJlc2V0IHN0YXRlLiAqL1xuICBjYW5jZWxTYXZlQXMoKSB7XG4gICAgaWYgKHRoaXMuX3NhdmVBc1RpbWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zYXZlQXNUaW1lcik7XG4gICAgICB0aGlzLl9zYXZlQXNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5fc2F2ZUFzU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3NhdmVBc1N1YiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNhdmVBc0J1c3kgPSBmYWxzZTtcbiAgfVxufVxuIiwiXG48cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJyZWdpb24tdG9vbGJhclwiPlxuICA8ZGl2IGNsYXNzPVwicC10b29sYmFyLWdyb3VwLXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXdyYXAgZ2FwLTFcIj5cbiAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXRhZ1wiIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIiFzaG93U2hhcGVMYWJlbFwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiU2hvdyByZWdpb24gbGFiZWxzLlwiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInNob3dTaGFwZUxhYmVsID0gIXNob3dTaGFwZUxhYmVsOyBjaGFuZ2VTaG93U2hhcGVMYWJlbChzaG93U2hhcGVMYWJlbClcIj5cbiAgICA8L3AtYnV0dG9uPlxuICAgIDxzcGFuIGNsYXNzPVwidG9vbGJhci1zZXBhcmF0b3JcIj48L3NwYW4+XG4gICAgPCEtLSBOZXcgcmVnaW9ucyBhcmUgbm93IGNyZWF0ZWQgZnJvbSB0aGUgZGlhZ3JhbSB0b29sYmFyXG4gICAgICAgICAocmVjdGFuZ2xlLCBwb2x5bGluZSwgZnJlZWZvcm0sIHdhbmQpLiAtLT5cbiAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXVwbG9hZFwiIHNpemU9XCJzbWFsbFwiIFt0ZXh0XT1cInRydWVcIiBzdHlsZUNsYXNzPVwibXItMlwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiVXBsb2FkIGFuZCBkaXNwbGF5IHJlZ2lvbnMgZnJvbSBnZW9qc29uIGZpbGUuXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJvaUZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgPC9wLWJ1dHRvbj5cbiAgICA8aW5wdXQgI3JvaUZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIi5nZW9qc29uLC5qc29uXCIgaGlkZGVuXG4gICAgICAgICAgIChjaGFuZ2UpPVwiaW1wb3J0Um9pcygkZXZlbnQpOyByb2lGaWxlSW5wdXQudmFsdWUgPSAnJ1wiLz5cbiAgICA8cC1idXR0b24gc2l6ZT1cInNtYWxsXCIgW3RleHRdPVwidHJ1ZVwiIHN0eWxlQ2xhc3M9XCJtci0yXCJcbiAgICAgICAgICAgICAgcFRvb2x0aXA9XCJEb3dubG9hZCByZWdpb25zIGFzIGdlb2pzb24gZmlsZS5cIlxuICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBpY29uPVwicGkgcGktZG93bmxvYWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0Um9pcygpXCI+XG4gICAgPC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXNhdmVcIiBzaXplPVwic21hbGxcIiBbdGV4dF09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cIm1yLTJcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIlNhdmUgcmVnaW9ucyB0byBzZXJ2ZXIuXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInBlcnNpc3RSZWdpb25zKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXJlZ2lvbnMgfHwgIXJlZ2lvbnMubGVuZ3RoXCI+XG4gICAgPC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b24gc2l6ZT1cInNtYWxsXCIgW3RleHRdPVwidHJ1ZVwiIHN0eWxlQ2xhc3M9XCJtci0yXCJcbiAgICAgICAgICAgICAgcFRvb2x0aXA9XCJEb3dubG9hZCBtYXNrIG9mIHRoZSByZWdpb25zIGFzIFBOR1wiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU2F2ZU1hc2tEaWFsb2coKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcmVnaW9ucyB8fCAhcmVnaW9ucy5sZW5ndGhcIj5cbiAgICAgIDwhLS0gUmVmZXJlbmNlcyB0aGUgZmlsZSBzbyBJbmtzY2FwZSBlZGl0cyB0byBtYXNrLnN2ZyBzaG93IHVwIGRpcmVjdGx5XG4gICAgICAgICAgICh0aGUgbGliJ3MgYXNzZXRzLyoqIGFyZSBzZXJ2ZWQgYXQgYXNzZXRzL3Bsb3R0aW5nLykuIFRoZVxuICAgICAgICAgICB0b29sYmFyLWljb24tZGFyayBmaWx0ZXIgcmVjb2xvdXJzIHRoZSBibGFjayBTVkcgdG8gdGhlIHRoZW1lIGJsdWUsXG4gICAgICAgICAgIHNhbWUgYXMgcmVnaW9uLWVkaXRvci5zdmcgYW5kIHRoZSBvdGhlciBTVkcgdG9vbGJhciBpY29ucy4gLS0+XG4gICAgICA8aW1nIHNyYz1cImFzc2V0cy9wbG90dGluZy9tYXNrLnN2Z1wiIGNsYXNzPVwidG9vbGJhci1pY29uLWRhcmtcIlxuICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxcmVtOyBoZWlnaHQ6IDFyZW07IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XCJcbiAgICAgICAgICAgYWx0PVwiRG93bmxvYWQgbWFza1wiLz5cbiAgICA8L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiBsYWJlbD1cIng1MTJcIiBzaXplPVwic21hbGxcIiBbdGV4dF09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cIm1yLTJcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIlJvdW5kIGFsbCByZWN0YW5nbGUgcmVnaW9uc1xuICAgICAgICAgICAgICAgICAgICB0byB3aWR0aCBhbmQgaGVpZ2h0IHRoYXQgYXJlIG11bHRpcGxlIG9mIDUxMlwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyb3VuZFJlY3RhbmdsZUxlbmd0aHMoKVwiPlxuICAgIDwvcC1idXR0b24+XG4gICAgPHAtYnV0dG9uIGljb249XCJwaSBwaS1jaGVjay1zcXVhcmVcIiBzaXplPVwic21hbGxcIiBbdGV4dF09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cIm1yLTJcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIlNlbGVjdCBhbGwgcmVnaW9uc1wiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RBbGxSZWdpb25zKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXJlZ2lvbnMgfHwgIXJlZ2lvbnMubGVuZ3RoXCI+XG4gICAgPC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXRhZ3NcIiBzaXplPVwic21hbGxcIiBbdGV4dF09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cIm1yLTJcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIkVkaXQgY2xhc3Mgb24gc2VsZWN0ZWQgcm93c1wiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIoIXNlbGVjdGVkUmVnaW9ucyB8fCAhc2VsZWN0ZWRSZWdpb25zLmxlbmd0aCk/IG9wLmhpZGUoKSA6IG9wLnRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFJlZ2lvbnMgfHwgIXNlbGVjdGVkUmVnaW9ucy5sZW5ndGhcIj5cbiAgICA8L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktcGFsZXR0ZVwiIHNpemU9XCJzbWFsbFwiIFt0ZXh0XT1cInRydWVcIiBzdHlsZUNsYXNzPVwibXItMlwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiRWRpdCBjb2xvdXIgb2Ygc2VsZWN0ZWQgcmVnaW9uc1wiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ29sb3JEaWFsb2coKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRSZWdpb25zIHx8ICFzZWxlY3RlZFJlZ2lvbnMubGVuZ3RoXCI+XG4gICAgPC9wLWJ1dHRvbj5cbiAgICA8cC1vdmVybGF5UGFuZWwgI29wIChvbkhpZGUpPVwiYnVsa0NsYXNzPScnOyBuZXdCdWxrQ2xhc3M9JydcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0yXCIgc3R5bGU9XCJ3aWR0aDogMThyZW1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LTkwMFwiPlNldCBjbGFzcyBvbiB7eyBzZWxlY3RlZFJlZ2lvbnM/Lmxlbmd0aCB8fCAwIH19IHNlbGVjdGVkIHJlZ2lvbihzKTwvc3Bhbj5cbiAgICAgICAgPCEtLSBTZWxlY3RpbmcgYSBjbGFzcyBhcHBsaWVzIGl0IGltbWVkaWF0ZWx5IChjaG9vc2luZyBhbiBvcHRpb24gY2xvc2VzIHRoZVxuICAgICAgICAgICAgIG92ZXJsYXksIHNvIHRoZXJlJ3Mgbm8gc2VwYXJhdGUgQXBwbHkgYnV0dG9uKS4gLS0+XG4gICAgICAgIDxwLWRyb3Bkb3duIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiBhcHBlbmRUbz1cImJvZHlcIiBbb3B0aW9uc109XCJwcmVzZXRTZXQuY2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiIG9wdGlvblZhbHVlPVwibmFtZVwiIFsobmdNb2RlbCldPVwiYnVsa0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDaG9vc2UgYSBjbGFzc+KAplwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwicHJlc2V0U2V0LmNsYXNzZXMubGVuZ3RoID4gOFwiIGZpbHRlckJ5PVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJhcHBseUJ1bGtDbGFzcygpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jIHBUZW1wbGF0ZT1cIml0ZW1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGQtdmFsdWVcIj48c3BhbiBjbGFzcz1cImNoaXAtc3dhdGNoXCIgW3N0eWxlLmJhY2tncm91bmRdPVwiYy5jb2xvclwiPjwvc3Bhbj57eyBjLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1pbnB1dGdyb3VwXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dCBwbGFjZWhvbGRlcj1cIuKApm9yIGEgbmV3IGNsYXNzXCIgWyhuZ01vZGVsKV09XCJuZXdCdWxrQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhZGRBbmRBcHBseUJ1bGtDbGFzcygpXCIvPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXBsdXNcIiBwVG9vbHRpcD1cIkFkZCBjbGFzcyAmYW1wOyBzZXQgaXRcIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgW2Rpc2FibGVkXT1cIiFuZXdCdWxrQ2xhc3MudHJpbSgpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRBbmRBcHBseUJ1bGtDbGFzcygpXCI+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9wLW92ZXJsYXlQYW5lbD5cbiAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXRyYXNoXCIgc2l6ZT1cInNtYWxsXCIgW3RleHRdPVwidHJ1ZVwiIHN0eWxlQ2xhc3M9XCJtci0yXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVNlbGVjdGVkUmVnaW9ucygpXCJcbiAgICAgICAgICAgICAgcFRvb2x0aXA9XCJEZWxldGUgc2VsZWN0ZWQgcmVnaW9uc1wiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRSZWdpb25zIHx8ICFzZWxlY3RlZFJlZ2lvbnMubGVuZ3RoXCI+PC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXRpbWVzLWNpcmNsZVwiIHNpemU9XCJzbWFsbFwiIFt0ZXh0XT1cInRydWVcIiBzdHlsZUNsYXNzPVwibXItMlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckFsbFJlZ2lvbnMoKVwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiRGVsZXRlIGFsbCByZWdpb25zXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFyZWdpb25zIHx8ICFyZWdpb25zLmxlbmd0aFwiPjwvcC1idXR0b24+XG4gICAgPHAtYnV0dG9uIGljb249XCJwaSBwaS1xdWVzdGlvblwiIHNpemU9XCJzbWFsbFwiIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0hlbHAoKVwiIHBUb29sdGlwPVwiSGVscFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPjwvcC1idXR0b24+XG4gIDwvZGl2PlxuPC9wLXRvb2xiYXI+XG5cbjwhLS0gRG9ja2VkIFwiQ2xhc3Nlc1wiIHBhbmVsIChqaXQtdWkjNzApOiB0aGUgYWx3YXlzLXZpc2libGUgbGlzdCBvZiBhbm5vdGF0aW9uXG4gICAgIGNsYXNzZXMgYWJvdmUgdGhlIHJlZ2lvbnMgdGFibGUuIENsaWNrIGEgcm93IHRvIG1ha2UgaXQgdGhlIGFjdGl2ZSBjbGFzc1xuICAgICAobmV3IHJlZ2lvbnMgaW5oZXJpdCBpdDsgd2l0aCByb3dzIHNlbGVjdGVkIGl0IHJlLWNsYXNzaWZpZXMgdGhlbSk7IHJlY29sb3VyXG4gICAgIHZpYSB0aGUgc3dhdGNoOyB0aGUgYmFkZ2Ugc2hvd3MgaG93IG1hbnkgcmVnaW9ucyB1c2UgdGhlIGNsYXNzLiBcIk1hbmFnZVwiXG4gICAgIG9wZW5zIHRoZSBmdWxsIGVkaXRvciAoZmFsbGJhY2sgcGFsZXR0ZSwgYXV0by1hZGQsIG1hdGNoaW5nLCBpbXBvcnQvZXhwb3J0KS4gLS0+XG48ZGl2IGNsYXNzPVwiY2xhc3Nlcy1wYW5lbFwiPlxuICA8ZGl2IGNsYXNzPVwiY2xhc3Nlcy1wYW5lbC1oZWFkZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNsYXNzZXMtcGFuZWwtdGl0bGVcIj5DbGFzc2VzPC9zcGFuPlxuICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWNvZ1wiIGxhYmVsPVwiTWFuYWdlXCJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICBwVG9vbHRpcD1cIk1hbmFnZSBjbGFzc2VzIOKAlCBhZGQgLyByZW1vdmUsIHBhbGV0dGUsIG1hdGNoaW5nLCBpbXBvcnQvZXhwb3J0XCJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIChjbGljayk9XCJvcGVuTWFuYWdlRGlhbG9nKClcIj48L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjbGFzc2VzLXBhbmVsLWJvZHlcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjIG9mIGRpc3BsYXlDbGFzc2VzOyB0cmFja0J5OiB0cmFja0J5Q2xhc3NOYW1lXCJcbiAgICAgICAgIGNsYXNzPVwiY2xhc3Mtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVDbGFzcyA9PT0gYy5uYW1lXCJcbiAgICAgICAgIChjbGljayk9XCJzZWxlY3RBY3RpdmVDbGFzcyhjLm5hbWUpXCJcbiAgICAgICAgIFtwVG9vbHRpcF09XCJzZWxlY3RlZFJlZ2lvbnM/Lmxlbmd0aFxuICAgICAgICAgICA/ICdBcHBseSDigJwnICsgYy5uYW1lICsgJ+KAnSB0byB0aGUgc2VsZWN0ZWQgcmVnaW9uKHMpJ1xuICAgICAgICAgICA6ICdTZXQg4oCcJyArIGMubmFtZSArICfigJ0gYWN0aXZlIOKAlCBuZXcgcmVnaW9ucyB1c2UgaXQnXCJcbiAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJyb3ctc3dhdGNoXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICA8aGV4LWNvbG9yLXBpY2tlciBbY29sb3JdPVwiYy5jb2xvclwiIChjb2xvckNoYW5nZSk9XCJzZXRDbGFzc0NvbG9yKGMubmFtZSwgJGV2ZW50KVwiPjwvaGV4LWNvbG9yLXBpY2tlcj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicm93LW5hbWVcIj57eyBjLm5hbWUgfX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cInJvdy1jb3VudFwiIFtjbGFzcy56ZXJvXT1cImNsYXNzQ291bnQoYy5uYW1lKSA9PT0gMFwiPnt7IGNsYXNzQ291bnQoYy5uYW1lKSB9fTwvc3Bhbj5cbiAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zbSBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXdhcm5pbmcgcm93LWRlbFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjLm5hbWUgPT09IGRlZmF1bHRDbGFzc05hbWUgJiYgY2xhc3NDb3VudChjLm5hbWUpID4gMFwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJkZWxldGVDbGFzc1Rvb2x0aXAoYy5uYW1lKVwiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRlbGV0ZUNsYXNzKGMubmFtZSlcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWRpc3BsYXlDbGFzc2VzLmxlbmd0aFwiIGNsYXNzPVwiY2xhc3Nlcy1lbXB0eVwiPlxuICAgICAgTm8gY2xhc3NlcyB5ZXQg4oCUIGFkZCBvbmUgZnJvbSBNYW5hZ2UuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJyZWdpb24tZWRpdG9yLWNvbnRlbnRcIj5cbiAgICA8cC10YWJsZSAjZHQgW3ZhbHVlXT1cInJlZ2lvbnMuc2xpY2UocGFnaW5hdG9yRmlyc3QsIHBhZ2luYXRvckZpcnN0ICsgcGFnaW5hdG9yUm93cylcIlxuICAgICAgICAgICAgIFt0YWJsZVN0eWxlXT1cInsnd2lkdGgnOiAnMTAwJSd9XCIgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkUmVnaW9uc1wiXG4gICAgICAgICAgICAgc2VsZWN0aW9uTW9kZT1cIm11bHRpcGxlXCIgW21ldGFLZXlTZWxlY3Rpb25dPVwibWV0YUtleVwiXG4gICAgICAgICAgICAgKG9uUm93U2VsZWN0KT1cIm9uU2VsZWN0aW9uQ2hhbmdlZCgpXCIgKG9uUm93VW5zZWxlY3QpPVwib25TZWxlY3Rpb25DaGFuZ2VkKClcIlxuICAgICAgICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIlxuICAgICAgICAgICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCIgZGF0YUtleT1cImlkXCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtIHJlZ2lvbi1lZGl0b3ItdGFibGVcIlxuICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIiBzY3JvbGxIZWlnaHQ9XCIxMDAlXCI+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgIDwhLS0gSGlkZSB0aGUgY29sdW1uIGhlYWRlciB3aGVuIHRoZXJlIGFyZSBubyByZWdpb25zIHRvIHNob3cuIC0tPlxuICAgICAgICA8dHIgKm5nSWY9XCJyZWdpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8IS0tIENsYXNzIGNvbHVtbjogc2hyaW5rcyB0byBmaXQgXCJSZWdpb25cIiBieSBkZWZhdWx0LCBncm93cyB3aXRoIGxvbmdlciBsYWJlbHMuIC0tPlxuICAgICAgICAgIDx0aCBjbGFzcz1cImNsYXNzLWNvbC1oZWFkZXJcIiBwUmVzaXphYmxlQ29sdW1uPkNsYXNzIDxwLXNvcnRJY29uIGZpZWxkPVwibGFiZWxcIj48L3Atc29ydEljb24+PC90aD5cbiAgICAgICAgICA8dGggY2xhc3M9XCJzdXJmYWNlLWNvbC1oZWFkZXJcIiBwUmVzaXphYmxlQ29sdW1uPlN1cmZhY2U8L3RoPlxuICAgICAgICAgIDwhLS0gVHJhc2ggY29sdW1uOiBqdXN0IGVub3VnaCBmb3IgdGhlIGljb24uIC0tPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjJyZW1cIj48L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJlZ2lvbiBsZXQtc2hhcGVJZHg9XCJyb3dJbmRleFwiPlxuICAgICAgICA8dHIgW3BTZWxlY3RhYmxlUm93XT1cInJlZ2lvblwiIFtwU2VsZWN0YWJsZVJvd0luZGV4XT1cInNoYXBlSWR4XCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiY2xhc3MtY2VsbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmdMYWJlbChyZWdpb24pOyBlbHNlIGVkaXRMYWJlbFRwbFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNsYXNzLWNlbGwtZGlzcGxheVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gUXVpY2stcGljayBhIHByZXNldCBjbGFzcyAoaXRzIGNvbG91ciBmb2xsb3dzKTsgdGhlIHBlbmNpbCBpcyBmb3JcbiAgICAgICAgICAgICAgICAgICAgIGEgZnJlZS1mb3JtIG5hbWUgLyByZW5hbWUgKGppdC11aSM3MCkuIC0tPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwiY2xhc3MtZHJvcGRvd25cIiBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInByZXNldFNldC5jbGFzc2VzXCIgb3B0aW9uTGFiZWw9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyZWdpb24ubGFiZWxcIiBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImFwcGx5UHJlc2V0VG9SZWdpb24ocmVnaW9uLCAkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwic2VsZWN0ZWRJdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGQtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAtc3dhdGNoXCIgW3N0eWxlLmJhY2tncm91bmRdPVwiY29sb3JGb3JOYW1lKHJlZ2lvbi5sYWJlbClcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbGFzcy1uYW1lXCIgW3BUb29sdGlwXT1cInJlZ2lvbi5sYWJlbFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPnt7IHJlZ2lvbi5sYWJlbCB8fCAn4oCUJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtYyBwVGVtcGxhdGU9XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGQtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAtc3dhdGNoXCIgW3N0eWxlLmJhY2tncm91bmRdPVwiYy5jb2xvclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktcGVuY2lsIGljb24taG92ZXIgbWwtMlwiXG4gICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJSZW5hbWUgLyBmcmVlLWZvcm0gbGFiZWxcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdGFydEVkaXRMYWJlbChyZWdpb24sICRldmVudClcIj48L2k+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0TGFiZWxUcGw+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLXJpZ2h0IGNsYXNzLWNlbGwtZWRpdFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdGltZXMgaWNvbi1ob3ZlclwiXG4gICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJDbG9zZVwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0b3BFZGl0TGFiZWwocmVnaW9uLCBmYWxzZSwgJGV2ZW50KVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IGNsYXNzPVwicC1pbnB1dHRleHQtc20gdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZWdpb24ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic3RvcEVkaXRMYWJlbChyZWdpb24sIHRydWUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwic3RvcEVkaXRMYWJlbChyZWdpb24sIGZhbHNlLCAkZXZlbnQpXCIvPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPCEtLSBTdXJmYWNlIGFyZWEgKMK1bcKyL21twrIgd2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVkLCBlbHNlIHB4wrIpLiAtLT5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJzdXJmYWNlLWNlbGxcIj57eyByZWdpb25BcmVhKHJlZ2lvbikgfHwgJ+KAlCcgfX08L3RkPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGljb249XCJwaSBwaS10cmFzaFwiXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXdhcm5pbmdcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUmVnaW9uKHBhZ2luYXRvckZpcnN0ICsgc2hhcGVJZHgpXCI+PC9idXR0b24+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXRhYmxlPlxuPC9kaXY+XG5cbjxwLXBhZ2luYXRvciAqbmdJZj1cInJlZ2lvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgW3Jvd3NdPVwicGFnaW5hdG9yUm93c1wiIFt0b3RhbFJlY29yZHNdPVwicmVnaW9ucy5sZW5ndGhcIlxuICAgICAgICAgICAgIFtmaXJzdF09XCJwYWdpbmF0b3JGaXJzdFwiXG4gICAgICAgICAgICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxuICAgICAgICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gdG8ge2xhc3R9IG9mIHt0b3RhbFJlY29yZHN9XCJcbiAgICAgICAgICAgICAob25QYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicmVnaW9uLWVkaXRvci1wYWdpbmF0b3JcIj5cbjwvcC1wYWdpbmF0b3I+XG5cbjwhLS0gTGl2ZS1lZGl0IG1vZGU6IG5vIFNhdmUvQ2FuY2VsIOKAlCBldmVyeSBlZGl0IGNvbW1pdHMgaW1tZWRpYXRlbHkgdG8gdGhlXG4gICAgIGFjdGl2ZSBpbWFnZSdzIHJlZ2lvbiBjYWNoZS4gLS0+XG5cblxuPHAtY29uZmlybURpYWxvZyAjY2QgW3N0eWxlXT1cInt3aWR0aDogJzI0cmVtJywgaGVpZ2h0OiAnMTRyZW0nfVwiIGtleT1cInBvc2l0aW9uRGlhbG9nXCJcbiAgICAgICAgICAgICAgICAgW2Jhc2VaSW5kZXhdPVwiMTAwMDBcIiByZWplY3RCdXR0b25TdHlsZUNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWNoZWNrXCIgbGFiZWw9XCJZZXNcIiAoY2xpY2spPVwiY2QuYWNjZXB0KClcIj48L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktdGltZXNcIiBsYWJlbD1cIk5vXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjZC5yZWplY3QoKVwiPjwvYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWNvbmZpcm1EaWFsb2c+XG5cbjxwLWRpYWxvZyBoZWFkZXI9XCJTYXZlIFJlZ2lvbnMgQXNcIiBbKHZpc2libGUpXT1cInNob3dTYXZlQXNEaWFsb2dcIiBbbW9kYWxdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgW3N0eWxlXT1cInt3aWR0aDogJzMwcmVtJ31cIiBbZHJhZ2dhYmxlXT1cImZhbHNlXCIgW3Jlc2l6YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgW2Nsb3NhYmxlXT1cIiFzYXZlQXNCdXN5XCIgW2Nsb3NlT25Fc2NhcGVdPVwiIXNhdmVBc0J1c3lcIj5cbiAgPCEtLSBJZGxlOiBmaWxlbmFtZSArIG92ZXJ3cml0ZSB3YXJuaW5nLiAtLT5cbiAgPGRpdiAqbmdJZj1cIiFzYXZlQXNCdXN5XCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0zIHB0LTJcIj5cbiAgICA8bGFiZWwgZm9yPVwiZ2VvanNvbi1maWxlbmFtZVwiIGNsYXNzPVwiZm9udC1tZWRpdW1cIj5HZW9KU09OIGZpbGVuYW1lPC9sYWJlbD5cbiAgICA8aW5wdXQgaWQ9XCJnZW9qc29uLWZpbGVuYW1lXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0XG4gICAgICAgICAgIFsobmdNb2RlbCldPVwic2F2ZUFzRmlsZW5hbWVcIlxuICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGVja1NhdmVBc0ZpbGVFeGlzdHMoKVwiXG4gICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCIgLz5cbiAgICA8c21hbGwgKm5nSWY9XCJzYXZlQXNGaWxlRXhpc3RzXCIgY2xhc3M9XCJwLWVycm9yXCI+XG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIG1yLTFcIj48L2k+XG4gICAgICBUaGlzIGZpbGUgYWxyZWFkeSBleGlzdHMgYW5kIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAgPC9zbWFsbD5cbiAgPC9kaXY+XG5cbiAgPCEtLSBCdXN5OiBwcm9ncmVzcyB3aGlsZSByZWdpb25zIHNlcmlhbGl6ZSArIHVwbG9hZC4gLS0+XG4gIDxkaXYgKm5nSWY9XCJzYXZlQXNCdXN5XCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0zIHB0LTJcIj5cbiAgICA8c3Bhbj5TYXZpbmcgcmVnaW9uc+KApjwvc3Bhbj5cbiAgICA8cC1wcm9ncmVzc0JhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIFtzdHlsZV09XCJ7aGVpZ2h0OiAnMC43NXJlbSd9XCI+PC9wLXByb2dyZXNzQmFyPlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgPHAtYnV0dG9uICpuZ0lmPVwiIXNhdmVBc0J1c3lcIiBsYWJlbD1cIkNhbmNlbFwiIGljb249XCJwaSBwaS10aW1lc1wiIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJzaG93U2F2ZUFzRGlhbG9nID0gZmFsc2VcIj48L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiAqbmdJZj1cIiFzYXZlQXNCdXN5XCIgbGFiZWw9XCJTYXZlXCIgaWNvbj1cInBpIHBpLXNhdmVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNhdmVBc0ZpbGVuYW1lIHx8ICFzYXZlQXNGaWxlbmFtZS50cmltKClcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJjb25maXJtU2F2ZUFzKClcIj48L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvbiAqbmdJZj1cInNhdmVBc0J1c3lcIiBsYWJlbD1cIkNhbmNlbFwiIGljb249XCJwaSBwaS10aW1lc1wiIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJjYW5jZWxTYXZlQXMoKVwiPjwvcC1idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuXG48cC1kaWFsb2cgaGVhZGVyPVwiRXhwb3J0IFJlZ2lvbnNcIiBbKHZpc2libGUpXT1cInNob3dFeHBvcnREaWFsb2dcIiBbbW9kYWxdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgW3N0eWxlXT1cInt3aWR0aDogJzMwcmVtJ31cIiBbZHJhZ2dhYmxlXT1cImZhbHNlXCIgW3Jlc2l6YWJsZV09XCJmYWxzZVwiPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMyBwdC0yXCI+XG4gICAgPGxhYmVsIGZvcj1cImV4cG9ydC1maWxlbmFtZVwiIGNsYXNzPVwiZm9udC1tZWRpdW1cIj5HZW9KU09OIGZpbGVuYW1lPC9sYWJlbD5cbiAgICA8aW5wdXQgaWQ9XCJleHBvcnQtZmlsZW5hbWVcIiB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHRcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRGaWxlbmFtZVwiXG4gICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCIgLz5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICA8cC1idXR0b24gbGFiZWw9XCJDYW5jZWxcIiBpY29uPVwicGkgcGktdGltZXNcIiBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2hvd0V4cG9ydERpYWxvZyA9IGZhbHNlXCI+PC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b24gbGFiZWw9XCJFeHBvcnRcIiBpY29uPVwicGkgcGktZG93bmxvYWRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWV4cG9ydEZpbGVuYW1lIHx8ICFleHBvcnRGaWxlbmFtZS50cmltKClcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJjb25maXJtRXhwb3J0KClcIj48L3AtYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRpYWxvZz5cblxuPHAtZGlhbG9nIGhlYWRlcj1cIlNhdmUgTWFza1wiIFsodmlzaWJsZSldPVwic2hvd1NhdmVNYXNrRGlhbG9nXCIgW21vZGFsXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgIFtzdHlsZV09XCJ7d2lkdGg6ICczMHJlbSd9XCIgW2RyYWdnYWJsZV09XCJmYWxzZVwiIFtyZXNpemFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgIFtjbG9zYWJsZV09XCIhbWFza0J1c3lcIiBbY2xvc2VPbkVzY2FwZV09XCIhbWFza0J1c3lcIj5cbiAgPCEtLSBJZGxlOiBmaWxlbmFtZSArIG1hc2stdHlwZSBmb3JtLiAtLT5cbiAgPGRpdiAqbmdJZj1cIiFtYXNrQnVzeVwiIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMyBwdC0yXCI+XG4gICAgPGxhYmVsIGZvcj1cIm1hc2stZmlsZW5hbWVcIiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+TWFzayBmaWxlbmFtZTwvbGFiZWw+XG4gICAgPGlucHV0IGlkPVwibWFzay1maWxlbmFtZVwiIHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dFxuICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNhdmVNYXNrRmlsZW5hbWVcIlxuICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiIC8+XG4gICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bVwiPk1hc2sgdHlwZTwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgIDxwLXJhZGlvQnV0dG9uIGlucHV0SWQ9XCJtYXNrLWJpbmFyeVwiIG5hbWU9XCJtYXNrTW9kZVwiIHZhbHVlPVwiYmluYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWFza01vZGVcIj48L3AtcmFkaW9CdXR0b24+XG4gICAgICA8bGFiZWwgZm9yPVwibWFzay1iaW5hcnlcIj5CaW5hcnkgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNvbG9yLXNlY29uZGFyeVwiPihyZWdpb25zIDEsIGJhY2tncm91bmQgMCk8L3NwYW4+PC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgIDxwLXJhZGlvQnV0dG9uIGlucHV0SWQ9XCJtYXNrLW11bHRpY2xhc3NcIiBuYW1lPVwibWFza01vZGVcIiB2YWx1ZT1cIm11bHRpY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtYXNrTW9kZVwiPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgIDxsYWJlbCBmb3I9XCJtYXNrLW11bHRpY2xhc3NcIj5NdWx0aS1jbGFzcyA8c3BhbiBjbGFzcz1cInRleHQtY29sb3Itc2Vjb25kYXJ5XCI+KHVuaXF1ZSBpZCBwZXIgcmVnaW9uLCBiYWNrZ3JvdW5kIDApPC9zcGFuPjwvbGFiZWw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQnVzeTogcHJvZ3Jlc3Mgd2hpbGUgdGhlIHdvcmtlciByYXN0ZXJpemVzICsgZW5jb2RlcyB0aGUgUE5HLiAtLT5cbiAgPGRpdiAqbmdJZj1cIm1hc2tCdXN5XCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0zIHB0LTJcIj5cbiAgICA8c3Bhbj57eyBtYXNrRW5jb2RpbmcgPyAnRW5jb2RpbmcgUE5H4oCmJyA6ICdSYXN0ZXJpemluZyByZWdpb25z4oCmJyB9fTwvc3Bhbj5cbiAgICA8cC1wcm9ncmVzc0JhciBbbW9kZV09XCJtYXNrRW5jb2RpbmcgPyAnaW5kZXRlcm1pbmF0ZScgOiAnZGV0ZXJtaW5hdGUnXCJcbiAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibWFza1Byb2dyZXNzXCJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie2hlaWdodDogJzAuNzVyZW0nfVwiPjwvcC1wcm9ncmVzc0Jhcj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxwLWJ1dHRvbiAqbmdJZj1cIiFtYXNrQnVzeVwiIGxhYmVsPVwiQ2FuY2VsXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInNob3dTYXZlTWFza0RpYWxvZyA9IGZhbHNlXCI+PC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b24gKm5nSWY9XCIhbWFza0J1c3lcIiBsYWJlbD1cIkRvd25sb2FkXCIgaWNvbj1cInBpIHBpLWRvd25sb2FkXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzYXZlTWFza0ZpbGVuYW1lIHx8ICFzYXZlTWFza0ZpbGVuYW1lLnRyaW0oKVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImNvbmZpcm1TYXZlTWFzaygpXCI+PC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b24gKm5nSWY9XCJtYXNrQnVzeVwiIGxhYmVsPVwiQ2FuY2VsXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImNhbmNlbFNhdmVNYXNrKClcIj48L3AtYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRpYWxvZz5cblxuPHAtZGlhbG9nIGhlYWRlcj1cIlJlZ2lvbiBjb2xvdXJcIiBbKHZpc2libGUpXT1cInNob3dDb2xvckRpYWxvZ1wiIFttb2RhbF09XCJmYWxzZVwiIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgW3N0eWxlXT1cInt3aWR0aDogJzI0cmVtJ31cIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbcmVzaXphYmxlXT1cImZhbHNlXCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0zIHB0LTJcIj5cbiAgICA8c3Bhbj5PdXRsaW5lIGNvbG91ciBwZXIgY2xhc3MgZm9yIHRoZVxuICAgICAgPGI+e3sgc2VsZWN0ZWRSZWdpb25zPy5sZW5ndGggfHwgMCB9fTwvYj4gc2VsZWN0ZWQgcmVnaW9uKHMpOjwvc3Bhbj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlZGl0IG9mIGNsYXNzQ29sb3JFZGl0czsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIGZsZXgtMVwiPnt7IGVkaXQubGFiZWwgfHwgJ1VuY2xhc3NpZmllZCcgfX08L3NwYW4+XG4gICAgICA8aGV4LWNvbG9yLXBpY2tlciBbY29sb3JdPVwiZWRpdC5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29sb3JDaGFuZ2UpPVwiY2xhc3NDb2xvckVkaXRzW2ldLmNvbG9yID0gJGV2ZW50XCI+PC9oZXgtY29sb3ItcGlja2VyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxwLWJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIGljb249XCJwaSBwaS10aW1lc1wiIFt0ZXh0XT1cInRydWVcIiAob25DbGljayk9XCJzaG93Q29sb3JEaWFsb2cgPSBmYWxzZVwiPlxuICAgIDwvcC1idXR0b24+XG4gICAgPHAtYnV0dG9uIGxhYmVsPVwiQXBwbHlcIiBpY29uPVwicGkgcGktY2hlY2tcIiAob25DbGljayk9XCJhcHBseUNvbG9yVG9TZWxlY3RlZCgpXCI+XG4gICAgPC9wLWJ1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kaWFsb2c+XG5cbjwhLS0gTWFuYWdlIGFubm90YXRpb24gY2xhc3NlcyAoaml0LXVpIzcwKTogQ1JVRCArIGZhbGxiYWNrIHBhbGV0dGUgKyBtYXRjaGluZy9hdXRvLWFkZFxuICAgICBzZXR0aW5ncyArIHJlc2V0L2ltcG9ydC9leHBvcnQuIEVkaXRzIGEgd29ya2luZyBjb3B5LCBjb21taXR0ZWQgb24gQXBwbHkvRG9uZS4gLS0+XG48cC1kaWFsb2cgaGVhZGVyPVwiTWFuYWdlIGFubm90YXRpb24gY2xhc3Nlc1wiIFsodmlzaWJsZSldPVwic2hvd01hbmFnZURpYWxvZ1wiIFttb2RhbF09XCJ0cnVlXCIgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICBbc3R5bGVdPVwie3dpZHRoOiAnMzRyZW0nfVwiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIFtyZXNpemFibGVdPVwiZmFsc2VcIj5cbiAgPGRpdiAqbmdJZj1cInByZXNldERyYWZ0XCIgY2xhc3M9XCJtYW5hZ2UtZGlhbG9nIGZsZXggZmxleC1jb2x1bW4gZ2FwLTMgcHQtMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYW5hZ2UtY2xhc3NlcyBmbGV4IGZsZXgtY29sdW1uIGdhcC0yXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjIG9mIHByZXNldERyYWZ0LmNsYXNzZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICBjbGFzcz1cIm1hbmFnZS1jbGFzcy1yb3cgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPGhleC1jb2xvci1waWNrZXIgW2NvbG9yXT1cImMuY29sb3JcIiAoY29sb3JDaGFuZ2UpPVwiYy5jb2xvciA9ICRldmVudFwiPjwvaGV4LWNvbG9yLXBpY2tlcj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dCBjbGFzcz1cInAtaW5wdXR0ZXh0LXNtIGZsZXgtMVwiXG4gICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImMubmFtZVwiIHBsYWNlaG9sZGVyPVwiQ2xhc3MgbmFtZVwiLz5cbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tdGV4dCBwLWJ1dHRvbi13YXJuaW5nXCJcbiAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIlJlbW92ZSBjbGFzc1wiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVByZXNldENsYXNzKGkpXCI+PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXBsdXNcIiBsYWJlbD1cIkFkZCBjbGFzc1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tdGV4dCBhbGlnbi1zZWxmLXN0YXJ0XCIgKGNsaWNrKT1cImFkZFByZXNldENsYXNzKClcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYW5hZ2Utc2VjdGlvbiBmbGV4IGZsZXgtY29sdW1uIGdhcC0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInNlY3Rpb24tdGl0bGUgZm9udC1tZWRpdW1cIj5GYWxsYmFjayBwYWxldHRlXG4gICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtY29sb3Itc2Vjb25kYXJ5XCI+4oCUIGNvbG91cnMgZm9yIGNsYXNzZXMgbm90IGxpc3RlZDwvc21hbGw+PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrLXBhbGV0dGUgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJlc2V0RHJhZnQuZmFsbGJhY2tQYWxldHRlOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmYWxsYmFjay1zd2F0Y2ggZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8aGV4LWNvbG9yLXBpY2tlciBbY29sb3JdPVwiY29sXCIgKGNvbG9yQ2hhbmdlKT1cInByZXNldERyYWZ0LmZhbGxiYWNrUGFsZXR0ZVtpXSA9ICRldmVudFwiPjwvaGV4LWNvbG9yLXBpY2tlcj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXRpbWVzIGljb24taG92ZXIgbWwtMVwiIHBUb29sdGlwPVwiUmVtb3ZlXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmFsbGJhY2tDb2xvcihpKVwiPjwvaT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1wbHVzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXNtIHAtYnV0dG9uLXRleHRcIiBwVG9vbHRpcD1cIkFkZCBmYWxsYmFjayBjb2xvdXJcIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIChjbGljayk9XCJhZGRGYWxsYmFja0NvbG9yKClcIj48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8cC1jaGVja2JveCBbKG5nTW9kZWwpXT1cInByZXNldERyYWZ0LmF1dG9Qcm9tb3RlXCIgW2JpbmFyeV09XCJ0cnVlXCIgaW5wdXRJZD1cImF1dG9Qcm9tb3RlXCI+PC9wLWNoZWNrYm94PlxuICAgICAgPGxhYmVsIGZvcj1cImF1dG9Qcm9tb3RlXCI+QXV0by1hZGQgZGV0ZWN0ZWQgY2xhc3NlcyB0byB0aGlzIGxpc3QgYXMgdGhleSBhcHBlYXI8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+TGFiZWwgbWF0Y2hpbmc8L3NwYW4+XG4gICAgICA8cC1zZWxlY3RCdXR0b24gW29wdGlvbnNdPVwibWF0Y2hNb2RlT3B0aW9uc1wiIFsobmdNb2RlbCldPVwicHJlc2V0RHJhZnQubWF0Y2hNb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiPjwvcC1zZWxlY3RCdXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWFuYWdlLWZvb3RlciBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXdyYXAgZ2FwLTIgdy1mdWxsXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMVwiPlxuICAgICAgICA8cC1idXR0b24gbGFiZWw9XCJSZXNldFwiIGljb249XCJwaSBwaS1yZWZyZXNoXCIgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJyZXNldFByZXNldHNUb0RlZmF1bHRzKClcIj48L3AtYnV0dG9uPlxuICAgICAgICA8cC1idXR0b24gbGFiZWw9XCJJbXBvcnRcIiBpY29uPVwicGkgcGktdXBsb2FkXCIgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJwcmVzZXRGaWxlSW5wdXQuY2xpY2soKVwiPjwvcC1idXR0b24+XG4gICAgICAgIDxpbnB1dCAjcHJlc2V0RmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLmpzb24sYXBwbGljYXRpb24vanNvblwiIGhpZGRlblxuICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJpbXBvcnRQcmVzZXRzKCRldmVudCk7IHByZXNldEZpbGVJbnB1dC52YWx1ZSA9ICcnXCIvPlxuICAgICAgICA8cC1idXR0b24gbGFiZWw9XCJFeHBvcnRcIiBpY29uPVwicGkgcGktZG93bmxvYWRcIiBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImV4cG9ydFByZXNldHMoKVwiPjwvcC1idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImZsZXgtMVwiPjwvc3Bhbj5cbiAgICAgIDwhLS0gQXBwbHkgcGVyc2lzdHMgdG8gdGhlIHNlcnZlciBhbmQgY2xvc2VzOyBpdCByZXBsYWNlcyB0aGUgb2xkIEFwcGx5K0RvbmUgcGFpci4gLS0+XG4gICAgICA8cC1idXR0b24gbGFiZWw9XCJBcHBseVwiIGljb249XCJwaSBwaS1jaGVja1wiIChvbkNsaWNrKT1cImFwcGx5TWFuYWdlRGlhbG9nKHRydWUpXCI+PC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kaWFsb2c+XG5cbjxwLWRpYWxvZyBoZWFkZXI9XCJSZWdpb24gZWRpdG9yIGhlbHBcIiBbKHZpc2libGUpXT1cImRpc3BsYXlIZWxwRGlhbG9nXCIgW3N0eWxlXT1cInt3aWR0aDogJzUwdncnfVwiXG4gICAgICAgICAgW21heGltaXphYmxlXT1cInRydWVcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj5cbiAgPHA+XG4gICAgVGhlIFJlZ2lvbiBFZGl0b3IgbGlzdHMgZXZlcnkgcmVnaW9uIGRyYXduIG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGltYWdlLlxuICAgIE9wZW4gaXQgd2l0aCB0aGVcbiAgICA8aW1nIHNyYz1cImFzc2V0cy9wbG90dGluZy9yZWdpb24tZWRpdG9yLnN2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIGFsdD1cIlJlZ2lvbiBFZGl0b3JcIi8+XG4gICAgYnV0dG9uIGluIHRoZSBkaWFncmFtIHRvb2xiYXI6IGl0IG9wZW5zIGFzIGEgZmxvYXRpbmcgZGlhbG9nIHlvdSBjYW4gZHJhZyxcbiAgICByZXNpemUsIGFuZCBsZWF2ZSBvcGVuIHdoaWxlIHlvdSBkcmF3IG9uIHRoZSBpbWFnZS5cbiAgICBSZWdpb25zIGFyZSB0cmFja2VkIDxiPnBlciBpbWFnZTwvYj46IHN3aXRjaGluZyB0byBhbm90aGVyIGltYWdlIGhpZGVzXG4gICAgdGhlc2UgYW5kIHNob3dzIHRoYXQgaW1hZ2UncyByZWdpb25zOyBzd2l0Y2hpbmcgYmFjayByZXN0b3JlcyB0aGVtLlxuICAgIEVkaXRzIGluIHRoZSB0YWJsZSBhcHBseSA8Yj5saXZlPC9iPiB0byB0aGUgZGlhZ3JhbSDigJQgdGhlcmUgaXMgbm8gc2F2ZSBvclxuICAgIGNhbmNlbC5cbiAgPC9wPlxuXG4gIDxoMz5DcmVhdGluZyByZWdpb25zPC9oMz5cbiAgPHA+XG4gICAgVXNlIHRoZSBkaWFncmFtIHRvb2xiYXIgdG9vbHMgdG8gZHJhdyBuZXcgcmVnaW9uczpcbiAgICA8aSBjbGFzcz1cInBpIHBpLXN0b3BcIj48L2k+IHJlY3RhbmdsZSxcbiAgICA8b2JqZWN0IGRhdGE9XCJhc3NldHMvaWNvbnMvcG9seWxpbmUuc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCI+PC9vYmplY3Q+IHBvbHlsaW5lLFxuICAgIDxpIGNsYXNzPVwicGkgcGktcGVuY2lsXCI+PC9pPiBmcmVlZm9ybSBwYXRoLCBicnVzaCwgb3JcbiAgICA8b2JqZWN0IGRhdGE9XCJhc3NldHMvaWNvbnMvd2FuZC5zdmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIj48L29iamVjdD4gd2FuZC5cbiAgICBBbnl0aGluZyB5b3UgZHJhdyBhcHBlYXJzIGltbWVkaWF0ZWx5IGluIHRoZSB0YWJsZSwgd2l0aCB0aGUgY2xhc3MgbmFtZVxuICAgIFwiPGI+UmVnaW9uPC9iPlwiIGJ5IGRlZmF1bHQuXG4gIDwvcD5cblxuICA8aDM+VGhlIHRhYmxlIGNvbHVtbnM8L2gzPlxuICA8dWw+XG4gICAgPGxpPjxiPkNsYXNzPC9iPiDigJQgdGhlIHJlZ2lvbidzIGNsYXNzLiBQaWNrIGEgY2xhc3MgZnJvbSB0aGUgZHJvcGRvd24gKGl0c1xuICAgICAgY29sb3VyIGZvbGxvd3MpLCBvciB1c2UgdGhlIDxpIGNsYXNzPVwicGkgcGktcGVuY2lsXCI+PC9pPiBmb3IgYSBmcmVlLWZvcm0gbmFtZS48L2xpPlxuICAgIDxsaT48Yj5TdXJmYWNlPC9iPiDigJQgdGhlIHJlZ2lvbidzIGFyZWEsIGluIMK1bcKyL21twrIgd2hlbiB0aGUgaW1hZ2UgY2FycmllcyBhXG4gICAgICBwaHlzaWNhbCBwaXhlbCBzaXplLCBvdGhlcndpc2UgaW4gcHjCsi4gSG9sZXMgKGRvbnV0cykgYW5kIG11bHRpLXBhcnRcbiAgICAgIHJlZ2lvbnMgYXJlIGFjY291bnRlZCBmb3IuPC9saT5cbiAgICA8bGk+VGhlIHRyYXNoIGljb24gYXQgdGhlIGVuZCBvZiBhIHJvdyBkZWxldGVzIHRoYXQgb25lIHJlZ2lvbi48L2xpPlxuICAgIDxsaT5Vc2UgXCI8Yj54NTEyPC9iPlwiIHRvIHJvdW5kIGFsbCByZWN0YW5nbGUgd2lkdGhzL2hlaWdodHMgdG8gdGhlXG4gICAgICBuZWFyZXN0IG11bHRpcGxlIG9mIDUxMi48L2xpPlxuICA8L3VsPlxuICA8cD5SZWdpb24gZ2VvbWV0cnkgaXMgZWRpdGVkIG9uIHRoZSBkaWFncmFtIGl0c2VsZiAoZHJhZyB2ZXJ0aWNlcywgdGhlIHZlcnRleFxuICAgIHRvb2xzLCBicnVzaC93YW5kLCBhbmQgdGhlIHJpZ2h0LWNsaWNrIHJlZ2lvbiBhY3Rpb25zKSwgbm90IGluIHRoaXMgdGFibGUuPC9wPlxuXG4gIDxoMz5TZWxlY3Rpbmcgcm93czwvaDM+XG4gIDx1bD5cbiAgICA8bGk+Q2xpY2sgYSByb3cgdG8gc2VsZWN0IGl0LiBUaGUgY29ycmVzcG9uZGluZyByZWdpb24gaXMgaGlnaGxpZ2h0ZWQgaW4gdGhlXG4gICAgICBkaWFncmFtIChQbG90bHkgc2hvd3MgaXRzIGVkaXQgaGFuZGxlczsgdGhlIE9wZW5TZWFkcmFnb24gaW1hZ2Ugdmlld1xuICAgICAgaGlnaGxpZ2h0cyBpdCBhbmQgc2hvd3MgaXRzIGhhbmRsZXMgaW4gc2VsZWN0IG1vZGUpLjwvbGk+XG4gICAgPGxpPjxrYmQ+Q3RybDwva2JkPi88a2JkPkNtZDwva2JkPitjbGljayB0byBhZGQgb3IgcmVtb3ZlIGEgcm93IGZyb20gdGhlXG4gICAgICBzZWxlY3Rpb24uIDxrYmQ+U2hpZnQ8L2tiZD4rY2xpY2sgdG8gZXh0ZW5kIHRoZSBzZWxlY3Rpb24gaW4gYSByYW5nZS48L2xpPlxuICAgIDxsaT5TZWxlY3RpbmcgYSByZWdpb24gaW4gdGhlIGRpYWdyYW0gaGlnaGxpZ2h0cyB0aGUgbWF0Y2hpbmcgcm93IGluIHRoZVxuICAgICAgdGFibGUuPC9saT5cbiAgICA8bGk+Q2xpY2tzIG9uIHRoZSBjb2xvdXIgcGlja2VyLCB0aGUgdHJhc2ggaWNvbiwgb3IgdGhlIGFjdGl2ZSBjbGFzcy1lZGl0XG4gICAgICBpbnB1dCBkbyBub3QgY2hhbmdlIHRoZSBzZWxlY3Rpb24g4oCUIHRoYXQncyBzdGFuZGFyZCBQcmltZU5HIGJlaGF2aW91ci48L2xpPlxuICA8L3VsPlxuXG4gIDxoMz5CdWxrIGFjdGlvbnMgb24gdGhlIHNlbGVjdGVkIHJvd3M8L2gzPlxuICA8dWw+XG4gICAgPGxpPjxpIGNsYXNzPVwicGkgcGktY2hlY2stc3F1YXJlXCI+PC9pPiBTZWxlY3QgZXZlcnkgcmVnaW9uIGluIHRoZSB0YWJsZSBhdCBvbmNlIChhbHNvIGFcbiAgICAgIHJpZ2h0LWNsaWNrIGFjdGlvbiBvbiB0aGUgaW1hZ2UpLjwvbGk+XG4gICAgPGxpPjxpIGNsYXNzPVwicGkgcGktdGFnc1wiPjwvaT4gRWRpdCB0aGUgbGFiZWwgb24gZXZlcnkgc2VsZWN0ZWQgcm93IGF0IG9uY2UuPC9saT5cbiAgICA8bGk+PGkgY2xhc3M9XCJwaSBwaS10cmFzaFwiPjwvaT4gRGVsZXRlIGV2ZXJ5IHNlbGVjdGVkIHJlZ2lvbiDigJQgYm90aCBmcm9tXG4gICAgICB0aGUgdGFibGUgYW5kIHRoZSBkaWFncmFtLjwvbGk+XG4gICAgPGxpPjxpIGNsYXNzPVwicGkgcGktdGltZXMtY2lyY2xlXCI+PC9pPiBEZWxldGUgZXZlcnkgcmVnaW9uIG9uIHRoaXMgaW1hZ2UuPC9saT5cbiAgPC91bD5cblxuICA8aDM+QW5ub3RhdGlvbiBjbGFzc2VzICZhbXA7IGNvbG91cnMgKHByZXNldHMpPC9oMz5cbiAgPHA+XG4gICAgUHJlc2V0IGEgY2xhc3Mgb25jZSDigJQgYSA8Yj5uYW1lPC9iPiBhbmQgYSA8Yj5jb2xvdXI8L2I+IOKAlCBhbmQgZXZlcnkgcmVnaW9uIHdpdGhcbiAgICB0aGF0IGNsYXNzIG5hbWUgaXMgZHJhd24gaW4gdGhhdCBjb2xvdXIsIDxiPmluY2x1ZGluZyByZWdpb25zIGxvYWRlZCBmcm9tIGFcbiAgICBHZW9KU09OIGxhdGVyPC9iPi4gVGhlIHByZXNldCBjb2xvdXIgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aDogb24gbG9hZCBpdFxuICAgIDxiPm92ZXJyaWRlcyB0aGUgY29sb3VyIHN0b3JlZCBpbiB0aGUgZmlsZTwvYj4sIHNvIGEgZ2l2ZW4gYW5ub3RhdGlvbiB0eXBlIGFsd2F5c1xuICAgIGxvb2tzIHRoZSBzYW1lIGFjcm9zcyBpbWFnZXMgYW5kIHNlc3Npb25zLlxuICA8L3A+XG4gIDxwPlNldCB1cCB5b3VyIGNsYXNzZXMgaW4gdGhlIGFubm90YXRpb24tY2xhc3MgbWFuYWdlciDigJRcbiAgICA8aSBjbGFzcz1cInBpIHBpLWNvZ1wiPjwvaT4gPGI+TWFuYWdlPC9iPjo8L3A+XG4gIDxvbD5cbiAgICA8bGk+PGI+QWRkIGNsYXNzPC9iPiwgdGhlbiB0eXBlIHRoZSBjbGFzcyA8Yj5uYW1lIGV4YWN0bHkgYXMgaXQgYXBwZWFycyBpbiB5b3VyXG4gICAgICBkYXRhPC9iPiAoZS5nLiA8Y29kZT5UdW1vcjwvY29kZT4pIGFuZCBwaWNrIGl0cyA8Yj5jb2xvdXI8L2I+IGZyb20gdGhlIHN3YXRjaC5cbiAgICAgIFJlcGVhdCBmb3IgZWFjaCBjbGFzcy48L2xpPlxuICAgIDxsaT5PcHRpb25hbGx5OiBlZGl0IHRoZSA8Yj5mYWxsYmFjayBwYWxldHRlPC9iPiAoY29sb3VycyBnaXZlbiB0byBjbGFzc2VzIHRoYXRcbiAgICAgIGFyZW4ndCBpbiB5b3VyIGxpc3QpLCB0b2dnbGUgPGI+YXV0by1hZGQ8L2I+IChhZGRzIHVubWF0Y2hlZCBjbGFzc2VzIGZvdW5kIG9uXG4gICAgICBsb2FkKSwgYW5kIGNob29zZSA8Yj5leGFjdDwvYj4gdnMuIDxiPm5vcm1hbGl6ZWQ8L2I+IG5hbWUgbWF0Y2hpbmcg4oCUIG5vcm1hbGl6ZWRcbiAgICAgIGlnbm9yZXMgY2FzZSBhbmQgc3Vycm91bmRpbmcgc3BhY2VzLCBzbyA8Y29kZT50dW1vcjwvY29kZT4gbWF0Y2hlc1xuICAgICAgPGNvZGU+VHVtb3I8L2NvZGU+LjwvbGk+XG4gICAgPGxpPjxiPkFwcGx5LjwvYj4gUHJlc2V0cyBhcmUgc2F2ZWQgPGI+cGVyIHVzZXI8L2I+IG9uIHRoZSBzZXJ2ZXIsIHNvIHRoZXkgZm9sbG93XG4gICAgICB5b3UgYWNyb3NzIGltYWdlcyBhbmQgc2Vzc2lvbnMuIFlvdSBjYW4gYWxzbyA8Yj5yZXNldCB0byBkZWZhdWx0czwvYj4gb3JcbiAgICAgIDxiPmltcG9ydCAvIGV4cG9ydDwvYj4gdGhlIHNldCBhcyBKU09OIHRvIHNoYXJlIGl0LjwvbGk+XG4gIDwvb2w+XG4gIDxwPlxuICAgIE5leHQgdGltZSB5b3Ugb3BlbiBvciA8aSBjbGFzcz1cInBpIHBpLXVwbG9hZFwiPjwvaT4gaW1wb3J0IGEgR2VvSlNPTiB3aG9zZSByZWdpb25zXG4gICAgY2FycnkgdGhvc2UgY2xhc3MgbmFtZXMsIGVhY2ggcmVnaW9uIGlzIHNob3duIGluIGl0cyBwcmVzZXQgY29sb3VyIGF1dG9tYXRpY2FsbHkg4oCUXG4gICAgbm8gcmUtY29sb3VyaW5nIG5lZWRlZC4gQSBjbGFzcyB0aGF0IGlzbid0IGluIHlvdXIgbGlzdCBpbnN0ZWFkIGdldHMgYSBzdGFibGVcbiAgICBjb2xvdXIgZnJvbSB0aGUgZmFsbGJhY2sgcGFsZXR0ZS5cbiAgPC9wPlxuICA8cD5EYXkgdG8gZGF5OjwvcD5cbiAgPHVsPlxuICAgIDxsaT5UaGUgPGI+Y2xhc3Mgc3RyaXA8L2I+IGFib3ZlIHRoZSB0YWJsZSBsaXN0cyB5b3VyIHByZXNldHMgd2l0aCB0aGVpciBjb2xvdXJzLlxuICAgICAgQ2xpY2sgYSBjbGFzcyB0byBtYWtlIGl0IDxiPmFjdGl2ZTwvYj4gKG5ldyByZWdpb25zIGluaGVyaXQgaXQpOyB3aXRoIHJvd3NcbiAgICAgIHNlbGVjdGVkLCBjbGlja2luZyBhIGNsYXNzIHJlLWNsYXNzaWZpZXMgdGhlbS48L2xpPlxuICAgIDxsaT5UaGUgPGI+Q2xhc3M8L2I+IGNvbHVtbiBkcm9wZG93biByZS1jbGFzc2lmaWVzIG9uZSByZWdpb24gdG8gYSBwcmVzZXQgKGl0c1xuICAgICAgY29sb3VyIGZvbGxvd3MpLCBvciB1c2UgdGhlIDxpIGNsYXNzPVwicGkgcGktcGVuY2lsXCI+PC9pPiBmb3IgYSBmcmVlLWZvcm0gbmFtZS48L2xpPlxuICAgIDxsaT5SZWNvbG91ciBhIGNsYXNzIGZyb20gaXRzIHN3YXRjaCAoY2xhc3Mgc3RyaXAgb3IgTWFuYWdlKSBhbmQgZXZlcnkgcmVnaW9uIG9mXG4gICAgICB0aGF0IGNsYXNzIHVwZGF0ZXMgYXQgb25jZS48L2xpPlxuICAgIDxsaT5EZWxldGluZyBhIGNsYXNzIHJlYXNzaWducyBpdHMgcmVnaW9ucyB0byB0aGUgZGVmYXVsdCA8Yj5SZWdpb248L2I+IGNsYXNzLjwvbGk+XG4gICAgPGxpPkEgY29sb3VyIHlvdSBzZXQgb24gYSA8Yj5zaW5nbGU8L2I+IHJlZ2lvbiAoPGkgY2xhc3M9XCJwaSBwaS1wYWxldHRlXCI+PC9pPlxuICAgICAgU2VsZWN0ZWQgcmVnaW9ucykgaXMga2VwdCBhbmQgaXMgbm90IG92ZXJyaWRkZW4gYnkgaXRzIGNsYXNzLjwvbGk+XG4gIDwvdWw+XG5cbiAgPGgzPlJlZ2lvbiBhY3Rpb25zIChyaWdodC1jbGljayB0aGUgZGlhZ3JhbSk8L2gzPlxuICA8cD5SaWdodC1jbGljayBhIHJlZ2lvbiDigJQgb3IgdGhlIGN1cnJlbnQgbXVsdGktc2VsZWN0aW9uIOKAlCBvbiB0aGUgZGlhZ3JhbSBmb3JcbiAgICB0aGUgXCJTZWxlY3RlZCByZWdpb24ocylcIiBhY3Rpb25zOjwvcD5cbiAgPHVsPlxuICAgIDxsaT48Yj5NZXJnZSAvIGdyb3VwPC9iPiDigJQgY29tYmluZSAyKyBzZWxlY3RlZCByZWdpb25zIGludG8gb25lIChpdCBtYXkgZW5kXG4gICAgICB1cCBtdWx0aS1wYXJ0IGlmIHRoZSBwaWVjZXMgZG9uJ3QgdG91Y2gpLjwvbGk+XG4gICAgPGxpPjxiPlVuZ3JvdXA8L2I+IOKAlCBzcGxpdCBhIG11bHRpLXBhcnQgcmVnaW9uIGJhY2sgaW50byBzZXBhcmF0ZSByZWdpb25zLjwvbGk+XG4gICAgPGxpPjxiPkludmVyc2U8L2I+IOKAlCByZXBsYWNlIHRoZSBzZWxlY3Rpb24gd2l0aCBldmVyeXRoaW5nIG91dHNpZGUgaXQgKHRoZVxuICAgICAgcmVnaW9ucyBiZWNvbWUgaG9sZXMgaW4gdGhlIGltYWdlIHJlY3RhbmdsZSkuPC9saT5cbiAgICA8bGk+PGI+U2ltcGxpZnk8L2I+IOKAlCByZWR1Y2UgdGhlIHZlcnRleCBjb3VudCAoRG91Z2xhc+KAk1BldWNrZXIpIGJ5IGEgcGl4ZWxcbiAgICAgIHRocmVzaG9sZDsgcGljayBhIHByZXNldCBvciBhIGN1c3RvbSB2YWx1ZS48L2xpPlxuICAgIDxsaT48Yj5Db252ZXJ0IHRvIELDqXppZXIgLyB0byBwb2x5Z29uPC9iPiBhbmQgPGI+RGVsZXRlPC9iPi48L2xpPlxuICA8L3VsPlxuXG4gIDxoMz5EaXNwbGF5IG9wdGlvbnM8L2gzPlxuICA8dWw+XG4gICAgPGxpPjxpIGNsYXNzPVwicGkgcGktdGFnXCI+PC9pPiBUb2dnbGUgc2hvd2luZyBjbGFzcyBsYWJlbHMgb24gZXZlcnlcbiAgICAgIHJlZ2lvbiBpbiB0aGUgZGlhZ3JhbSAoc2xvd2VyIHdpdGggbWFueSByZWdpb25zKS48L2xpPlxuICA8L3VsPlxuXG4gIDxoMz5JbXBvcnQgLyBleHBvcnQ8L2gzPlxuICA8dWw+XG4gICAgPGxpPjxpIGNsYXNzPVwicGkgcGktdXBsb2FkXCI+PC9pPiBJbXBvcnQgcmVnaW9ucyBmcm9tIGEgR2VvSlNPTiBmaWxlLjwvbGk+XG4gICAgPGxpPjxpIGNsYXNzPVwicGkgcGktZG93bmxvYWRcIj48L2k+IEV4cG9ydCB0aGUgY3VycmVudCBpbWFnZSdzIHJlZ2lvbnMgdG9cbiAgICAgIGEgR2VvSlNPTiBmaWxlLiAoVGhlIHBlci1pbWFnZSBjYWNoZSBpcyBpbi1tZW1vcnkgb25seSDigJQgZXhwb3J0aW5nIGlzXG4gICAgICBob3cgeW91IHBlcnNpc3QgcmVnaW9ucyBhY3Jvc3Mgc2Vzc2lvbnMuKTwvbGk+XG4gIDwvdWw+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktY2hlY2tcIiAoY2xpY2spPVwiZGlzcGxheUhlbHBEaWFsb2c9ZmFsc2VcIiBsYWJlbD1cIk9rXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXRleHRcIj5cbiAgICA8L3AtYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRpYWxvZz5cblxuIl19