speechrecorderng 2.21.4 → 2.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/{esm2015/lib/action/action.js → esm2020/lib/action/action.mjs} +0 -0
  2. package/{esm2015/lib/audio/audio_display.js → esm2020/lib/audio/audio_display.mjs} +5 -5
  3. package/esm2020/lib/audio/audio_player.mjs +276 -0
  4. package/esm2020/lib/audio/capture/capture.mjs +547 -0
  5. package/{esm2015/lib/audio/context.js → esm2020/lib/audio/context.mjs} +0 -0
  6. package/esm2020/lib/audio/dsp/level_measure.mjs +351 -0
  7. package/{esm2015/lib/audio/format.js → esm2020/lib/audio/format.mjs} +0 -0
  8. package/{esm2015/lib/audio/impl/wavformat.js → esm2020/lib/audio/impl/wavformat.mjs} +0 -0
  9. package/{esm2015/lib/audio/impl/wavwriter.js → esm2020/lib/audio/impl/wavwriter.mjs} +0 -0
  10. package/{esm2015/lib/audio/io/stream.js → esm2020/lib/audio/io/stream.mjs} +0 -0
  11. package/{esm2015/lib/audio/persistor.js → esm2020/lib/audio/persistor.mjs} +0 -0
  12. package/{esm2015/lib/audio/playback/player.js → esm2020/lib/audio/playback/player.mjs} +0 -0
  13. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +376 -0
  14. package/{esm2015/lib/audio/ui/audio_display_control.js → esm2020/lib/audio/ui/audio_display_control.mjs} +5 -5
  15. package/{esm2015/lib/audio/ui/audio_display_scroll_pane.js → esm2020/lib/audio/ui/audio_display_scroll_pane.mjs} +5 -5
  16. package/{esm2015/lib/audio/ui/audiosignal.js → esm2020/lib/audio/ui/audiosignal.mjs} +5 -5
  17. package/{esm2015/lib/audio/ui/common.js → esm2020/lib/audio/ui/common.mjs} +0 -0
  18. package/esm2020/lib/audio/ui/container.mjs +431 -0
  19. package/{esm2015/lib/audio/ui/livelevel.js → esm2020/lib/audio/ui/livelevel.mjs} +5 -5
  20. package/{esm2015/lib/audio/ui/scroll_pane_horizontal.js → esm2020/lib/audio/ui/scroll_pane_horizontal.mjs} +4 -4
  21. package/{esm2015/lib/audio/ui/sonagram.js → esm2020/lib/audio/ui/sonagram.mjs} +5 -5
  22. package/{esm2015/lib/dsp/utils.js → esm2020/lib/dsp/utils.mjs} +0 -0
  23. package/{esm2015/lib/io/BinaryWriter.js → esm2020/lib/io/BinaryWriter.mjs} +0 -0
  24. package/{esm2015/lib/io/stream.js → esm2020/lib/io/stream.mjs} +0 -0
  25. package/{esm2015/lib/math/2d/geometry.js → esm2020/lib/math/2d/geometry.mjs} +0 -0
  26. package/{esm2015/lib/math/complex.js → esm2020/lib/math/complex.mjs} +0 -0
  27. package/{esm2015/lib/math/dft.js → esm2020/lib/math/dft.mjs} +0 -0
  28. package/{esm2015/lib/math/utils.js → esm2020/lib/math/utils.mjs} +0 -0
  29. package/esm2020/lib/media/utils.mjs +14 -0
  30. package/esm2020/lib/net/uploader.mjs +246 -0
  31. package/{esm2015/lib/speechrecorder/project/project.js → esm2020/lib/speechrecorder/project/project.mjs} +0 -0
  32. package/{esm2015/lib/speechrecorder/project/project.service.js → esm2020/lib/speechrecorder/project/project.service.mjs} +4 -4
  33. package/esm2020/lib/speechrecorder/recording.mjs +54 -0
  34. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +246 -0
  35. package/{esm2015/lib/speechrecorder/script/script.js → esm2020/lib/speechrecorder/script/script.mjs} +2 -2
  36. package/{esm2015/lib/speechrecorder/script/script.service.js → esm2020/lib/speechrecorder/script/script.service.mjs} +4 -4
  37. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +1144 -0
  38. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +449 -0
  39. package/{esm2015/lib/speechrecorder/session/item.js → esm2020/lib/speechrecorder/session/item.mjs} +1 -1
  40. package/{esm2015/lib/speechrecorder/session/progress.js → esm2020/lib/speechrecorder/session/progress.mjs} +5 -5
  41. package/{esm2015/lib/speechrecorder/session/prompting.js → esm2020/lib/speechrecorder/session/prompting.mjs} +21 -21
  42. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +75 -0
  43. package/esm2020/lib/speechrecorder/session/recording_list.mjs +109 -0
  44. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +126 -0
  45. package/{esm2015/lib/speechrecorder/session/recordingfile/recording-file-navi.component.js → esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs} +5 -5
  46. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +168 -0
  47. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +415 -0
  48. package/{esm2015/lib/speechrecorder/session/recordingfile/recording-file.js → esm2020/lib/speechrecorder/session/recordingfile/recording-file.mjs} +1 -1
  49. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +251 -0
  50. package/{esm2015/lib/speechrecorder/session/session.js → esm2020/lib/speechrecorder/session/session.mjs} +0 -0
  51. package/{esm2015/lib/speechrecorder/session/session.service.js → esm2020/lib/speechrecorder/session/session.service.mjs} +4 -4
  52. package/{esm2015/lib/speechrecorder/session/session_finished_dialog.js → esm2020/lib/speechrecorder/session/session_finished_dialog.mjs} +4 -4
  53. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +1274 -0
  54. package/{esm2015/lib/speechrecorder/session/warning_bar.js → esm2020/lib/speechrecorder/session/warning_bar.mjs} +5 -5
  55. package/{esm2015/lib/speechrecorder/spruploader.js → esm2020/lib/speechrecorder/spruploader.mjs} +4 -4
  56. package/{esm2015/lib/speechrecorder/startstopsignal/startstopsignal.js → esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs} +0 -0
  57. package/{esm2015/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.js → esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs} +5 -5
  58. package/esm2020/lib/speechrecorderng.component.mjs +427 -0
  59. package/{esm2015/lib/speechrecorderng.module.js → esm2020/lib/speechrecorderng.module.mjs} +12 -11
  60. package/{esm2015/lib/spr.config.js → esm2020/lib/spr.config.mjs} +4 -4
  61. package/{esm2015/lib/spr.module.version.js → esm2020/lib/spr.module.version.mjs} +2 -2
  62. package/{esm2015/lib/ui/canvas_layer_comp.js → esm2020/lib/ui/canvas_layer_comp.mjs} +4 -4
  63. package/{esm2015/lib/ui/message_dialog.js → esm2020/lib/ui/message_dialog.mjs} +4 -4
  64. package/{esm2015/lib/ui/recordingitem_display.js → esm2020/lib/ui/recordingitem_display.mjs} +9 -9
  65. package/{esm2015/lib/utils/css_utils.js → esm2020/lib/utils/css_utils.mjs} +0 -0
  66. package/{esm2015/lib/utils/scrollIntoViewToBottom.js → esm2020/lib/utils/scrollIntoViewToBottom.mjs} +4 -4
  67. package/{esm2015/lib/utils/ua-parser.js → esm2020/lib/utils/ua-parser.mjs} +0 -0
  68. package/{esm2015/lib/utils/utils.js → esm2020/lib/utils/utils.mjs} +0 -0
  69. package/esm2020/public-api.mjs +31 -0
  70. package/{esm2015/speechrecorderng.js → esm2020/speechrecorderng.mjs} +0 -0
  71. package/fesm2015/speechrecorderng.mjs +11991 -0
  72. package/fesm2015/speechrecorderng.mjs.map +1 -0
  73. package/{fesm2015/speechrecorderng.js → fesm2020/speechrecorderng.mjs} +1863 -285
  74. package/fesm2020/speechrecorderng.mjs.map +1 -0
  75. package/lib/media/utils.d.ts +3 -0
  76. package/lib/net/uploader.d.ts +4 -2
  77. package/lib/speechrecorder/recording.d.ts +14 -3
  78. package/lib/speechrecorder/recordings/recordings.service.d.ts +12 -5
  79. package/lib/speechrecorder/session/audiorecorder.d.ts +150 -0
  80. package/lib/speechrecorder/session/controlpanel.d.ts +2 -1
  81. package/lib/speechrecorder/session/item.d.ts +2 -2
  82. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +26 -0
  83. package/lib/speechrecorder/session/recording_list.d.ts +19 -0
  84. package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +6 -2
  85. package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +5 -4
  86. package/lib/speechrecorder/session/recordingfile/recording-file.d.ts +2 -2
  87. package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +5 -3
  88. package/lib/speechrecorder/session/sessionmanager.d.ts +5 -5
  89. package/lib/speechrecorderng.module.d.ts +31 -28
  90. package/lib/spr.module.version.d.ts +1 -1
  91. package/package.json +33 -20
  92. package/public-api.d.ts +2 -1
  93. package/bundles/speechrecorderng.umd.js +0 -10146
  94. package/bundles/speechrecorderng.umd.js.map +0 -1
  95. package/esm2015/lib/audio/audio_player.js +0 -274
  96. package/esm2015/lib/audio/capture/capture.js +0 -544
  97. package/esm2015/lib/audio/dsp/level_measure.js +0 -356
  98. package/esm2015/lib/audio/ui/audio_canvas_layer_comp.js +0 -364
  99. package/esm2015/lib/audio/ui/container.js +0 -412
  100. package/esm2015/lib/net/uploader.js +0 -220
  101. package/esm2015/lib/speechrecorder/recording.js +0 -38
  102. package/esm2015/lib/speechrecorder/recordings/recordings.service.js +0 -173
  103. package/esm2015/lib/speechrecorder/session/controlpanel.js +0 -446
  104. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-meta.component.js +0 -83
  105. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.js +0 -163
  106. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-view.component.js +0 -386
  107. package/esm2015/lib/speechrecorder/session/recordingfile/recordingfile-service.js +0 -191
  108. package/esm2015/lib/speechrecorder/session/sessionmanager.js +0 -1271
  109. package/esm2015/lib/speechrecorderng.component.js +0 -423
  110. package/esm2015/public-api.js +0 -30
  111. package/fesm2015/speechrecorderng.js.map +0 -1
@@ -19,12 +19,12 @@ export class Recinstructions {
19
19
  return riTxt;
20
20
  }
21
21
  }
22
- Recinstructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: Recinstructions, deps: [], target: i0.ɵɵFactoryTarget.Component });
23
- Recinstructions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: Recinstructions, selector: "spr-recinstructions", inputs: { recinstructions: "recinstructions", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount" }, ngImport: i0, template: `
22
+ Recinstructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: Recinstructions, deps: [], target: i0.ɵɵFactoryTarget.Component });
23
+ Recinstructions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: Recinstructions, selector: "spr-recinstructions", inputs: { recinstructions: "recinstructions", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount" }, ngImport: i0, template: `
24
24
 
25
25
  {{displayText()}}
26
- `, isInline: true, styles: [":host {\n\n justify-content: left; /* align horizontal center */\n align-items: flex-start; /* align vertical center */\n background: white;\n text-align: left;\n font-size: 1em;\n flex: 0;\n width: 100%;\n }\n "] });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: Recinstructions, decorators: [{
26
+ `, isInline: true, styles: [":host{justify-content:left;align-items:flex-start;background:white;text-align:left;font-size:1em;flex:0;width:100%}\n"] });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: Recinstructions, decorators: [{
28
28
  type: Component,
29
29
  args: [{
30
30
  selector: 'spr-recinstructions',
@@ -212,13 +212,13 @@ export class Prompter {
212
212
  }
213
213
  }
214
214
  }
215
- Prompter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: Prompter, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ProjectService }], target: i0.ɵɵFactoryTarget.Component });
216
- Prompter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: Prompter, selector: "app-sprprompter", inputs: { projectName: "projectName", prompterHeight: "prompterHeight", promptMediaItems: "promptMediaItems" }, host: { properties: { "class.fill": "this.prompterStyleFill" } }, ngImport: i0, template: `
215
+ Prompter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: Prompter, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ProjectService }], target: i0.ɵɵFactoryTarget.Component });
216
+ Prompter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: Prompter, selector: "app-sprprompter", inputs: { projectName: "projectName", prompterHeight: "prompterHeight", promptMediaItems: "promptMediaItems" }, host: { properties: { "class.fill": "this.prompterStyleFill" } }, ngImport: i0, template: `
217
217
 
218
218
  <!--<ng-template [ngIf]="text">{{text}}</ng-template>-->
219
219
  <!-- <img *ngIf="src" #promptImage [src]="srcUrl()" [height]="prompterHeight-20" /> -->
220
- `, isInline: true, styles: [":host {\n\n justify-content: center; /* align horizontal center */\n align-items: center; /* align vertical center */\n background: white;\n text-align: center;\n /* font-size: 2em; */\n line-height: 1.2em;\n font-weight: bold;\n /* Use only natural size of the prompt */\n /* The prompter compnent then ets aligned vertically centered */\n flex: 0 1;\n\n }", ":host(.fill) {\n /* Use all space to scale images */\n flex: 3;\n width: 100%;\n height: 100%;\n max-height: 100%;\n max-width: 100%;\n /* A separate flex container might be necessayr to alighn centered */\n vertical-align: middle; /* TODO does not work, image is not vertically centered */\n }"] });
221
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: Prompter, decorators: [{
220
+ `, isInline: true, styles: [":host{justify-content:center;align-items:center;background:white;text-align:center;line-height:1.2em;font-weight:700;flex:0 1}\n", ":host(.fill){flex:3;width:100%;height:100%;max-height:100%;max-width:100%;vertical-align:middle}\n"] });
221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: Prompter, decorators: [{
222
222
  type: Component,
223
223
  args: [{
224
224
  selector: 'app-sprprompter',
@@ -392,11 +392,11 @@ export class PromptContainer {
392
392
  }
393
393
  }
394
394
  }
395
- PromptContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PromptContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
396
- PromptContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: PromptContainer, selector: "app-sprpromptcontainer", inputs: { projectName: "projectName", mediaitems: "mediaitems" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "prompter", first: true, predicate: Prompter, descendants: true, static: true }], ngImport: i0, template: `
395
+ PromptContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: PromptContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
396
+ PromptContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: PromptContainer, selector: "app-sprpromptcontainer", inputs: { projectName: "projectName", mediaitems: "mediaitems" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "prompter", first: true, predicate: Prompter, descendants: true, static: true }], ngImport: i0, template: `
397
397
  <app-sprprompter #prompter [projectName]="projectName" [promptMediaItems]="mediaitems" [style.font-size]="fontSize+'px'" [style.visibility]="prDisplay" [prompterHeight]="prompterHeight"></app-sprprompter>
398
- `, isInline: true, styles: [":host {\n\n flex: 3; /* the container consumes all available space */\n padding: 10pt;\n height: 100%;\n max-height: 100%;\n\n justify-content: center; /* align horizontal center*/\n align-items: center; /* align vertical center */\n background: white;\n text-align: center;\n display: flex;\n flex-direction: column;\n min-height: 0px;\n width: 100%;\n }\n "], components: [{ type: Prompter, selector: "app-sprprompter", inputs: ["projectName", "prompterHeight", "promptMediaItems"] }] });
399
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PromptContainer, decorators: [{
398
+ `, isInline: true, styles: [":host{flex:3;padding:10pt;height:100%;max-height:100%;justify-content:center;align-items:center;background:white;text-align:center;display:flex;flex-direction:column;min-height:0px;width:100%}\n"], components: [{ type: Prompter, selector: "app-sprprompter", inputs: ["projectName", "prompterHeight", "promptMediaItems"] }] });
399
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: PromptContainer, decorators: [{
400
400
  type: Component,
401
401
  args: [{
402
402
  selector: 'app-sprpromptcontainer',
@@ -539,15 +539,15 @@ export class PromptingContainer {
539
539
  ev.preventDefault();
540
540
  }
541
541
  }
542
- PromptingContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PromptingContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
543
- PromptingContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: { projectName: "projectName", promptItem: "promptItem", showPrompt: "showPrompt", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount", transportActions: "transportActions" }, host: { listeners: { "touchstart": "onTouchstart($event)", "touchend": "onTouchEnd($event)", "touchmove": "onTouchMove($event)", "touchcancel": "onTouchCancel($event)" } }, ngImport: i0, template: `
542
+ PromptingContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: PromptingContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
543
+ PromptingContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: { projectName: "projectName", promptItem: "promptItem", showPrompt: "showPrompt", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount", transportActions: "transportActions" }, host: { listeners: { "touchstart": "onTouchstart($event)", "touchend": "onTouchEnd($event)", "touchmove": "onTouchMove($event)", "touchcancel": "onTouchCancel($event)" } }, ngImport: i0, template: `
544
544
  <spr-recinstructions [selectedItemIdx]="selectedItemIdx" [itemCount]="itemCount"
545
545
  [recinstructions]="promptItem?.recinstructions?.recinstructions"></spr-recinstructions>
546
546
  <app-sprpromptcontainer [projectName]="projectName"
547
547
  [mediaitems]="showPrompt?(promptItem?promptItem.mediaitems:null):null"></app-sprpromptcontainer>
548
548
 
549
- `, isInline: true, styles: [":host {\n position: relative;\n flex: 3; /* the container consumes all available space */\n padding: 10pt;\n justify-content: center; /* align horizontal center*/\n align-items: center; /* align vertical center */\n background: white;\n text-align: center;\n display: flex;\n flex-direction: column;\n min-height: 0px;\n }\n "], components: [{ type: Recinstructions, selector: "spr-recinstructions", inputs: ["recinstructions", "selectedItemIdx", "itemCount"] }, { type: PromptContainer, selector: "app-sprpromptcontainer", inputs: ["projectName", "mediaitems"] }] });
550
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PromptingContainer, decorators: [{
549
+ `, isInline: true, styles: [":host{position:relative;flex:3;padding:10pt;justify-content:center;align-items:center;background:white;text-align:center;display:flex;flex-direction:column;min-height:0px}\n"], components: [{ type: Recinstructions, selector: "spr-recinstructions", inputs: ["recinstructions", "selectedItemIdx", "itemCount"] }, { type: PromptContainer, selector: "app-sprpromptcontainer", inputs: ["projectName", "mediaitems"] }] });
550
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: PromptingContainer, decorators: [{
551
551
  type: Component,
552
552
  args: [{
553
553
  selector: 'app-sprpromptingcontainer',
@@ -619,8 +619,8 @@ export class Prompting {
619
619
  this.onPrevItem.emit();
620
620
  }
621
621
  }
622
- Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: Prompting, deps: [], target: i0.ɵɵFactoryTarget.Component });
623
- Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: Prompting, selector: "app-sprprompting", inputs: { projectName: "projectName", startStopSignalState: "startStopSignalState", promptItem: "promptItem", showPrompt: "showPrompt", items: "items", selectedItemIdx: "selectedItemIdx", transportActions: "transportActions", enableDownload: "enableDownload", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { onItemSelect: "onItemSelect", onNextItem: "onNextItem", onPrevItem: "onPrevItem" }, viewQueries: [{ propertyName: "simpleTrafficLight", first: true, predicate: SimpleTrafficLight, descendants: true, static: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], ngImport: i0, template: `
622
+ Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: Prompting, deps: [], target: i0.ɵɵFactoryTarget.Component });
623
+ Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: Prompting, selector: "app-sprprompting", inputs: { projectName: "projectName", startStopSignalState: "startStopSignalState", promptItem: "promptItem", showPrompt: "showPrompt", items: "items", selectedItemIdx: "selectedItemIdx", transportActions: "transportActions", enableDownload: "enableDownload", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { onItemSelect: "onItemSelect", onNextItem: "onNextItem", onPrevItem: "onPrevItem" }, viewQueries: [{ propertyName: "simpleTrafficLight", first: true, predicate: SimpleTrafficLight, descendants: true, static: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], ngImport: i0, template: `
624
624
 
625
625
  <app-simpletrafficlight [status]="startStopSignalState"></app-simpletrafficlight>
626
626
  <app-sprpromptingcontainer [projectName]="projectName" [promptItem]="promptItem" [showPrompt]="showPrompt"
@@ -642,8 +642,8 @@ Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12
642
642
 
643
643
 
644
644
 
645
- `, isInline: true, styles: [":host {\n position: relative;\n margin: 0;\n padding: 0;\n background: lightgrey;\n width: 100%; /* use all horizontal available space */\n flex: 1; /* ... and fill rest of vertical available space (other components have flex 0) */\n\n /* Workaround for Firefox\n If the progress table gets long (script with many items) FF increases the height of the overflow progressContainer and\n the whole app does not fit into the page anymore. The app overflows and shows a vertical scrollbar for the whole app.\n See http://stackoverflow.com/questions/28636832/firefox-overflow-y-not-working-with-nested-flexbox\n */\n min-height: 0px;\n\n display: flex; /* flex container: left traffic light, right prompter (container) */\n flex-direction: row;\n flex-wrap: nowrap; /* wrap could completely destroy the layout */\n }", "\n app-simpletrafficlight {\n margin: 10px;\n min-height: 0px;\n z-index: 3;\n }\n ", "\n app-sprprogress {\n z-index: 3;\n }\n ", "\n div {\n display: none;\n position: absolute;\n\n\n /* height: 50%; */\n /* width: 100%; */\n\n /* overflow: hidden; */\n\n /* margin: 20px; */\n /* border: 20px; */\n z-index: 5;\n /*background-color: red; */\n }", "\n div.active {\n display: flex;\n position: absolute;\n bottom: 0px;\n /*left: 0px; */\n\n height: 90%;\n width: 100%;\n\n overflow: hidden;\n\n padding: 0px;\n /* margin: 20px; */\n /* border: 20px; */\n z-index: 5;\n box-sizing: border-box;\n background-color: rgba(0, 0, 0, 0)\n\n }"], components: [{ type: i2.SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: ["status"] }, { type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: ["projectName", "promptItem", "showPrompt", "selectedItemIdx", "itemCount", "transportActions"] }, { type: i3.Progress, selector: "app-sprprogress", inputs: ["items", "selectedItemIdx", "enableDownload"], outputs: ["onRowSelect", "rowSelect", "onShowDoneAction", "clickDone", "onDownloadDoneAction", "clickDownloadDone"] }, { type: i4.AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }], directives: [{ type: i5.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }] });
646
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: Prompting, decorators: [{
645
+ `, isInline: true, styles: [":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "app-simpletrafficlight{margin:10px;min-height:0px;z-index:3}\n", "app-sprprogress{z-index:3}\n", "div{display:none;position:absolute;z-index:5}\n", "div.active{display:flex;position:absolute;bottom:0px;height:90%;width:100%;overflow:hidden;padding:0;z-index:5;box-sizing:border-box;background-color:#0000}\n"], components: [{ type: i2.SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: ["status"] }, { type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: ["projectName", "promptItem", "showPrompt", "selectedItemIdx", "itemCount", "transportActions"] }, { type: i3.Progress, selector: "app-sprprogress", inputs: ["items", "selectedItemIdx", "enableDownload"], outputs: ["onRowSelect", "rowSelect", "onShowDoneAction", "clickDone", "onDownloadDoneAction", "clickDownloadDone"] }, { type: i4.AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }], directives: [{ type: i5.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }] });
646
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: Prompting, decorators: [{
647
647
  type: Component,
648
648
  args: [{
649
649
  selector: 'app-sprprompting',
@@ -776,4 +776,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
776
776
  }], onPrevItem: [{
777
777
  type: Output
778
778
  }] } });
779
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vcHJvbXB0aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFJWixXQUFXLEVBRVosTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFNNUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBd0J2RCxNQUFNLE9BQU8sZUFBZTtJQUsxQixXQUFXO1FBQ1QsSUFBSSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLElBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFDO1lBQ3hDLEtBQUssR0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLGVBQWUsR0FBQyxHQUFHLEdBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsSUFBRyxJQUFJLENBQUMsZUFBZSxFQUFDO1lBQ3RCLEtBQUssR0FBQyxLQUFLLEdBQUMsSUFBSSxHQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7U0FDdkM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzZHQWRVLGVBQWU7aUdBQWYsZUFBZSx1S0FoQmhCOzs7R0FHVDs0RkFhVSxlQUFlO2tCQXBCM0IsU0FBUzttQkFBQztvQkFFVCxRQUFRLEVBQUUscUJBQXFCO29CQUUvQixRQUFRLEVBQUU7OztHQUdUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7Ozs7O0dBVVIsQ0FBQztpQkFDSDs4QkFFVSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVCxtd0RBM0pVLGtCQUFrQjs0RkErTmxCLFNBQVM7a0JBOUZyQixTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSxrQkFBa0I7b0JBRTVCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVDtvQkFDRCxNQUFNLEVBQUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBa0JQLEVBQUU7Ozs7OztHQU1ILEVBQUU7Ozs7R0FJRixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7TUFlQyxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BbUJGO3FCQUNIO2lCQUVGOzhCQUdrRCxrQkFBa0I7c0JBQWxFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNKLFlBQVk7c0JBQXRELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDaEMsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBPbkluaXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEFmdGVyQ29udGVudENoZWNrZWRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtTaW1wbGVUcmFmZmljTGlnaHR9IGZyb20gXCIuLi9zdGFydHN0b3BzaWduYWwvdWkvc2ltcGxldHJhZmZpY2xpZ2h0XCI7XHJcbmltcG9ydCB7U3RhdGUgYXMgU3RhcnRTdG9wU2lnbmFsU3RhdGV9IGZyb20gXCIuLi9zdGFydHN0b3BzaWduYWwvc3RhcnRzdG9wc2lnbmFsXCI7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSBcIi4vaXRlbVwiO1xyXG5pbXBvcnQge0Jsb2NrLCBUZXh0LCBNZWRpYWl0ZW0sIFByb21wdEl0ZW19IGZyb20gXCIuLi9zY3JpcHQvc2NyaXB0XCI7XHJcbmltcG9ydCB7VHJhbnNwb3J0QWN0aW9uc30gZnJvbSBcIi4vY29udHJvbHBhbmVsXCI7XHJcbmltcG9ydCB7QWN0aW9ufSBmcm9tIFwiLi4vLi4vYWN0aW9uL2FjdGlvblwiO1xyXG5pbXBvcnQge0F1ZGlvRGlzcGxheX0gZnJvbSBcIi4uLy4uL2F1ZGlvL2F1ZGlvX2Rpc3BsYXlcIjtcclxuaW1wb3J0IHtQcm9qZWN0U2VydmljZX0gZnJvbSBcIi4uL3Byb2plY3QvcHJvamVjdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXVkaW9DbGlwfSBmcm9tIFwiLi4vLi4vYXVkaW8vcGVyc2lzdG9yXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdzcHItcmVjaW5zdHJ1Y3Rpb25zJyxcclxuXHJcbiAgdGVtcGxhdGU6IGBcclxuXHJcbiAgICB7e2Rpc3BsYXlUZXh0KCl9fVxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuXHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7IC8qIGFsaWduIGhvcml6b250YWwgY2VudGVyICovXHJcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgLyogYWxpZ24gdmVydGljYWwgIGNlbnRlciAqL1xyXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgZm9udC1zaXplOiAxZW07XHJcbiAgICBmbGV4OiAwO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWNpbnN0cnVjdGlvbnMge1xyXG4gIEBJbnB1dCgpIHJlY2luc3RydWN0aW9uczogc3RyaW5nfG51bGx8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1JZHg6IG51bWJlcnxudWxsfHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBpdGVtQ291bnQ6IG51bWJlcnx1bmRlZmluZWQ7XHJcblxyXG4gIGRpc3BsYXlUZXh0KCk6c3RyaW5ne1xyXG4gICAgbGV0IHJpVHh0OnN0cmluZz0nJztcclxuICAgIGlmKHRoaXMuaXRlbUNvdW50ICYmIHRoaXMuc2VsZWN0ZWRJdGVtSWR4KXtcclxuICAgICAgcmlUeHQ9cmlUeHQrdGhpcy5zZWxlY3RlZEl0ZW1JZHgrJy8nKyh0aGlzLml0ZW1Db3VudC0xKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMucmVjaW5zdHJ1Y3Rpb25zKXtcclxuICAgICAgcmlUeHQ9cmlUeHQrJzogJyt0aGlzLnJlY2luc3RydWN0aW9ucztcclxuICAgIH1cclxuICAgIHJldHVybiByaVR4dDtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9tcHRlcicsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gICAgPCEtLTxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ0ZXh0XCI+e3t0ZXh0fX08L25nLXRlbXBsYXRlPi0tPlxyXG4gICAgPCEtLSA8aW1nICpuZ0lmPVwic3JjXCIgI3Byb21wdEltYWdlIFtzcmNdPVwic3JjVXJsKClcIiBbaGVpZ2h0XT1cInByb21wdGVySGVpZ2h0LTIwXCIgLz4gLS0+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG5cclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyAvKiBhbGlnbiBob3Jpem9udGFsIGNlbnRlciAqL1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgLyogYWxpZ24gdmVydGljYWwgIGNlbnRlciAqL1xyXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAvKiBmb250LXNpemU6IDJlbTsgKi9cclxuICAgIGxpbmUtaGVpZ2h0OiAxLjJlbTtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgLyogVXNlIG9ubHkgbmF0dXJhbCBzaXplIG9mIHRoZSBwcm9tcHQgKi9cclxuICAgIC8qIFRoZSBwcm9tcHRlciBjb21wbmVudCB0aGVuIGV0cyBhbGlnbmVkIHZlcnRpY2FsbHkgY2VudGVyZWQgKi9cclxuICAgIGZsZXg6IDAgMTtcclxuXHJcbiAgfWAsIGA6aG9zdCguZmlsbCkge1xyXG4gICAgLyogVXNlIGFsbCBzcGFjZSB0byBzY2FsZSBpbWFnZXMgKi9cclxuICAgIGZsZXg6IDM7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XHJcbiAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgICAvKiBBIHNlcGFyYXRlIGZsZXggY29udGFpbmVyIG1pZ2h0IGJlIG5lY2Vzc2F5ciB0byBhbGlnaG4gY2VudGVyZWQgKi9cclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IC8qIFRPRE8gZG9lcyBub3Qgd29yaywgaW1hZ2UgaXMgbm90IHZlcnRpY2FsbHkgY2VudGVyZWQgKi9cclxuICB9YF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb21wdGVyIHtcclxuICBASW5wdXQoKSBwcm9qZWN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX3Byb21wdE1lZGlhSXRlbXM6IEFycmF5PE1lZGlhaXRlbT58bnVsbHx1bmRlZmluZWQ9bnVsbFxyXG5cclxuICBASW5wdXQoKSBwcm9tcHRlckhlaWdodDogbnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSBfdGV4dDogc3RyaW5nfHVuZGVmaW5lZHxudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9zcmM6IHN0cmluZ3x1bmRlZmluZWR8bnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfYmxvY2tzOiBBcnJheTxCbG9jaz58dW5kZWZpbmVkO1xyXG4gIG1pbWV0eXBlITogc3RyaW5nO1xyXG4gIHByaXZhdGUgY3VyclByb21wdENoaWxkOiBIVE1MRWxlbWVudHxudWxsID0gbnVsbDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5maWxsJykgcHVibGljIHByb21wdGVyU3R5bGVGaWxsID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2UpIHtcclxuXHJcbiAgfVxyXG5cclxuICBnZXQgdGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXh0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNyYygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zcmM7XHJcbiAgfVxyXG5cclxuICBzcmNVcmwoKTogc3RyaW5nfG51bGx7XHJcbiAgICBpZiAodGhpcy5wcm9qZWN0TmFtZSAmJiB0aGlzLl9zcmMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdFJlc291cmNlVXJsKHRoaXMucHJvamVjdE5hbWUsIHRoaXMuX3NyYyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gICAgd2lkdGgoKTpudW1iZXJ8bnVsbHtcclxuICAgICAgaWYodGhpcy5lbFJlZil7XHJcbiAgICAgICAgaWYodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGhlaWdodCgpOm51bWJlcnxudWxse1xyXG4gICAgICAgIGlmKHRoaXMuZWxSZWYpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGVuZFRleHRFbGVtZW50KHBhcmVudEVsOkhUTUxFbGVtZW50LHR4dDpUZXh0KXtcclxuICAgICAgbGV0IHQ6IHN0cmluZyA9IDxzdHJpbmc+dHh0LnRleHRcclxuICAgICAgbGV0IHR4dE5kID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHQpXHJcbiAgICAgIGlmKHR4dC5kZWNvcmF0aW9uIHx8IHR4dC5jb2xvcil7XHJcbiAgICAgICAgbGV0IHNwRWwgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICAgIGxldCBzdHlsZVN0cj0nJ1xyXG4gICAgICAgIGlmKHR4dC5kZWNvcmF0aW9uKSB7XHJcbiAgICAgICAgICBzdHlsZVN0ciA9IHN0eWxlU3RyICsndGV4dC1kZWNvcmF0aW9uOiAnICsgdHh0LmRlY29yYXRpb24rJzsnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHR4dC5jb2xvcil7XHJcbiAgICAgICAgICBzdHlsZVN0ciA9IHN0eWxlU3RyICsnY29sb3I6ICcgKyB0eHQuY29sb3IrJzsnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNwRWwuc3R5bGU9c3R5bGVTdHJcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudEVsLCBzcEVsKVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoc3BFbCwgdHh0TmQpXHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudEVsLCB0eHROZClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgcHJvbXB0TWVkaWFJdGVtcyhwTWlzOiBBcnJheTxNZWRpYWl0ZW0+fG51bGwpIHtcclxuICAgIHRoaXMuX3Byb21wdE1lZGlhSXRlbXMgPSBwTWlzXHJcbiAgICBpZiAodGhpcy5jdXJyUHJvbXB0Q2hpbGQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5jdXJyUHJvbXB0Q2hpbGQpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fcHJvbXB0TWVkaWFJdGVtcyAmJiB0aGlzLl9wcm9tcHRNZWRpYUl0ZW1zLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgIGxldCBtaSA9IHRoaXMuX3Byb21wdE1lZGlhSXRlbXNbMF1cclxuICAgICAgdGhpcy5taW1ldHlwZSA9ICd0ZXh0L3BsYWluJ1xyXG4gICAgICBpZiAobWkubWltZXR5cGUpIHtcclxuICAgICAgICB0aGlzLm1pbWV0eXBlID0gbWkubWltZXR5cGUudHJpbSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1pbWV0eXBlID09PSAndGV4dC9wbGFpbicpIHtcclxuICAgICAgICB0aGlzLl90ZXh0ID0gbWkudGV4dFxyXG4gICAgICAgIHRoaXMuX3NyYyA9IG51bGw7XHJcbiAgICAgICAgbGV0IHByVHh0PScnO1xyXG4gICAgICAgIGlmKHRoaXMuX3RleHQpe1xyXG4gICAgICAgICAgcHJUeHQ9dGhpcy5fdGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyUHJvbXB0Q2hpbGQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQocHJUeHQpO1xyXG4gICAgICAgIHRoaXMucHJvbXB0ZXJTdHlsZUZpbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5jdXJyUHJvbXB0Q2hpbGQpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWltZXR5cGUgPT09ICd0ZXh0L3gtcHJvbXB0Jykge1xyXG4gICAgICAgIC8vdGhpcy5yZW5kZXJpbmc9dHJ1ZVxyXG4gICAgICAgIHRoaXMuX3RleHQ9bnVsbDtcclxuICAgICAgICB0aGlzLl9zcmM9bnVsbDtcclxuICAgICAgICB0aGlzLl9ibG9ja3M9bmV3IEFycmF5PEJsb2NrPigpO1xyXG4gICAgICAgIGxldCBwZD1taS5wcm9tcHREb2NcclxuICAgICAgICBpZihwZCl7XHJcbiAgICAgICAgICBsZXQgcGRCb2R5PXBkLmJvZHlcclxuICAgICAgICAgIGlmKHBkQm9keSl7XHJcbiAgICAgICAgICAgIHRoaXMuX2Jsb2Nrcz1wZEJvZHkuYmxvY2tzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcm9tcHRlclN0eWxlRmlsbCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyUHJvbXB0Q2hpbGQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgICAgaWYodGhpcy5fYmxvY2tzKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBiaSA9IDA7IGJpIDwgdGhpcy5fYmxvY2tzLmxlbmd0aDsgYmkrKykge1xyXG4gICAgICAgICAgICBsZXQgYmwgPSB0aGlzLl9ibG9ja3NbYmldXHJcbiAgICAgICAgICAgIGlmICgncCcgPT09IGJsLnR5cGUpIHtcclxuICAgICAgICAgICAgICBsZXQgcEJsRWwgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3AnKVxyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5jdXJyUHJvbXB0Q2hpbGQsIHBCbEVsKVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IHRpID0gMDsgdGkgPCBibC50ZXh0cy5sZW5ndGg7IHRpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB0eHQgPSBibC50ZXh0c1t0aV1cclxuICAgICAgICAgICAgICAgIGlmICh0eHQpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCd0ZXh0JyA9PT0gdHh0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFRleHRFbGVtZW50KHBCbEVsLCB0eHQpXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2ZvbnQnID09PSB0eHQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcEVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3R5bGVTdHIgPSAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eHQuc3R5bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU3RyID0gc3R5bGVTdHIgKyAnZm9udC1zdHlsZTogJyArIHR4dC5zdHlsZSArICc7J1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodHh0LnNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU3RyID0gc3R5bGVTdHIgKyAnZm9udC1zaXplOiAnICsgdHh0LnNpemUgKyAnOydcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR4dC53ZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU3RyID0gc3R5bGVTdHIgKyAnZm9udC13ZWlnaHQ6ICcgKyB0eHQud2VpZ2h0ICsgJzsnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNwRWwuc3R5bGUgPSBzdHlsZVN0clxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocEJsRWwsIHNwRWwpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRUZXh0RWxlbWVudChzcEVsLCA8VGV4dD50eHQudGV4dClcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnbGluZWJyZWFrJyA9PT0gdHh0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYnJFbCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYnInKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocEJsRWwsIGJyRWwpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3VyclByb21wdENoaWxkKVxyXG4gICAgICAgIC8vdGhpcy5yZW5kZXJpbmc9ZmFsc2VcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm1pbWV0eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlJykpIHtcclxuICAgICAgICB0aGlzLl90ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9zcmMgPSBtaS5zcmNcclxuICAgICAgICBsZXQgcHJvbXB0SW1hZ2UgPSBuZXcgSW1hZ2UoKVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJQcm9tcHRDaGlsZCA9IHByb21wdEltYWdlXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3VyclByb21wdENoaWxkKVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jdXJyUHJvbXB0Q2hpbGQsIFwibWF4LXdpZHRoXCIsIFwiMTAwJVwiKVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jdXJyUHJvbXB0Q2hpbGQsIFwibWF4LWhlaWdodFwiLCBcIjEwMCVcIilcclxuICAgICAgICB0aGlzLnByb21wdGVyU3R5bGVGaWxsID0gdHJ1ZVxyXG4gICAgICAgIC8vIFRPRE8gdmVydGljYWwgYWxpZ25tZW50XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzI3MzMzOC9ob3ctdG8tdmVydGljYWxseS1hbGlnbi1hbi1pbWFnZS1pbnNpZGUtYS1kaXZcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhwcm9tcHRJbWFnZS5uYXR1cmFsV2lkdGggKyBcInhcIitwcm9tcHRJbWFnZS5uYXR1cmFsSGVpZ2h0KTtcclxuICAgICAgICBwcm9tcHRJbWFnZS5vbmxvYWQgPSAoZXY6IEV2ZW50KSA9PiB7fVxyXG4gICAgICAgIGxldCBzcmNVcmw9dGhpcy5zcmNVcmwoKTtcclxuICAgICAgICBpZihzcmNVcmwpIHtcclxuICAgICAgICAgIHByb21wdEltYWdlLnNyYyA9IHNyY1VybDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl90ZXh0ID0gbnVsbFxyXG4gICAgICB0aGlzLl9zcmMgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgVklSVFVBTF9IRUlHSFQgPSA2MDA7XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BST01QVF9GT05UU0laRSA9IDQ4O1xyXG5leHBvcnQgY29uc3QgTUlOX0ZPTlRfU0laRT02O1xyXG5leHBvcnQgY29uc3QgRkFMTEJBQ0tfREVGX1VTRVJfQUdFTlRfRk9OVF9TSVpFID0gMTQ7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc3BycHJvbXB0Y29udGFpbmVyJyxcclxuXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxhcHAtc3BycHJvbXB0ZXIgI3Byb21wdGVyIFtwcm9qZWN0TmFtZV09XCJwcm9qZWN0TmFtZVwiIFtwcm9tcHRNZWRpYUl0ZW1zXT1cIm1lZGlhaXRlbXNcIiBbc3R5bGUuZm9udC1zaXplXT1cImZvbnRTaXplKydweCdcIiBbc3R5bGUudmlzaWJpbGl0eV09XCJwckRpc3BsYXlcIiBbcHJvbXB0ZXJIZWlnaHRdPVwicHJvbXB0ZXJIZWlnaHRcIj48L2FwcC1zcHJwcm9tcHRlcj5cclxuICBgXHJcbiAgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcblxyXG4gICAgZmxleDogMzsgLyogdGhlIGNvbnRhaW5lciBjb25zdW1lcyBhbGwgYXZhaWxhYmxlIHNwYWNlICovXHJcbiAgICBwYWRkaW5nOiAxMHB0O1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgbWF4LWhlaWdodDogMTAwJTtcclxuXHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgLyogYWxpZ24gaG9yaXpvbnRhbCBjZW50ZXIqL1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgLyogYWxpZ24gdmVydGljYWwgY2VudGVyICovXHJcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWluLWhlaWdodDogMHB4O1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9tcHRDb250YWluZXIgaW1wbGVtZW50cyBPbkluaXQsQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgQElucHV0KCkgcHJvamVjdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9tZWRpYWl0ZW1zOiBBcnJheTxNZWRpYWl0ZW0+fG51bGw9bnVsbDtcclxuXHJcbiAgcHJvbXB0ZXJIZWlnaHQ6IG51bWJlciA9IFZJUlRVQUxfSEVJR0hUXHJcbiAgZm9udFNpemUhOiBudW1iZXI7XHJcbiAgZm9udFNpemVDaGFuZ2U9ZmFsc2VcclxuICBjb250ZW50Q2hlY2tlZD1mYWxzZTtcclxuICBwckRpc3BsYXk9J2hpZGRlbic7XHJcbiAgZGVmYXVsdFN0eWxlITogQ1NTU3R5bGVEZWNsYXJhdGlvbjtcclxuICBkZWZhdWx0Rm9udFNpemVQeCE6IG51bWJlcjtcclxuXHJcbiAgYXV0b0ZvbnRTaXplPWZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoUHJvbXB0ZXIsIHsgc3RhdGljOiB0cnVlIH0pIHByb21wdGVyITogUHJvbXB0ZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxSZWY6RWxlbWVudFJlZil7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICAvLyBmYWxsYmFja1xyXG4gICAgdGhpcy5kZWZhdWx0Rm9udFNpemVQeCA9IEZBTExCQUNLX0RFRl9VU0VSX0FHRU5UX0ZPTlRfU0laRTtcclxuICAgIC8vIHRyeSB0byBwYXJzZSBkZWZhdWx0IHVzZXIgYWdlbnQgZm9udCBzaXplIChubyBjb21tZW50IGFib3V0IERPTSBBUEkgZGVzaWduIDspIClcclxuICAgIHRoaXMuZGVmYXVsdFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIGxldCBkZWZGb250U2l6ZVN0ciA9IHRoaXMuZGVmYXVsdFN0eWxlLmZvbnRTaXplO1xyXG4gICAgaWYgKGRlZkZvbnRTaXplU3RyKSB7XHJcbiAgICAgIGRlZkZvbnRTaXplU3RyID0gZGVmRm9udFNpemVTdHIudHJpbSgpO1xyXG4gICAgICBpZiAoZGVmRm9udFNpemVTdHIuZW5kc1dpdGgoJ3B4JykpIHtcclxuICAgICAgICAvLyBwYXJzZUZsb2F0IGlnbm9yZXMgbm9uIG51bWJlciBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgKGFnYWluIG5vIGNvbW1lbnQgOykgKVxyXG4gICAgICAgIHRoaXMuZGVmYXVsdEZvbnRTaXplUHggPSBwYXJzZUZsb2F0KGRlZkZvbnRTaXplU3RyKTtcclxuICAgICAgICAgIC8vY29uc29sZS5pbmZvKFwiRGVmYXVsdCBmb250IHNpemU6IFwiK3RoaXMuZGVmYXVsdEZvbnRTaXplUHgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udGVudENoZWNrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuYXV0b0ZvbnRTaXplKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvbnRTaXplQ2hhbmdlKSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIm5nYWZ0ZXJjb250ZW50Y2hlY2tlZCwgY2FsbCBmb250U2l6ZVRvRml0IFwiKTtcclxuICAgICAgICAvLyBjaGVjayBwcm9tcHRlciBzaXplIGFnYWluXHJcbiAgICAgICAgdGhpcy5mb250U2l6ZVRvRml0KClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBmb250IHNpemUgd2FzIGNoZWNrZWQsIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIGFnYWluIGFmdGVyIGFuZ3VsYXIgY29udGVudCBjaGVja1xyXG4gICAgICAgIGlmICghdGhpcy5jb250ZW50Q2hlY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5jb250ZW50Q2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwibmdhZnRlcmNvbnRlbnRjaGVja2VkLCBub3QgZm9udCBzaXplIGNoYW5nZWQsIGNhbGwgXCIpO1xyXG4gICAgICAgICAgdGhpcy5mb250U2l6ZVRvRml0KClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBASW5wdXQoKSBzZXQgbWVkaWFpdGVtcyhtZWRpYWl0ZW1zOkFycmF5PE1lZGlhaXRlbT58bnVsbCl7XHJcblxyXG4gICAgdGhpcy5fbWVkaWFpdGVtcyA9IG1lZGlhaXRlbXNcclxuXHJcbiAgICBsZXQgbWltZXR5cGU6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgIGlmICh0aGlzLl9tZWRpYWl0ZW1zICYmIHRoaXMuX21lZGlhaXRlbXMubGVuZ3RoID09IDEpIHtcclxuICAgICAgbGV0IG1pID0gdGhpcy5fbWVkaWFpdGVtc1swXVxyXG4gICAgICBtaW1ldHlwZSA9ICd0ZXh0L3BsYWluJ1xyXG4gICAgICBpZiAobWkubWltZXR5cGUpIHtcclxuICAgICAgICBtaW1ldHlwZSA9IG1pLm1pbWV0eXBlLnRyaW0oKTtcclxuICAgICAgfVxyXG4gICAgICBpZihtaS5kZWZhdWx0VmlydHVhbFZpZXdCb3gpe1xyXG4gICAgICAgIHRoaXMucHJvbXB0ZXJIZWlnaHQ9bWkuZGVmYXVsdFZpcnR1YWxWaWV3Qm94LmhlaWdodFxyXG4gICAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5wcm9tcHRlckhlaWdodD1WSVJUVUFMX0hFSUdIVFxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9tcHRlci5wcm9tcHRNZWRpYUl0ZW1zPXRoaXMuX21lZGlhaXRlbXNcclxuICAgIHRoaXMuYXV0b0ZvbnRTaXplPShtaW1ldHlwZSE9bnVsbCAmJiBtaW1ldHlwZS5zdGFydHNXaXRoKCd0ZXh0LycpKTtcclxuICAgIGlmKHRoaXMuYXV0b0ZvbnRTaXplKXtcclxuICAgICAgICB0aGlzLmZvbnRTaXplQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRDaGVja2VkID0gZmFsc2VcclxuICAgICAgICB0aGlzLnByRGlzcGxheSA9ICdoaWRkZW4nXHJcbiAgICAgICAgdGhpcy5sYXlvdXQoKVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbWVkaWFpdGVtcygpOkFycmF5PE1lZGlhaXRlbT58bnVsbHtcclxuICAgICAgcmV0dXJuIHRoaXMuX21lZGlhaXRlbXM7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uUmVzaXplKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwib25yZXNpemUsIGNhbGwgZm9udFNpemVUb0ZpdCBob29rIFwiKTtcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxheW91dCgpIHtcclxuICAgIGlmKHRoaXMuYXV0b0ZvbnRTaXplICYmIHRoaXMuZWxSZWYpIHtcclxuXHJcbiAgICAgIHRoaXMuZm9udFNpemVDaGFuZ2U9dHJ1ZTtcclxuICAgICAgdGhpcy5jb250ZW50Q2hlY2tlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMucHJEaXNwbGF5ID0gJ2hpZGRlbidcclxuICAgICAgbGV0IGVsSCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIC8vIHByb21wdCB0ZXh0IGZvbnQgc2l6ZSBzaG91bGQgc2NhbGUgYWNjb3JkaW5nIHRvIHByb21wdCBjb250YWluZXIgaGVpZ2h0XHJcbiAgICAgIGxldCBzY2FsZWRTaXplID0gTWF0aC5yb3VuZCgoZWxIIC8gdGhpcy5wcm9tcHRlckhlaWdodCkgKiBERUZBVUxUX1BST01QVF9GT05UU0laRSk7XHJcblxyXG4gICAgICAvLyBtaW4gcHJvbXB0IGZvbnQgc2l6ZSBpcyBkZWZhdWx0IHVzZXIgYWdlbnQgc2l6ZVxyXG4gICAgICBsZXQgbmV3U2l6ZSA9IE1hdGgubWF4KHNjYWxlZFNpemUsIHRoaXMuZGVmYXVsdEZvbnRTaXplUHgpO1xyXG4gICAgICBpZiAodGhpcy5mb250U2l6ZSAhPT0gbmV3U2l6ZSkge1xyXG4gICAgICAgIHRoaXMuZm9udFNpemUgPSBuZXdTaXplO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2NvbnNvbGUubG9nKFwibGF5b3V0LCBjYWxsIGZvbnRTaXplVG9GaXQgaG9vayBcIik7XHJcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9udFNpemVUb0ZpdCgpKVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGZvbnRTaXplVG9GaXQoKXtcclxuICAgICAgaWYodGhpcy5wcm9tcHRlcikge1xyXG4gICAgICAgIGxldCBwVz10aGlzLnByb21wdGVyLndpZHRoKCk7XHJcbiAgICAgICAgbGV0IHBIPXRoaXMucHJvbXB0ZXIuaGVpZ2h0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX21lZGlhaXRlbXMgJiYgdGhpcy5lbFJlZiAmJiBwVyAmJiBwSCkge1xyXG4gICAgICAgICAgbGV0IG5FbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcInByb21wdGVyOiBcIiArIHRoaXMucHJvbXB0ZXIud2lkdGgoKSArIFwieFwiICsgdGhpcy5wcm9tcHRlci5oZWlnaHQoKSsgXCIgZm9udCBzaXplOiBcIit0aGlzLmZvbnRTaXplKVxyXG4gICAgICAgICAgaWYgKHRoaXMuZm9udFNpemUgPj0gTUlOX0ZPTlRfU0laRSAmJiAocFcgPiBuRWwub2Zmc2V0V2lkdGggfHwgcEggPiBuRWwub2Zmc2V0SGVpZ2h0KSkge1xyXG4gICAgICAgICAgICAvLyBwcm9tcHRlciBvdmVyc2l6ZXMgcHJvbXB0ZXIgY29udGFpbmVyLiBEZWNyZWFzZSBmb250IHNpemUuXHJcbiAgICAgICAgICAgIC8vIHNldCBpbnZpc2libGUgZHVyaW5nIGZvbnQgc2l6ZSBjaGVja3NcclxuICAgICAgICAgICAgdGhpcy5wckRpc3BsYXkgPSAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAvLyBkZWNyZWFzZSBmb250IHNpemVcclxuICAgICAgICAgICAgdGhpcy5mb250U2l6ZSA9IHRoaXMuZm9udFNpemUgLSAxXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRGVjcmVhc2VkIGZvbnQgc2l6ZTogXCIrdGhpcy5mb250U2l6ZSApXHJcbiAgICAgICAgICAgIC8vIFNldCBmbGFnc1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRTaXplQ2hhbmdlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRDaGVja2VkID0gZmFsc2VcclxuICAgICAgICAgICAgLy8gaG9vayB0aGUgbmV4dCBjaGVja1xyXG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvbnRTaXplVG9GaXQoKSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHByb21wdGVyIGZpdHMgaW4gIHByb21wdGVyIGNvbnRhaW5lciwgZm9udCBzaXplIHNob3VsZCBiZSBmaW5lXHJcblxyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwicHJEaXNwbGF5OiBcIit0aGlzLnByRGlzcGxheSlcclxuXHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5jb250ZW50Q2hlY2tlZCAmJiAhIHRoaXMuZm9udFNpemVDaGFuZ2UpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkRpc3BsYXkhXCIpXHJcbiAgICAgICAgICAgIC8vIHNldCBwcm9tcHRlciB2aXNpYmxlIG5vd1xyXG4gICAgICAgICAgICB0aGlzLnByRGlzcGxheSA9ICd2aXNpYmxlJ1xyXG4gICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgdGhpcy5mb250U2l6ZUNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiUHJvbXB0IHRleHQgd2lkdGg6IFwiK3RleHRTaXplLndpZHRoK1wiIFwiK3RoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCtcInhcIit0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnByb21wdGluZ2NvbnRhaW5lcicsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8c3ByLXJlY2luc3RydWN0aW9ucyBbc2VsZWN0ZWRJdGVtSWR4XT1cInNlbGVjdGVkSXRlbUlkeFwiIFtpdGVtQ291bnRdPVwiaXRlbUNvdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWNpbnN0cnVjdGlvbnNdPVwicHJvbXB0SXRlbT8ucmVjaW5zdHJ1Y3Rpb25zPy5yZWNpbnN0cnVjdGlvbnNcIj48L3Nwci1yZWNpbnN0cnVjdGlvbnM+XHJcbiAgICA8YXBwLXNwcnByb21wdGNvbnRhaW5lciBbcHJvamVjdE5hbWVdPVwicHJvamVjdE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21lZGlhaXRlbXNdPVwic2hvd1Byb21wdD8ocHJvbXB0SXRlbT9wcm9tcHRJdGVtLm1lZGlhaXRlbXM6bnVsbCk6bnVsbFwiPjwvYXBwLXNwcnByb21wdGNvbnRhaW5lcj5cclxuXHJcbiAgYFxyXG4gICxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZmxleDogMzsgLyogdGhlIGNvbnRhaW5lciBjb25zdW1lcyBhbGwgYXZhaWxhYmxlIHNwYWNlICovXHJcbiAgICBwYWRkaW5nOiAxMHB0O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IC8qIGFsaWduIGhvcml6b250YWwgY2VudGVyKi9cclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qIGFsaWduIHZlcnRpY2FsIGNlbnRlciAqL1xyXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuICB9XHJcbiAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb21wdGluZ0NvbnRhaW5lciB7XHJcbiAgQElucHV0KCkgcHJvamVjdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBwcm9tcHRJdGVtOiBQcm9tcHRJdGVtfG51bGw9bnVsbDtcclxuICBASW5wdXQoKSBzaG93UHJvbXB0OiBib29sZWFuPWZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbUlkeCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBpdGVtQ291bnQ6IG51bWJlcnx1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpIHRyYW5zcG9ydEFjdGlvbnMhOiBUcmFuc3BvcnRBY3Rpb25zO1xyXG5cclxuICBwcml2YXRlIGUhOiBIVE1MRGl2RWxlbWVudDtcclxuICBwcml2YXRlIHN0YXJ0WDogbnVtYmVyIHwgbnVsbCA9IG51bGxcclxuICBwcml2YXRlIHRvdWNoU3RhcnRUaW1lU3RhbXA6IG51bWJlciB8IG51bGw9bnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgIHR5cGUgVG91Y2hTdGFydCA9IHt9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZSA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcclxuICBvblRvdWNoc3RhcnQoZXY6IFRvdWNoRXZlbnQgfCBhbnkpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJUb3VjaCBzdGFydCEgXCIpXHJcbiAgICBpZiAoISh0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkICYmXHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgJiZcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQpKSB7XHJcbiAgICAgIGxldCB0YXJnZXRUb3VjaGVzTGVuID0gZXYudGFyZ2V0VG91Y2hlcy5sZW5ndGg7XHJcbiAgICAgIC8vZm9yKGxldCB0aT0wO3RpPGV2LnRhcmdldFRvdWNoZXMubGVuZ3RoO3RpKyspe1xyXG4gICAgICAvL2xldCB0PWV2LnRhcmdldFRvdWNoZXMuaXRlbSh0aSk7XHJcbiAgICAgIC8vIEFsbCB4IHZhbHVlcyBhcmUgdGhlIHNhbWUgPz9cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIlRvdWNoICNcIit0aStcIjogcGFnZVg6IFwiK3QucGFnZVgrXCIgY2xpZW50WDogXCIrdC5jbGllbnRYK1wiIHNjcmVlblg6IFwiK3Quc2NyZWVuWClcclxuICAgICAgLy99XHJcbiAgICAgIGlmICh0YXJnZXRUb3VjaGVzTGVuID09IDEpIHtcclxuICAgICAgICAvLyBzaW5nbGUgdG91Y2hcclxuICAgICAgICBsZXQgdCA9IGV2LnRhcmdldFRvdWNoZXMuaXRlbSgwKTtcclxuICAgICAgICBpZiAodCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydFggPSBNYXRoLnJvdW5kKHQuc2NyZWVuWCk7XHJcbiAgICAgICAgICB0aGlzLnRvdWNoU3RhcnRUaW1lU3RhbXAgPSBldi50aW1lU3RhbXA7XHJcbiAgICAgICAgICB0aGlzLmUuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcclxuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJUb3VjaCBzdGFydCB4OiBcIit0aGlzLnN0YXJ0WClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcsIFsnJGV2ZW50J10pXHJcbiAgb25Ub3VjaEVuZChldjogVG91Y2hFdmVudCB8IGFueSkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlRvdWNoIGVuZCFcIilcclxuICAgIC8vIFJlc2V0IG9mZnNldCBzaGlmdFxyXG4gICAgaWYgKCEodGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5kaXNhYmxlZCAmJiB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLmRpc2FibGVkICYmXHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkKSkge1xyXG5cclxuICAgICAgbGV0IGNoYW5nZWRUb3VjaGVzTGVuID0gZXYuY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKGNoYW5nZWRUb3VjaGVzTGVuK1wiIFwiK3RoaXMuc3RhcnRYKVxyXG4gICAgICBpZiAoY2hhbmdlZFRvdWNoZXNMZW4gPT0gMSAmJiB0aGlzLnN0YXJ0WCkge1xyXG4gICAgICAgIC8vIHNpbmdsZSB0b3VjaFxyXG4gICAgICAgIGxldCB0ID0gZXYuY2hhbmdlZFRvdWNoZXMuaXRlbSgwKTtcclxuICAgICAgICBpZiAodCkge1xyXG4gICAgICAgICAgbGV0IGRlbHRhWCA9IE1hdGgucm91bmQodC5jbGllbnRYIC0gdGhpcy5zdGFydFgpO1xyXG4gICAgICAgICAgbGV0IHRvdWNoTW92ZVNwZWVkID0gMDtcclxuICAgICAgICAgIGlmICh0aGlzLnRvdWNoU3RhcnRUaW1lU3RhbXApIHtcclxuICAgICAgICAgICAgdG91Y2hNb3ZlU3BlZWQgPSBkZWx0YVggLyAoZXYudGltZVN0YW1wIC0gdGhpcy50b3VjaFN0YXJ0VGltZVN0YW1wKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBmdXR1cmVEZWx0YVggPSBkZWx0YVggKyAoODAwICogdG91Y2hNb3ZlU3BlZWQpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkRlbHRhWDogXCIgKyBkZWx0YVggKyBcIiBGdXR1cmUgZGVsdGFYOiBcIiArIGZ1dHVyZURlbHRhWCArIFwiICB3aWR0aDogXCIgKyB0aGlzLmUub2Zmc2V0V2lkdGgpXHJcbiAgICAgICAgICBpZiAoZnV0dXJlRGVsdGFYID4gdGhpcy5lLm9mZnNldFdpZHRoIC8gMikge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiU3dpcGUgcmlnaHQgZGV0ZWN0ZWQhIVwiKVxyXG4gICAgICAgICAgICAvL3RoaXMuc3dpcGVkUmlnaHQuZW1pdCgpXHJcbiAgICAgICAgICAgIGlmICghdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZS5zdHlsZS5sZWZ0ID0gLXRoaXMuZS5vZmZzZXRMZWZ0ICsgXCJweFwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKC1mdXR1cmVEZWx0YVggPiB0aGlzLmUub2Zmc2V0V2lkdGggLyAyKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJTd2lwZSBsZWZ0IGRldGVjdGVkISFcIilcclxuICAgICAgICAgICAgdGhpcy5lLnN0eWxlLmxlZnQgPSAtdGhpcy5lLm9mZnNldExlZnQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIC8vdGhpcy5zd2lwZWRMZWZ0LmVtaXQoKVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyByZXNldCBhbmltYXRlZFxyXG4gICAgICB0aGlzLmUuc3R5bGUudHJhbnNpdGlvbiA9IFwibGVmdCAwLjhzXCI7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXJ0WCA9IG51bGw7XHJcbiAgICB0aGlzLnRvdWNoU3RhcnRUaW1lU3RhbXAgPSBudWxsO1xyXG4gICAgdGhpcy5lLnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd0b3VjaG1vdmUnLCBbJyRldmVudCddKVxyXG4gIG9uVG91Y2hNb3ZlKGV2OiBUb3VjaEV2ZW50IHwgYW55KSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKFwiVG91Y2ggbW92ZSFcIilcclxuICAgIGlmICghKHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgJiYgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCAmJlxyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCkpIHtcclxuICAgICAgbGV0IHRhcmdldFRvdWNoZXNMZW4gPSBldi50YXJnZXRUb3VjaGVzLmxlbmd0aDtcclxuICAgICAgaWYgKHRhcmdldFRvdWNoZXNMZW4gPT0gMSAmJiB0aGlzLnN0YXJ0WCkge1xyXG4gICAgICAgIC8vIHNpbmdsZSB0b3VjaFxyXG4gICAgICAgIGxldCB0ID0gZXYudGFyZ2V0VG91Y2hlcy5pdGVtKDApO1xyXG4gICAgICAgIGlmICh0KSB7XHJcbiAgICAgICAgICBsZXQgZGVsdGFYID0gTWF0aC5yb3VuZCh0LnNjcmVlblggLSB0aGlzLnN0YXJ0WCk7XHJcbiAgICAgICAgICB0aGlzLmUuc3R5bGUubGVmdCA9IGRlbHRhWCArIFwicHhcIjtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiVG91Y2ggbW92ZSBkZWx0YSB4OiBcIitkZWx0YVgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIFsnJGV2ZW50J10pXHJcbiAgb25Ub3VjaENhbmNlbChldjogVG91Y2hFdmVudCB8IGFueSkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlRvdWNoIGNhbmNlbCFcIilcclxuICAgIHRoaXMuZS5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9tcHRpbmcnLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG5cclxuICAgIDxhcHAtc2ltcGxldHJhZmZpY2xpZ2h0IFtzdGF0dXNdPVwic3RhcnRTdG9wU2lnbmFsU3RhdGVcIj48L2FwcC1zaW1wbGV0cmFmZmljbGlnaHQ+XHJcbiAgICA8YXBwLXNwcnByb21wdGluZ2NvbnRhaW5lciBbcHJvamVjdE5hbWVdPVwicHJvamVjdE5hbWVcIiBbcHJvbXB0SXRlbV09XCJwcm9tcHRJdGVtXCIgW3Nob3dQcm9tcHRdPVwic2hvd1Byb21wdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbUNvdW50XT1cIml0ZW1zPy5sZW5ndGhcIiBbc2VsZWN0ZWRJdGVtSWR4XT1cInNlbGVjdGVkSXRlbUlkeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHJhbnNwb3J0QWN0aW9uc109XCJ0cmFuc3BvcnRBY3Rpb25zXCI+PC9hcHAtc3BycHJvbXB0aW5nY29udGFpbmVyPlxyXG4gICAgPGFwcC1zcHJwcm9ncmVzcyBmeEhpZGUueHMgW2l0ZW1zXT1cIml0ZW1zXCIgW3NlbGVjdGVkSXRlbUlkeF09XCJzZWxlY3RlZEl0ZW1JZHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAob25Sb3dTZWxlY3QpPVwiaXRlbVNlbGVjdCgkZXZlbnQpXCI+PC9hcHAtc3BycHJvZ3Jlc3M+XHJcbiAgICA8ZGl2IGZ4SGlkZS54cyAjYXNDdCBbY2xhc3MuYWN0aXZlXT1cIiFhdWRpb1NpZ25hbENvbGxhcHNlZFwiPlxyXG5cclxuICAgICAgPGFwcC1hdWRpb2Rpc3BsYXkgI2F1ZGlvU2lnbmFsQ29udGFpbmVyIFtjbGFzcy5hY3RpdmVdPVwiIWF1ZGlvU2lnbmFsQ29sbGFwc2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1ZGlvQ2xpcF09XCJkaXNwbGF5QXVkaW9DbGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdGFydEFjdGlvbl09XCJwbGF5U3RhcnRBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxheVNlbGVjdGlvbkFjdGlvbl09XCJwbGF5U2VsZWN0aW9uQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb25dPVwiYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RvcEFjdGlvbl09XCJwbGF5U3RvcEFjdGlvblwiPjwvYXBwLWF1ZGlvZGlzcGxheT5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGJhY2tncm91bmQ6IGxpZ2h0Z3JleTtcclxuICAgIHdpZHRoOiAxMDAlOyAvKiB1c2UgYWxsIGhvcml6b250YWwgYXZhaWxhYmxlIHNwYWNlICovXHJcbiAgICBmbGV4OiAxOyAvKiAuLi4gYW5kIGZpbGwgcmVzdCBvZiB2ZXJ0aWNhbCBhdmFpbGFibGUgc3BhY2UgKG90aGVyIGNvbXBvbmVudHMgaGF2ZSBmbGV4IDApICovXHJcblxyXG4gICAgLyogV29ya2Fyb3VuZCBmb3IgRmlyZWZveFxyXG4gICAgSWYgdGhlIHByb2dyZXNzIHRhYmxlIGdldHMgbG9uZyAoc2NyaXB0IHdpdGggbWFueSBpdGVtcykgRkYgaW5jcmVhc2VzIHRoZSBoZWlnaHQgb2YgdGhlIG92ZXJmbG93IHByb2dyZXNzQ29udGFpbmVyIGFuZFxyXG4gICAgdGhlIHdob2xlIGFwcCBkb2VzIG5vdCBmaXQgaW50byB0aGUgcGFnZSBhbnltb3JlLiBUaGUgYXBwIG92ZXJmbG93cyBhbmQgc2hvd3MgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZm9yIHRoZSB3aG9sZSBhcHAuXHJcbiAgICBTZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODYzNjgzMi9maXJlZm94LW92ZXJmbG93LXktbm90LXdvcmtpbmctd2l0aC1uZXN0ZWQtZmxleGJveFxyXG4gICAgKi9cclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuXHJcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBmbGV4IGNvbnRhaW5lcjogbGVmdCB0cmFmZmljIGxpZ2h0LCByaWdodCBwcm9tcHRlciAoY29udGFpbmVyKSAqL1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGZsZXgtd3JhcDogbm93cmFwOyAvKiB3cmFwIGNvdWxkIGNvbXBsZXRlbHkgZGVzdHJveSB0aGUgbGF5b3V0ICovXHJcbiAgfWAsIGBcclxuICAgIGFwcC1zaW1wbGV0cmFmZmljbGlnaHQge1xyXG4gICAgICBtYXJnaW46IDEwcHg7XHJcbiAgICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuICAgICAgei1pbmRleDogMztcclxuICAgIH1cclxuICBgLCBgXHJcbiAgICBhcHAtc3BycHJvZ3Jlc3Mge1xyXG4gICAgICB6LWluZGV4OiAzO1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIGRpdiB7XHJcbiAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHJcblxyXG4gICAgICAvKiBoZWlnaHQ6IDUwJTsgKi9cclxuICAgICAgLyogd2lkdGg6IDEwMCU7ICovXHJcblxyXG4gICAgICAvKiBvdmVyZmxvdzogaGlkZGVuOyAqL1xyXG5cclxuICAgICAgLyogbWFyZ2luOiAyMHB4OyAqL1xyXG4gICAgICAvKiBib3JkZXI6IDIwcHg7ICovXHJcbiAgICAgIHotaW5kZXg6IDU7XHJcbiAgICAgIC8qYmFja2dyb3VuZC1jb2xvcjogcmVkOyAqL1xyXG4gICAgfWAsIGBcclxuICAgIGRpdi5hY3RpdmUge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogMHB4O1xyXG4gICAgICAvKmxlZnQ6IDBweDsgKi9cclxuXHJcbiAgICAgIGhlaWdodDogOTAlO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICAgICBwYWRkaW5nOiAwcHg7XHJcbiAgICAgIC8qIG1hcmdpbjogMjBweDsgKi9cclxuICAgICAgLyogYm9yZGVyOiAyMHB4OyAqL1xyXG4gICAgICB6LWluZGV4OiA1O1xyXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApXHJcblxyXG4gICAgfWBcclxuICBdXHJcblxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFByb21wdGluZyB7XHJcbiAgQFZpZXdDaGlsZChTaW1wbGVUcmFmZmljTGlnaHQsIHsgc3RhdGljOiB0cnVlIH0pIHNpbXBsZVRyYWZmaWNMaWdodCE6IFNpbXBsZVRyYWZmaWNMaWdodDtcclxuICBAVmlld0NoaWxkKEF1ZGlvRGlzcGxheSwgeyBzdGF0aWM6IHRydWUgfSkgYXVkaW9EaXNwbGF5ITogQXVkaW9EaXNwbGF5O1xyXG4gIEBJbnB1dCgpIHByb2plY3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgc3RhcnRTdG9wU2lnbmFsU3RhdGUhOiBTdGFydFN0b3BTaWduYWxTdGF0ZTtcclxuICBASW5wdXQoKSBwcm9tcHRJdGVtOiBQcm9tcHRJdGVtIHwgbnVsbD1udWxsO1xyXG4gIEBJbnB1dCgpIHNob3dQcm9tcHQ6IGJvb2xlYW49ZmFsc2U7XHJcbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PEl0ZW0+fG51bGw9bnVsbDtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1JZHghOiBudW1iZXI7XHJcbiAgQElucHV0KCkgdHJhbnNwb3J0QWN0aW9ucyE6IFRyYW5zcG9ydEFjdGlvbnM7XHJcbiAgQElucHV0KCkgZW5hYmxlRG93bmxvYWQ6IGJvb2xlYW49ZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGF1ZGlvU2lnbmFsQ29sbGFwc2VkOiBib29sZWFuPXRydWU7XHJcbiAgQElucHV0KCkgZGlzcGxheUF1ZGlvQ2xpcDogQXVkaW9DbGlwIHwgbnVsbD1udWxsO1xyXG4gIEBJbnB1dCgpIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBwbGF5U2VsZWN0aW9uQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGF1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb246QWN0aW9uPGJvb2xlYW4+fHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBwbGF5U3RvcEFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICBAT3V0cHV0KCkgb25JdGVtU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQE91dHB1dCgpIG9uTmV4dEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uUHJldkl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGl0ZW1TZWxlY3Qocm93SWR4OiBudW1iZXIpIHtcclxuICAgIHRoaXMub25JdGVtU2VsZWN0LmVtaXQocm93SWR4KTtcclxuICB9XHJcblxyXG4gIG5leHRJdGVtKCkge1xyXG4gICAgdGhpcy5vbk5leHRJdGVtLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByZXZJdGVtKCkge1xyXG4gICAgdGhpcy5vblByZXZJdGVtLmVtaXQoKTtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
779
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vcHJvbXB0aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFJWixXQUFXLEVBRVosTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFNNUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBd0J2RCxNQUFNLE9BQU8sZUFBZTtJQUsxQixXQUFXO1FBQ1QsSUFBSSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLElBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFDO1lBQ3hDLEtBQUssR0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLGVBQWUsR0FBQyxHQUFHLEdBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsSUFBRyxJQUFJLENBQUMsZUFBZSxFQUFDO1lBQ3RCLEtBQUssR0FBQyxLQUFLLEdBQUMsSUFBSSxHQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7U0FDdkM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzRHQWRVLGVBQWU7Z0dBQWYsZUFBZSx1S0FoQmhCOzs7R0FHVDsyRkFhVSxlQUFlO2tCQXBCM0IsU0FBUzttQkFBQztvQkFFVCxRQUFRLEVBQUUscUJBQXFCO29CQUUvQixRQUFRLEVBQUU7OztHQUdUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7Ozs7O0dBVVIsQ0FBQztpQkFDSDs4QkFFVSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVCx5bEJBM0pVLGtCQUFrQjsyRkErTmxCLFNBQVM7a0JBOUZyQixTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSxrQkFBa0I7b0JBRTVCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVDtvQkFDRCxNQUFNLEVBQUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBa0JQLEVBQUU7Ozs7OztHQU1ILEVBQUU7Ozs7R0FJRixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7TUFlQyxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BbUJGO3FCQUNIO2lCQUVGOzhCQUdrRCxrQkFBa0I7c0JBQWxFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNKLFlBQVk7c0JBQXRELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDaEMsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBPbkluaXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEFmdGVyQ29udGVudENoZWNrZWRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtTaW1wbGVUcmFmZmljTGlnaHR9IGZyb20gXCIuLi9zdGFydHN0b3BzaWduYWwvdWkvc2ltcGxldHJhZmZpY2xpZ2h0XCI7XHJcbmltcG9ydCB7U3RhdGUgYXMgU3RhcnRTdG9wU2lnbmFsU3RhdGV9IGZyb20gXCIuLi9zdGFydHN0b3BzaWduYWwvc3RhcnRzdG9wc2lnbmFsXCI7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSBcIi4vaXRlbVwiO1xyXG5pbXBvcnQge0Jsb2NrLCBUZXh0LCBNZWRpYWl0ZW0sIFByb21wdEl0ZW19IGZyb20gXCIuLi9zY3JpcHQvc2NyaXB0XCI7XHJcbmltcG9ydCB7VHJhbnNwb3J0QWN0aW9uc30gZnJvbSBcIi4vY29udHJvbHBhbmVsXCI7XHJcbmltcG9ydCB7QWN0aW9ufSBmcm9tIFwiLi4vLi4vYWN0aW9uL2FjdGlvblwiO1xyXG5pbXBvcnQge0F1ZGlvRGlzcGxheX0gZnJvbSBcIi4uLy4uL2F1ZGlvL2F1ZGlvX2Rpc3BsYXlcIjtcclxuaW1wb3J0IHtQcm9qZWN0U2VydmljZX0gZnJvbSBcIi4uL3Byb2plY3QvcHJvamVjdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXVkaW9DbGlwfSBmcm9tIFwiLi4vLi4vYXVkaW8vcGVyc2lzdG9yXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdzcHItcmVjaW5zdHJ1Y3Rpb25zJyxcclxuXHJcbiAgdGVtcGxhdGU6IGBcclxuXHJcbiAgICB7e2Rpc3BsYXlUZXh0KCl9fVxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuXHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7IC8qIGFsaWduIGhvcml6b250YWwgY2VudGVyICovXHJcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgLyogYWxpZ24gdmVydGljYWwgIGNlbnRlciAqL1xyXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgZm9udC1zaXplOiAxZW07XHJcbiAgICBmbGV4OiAwO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWNpbnN0cnVjdGlvbnMge1xyXG4gIEBJbnB1dCgpIHJlY2luc3RydWN0aW9uczogc3RyaW5nfG51bGx8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1JZHg6IG51bWJlcnxudWxsfHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBpdGVtQ291bnQ6IG51bWJlcnx1bmRlZmluZWQ7XHJcblxyXG4gIGRpc3BsYXlUZXh0KCk6c3RyaW5ne1xyXG4gICAgbGV0IHJpVHh0OnN0cmluZz0nJztcclxuICAgIGlmKHRoaXMuaXRlbUNvdW50ICYmIHRoaXMuc2VsZWN0ZWRJdGVtSWR4KXtcclxuICAgICAgcmlUeHQ9cmlUeHQrdGhpcy5zZWxlY3RlZEl0ZW1JZHgrJy8nKyh0aGlzLml0ZW1Db3VudC0xKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMucmVjaW5zdHJ1Y3Rpb25zKXtcclxuICAgICAgcmlUeHQ9cmlUeHQrJzogJyt0aGlzLnJlY2luc3RydWN0aW9ucztcclxuICAgIH1cclxuICAgIHJldHVybiByaVR4dDtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9tcHRlcicsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gICAgPCEtLTxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ0ZXh0XCI+e3t0ZXh0fX08L25nLXRlbXBsYXRlPi0tPlxyXG4gICAgPCEtLSA8aW1nICpuZ0lmPVwic3JjXCIgI3Byb21wdEltYWdlIFtzcmNdPVwic3JjVXJsKClcIiBbaGVpZ2h0XT1cInByb21wdGVySGVpZ2h0LTIwXCIgLz4gLS0+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG5cclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyAvKiBhbGlnbiBob3Jpem9udGFsIGNlbnRlciAqL1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgLyogYWxpZ24gdmVydGljYWwgIGNlbnRlciAqL1xyXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAvKiBmb250LXNpemU6IDJlbTsgKi9cclxuICAgIGxpbmUtaGVpZ2h0OiAxLjJlbTtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgLyogVXNlIG9ubHkgbmF0dXJhbCBzaXplIG9mIHRoZSBwcm9tcHQgKi9cclxuICAgIC8qIFRoZSBwcm9tcHRlciBjb21wbmVudCB0aGVuIGV0cyBhbGlnbmVkIHZlcnRpY2FsbHkgY2VudGVyZWQgKi9cclxuICAgIGZsZXg6IDAgMTtcclxuXHJcbiAgfWAsIGA6aG9zdCguZmlsbCkge1xyXG4gICAgLyogVXNlIGFsbCBzcGFjZSB0byBzY2FsZSBpbWFnZXMgKi9cclxuICAgIGZsZXg6IDM7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XHJcbiAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgICAvKiBBIHNlcGFyYXRlIGZsZXggY29udGFpbmVyIG1pZ2h0IGJlIG5lY2Vzc2F5ciB0byBhbGlnaG4gY2VudGVyZWQgKi9cclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IC8qIFRPRE8gZG9lcyBub3Qgd29yaywgaW1hZ2UgaXMgbm90IHZlcnRpY2FsbHkgY2VudGVyZWQgKi9cclxuICB9YF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb21wdGVyIHtcclxuICBASW5wdXQoKSBwcm9qZWN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX3Byb21wdE1lZGlhSXRlbXM6IEFycmF5PE1lZGlhaXRlbT58bnVsbHx1bmRlZmluZWQ9bnVsbFxyXG5cclxuICBASW5wdXQoKSBwcm9tcHRlckhlaWdodDogbnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSBfdGV4dDogc3RyaW5nfHVuZGVmaW5lZHxudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9zcmM6IHN0cmluZ3x1bmRlZmluZWR8bnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfYmxvY2tzOiBBcnJheTxCbG9jaz58dW5kZWZpbmVkO1xyXG4gIG1pbWV0eXBlITogc3RyaW5nO1xyXG4gIHByaXZhdGUgY3VyclByb21wdENoaWxkOiBIVE1MRWxlbWVudHxudWxsID0gbnVsbDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5maWxsJykgcHVibGljIHByb21wdGVyU3R5bGVGaWxsID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2UpIHtcclxuXHJcbiAgfVxyXG5cclxuICBnZXQgdGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXh0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNyYygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zcmM7XHJcbiAgfVxyXG5cclxuICBzcmNVcmwoKTogc3RyaW5nfG51bGx7XHJcbiAgICBpZiAodGhpcy5wcm9qZWN0TmFtZSAmJiB0aGlzLl9zcmMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdFJlc291cmNlVXJsKHRoaXMucHJvamVjdE5hbWUsIHRoaXMuX3NyYyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gICAgd2lkdGgoKTpudW1iZXJ8bnVsbHtcclxuICAgICAgaWYodGhpcy5lbFJlZil7XHJcbiAgICAgICAgaWYodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGhlaWdodCgpOm51bWJlcnxudWxse1xyXG4gICAgICAgIGlmKHRoaXMuZWxSZWYpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGVuZFRleHRFbGVtZW50KHBhcmVudEVsOkhUTUxFbGVtZW50LHR4dDpUZXh0KXtcclxuICAgICAgbGV0IHQ6IHN0cmluZyA9IDxzdHJpbmc+dHh0LnRleHRcclxuICAgICAgbGV0IHR4dE5kID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHQpXHJcbiAgICAgIGlmKHR4dC5kZWNvcmF0aW9uIHx8IHR4dC5jb2xvcil7XHJcbiAgICAgICAgbGV0IHNwRWwgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICAgIGxldCBzdHlsZVN0cj0nJ1xyXG4gICAgICAgIGlmKHR4dC5kZWNvcmF0aW9uKSB7XHJcbiAgICAgICAgICBzdHlsZVN0ciA9IHN0eWxlU3RyICsndGV4dC1kZWNvcmF0aW9uOiAnICsgdHh0LmRlY29yYXRpb24rJzsnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHR4dC5jb2xvcil7XHJcbiAgICAgICAgICBzdHlsZVN0ciA9IHN0eWxlU3RyICsnY29sb3I6ICcgKyB0eHQuY29sb3IrJzsnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNwRWwuc3R5bGU9c3R5bGVTdHJcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudEVsLCBzcEVsKVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoc3BFbCwgdHh0TmQpXHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudEVsLCB0eHROZClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgcHJvbXB0TWVkaWFJdGVtcyhwTWlzOiBBcnJheTxNZWRpYWl0ZW0+fG51bGwpIHtcclxuICAgIHRoaXMuX3Byb21wdE1lZGlhSXRlbXMgPSBwTWlzXHJcbiAgICBpZiAodGhpcy5jdXJyUHJvbXB0Q2hpbGQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5jdXJyUHJvbXB0Q2hpbGQpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fcHJvbXB0TWVkaWFJdGVtcyAmJiB0aGlzLl9wcm9tcHRNZWRpYUl0ZW1zLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgIGxldCBtaSA9IHRoaXMuX3Byb21wdE1lZGlhSXRlbXNbMF1cclxuICAgICAgdGhpcy5taW1ldHlwZSA9ICd0ZXh0L3BsYWluJ1xyXG4gICAgICBpZiAobWkubWltZXR5cGUpIHtcclxuICAgICAgICB0aGlzLm1pbWV0eXBlID0gbWkubWltZXR5cGUudHJpbSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1pbWV0eXBlID09PSAndGV4dC9wbGFpbicpIHtcclxuICAgICAgICB0aGlzLl90ZXh0ID0gbWkudGV4dFxyXG4gICAgICAgIHRoaXMuX3NyYyA9IG51bGw7XHJcbiAgICAgICAgbGV0IHByVHh0PScnO1xyXG4gICAgICAgIGlmKHRoaXMuX3RleHQpe1xyXG4gICAgICAgICAgcHJUeHQ9dGhpcy5fdGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyUHJvbXB0Q2hpbGQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQocHJUeHQpO1xyXG4gICAgICAgIHRoaXMucHJvbXB0ZXJTdHlsZUZpbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5jdXJyUHJvbXB0Q2hpbGQpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWltZXR5cGUgPT09ICd0ZXh0L3gtcHJvbXB0Jykge1xyXG4gICAgICAgIC8vdGhpcy5yZW5kZXJpbmc9dHJ1ZVxyXG4gICAgICAgIHRoaXMuX3RleHQ9bnVsbDtcclxuICAgICAgICB0aGlzLl9zcmM9bnVsbDtcclxuICAgICAgICB0aGlzLl9ibG9ja3M9bmV3IEFycmF5PEJsb2NrPigpO1xyXG4gICAgICAgIGxldCBwZD1taS5wcm9tcHREb2NcclxuICAgICAgICBpZihwZCl7XHJcbiAgICAgICAgICBsZXQgcGRCb2R5PXBkLmJvZHlcclxuICAgICAgICAgIGlmKHBkQm9keSl7XHJcbiAgICAgICAgICAgIHRoaXMuX2Jsb2Nrcz1wZEJvZHkuYmxvY2tzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcm9tcHRlclN0eWxlRmlsbCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyUHJvbXB0Q2hpbGQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICAgICAgaWYodGhpcy5fYmxvY2tzKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBiaSA9IDA7IGJpIDwgdGhpcy5fYmxvY2tzLmxlbmd0aDsgYmkrKykge1xyXG4gICAgICAgICAgICBsZXQgYmwgPSB0aGlzLl9ibG9ja3NbYmldXHJcbiAgICAgICAgICAgIGlmICgncCcgPT09IGJsLnR5cGUpIHtcclxuICAgICAgICAgICAgICBsZXQgcEJsRWwgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3AnKVxyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5jdXJyUHJvbXB0Q2hpbGQsIHBCbEVsKVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IHRpID0gMDsgdGkgPCBibC50ZXh0cy5sZW5ndGg7IHRpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB0eHQgPSBibC50ZXh0c1t0aV1cclxuICAgICAgICAgICAgICAgIGlmICh0eHQpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCd0ZXh0JyA9PT0gdHh0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFRleHRFbGVtZW50KHBCbEVsLCB0eHQpXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2ZvbnQnID09PSB0eHQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcEVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3R5bGVTdHIgPSAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eHQuc3R5bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU3RyID0gc3R5bGVTdHIgKyAnZm9udC1zdHlsZTogJyArIHR4dC5zdHlsZSArICc7J1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodHh0LnNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU3RyID0gc3R5bGVTdHIgKyAnZm9udC1zaXplOiAnICsgdHh0LnNpemUgKyAnOydcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR4dC53ZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU3RyID0gc3R5bGVTdHIgKyAnZm9udC13ZWlnaHQ6ICcgKyB0eHQud2VpZ2h0ICsgJzsnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNwRWwuc3R5bGUgPSBzdHlsZVN0clxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocEJsRWwsIHNwRWwpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRUZXh0RWxlbWVudChzcEVsLCA8VGV4dD50eHQudGV4dClcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnbGluZWJyZWFrJyA9PT0gdHh0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYnJFbCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYnInKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocEJsRWwsIGJyRWwpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3VyclByb21wdENoaWxkKVxyXG4gICAgICAgIC8vdGhpcy5yZW5kZXJpbmc9ZmFsc2VcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm1pbWV0eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlJykpIHtcclxuICAgICAgICB0aGlzLl90ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9zcmMgPSBtaS5zcmNcclxuICAgICAgICBsZXQgcHJvbXB0SW1hZ2UgPSBuZXcgSW1hZ2UoKVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJQcm9tcHRDaGlsZCA9IHByb21wdEltYWdlXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3VyclByb21wdENoaWxkKVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jdXJyUHJvbXB0Q2hpbGQsIFwibWF4LXdpZHRoXCIsIFwiMTAwJVwiKVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jdXJyUHJvbXB0Q2hpbGQsIFwibWF4LWhlaWdodFwiLCBcIjEwMCVcIilcclxuICAgICAgICB0aGlzLnByb21wdGVyU3R5bGVGaWxsID0gdHJ1ZVxyXG4gICAgICAgIC8vIFRPRE8gdmVydGljYWwgYWxpZ25tZW50XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzI3MzMzOC9ob3ctdG8tdmVydGljYWxseS1hbGlnbi1hbi1pbWFnZS1pbnNpZGUtYS1kaXZcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhwcm9tcHRJbWFnZS5uYXR1cmFsV2lkdGggKyBcInhcIitwcm9tcHRJbWFnZS5uYXR1cmFsSGVpZ2h0KTtcclxuICAgICAgICBwcm9tcHRJbWFnZS5vbmxvYWQgPSAoZXY6IEV2ZW50KSA9PiB7fVxyXG4gICAgICAgIGxldCBzcmNVcmw9dGhpcy5zcmNVcmwoKTtcclxuICAgICAgICBpZihzcmNVcmwpIHtcclxuICAgICAgICAgIHByb21wdEltYWdlLnNyYyA9IHNyY1VybDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl90ZXh0ID0gbnVsbFxyXG4gICAgICB0aGlzLl9zcmMgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgVklSVFVBTF9IRUlHSFQgPSA2MDA7XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BST01QVF9GT05UU0laRSA9IDQ4O1xyXG5leHBvcnQgY29uc3QgTUlOX0ZPTlRfU0laRT02O1xyXG5leHBvcnQgY29uc3QgRkFMTEJBQ0tfREVGX1VTRVJfQUdFTlRfRk9OVF9TSVpFID0gMTQ7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc3BycHJvbXB0Y29udGFpbmVyJyxcclxuXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxhcHAtc3BycHJvbXB0ZXIgI3Byb21wdGVyIFtwcm9qZWN0TmFtZV09XCJwcm9qZWN0TmFtZVwiIFtwcm9tcHRNZWRpYUl0ZW1zXT1cIm1lZGlhaXRlbXNcIiBbc3R5bGUuZm9udC1zaXplXT1cImZvbnRTaXplKydweCdcIiBbc3R5bGUudmlzaWJpbGl0eV09XCJwckRpc3BsYXlcIiBbcHJvbXB0ZXJIZWlnaHRdPVwicHJvbXB0ZXJIZWlnaHRcIj48L2FwcC1zcHJwcm9tcHRlcj5cclxuICBgXHJcbiAgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcblxyXG4gICAgZmxleDogMzsgLyogdGhlIGNvbnRhaW5lciBjb25zdW1lcyBhbGwgYXZhaWxhYmxlIHNwYWNlICovXHJcbiAgICBwYWRkaW5nOiAxMHB0O1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgbWF4LWhlaWdodDogMTAwJTtcclxuXHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgLyogYWxpZ24gaG9yaXpvbnRhbCBjZW50ZXIqL1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgLyogYWxpZ24gdmVydGljYWwgY2VudGVyICovXHJcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWluLWhlaWdodDogMHB4O1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9tcHRDb250YWluZXIgaW1wbGVtZW50cyBPbkluaXQsQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgQElucHV0KCkgcHJvamVjdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9tZWRpYWl0ZW1zOiBBcnJheTxNZWRpYWl0ZW0+fG51bGw9bnVsbDtcclxuXHJcbiAgcHJvbXB0ZXJIZWlnaHQ6IG51bWJlciA9IFZJUlRVQUxfSEVJR0hUXHJcbiAgZm9udFNpemUhOiBudW1iZXI7XHJcbiAgZm9udFNpemVDaGFuZ2U9ZmFsc2VcclxuICBjb250ZW50Q2hlY2tlZD1mYWxzZTtcclxuICBwckRpc3BsYXk9J2hpZGRlbic7XHJcbiAgZGVmYXVsdFN0eWxlITogQ1NTU3R5bGVEZWNsYXJhdGlvbjtcclxuICBkZWZhdWx0Rm9udFNpemVQeCE6IG51bWJlcjtcclxuXHJcbiAgYXV0b0ZvbnRTaXplPWZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoUHJvbXB0ZXIsIHsgc3RhdGljOiB0cnVlIH0pIHByb21wdGVyITogUHJvbXB0ZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxSZWY6RWxlbWVudFJlZil7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICAvLyBmYWxsYmFja1xyXG4gICAgdGhpcy5kZWZhdWx0Rm9udFNpemVQeCA9IEZBTExCQUNLX0RFRl9VU0VSX0FHRU5UX0ZPTlRfU0laRTtcclxuICAgIC8vIHRyeSB0byBwYXJzZSBkZWZhdWx0IHVzZXIgYWdlbnQgZm9udCBzaXplIChubyBjb21tZW50IGFib3V0IERPTSBBUEkgZGVzaWduIDspIClcclxuICAgIHRoaXMuZGVmYXVsdFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIGxldCBkZWZGb250U2l6ZVN0ciA9IHRoaXMuZGVmYXVsdFN0eWxlLmZvbnRTaXplO1xyXG4gICAgaWYgKGRlZkZvbnRTaXplU3RyKSB7XHJcbiAgICAgIGRlZkZvbnRTaXplU3RyID0gZGVmRm9udFNpemVTdHIudHJpbSgpO1xyXG4gICAgICBpZiAoZGVmRm9udFNpemVTdHIuZW5kc1dpdGgoJ3B4JykpIHtcclxuICAgICAgICAvLyBwYXJzZUZsb2F0IGlnbm9yZXMgbm9uIG51bWJlciBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgKGFnYWluIG5vIGNvbW1lbnQgOykgKVxyXG4gICAgICAgIHRoaXMuZGVmYXVsdEZvbnRTaXplUHggPSBwYXJzZUZsb2F0KGRlZkZvbnRTaXplU3RyKTtcclxuICAgICAgICAgIC8vY29uc29sZS5pbmZvKFwiRGVmYXVsdCBmb250IHNpemU6IFwiK3RoaXMuZGVmYXVsdEZvbnRTaXplUHgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udGVudENoZWNrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuYXV0b0ZvbnRTaXplKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvbnRTaXplQ2hhbmdlKSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIm5nYWZ0ZXJjb250ZW50Y2hlY2tlZCwgY2FsbCBmb250U2l6ZVRvRml0IFwiKTtcclxuICAgICAgICAvLyBjaGVjayBwcm9tcHRlciBzaXplIGFnYWluXHJcbiAgICAgICAgdGhpcy5mb250U2l6ZVRvRml0KClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBmb250IHNpemUgd2FzIGNoZWNrZWQsIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIGFnYWluIGFmdGVyIGFuZ3VsYXIgY29udGVudCBjaGVja1xyXG4gICAgICAgIGlmICghdGhpcy5jb250ZW50Q2hlY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5jb250ZW50Q2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwibmdhZnRlcmNvbnRlbnRjaGVja2VkLCBub3QgZm9udCBzaXplIGNoYW5nZWQsIGNhbGwgXCIpO1xyXG4gICAgICAgICAgdGhpcy5mb250U2l6ZVRvRml0KClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBASW5wdXQoKSBzZXQgbWVkaWFpdGVtcyhtZWRpYWl0ZW1zOkFycmF5PE1lZGlhaXRlbT58bnVsbCl7XHJcblxyXG4gICAgdGhpcy5fbWVkaWFpdGVtcyA9IG1lZGlhaXRlbXNcclxuXHJcbiAgICBsZXQgbWltZXR5cGU6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgIGlmICh0aGlzLl9tZWRpYWl0ZW1zICYmIHRoaXMuX21lZGlhaXRlbXMubGVuZ3RoID09IDEpIHtcclxuICAgICAgbGV0IG1pID0gdGhpcy5fbWVkaWFpdGVtc1swXVxyXG4gICAgICBtaW1ldHlwZSA9ICd0ZXh0L3BsYWluJ1xyXG4gICAgICBpZiAobWkubWltZXR5cGUpIHtcclxuICAgICAgICBtaW1ldHlwZSA9IG1pLm1pbWV0eXBlLnRyaW0oKTtcclxuICAgICAgfVxyXG4gICAgICBpZihtaS5kZWZhdWx0VmlydHVhbFZpZXdCb3gpe1xyXG4gICAgICAgIHRoaXMucHJvbXB0ZXJIZWlnaHQ9bWkuZGVmYXVsdFZpcnR1YWxWaWV3Qm94LmhlaWdodFxyXG4gICAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5wcm9tcHRlckhlaWdodD1WSVJUVUFMX0hFSUdIVFxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9tcHRlci5wcm9tcHRNZWRpYUl0ZW1zPXRoaXMuX21lZGlhaXRlbXNcclxuICAgIHRoaXMuYXV0b0ZvbnRTaXplPShtaW1ldHlwZSE9bnVsbCAmJiBtaW1ldHlwZS5zdGFydHNXaXRoKCd0ZXh0LycpKTtcclxuICAgIGlmKHRoaXMuYXV0b0ZvbnRTaXplKXtcclxuICAgICAgICB0aGlzLmZvbnRTaXplQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRDaGVja2VkID0gZmFsc2VcclxuICAgICAgICB0aGlzLnByRGlzcGxheSA9ICdoaWRkZW4nXHJcbiAgICAgICAgdGhpcy5sYXlvdXQoKVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbWVkaWFpdGVtcygpOkFycmF5PE1lZGlhaXRlbT58bnVsbHtcclxuICAgICAgcmV0dXJuIHRoaXMuX21lZGlhaXRlbXM7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uUmVzaXplKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwib25yZXNpemUsIGNhbGwgZm9udFNpemVUb0ZpdCBob29rIFwiKTtcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxheW91dCgpIHtcclxuICAgIGlmKHRoaXMuYXV0b0ZvbnRTaXplICYmIHRoaXMuZWxSZWYpIHtcclxuXHJcbiAgICAgIHRoaXMuZm9udFNpemVDaGFuZ2U9dHJ1ZTtcclxuICAgICAgdGhpcy5jb250ZW50Q2hlY2tlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMucHJEaXNwbGF5ID0gJ2hpZGRlbidcclxuICAgICAgbGV0IGVsSCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIC8vIHByb21wdCB0ZXh0IGZvbnQgc2l6ZSBzaG91bGQgc2NhbGUgYWNjb3JkaW5nIHRvIHByb21wdCBjb250YWluZXIgaGVpZ2h0XHJcbiAgICAgIGxldCBzY2FsZWRTaXplID0gTWF0aC5yb3VuZCgoZWxIIC8gdGhpcy5wcm9tcHRlckhlaWdodCkgKiBERUZBVUxUX1BST01QVF9GT05UU0laRSk7XHJcblxyXG4gICAgICAvLyBtaW4gcHJvbXB0IGZvbnQgc2l6ZSBpcyBkZWZhdWx0IHVzZXIgYWdlbnQgc2l6ZVxyXG4gICAgICBsZXQgbmV3U2l6ZSA9IE1hdGgubWF4KHNjYWxlZFNpemUsIHRoaXMuZGVmYXVsdEZvbnRTaXplUHgpO1xyXG4gICAgICBpZiAodGhpcy5mb250U2l6ZSAhPT0gbmV3U2l6ZSkge1xyXG4gICAgICAgIHRoaXMuZm9udFNpemUgPSBuZXdTaXplO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2NvbnNvbGUubG9nKFwibGF5b3V0LCBjYWxsIGZvbnRTaXplVG9GaXQgaG9vayBcIik7XHJcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9udFNpemVUb0ZpdCgpKVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGZvbnRTaXplVG9GaXQoKXtcclxuICAgICAgaWYodGhpcy5wcm9tcHRlcikge1xyXG4gICAgICAgIGxldCBwVz10aGlzLnByb21wdGVyLndpZHRoKCk7XHJcbiAgICAgICAgbGV0IHBIPXRoaXMucHJvbXB0ZXIuaGVpZ2h0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX21lZGlhaXRlbXMgJiYgdGhpcy5lbFJlZiAmJiBwVyAmJiBwSCkge1xyXG4gICAgICAgICAgbGV0IG5FbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcInByb21wdGVyOiBcIiArIHRoaXMucHJvbXB0ZXIud2lkdGgoKSArIFwieFwiICsgdGhpcy5wcm9tcHRlci5oZWlnaHQoKSsgXCIgZm9udCBzaXplOiBcIit0aGlzLmZvbnRTaXplKVxyXG4gICAgICAgICAgaWYgKHRoaXMuZm9udFNpemUgPj0gTUlOX0ZPTlRfU0laRSAmJiAocFcgPiBuRWwub2Zmc2V0V2lkdGggfHwgcEggPiBuRWwub2Zmc2V0SGVpZ2h0KSkge1xyXG4gICAgICAgICAgICAvLyBwcm9tcHRlciBvdmVyc2l6ZXMgcHJvbXB0ZXIgY29udGFpbmVyLiBEZWNyZWFzZSBmb250IHNpemUuXHJcbiAgICAgICAgICAgIC8vIHNldCBpbnZpc2libGUgZHVyaW5nIGZvbnQgc2l6ZSBjaGVja3NcclxuICAgICAgICAgICAgdGhpcy5wckRpc3BsYXkgPSAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAvLyBkZWNyZWFzZSBmb250IHNpemVcclxuICAgICAgICAgICAgdGhpcy5mb250U2l6ZSA9IHRoaXMuZm9udFNpemUgLSAxXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRGVjcmVhc2VkIGZvbnQgc2l6ZTogXCIrdGhpcy5mb250U2l6ZSApXHJcbiAgICAgICAgICAgIC8vIFNldCBmbGFnc1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRTaXplQ2hhbmdlID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRDaGVja2VkID0gZmFsc2VcclxuICAgICAgICAgICAgLy8gaG9vayB0aGUgbmV4dCBjaGVja1xyXG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvbnRTaXplVG9GaXQoKSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHByb21wdGVyIGZpdHMgaW4gIHByb21wdGVyIGNvbnRhaW5lciwgZm9udCBzaXplIHNob3VsZCBiZSBmaW5lXHJcblxyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwicHJEaXNwbGF5OiBcIit0aGlzLnByRGlzcGxheSlcclxuXHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5jb250ZW50Q2hlY2tlZCAmJiAhIHRoaXMuZm9udFNpemVDaGFuZ2UpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkRpc3BsYXkhXCIpXHJcbiAgICAgICAgICAgIC8vIHNldCBwcm9tcHRlciB2aXNpYmxlIG5vd1xyXG4gICAgICAgICAgICB0aGlzLnByRGlzcGxheSA9ICd2aXNpYmxlJ1xyXG4gICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgdGhpcy5mb250U2l6ZUNoYW5nZSA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiUHJvbXB0IHRleHQgd2lkdGg6IFwiK3RleHRTaXplLndpZHRoK1wiIFwiK3RoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCtcInhcIit0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnByb21wdGluZ2NvbnRhaW5lcicsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8c3ByLXJlY2luc3RydWN0aW9ucyBbc2VsZWN0ZWRJdGVtSWR4XT1cInNlbGVjdGVkSXRlbUlkeFwiIFtpdGVtQ291bnRdPVwiaXRlbUNvdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWNpbnN0cnVjdGlvbnNdPVwicHJvbXB0SXRlbT8ucmVjaW5zdHJ1Y3Rpb25zPy5yZWNpbnN0cnVjdGlvbnNcIj48L3Nwci1yZWNpbnN0cnVjdGlvbnM+XHJcbiAgICA8YXBwLXNwcnByb21wdGNvbnRhaW5lciBbcHJvamVjdE5hbWVdPVwicHJvamVjdE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21lZGlhaXRlbXNdPVwic2hvd1Byb21wdD8ocHJvbXB0SXRlbT9wcm9tcHRJdGVtLm1lZGlhaXRlbXM6bnVsbCk6bnVsbFwiPjwvYXBwLXNwcnByb21wdGNvbnRhaW5lcj5cclxuXHJcbiAgYFxyXG4gICxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZmxleDogMzsgLyogdGhlIGNvbnRhaW5lciBjb25zdW1lcyBhbGwgYXZhaWxhYmxlIHNwYWNlICovXHJcbiAgICBwYWRkaW5nOiAxMHB0O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IC8qIGFsaWduIGhvcml6b250YWwgY2VudGVyKi9cclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qIGFsaWduIHZlcnRpY2FsIGNlbnRlciAqL1xyXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuICB9XHJcbiAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb21wdGluZ0NvbnRhaW5lciB7XHJcbiAgQElucHV0KCkgcHJvamVjdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBwcm9tcHRJdGVtOiBQcm9tcHRJdGVtfG51bGw9bnVsbDtcclxuICBASW5wdXQoKSBzaG93UHJvbXB0OiBib29sZWFuPWZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbUlkeCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBpdGVtQ291bnQ6IG51bWJlcnx1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpIHRyYW5zcG9ydEFjdGlvbnMhOiBUcmFuc3BvcnRBY3Rpb25zO1xyXG5cclxuICBwcml2YXRlIGUhOiBIVE1MRGl2RWxlbWVudDtcclxuICBwcml2YXRlIHN0YXJ0WDogbnVtYmVyIHwgbnVsbCA9IG51bGxcclxuICBwcml2YXRlIHRvdWNoU3RhcnRUaW1lU3RhbXA6IG51bWJlciB8IG51bGw9bnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgIHR5cGUgVG91Y2hTdGFydCA9IHt9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZSA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcclxuICBvblRvdWNoc3RhcnQoZXY6IFRvdWNoRXZlbnQgfCBhbnkpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJUb3VjaCBzdGFydCEgXCIpXHJcbiAgICBpZiAoISh0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkICYmXHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgJiZcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQpKSB7XHJcbiAgICAgIGxldCB0YXJnZXRUb3VjaGVzTGVuID0gZXYudGFyZ2V0VG91Y2hlcy5sZW5ndGg7XHJcbiAgICAgIC8vZm9yKGxldCB0aT0wO3RpPGV2LnRhcmdldFRvdWNoZXMubGVuZ3RoO3RpKyspe1xyXG4gICAgICAvL2xldCB0PWV2LnRhcmdldFRvdWNoZXMuaXRlbSh0aSk7XHJcbiAgICAgIC8vIEFsbCB4IHZhbHVlcyBhcmUgdGhlIHNhbWUgPz9cclxuICAgICAgLy9jb25zb2xlLmxvZyhcIlRvdWNoICNcIit0aStcIjogcGFnZVg6IFwiK3QucGFnZVgrXCIgY2xpZW50WDogXCIrdC5jbGllbnRYK1wiIHNjcmVlblg6IFwiK3Quc2NyZWVuWClcclxuICAgICAgLy99XHJcbiAgICAgIGlmICh0YXJnZXRUb3VjaGVzTGVuID09IDEpIHtcclxuICAgICAgICAvLyBzaW5nbGUgdG91Y2hcclxuICAgICAgICBsZXQgdCA9IGV2LnRhcmdldFRvdWNoZXMuaXRlbSgwKTtcclxuICAgICAgICBpZiAodCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydFggPSBNYXRoLnJvdW5kKHQuc2NyZWVuWCk7XHJcbiAgICAgICAgICB0aGlzLnRvdWNoU3RhcnRUaW1lU3RhbXAgPSBldi50aW1lU3RhbXA7XHJcbiAgICAgICAgICB0aGlzLmUuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcclxuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJUb3VjaCBzdGFydCB4OiBcIit0aGlzLnN0YXJ0WClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcsIFsnJGV2ZW50J10pXHJcbiAgb25Ub3VjaEVuZChldjogVG91Y2hFdmVudCB8IGFueSkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlRvdWNoIGVuZCFcIilcclxuICAgIC8vIFJlc2V0IG9mZnNldCBzaGlmdFxyXG4gICAgaWYgKCEodGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5kaXNhYmxlZCAmJiB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLmRpc2FibGVkICYmXHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkKSkge1xyXG5cclxuICAgICAgbGV0IGNoYW5nZWRUb3VjaGVzTGVuID0gZXYuY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKGNoYW5nZWRUb3VjaGVzTGVuK1wiIFwiK3RoaXMuc3RhcnRYKVxyXG4gICAgICBpZiAoY2hhbmdlZFRvdWNoZXNMZW4gPT0gMSAmJiB0aGlzLnN0YXJ0WCkge1xyXG4gICAgICAgIC8vIHNpbmdsZSB0b3VjaFxyXG4gICAgICAgIGxldCB0ID0gZXYuY2hhbmdlZFRvdWNoZXMuaXRlbSgwKTtcclxuICAgICAgICBpZiAodCkge1xyXG4gICAgICAgICAgbGV0IGRlbHRhWCA9IE1hdGgucm91bmQodC5jbGllbnRYIC0gdGhpcy5zdGFydFgpO1xyXG4gICAgICAgICAgbGV0IHRvdWNoTW92ZVNwZWVkID0gMDtcclxuICAgICAgICAgIGlmICh0aGlzLnRvdWNoU3RhcnRUaW1lU3RhbXApIHtcclxuICAgICAgICAgICAgdG91Y2hNb3ZlU3BlZWQgPSBkZWx0YVggLyAoZXYudGltZVN0YW1wIC0gdGhpcy50b3VjaFN0YXJ0VGltZVN0YW1wKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBmdXR1cmVEZWx0YVggPSBkZWx0YVggKyAoODAwICogdG91Y2hNb3ZlU3BlZWQpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkRlbHRhWDogXCIgKyBkZWx0YVggKyBcIiBGdXR1cmUgZGVsdGFYOiBcIiArIGZ1dHVyZURlbHRhWCArIFwiICB3aWR0aDogXCIgKyB0aGlzLmUub2Zmc2V0V2lkdGgpXHJcbiAgICAgICAgICBpZiAoZnV0dXJlRGVsdGFYID4gdGhpcy5lLm9mZnNldFdpZHRoIC8gMikge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiU3dpcGUgcmlnaHQgZGV0ZWN0ZWQhIVwiKVxyXG4gICAgICAgICAgICAvL3RoaXMuc3dpcGVkUmlnaHQuZW1pdCgpXHJcbiAgICAgICAgICAgIGlmICghdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZS5zdHlsZS5sZWZ0ID0gLXRoaXMuZS5vZmZzZXRMZWZ0ICsgXCJweFwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKC1mdXR1cmVEZWx0YVggPiB0aGlzLmUub2Zmc2V0V2lkdGggLyAyKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJTd2lwZSBsZWZ0IGRldGVjdGVkISFcIilcclxuICAgICAgICAgICAgdGhpcy5lLnN0eWxlLmxlZnQgPSAtdGhpcy5lLm9mZnNldExlZnQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIC8vdGhpcy5zd2lwZWRMZWZ0LmVtaXQoKVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyByZXNldCBhbmltYXRlZFxyXG4gICAgICB0aGlzLmUuc3R5bGUudHJhbnNpdGlvbiA9IFwibGVmdCAwLjhzXCI7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXJ0WCA9IG51bGw7XHJcbiAgICB0aGlzLnRvdWNoU3RhcnRUaW1lU3RhbXAgPSBudWxsO1xyXG4gICAgdGhpcy5lLnN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd0b3VjaG1vdmUnLCBbJyRldmVudCddKVxyXG4gIG9uVG91Y2hNb3ZlKGV2OiBUb3VjaEV2ZW50IHwgYW55KSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKFwiVG91Y2ggbW92ZSFcIilcclxuICAgIGlmICghKHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgJiYgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCAmJlxyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCkpIHtcclxuICAgICAgbGV0IHRhcmdldFRvdWNoZXNMZW4gPSBldi50YXJnZXRUb3VjaGVzLmxlbmd0aDtcclxuICAgICAgaWYgKHRhcmdldFRvdWNoZXNMZW4gPT0gMSAmJiB0aGlzLnN0YXJ0WCkge1xyXG4gICAgICAgIC8vIHNpbmdsZSB0b3VjaFxyXG4gICAgICAgIGxldCB0ID0gZXYudGFyZ2V0VG91Y2hlcy5pdGVtKDApO1xyXG4gICAgICAgIGlmICh0KSB7XHJcbiAgICAgICAgICBsZXQgZGVsdGFYID0gTWF0aC5yb3VuZCh0LnNjcmVlblggLSB0aGlzLnN0YXJ0WCk7XHJcbiAgICAgICAgICB0aGlzLmUuc3R5bGUubGVmdCA9IGRlbHRhWCArIFwicHhcIjtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiVG91Y2ggbW92ZSBkZWx0YSB4OiBcIitkZWx0YVgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIFsnJGV2ZW50J10pXHJcbiAgb25Ub3VjaENhbmNlbChldjogVG91Y2hFdmVudCB8IGFueSkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlRvdWNoIGNhbmNlbCFcIilcclxuICAgIHRoaXMuZS5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9tcHRpbmcnLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG5cclxuICAgIDxhcHAtc2ltcGxldHJhZmZpY2xpZ2h0IFtzdGF0dXNdPVwic3RhcnRTdG9wU2lnbmFsU3RhdGVcIj48L2FwcC1zaW1wbGV0cmFmZmljbGlnaHQ+XHJcbiAgICA8YXBwLXNwcnByb21wdGluZ2NvbnRhaW5lciBbcHJvamVjdE5hbWVdPVwicHJvamVjdE5hbWVcIiBbcHJvbXB0SXRlbV09XCJwcm9tcHRJdGVtXCIgW3Nob3dQcm9tcHRdPVwic2hvd1Byb21wdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbUNvdW50XT1cIml0ZW1zPy5sZW5ndGhcIiBbc2VsZWN0ZWRJdGVtSWR4XT1cInNlbGVjdGVkSXRlbUlkeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHJhbnNwb3J0QWN0aW9uc109XCJ0cmFuc3BvcnRBY3Rpb25zXCI+PC9hcHAtc3BycHJvbXB0aW5nY29udGFpbmVyPlxyXG4gICAgPGFwcC1zcHJwcm9ncmVzcyBmeEhpZGUueHMgW2l0ZW1zXT1cIml0ZW1zXCIgW3NlbGVjdGVkSXRlbUlkeF09XCJzZWxlY3RlZEl0ZW1JZHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAob25Sb3dTZWxlY3QpPVwiaXRlbVNlbGVjdCgkZXZlbnQpXCI+PC9hcHAtc3BycHJvZ3Jlc3M+XHJcbiAgICA8ZGl2IGZ4SGlkZS54cyAjYXNDdCBbY2xhc3MuYWN0aXZlXT1cIiFhdWRpb1NpZ25hbENvbGxhcHNlZFwiPlxyXG5cclxuICAgICAgPGFwcC1hdWRpb2Rpc3BsYXkgI2F1ZGlvU2lnbmFsQ29udGFpbmVyIFtjbGFzcy5hY3RpdmVdPVwiIWF1ZGlvU2lnbmFsQ29sbGFwc2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1ZGlvQ2xpcF09XCJkaXNwbGF5QXVkaW9DbGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdGFydEFjdGlvbl09XCJwbGF5U3RhcnRBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxheVNlbGVjdGlvbkFjdGlvbl09XCJwbGF5U2VsZWN0aW9uQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb25dPVwiYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RvcEFjdGlvbl09XCJwbGF5U3RvcEFjdGlvblwiPjwvYXBwLWF1ZGlvZGlzcGxheT5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGJhY2tncm91bmQ6IGxpZ2h0Z3JleTtcclxuICAgIHdpZHRoOiAxMDAlOyAvKiB1c2UgYWxsIGhvcml6b250YWwgYXZhaWxhYmxlIHNwYWNlICovXHJcbiAgICBmbGV4OiAxOyAvKiAuLi4gYW5kIGZpbGwgcmVzdCBvZiB2ZXJ0aWNhbCBhdmFpbGFibGUgc3BhY2UgKG90aGVyIGNvbXBvbmVudHMgaGF2ZSBmbGV4IDApICovXHJcblxyXG4gICAgLyogV29ya2Fyb3VuZCBmb3IgRmlyZWZveFxyXG4gICAgSWYgdGhlIHByb2dyZXNzIHRhYmxlIGdldHMgbG9uZyAoc2NyaXB0IHdpdGggbWFueSBpdGVtcykgRkYgaW5jcmVhc2VzIHRoZSBoZWlnaHQgb2YgdGhlIG92ZXJmbG93IHByb2dyZXNzQ29udGFpbmVyIGFuZFxyXG4gICAgdGhlIHdob2xlIGFwcCBkb2VzIG5vdCBmaXQgaW50byB0aGUgcGFnZSBhbnltb3JlLiBUaGUgYXBwIG92ZXJmbG93cyBhbmQgc2hvd3MgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZm9yIHRoZSB3aG9sZSBhcHAuXHJcbiAgICBTZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODYzNjgzMi9maXJlZm94LW92ZXJmbG93LXktbm90LXdvcmtpbmctd2l0aC1uZXN0ZWQtZmxleGJveFxyXG4gICAgKi9cclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuXHJcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBmbGV4IGNvbnRhaW5lcjogbGVmdCB0cmFmZmljIGxpZ2h0LCByaWdodCBwcm9tcHRlciAoY29udGFpbmVyKSAqL1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGZsZXgtd3JhcDogbm93cmFwOyAvKiB3cmFwIGNvdWxkIGNvbXBsZXRlbHkgZGVzdHJveSB0aGUgbGF5b3V0ICovXHJcbiAgfWAsIGBcclxuICAgIGFwcC1zaW1wbGV0cmFmZmljbGlnaHQge1xyXG4gICAgICBtYXJnaW46IDEwcHg7XHJcbiAgICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuICAgICAgei1pbmRleDogMztcclxuICAgIH1cclxuICBgLCBgXHJcbiAgICBhcHAtc3BycHJvZ3Jlc3Mge1xyXG4gICAgICB6LWluZGV4OiAzO1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIGRpdiB7XHJcbiAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHJcblxyXG4gICAgICAvKiBoZWlnaHQ6IDUwJTsgKi9cclxuICAgICAgLyogd2lkdGg6IDEwMCU7ICovXHJcblxyXG4gICAgICAvKiBvdmVyZmxvdzogaGlkZGVuOyAqL1xyXG5cclxuICAgICAgLyogbWFyZ2luOiAyMHB4OyAqL1xyXG4gICAgICAvKiBib3JkZXI6IDIwcHg7ICovXHJcbiAgICAgIHotaW5kZXg6IDU7XHJcbiAgICAgIC8qYmFja2dyb3VuZC1jb2xvcjogcmVkOyAqL1xyXG4gICAgfWAsIGBcclxuICAgIGRpdi5hY3RpdmUge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogMHB4O1xyXG4gICAgICAvKmxlZnQ6IDBweDsgKi9cclxuXHJcbiAgICAgIGhlaWdodDogOTAlO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICAgICBwYWRkaW5nOiAwcHg7XHJcbiAgICAgIC8qIG1hcmdpbjogMjBweDsgKi9cclxuICAgICAgLyogYm9yZGVyOiAyMHB4OyAqL1xyXG4gICAgICB6LWluZGV4OiA1O1xyXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApXHJcblxyXG4gICAgfWBcclxuICBdXHJcblxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFByb21wdGluZyB7XHJcbiAgQFZpZXdDaGlsZChTaW1wbGVUcmFmZmljTGlnaHQsIHsgc3RhdGljOiB0cnVlIH0pIHNpbXBsZVRyYWZmaWNMaWdodCE6IFNpbXBsZVRyYWZmaWNMaWdodDtcclxuICBAVmlld0NoaWxkKEF1ZGlvRGlzcGxheSwgeyBzdGF0aWM6IHRydWUgfSkgYXVkaW9EaXNwbGF5ITogQXVkaW9EaXNwbGF5O1xyXG4gIEBJbnB1dCgpIHByb2plY3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgc3RhcnRTdG9wU2lnbmFsU3RhdGUhOiBTdGFydFN0b3BTaWduYWxTdGF0ZTtcclxuICBASW5wdXQoKSBwcm9tcHRJdGVtOiBQcm9tcHRJdGVtIHwgbnVsbD1udWxsO1xyXG4gIEBJbnB1dCgpIHNob3dQcm9tcHQ6IGJvb2xlYW49ZmFsc2U7XHJcbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PEl0ZW0+fG51bGw9bnVsbDtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1JZHghOiBudW1iZXI7XHJcbiAgQElucHV0KCkgdHJhbnNwb3J0QWN0aW9ucyE6IFRyYW5zcG9ydEFjdGlvbnM7XHJcbiAgQElucHV0KCkgZW5hYmxlRG93bmxvYWQ6IGJvb2xlYW49ZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGF1ZGlvU2lnbmFsQ29sbGFwc2VkOiBib29sZWFuPXRydWU7XHJcbiAgQElucHV0KCkgZGlzcGxheUF1ZGlvQ2xpcDogQXVkaW9DbGlwIHwgbnVsbD1udWxsO1xyXG4gIEBJbnB1dCgpIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBwbGF5U2VsZWN0aW9uQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGF1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb246QWN0aW9uPGJvb2xlYW4+fHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBwbGF5U3RvcEFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICBAT3V0cHV0KCkgb25JdGVtU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQE91dHB1dCgpIG9uTmV4dEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uUHJldkl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGl0ZW1TZWxlY3Qocm93SWR4OiBudW1iZXIpIHtcclxuICAgIHRoaXMub25JdGVtU2VsZWN0LmVtaXQocm93SWR4KTtcclxuICB9XHJcblxyXG4gIG5leHRJdGVtKCkge1xyXG4gICAgdGhpcy5vbk5leHRJdGVtLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByZXZJdGVtKCkge1xyXG4gICAgdGhpcy5vblByZXZJdGVtLmVtaXQoKTtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
@@ -0,0 +1,75 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from "@angular/core";
2
+ import { RecordingList } from "./recording_list";
3
+ import { AudioDisplay } from "../../audio/audio_display";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./recording_list";
6
+ import * as i2 from "../../audio/audio_display";
7
+ import * as i3 from "@angular/flex-layout/extended";
8
+ export class RecorderCombiPane {
9
+ constructor() {
10
+ this.selectDisabled = false;
11
+ this.selectedRecordingFileChanged = new EventEmitter();
12
+ this.selectedRecordingFile = null;
13
+ this.audioSignalCollapsed = true;
14
+ this.displayAudioClip = null;
15
+ }
16
+ ngAfterViewInit() {
17
+ }
18
+ push(rf) {
19
+ this.recordingListComp.push(rf);
20
+ }
21
+ selectRecordingFile(rf) {
22
+ this.selectedRecordingFileChanged.emit(rf);
23
+ }
24
+ }
25
+ RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: RecorderCombiPane, deps: [], target: i0.ɵɵFactoryTarget.Component });
26
+ RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: RecorderCombiPane, selector: "app-recordercombipane", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, viewQueries: [{ propertyName: "recordingListComp", first: true, predicate: RecordingList, descendants: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], ngImport: i0, template: `
27
+ <app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
28
+ <div fxHide.xs #asCt [class.active]="!audioSignalCollapsed">
29
+ <app-audiodisplay #audioSignalContainer [class.active]="!audioSignalCollapsed"
30
+ [audioClip]="displayAudioClip"
31
+ [playStartAction]="playStartAction"
32
+ [playSelectionAction]="playSelectionAction"
33
+ [autoPlayOnSelectToggleAction]="autoPlayOnSelectToggleAction"
34
+ [playStopAction]="playStopAction"></app-audiodisplay>
35
+ </div>
36
+ `, isInline: true, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}\n", ":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;overflow-y:auto;min-height:0px}\n", ".selected{font-weight:700}\n", "div{display:none;position:absolute;z-index:5}\n", "div.active{display:flex;position:absolute;bottom:0px;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"], components: [{ type: i1.RecordingList, selector: "app-recordinglist", inputs: ["selectDisabled", "selectedRecordingFile"], outputs: ["selectedRecordingFileChanged"] }, { type: i2.AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }], directives: [{ type: i3.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }] });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: RecorderCombiPane, decorators: [{
38
+ type: Component,
39
+ args: [{ selector: 'app-recordercombipane', template: `
40
+ <app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
41
+ <div fxHide.xs #asCt [class.active]="!audioSignalCollapsed">
42
+ <app-audiodisplay #audioSignalContainer [class.active]="!audioSignalCollapsed"
43
+ [audioClip]="displayAudioClip"
44
+ [playStartAction]="playStartAction"
45
+ [playSelectionAction]="playSelectionAction"
46
+ [autoPlayOnSelectToggleAction]="autoPlayOnSelectToggleAction"
47
+ [playStopAction]="playStopAction"></app-audiodisplay>
48
+ </div>
49
+ `, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}\n", ":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;overflow-y:auto;min-height:0px}\n", ".selected{font-weight:700}\n", "div{display:none;position:absolute;z-index:5}\n", "div.active{display:flex;position:absolute;bottom:0px;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"] }]
50
+ }], ctorParameters: function () { return []; }, propDecorators: { recordingListComp: [{
51
+ type: ViewChild,
52
+ args: [RecordingList]
53
+ }], selectDisabled: [{
54
+ type: Input
55
+ }], selectedRecordingFileChanged: [{
56
+ type: Output
57
+ }], selectedRecordingFile: [{
58
+ type: Input
59
+ }], audioDisplay: [{
60
+ type: ViewChild,
61
+ args: [AudioDisplay, { static: true }]
62
+ }], audioSignalCollapsed: [{
63
+ type: Input
64
+ }], displayAudioClip: [{
65
+ type: Input
66
+ }], playStartAction: [{
67
+ type: Input
68
+ }], playSelectionAction: [{
69
+ type: Input
70
+ }], autoPlayOnSelectToggleAction: [{
71
+ type: Input
72
+ }], playStopAction: [{
73
+ type: Input
74
+ }] } });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkZXJfY29tYmlfcGFuZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3JlY29yZGVyX2NvbWJpX3BhbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSy9GLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUcvQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBOER2RCxNQUFNLE9BQU8saUJBQWlCO0lBZTVCO1FBWlMsbUJBQWMsR0FBUyxLQUFLLENBQUM7UUFDNUIsaUNBQTRCLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDbEUsMEJBQXFCLEdBQW9CLElBQUksQ0FBQztRQUc5Qyx5QkFBb0IsR0FBVSxJQUFJLENBQUM7UUFDbkMscUJBQWdCLEdBQW1CLElBQUksQ0FBQztJQVFqRCxDQUFDO0lBRUQsZUFBZTtJQUVmLENBQUM7SUFFRCxJQUFJLENBQUMsRUFBZ0I7UUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVsQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsRUFBZ0I7UUFDbEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs4R0E5QlUsaUJBQWlCO2tHQUFqQixpQkFBaUIsNmhCQUVqQixhQUFhLCtFQUtiLFlBQVksOERBL0RiOzs7Ozs7Ozs7O0dBVVQ7MkZBOENVLGlCQUFpQjtrQkE1RDdCLFNBQVM7K0JBRUUsdUJBQXVCLFlBRXZCOzs7Ozs7Ozs7O0dBVVQ7MEVBZ0R5QixpQkFBaUI7c0JBQTFDLFNBQVM7dUJBQUMsYUFBYTtnQkFDZixjQUFjO3NCQUF0QixLQUFLO2dCQUNJLDRCQUE0QjtzQkFBckMsTUFBTTtnQkFDRSxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRXFDLFlBQVk7c0JBQXRELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDaEMsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlLCBTcHJSZWNvcmRpbmdGaWxlfSBmcm9tIFwiLi4vcmVjb3JkaW5nXCI7XHJcbmltcG9ydCB7TWVkaWFVdGlsc30gZnJvbSBcIi4uLy4uL21lZGlhL3V0aWxzXCI7XHJcbmltcG9ydCB7TWF0VGFibGUsIE1hdFRhYmxlRGF0YVNvdXJjZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYmxlXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdMaXN0fSBmcm9tIFwiLi9yZWNvcmRpbmdfbGlzdFwiO1xyXG5pbXBvcnQge0F1ZGlvQ2xpcH0gZnJvbSBcIi4uLy4uL2F1ZGlvL3BlcnNpc3RvclwiO1xyXG5pbXBvcnQge0FjdGlvbn0gZnJvbSBcIi4uLy4uL2FjdGlvbi9hY3Rpb25cIjtcclxuaW1wb3J0IHtBdWRpb0Rpc3BsYXl9IGZyb20gXCIuLi8uLi9hdWRpby9hdWRpb19kaXNwbGF5XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtcmVjb3JkZXJjb21iaXBhbmUnLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC1yZWNvcmRpbmdsaXN0IFtzZWxlY3RlZFJlY29yZGluZ0ZpbGVdPVwic2VsZWN0ZWRSZWNvcmRpbmdGaWxlXCIgW3NlbGVjdERpc2FibGVkXT1cInNlbGVjdERpc2FibGVkXCIgKHNlbGVjdGVkUmVjb3JkaW5nRmlsZUNoYW5nZWQpPVwic2VsZWN0UmVjb3JkaW5nRmlsZSgkZXZlbnQpXCI+PC9hcHAtcmVjb3JkaW5nbGlzdD5cclxuICAgIDxkaXYgZnhIaWRlLnhzICNhc0N0IFtjbGFzcy5hY3RpdmVdPVwiIWF1ZGlvU2lnbmFsQ29sbGFwc2VkXCI+XHJcbiAgICAgIDxhcHAtYXVkaW9kaXNwbGF5ICNhdWRpb1NpZ25hbENvbnRhaW5lciBbY2xhc3MuYWN0aXZlXT1cIiFhdWRpb1NpZ25hbENvbGxhcHNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdWRpb0NsaXBdPVwiZGlzcGxheUF1ZGlvQ2xpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwicGxheVN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTZWxlY3Rpb25BY3Rpb25dPVwicGxheVNlbGVjdGlvbkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXT1cImF1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwicGxheVN0b3BBY3Rpb25cIj48L2FwcC1hdWRpb2Rpc3BsYXk+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgYmFja2dyb3VuZDogbGlnaHRncmV5O1xyXG4gICAgd2lkdGg6IDEwMCU7IC8qIHVzZSBhbGwgaG9yaXpvbnRhbCBhdmFpbGFibGUgc3BhY2UgKi9cclxuICAgIGZsZXg6IDE7IC8qIC4uLiBhbmQgZmlsbCByZXN0IG9mIHZlcnRpY2FsIGF2YWlsYWJsZSBzcGFjZSAob3RoZXIgY29tcG9uZW50cyBoYXZlIGZsZXggMCkgKi9cclxuICAgIG92ZXJmbG93LXk6IGF1dG87XHJcblxyXG4gICAgLyogV29ya2Fyb3VuZCBmb3IgRmlyZWZveFxyXG4gICAgSWYgdGhlIHByb2dyZXNzIHRhYmxlIGdldHMgbG9uZyAoc2NyaXB0IHdpdGggbWFueSBpdGVtcykgRkYgaW5jcmVhc2VzIHRoZSBoZWlnaHQgb2YgdGhlIG92ZXJmbG93IHByb2dyZXNzQ29udGFpbmVyIGFuZFxyXG4gICAgdGhlIHdob2xlIGFwcCBkb2VzIG5vdCBmaXQgaW50byB0aGUgcGFnZSBhbnltb3JlLiBUaGUgYXBwIG92ZXJmbG93cyBhbmQgc2hvd3MgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZm9yIHRoZSB3aG9sZSBhcHAuXHJcbiAgICBTZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODYzNjgzMi9maXJlZm94LW92ZXJmbG93LXktbm90LXdvcmtpbmctd2l0aC1uZXN0ZWQtZmxleGJveFxyXG4gICAgKi9cclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuXHJcbiAgfWAsYFxyXG4gICAgLnNlbGVjdGVke1xyXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuICBgLCBgXHJcbiAgICBkaXYge1xyXG4gICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHotaW5kZXg6IDU7XHJcbiAgICB9YCwgYFxyXG4gICAgZGl2LmFjdGl2ZSB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAwcHg7XHJcbiAgICAgIGhlaWdodDogOTAlO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICAgICBwYWRkaW5nOiAwcHg7XHJcblxyXG4gICAgICB6LWluZGV4OiAyMDA7ICAvKiBOZWVkcyBhIGhpZ2hlciB2YWx1ZSB0aGVuIHRoZSBzdGlja3kgTWF0ZXJpYWwgdGFibGUgaGVhZGVyICh3aGljaCBpcyB6LWluZGV4OiAxMDApICovXHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMClcclxuXHJcbiAgICB9YF0sXHJcbiAgc3R5bGVVcmxzOiBbJy4uLy4uL3NwZWVjaHJlY29yZGVyX21hdC5zY3NzJ11cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWNvcmRlckNvbWJpUGFuZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXR7XHJcblxyXG4gIEBWaWV3Q2hpbGQoUmVjb3JkaW5nTGlzdCkgcmVjb3JkaW5nTGlzdENvbXAhOlJlY29yZGluZ0xpc3Q7XHJcbiAgQElucHV0KCkgc2VsZWN0RGlzYWJsZWQ6Ym9vbGVhbj1mYWxzZTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRSZWNvcmRpbmdGaWxlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkaW5nRmlsZT4oKTtcclxuICBASW5wdXQoKSBzZWxlY3RlZFJlY29yZGluZ0ZpbGU6UmVjb3JkaW5nRmlsZXxudWxsPW51bGw7XHJcblxyXG4gIEBWaWV3Q2hpbGQoQXVkaW9EaXNwbGF5LCB7IHN0YXRpYzogdHJ1ZSB9KSBhdWRpb0Rpc3BsYXkhOiBBdWRpb0Rpc3BsYXk7XHJcbiAgQElucHV0KCkgYXVkaW9TaWduYWxDb2xsYXBzZWQ6IGJvb2xlYW49dHJ1ZTtcclxuICBASW5wdXQoKSBkaXNwbGF5QXVkaW9DbGlwOiBBdWRpb0NsaXAgfCBudWxsPW51bGw7XHJcbiAgQElucHV0KCkgcGxheVN0YXJ0QWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHBsYXlTZWxlY3Rpb25BY3Rpb246IEFjdGlvbjx2b2lkPnx1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbjpBY3Rpb248Ym9vbGVhbj58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHBsYXlTdG9wQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVzaChyZjpSZWNvcmRpbmdGaWxlKXtcclxuICAgIHRoaXMucmVjb3JkaW5nTGlzdENvbXAucHVzaChyZik7XHJcblxyXG4gIH1cclxuXHJcbiAgc2VsZWN0UmVjb3JkaW5nRmlsZShyZjpSZWNvcmRpbmdGaWxlKXtcclxuICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmRpbmdGaWxlQ2hhbmdlZC5lbWl0KHJmKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==