speechrecorderng 3.9.7 → 3.9.9

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 (85) hide show
  1. package/README.md +478 -12
  2. package/esm2022/lib/action/action.mjs +1 -1
  3. package/esm2022/lib/audio/array_audio_buffer.mjs +1 -1
  4. package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +1 -1
  5. package/esm2022/lib/audio/audio_data_holder.mjs +1 -1
  6. package/esm2022/lib/audio/audio_display.mjs +4 -4
  7. package/esm2022/lib/audio/audio_player.mjs +4 -4
  8. package/esm2022/lib/audio/capture/capture.mjs +1 -1
  9. package/esm2022/lib/audio/context.mjs +1 -1
  10. package/esm2022/lib/audio/dsp/level_measure.mjs +5 -4
  11. package/esm2022/lib/audio/impl/wavreader.mjs +1 -1
  12. package/esm2022/lib/audio/impl/wavwriter.mjs +1 -1
  13. package/esm2022/lib/audio/inddb_audio_buffer.mjs +1 -1
  14. package/esm2022/lib/audio/io/stream.mjs +1 -1
  15. package/esm2022/lib/audio/net_audio_buffer.mjs +1 -1
  16. package/esm2022/lib/audio/persistor.mjs +1 -1
  17. package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +1 -1
  18. package/esm2022/lib/audio/playback/audio_source_node.mjs +1 -1
  19. package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +1 -1
  20. package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
  21. package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +1 -1
  22. package/esm2022/lib/audio/playback/player.mjs +1 -1
  23. package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
  24. package/esm2022/lib/audio/ui/audio_display_control.mjs +4 -4
  25. package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
  26. package/esm2022/lib/audio/ui/audiosignal.mjs +4 -4
  27. package/esm2022/lib/audio/ui/container.mjs +4 -4
  28. package/esm2022/lib/audio/ui/livelevel.mjs +4 -4
  29. package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +3 -3
  30. package/esm2022/lib/audio/ui/sonagram.mjs +4 -4
  31. package/esm2022/lib/db/inddb.mjs +4 -4
  32. package/esm2022/lib/dsp/utils.mjs +1 -1
  33. package/esm2022/lib/io/BinaryReader.mjs +1 -1
  34. package/esm2022/lib/io/BinaryWriter.mjs +1 -1
  35. package/esm2022/lib/io/stream.mjs +1 -1
  36. package/esm2022/lib/math/complex.mjs +1 -1
  37. package/esm2022/lib/math/dft.mjs +1 -1
  38. package/esm2022/lib/net/uploader.mjs +1 -1
  39. package/esm2022/lib/recorder_component.mjs +1 -1
  40. package/esm2022/lib/speechrecorder/project/project.mjs +1 -1
  41. package/esm2022/lib/speechrecorder/project/project.service.mjs +4 -4
  42. package/esm2022/lib/speechrecorder/recording.mjs +1 -1
  43. package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +1 -1
  44. package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +4 -4
  45. package/esm2022/lib/speechrecorder/script/script.mjs +1 -1
  46. package/esm2022/lib/speechrecorder/script/script.service.mjs +4 -4
  47. package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +7 -7
  48. package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +1 -1
  49. package/esm2022/lib/speechrecorder/session/controlpanel.mjs +22 -22
  50. package/esm2022/lib/speechrecorder/session/item.mjs +1 -1
  51. package/esm2022/lib/speechrecorder/session/progress.mjs +4 -4
  52. package/esm2022/lib/speechrecorder/session/prompting.mjs +16 -16
  53. package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +3 -3
  54. package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +1 -1
  55. package/esm2022/lib/speechrecorder/session/recording_list.mjs +4 -4
  56. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
  57. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +4 -4
  58. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +4 -4
  59. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +4 -4
  60. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +1 -1
  61. package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +4 -4
  62. package/esm2022/lib/speechrecorder/session/session.service.mjs +4 -4
  63. package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +3 -3
  64. package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +4 -4
  65. package/esm2022/lib/speechrecorder/session/warning_bar.mjs +4 -4
  66. package/esm2022/lib/speechrecorder/spruploader.mjs +4 -4
  67. package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
  68. package/esm2022/lib/speechrecorderng.component.mjs +4 -4
  69. package/esm2022/lib/speechrecorderng.module.mjs +9 -13
  70. package/esm2022/lib/spr.config.mjs +3 -3
  71. package/esm2022/lib/spr.module.version.mjs +2 -2
  72. package/esm2022/lib/ui/canvas_layer_comp.mjs +4 -4
  73. package/esm2022/lib/ui/intersection-observer.directive.mjs +4 -4
  74. package/esm2022/lib/ui/message_dialog.mjs +3 -3
  75. package/esm2022/lib/ui/recordingitem_display.mjs +7 -7
  76. package/esm2022/lib/ui/responsive_component.mjs +3 -3
  77. package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +4 -4
  78. package/esm2022/lib/utils/ua-parser.mjs +1 -1
  79. package/esm2022/lib/utils/utils.mjs +1 -1
  80. package/esm2022/lib/utils/wake_lock.mjs +1 -1
  81. package/fesm2022/speechrecorderng.mjs +171 -174
  82. package/fesm2022/speechrecorderng.mjs.map +1 -1
  83. package/lib/speechrecorderng.module.d.ts +11 -12
  84. package/lib/spr.module.version.d.ts +1 -1
  85. package/package.json +13 -13
@@ -207,8 +207,9 @@ export class LevelMeasure {
207
207
  if (subscriber.closed) {
208
208
  // subscriber abandoned
209
209
  worker.terminate();
210
- ais?.close();
211
- aAis?.close();
210
+ if (aAis) {
211
+ aAis.close();
212
+ }
212
213
  }
213
214
  else {
214
215
  if (me.data.linLevelBuffers) {
@@ -235,7 +236,7 @@ export class LevelMeasure {
235
236
  // end of data, terminate worker and return result
236
237
  //this.terminateWorker();
237
238
  worker.terminate();
238
- ais?.close();
239
+ //ais?.close();
239
240
  aAis?.close();
240
241
  //console.debug("Audio input stream CRC hex: "+crcVal.toString(16)+", crcLen: "+crclen+", buffer frame len: "+bufferFrameLength);
241
242
  subscriber.next(new LevelInfos(bufferLevelInfos, peakLevelInfo));
@@ -513,4 +514,4 @@ export class StreamLevelMeasure {
513
514
  this.worker?.terminate();
514
515
  }
515
516
  }
516
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV2ZWxfbWVhc3VyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9kc3AvbGV2ZWxfbWVhc3VyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUV2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWhDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQztBQUVsQyxNQUFNLE9BQU8sU0FBUztJQUtwQixZQUE0QixZQUFvQixFQUM3QixhQUFxQixDQUFDLEVBQ3RCLGNBQXNCLENBQUMsRUFDOUIsWUFBNEIsRUFDNUIsWUFBNEI7UUFKWixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUM3QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBR3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsR0FBOEI7UUFDckQsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFlBQVk7Z0JBQ2xDLE1BQU8sSUFBSSxLQUFLLENBQUMsOENBQThD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LENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztpQkFDekM7Z0JBQ0QsV0FBVyxDQUFDLEVBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQzthQUM3RztRQUNILENBQUMsQ0FBQTtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsZUFBMEI7UUFFckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGVBQWUsQ0FBQztRQUN6QyxJQUFHLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQy9FO1lBQ0QsSUFBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUM7Z0JBQ3hCLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7b0JBQy9CLCtDQUErQztvQkFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDNUM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RFNQVXRpbHN9IGZyb20gXCIuLi8uLi9kc3AvdXRpbHNcIjtcclxuaW1wb3J0IHtTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbX0gZnJvbSBcIi4uL2lvL3N0cmVhbVwiO1xyXG5pbXBvcnQge0FycmF5cywgV29ya2VySGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtBdWRpb0RhdGFIb2xkZXJ9IGZyb20gXCIuLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgTUlOX0RCX0xFVkVMID0gLTQwLjA7XHJcblxyXG5leHBvcnQgY2xhc3MgTGV2ZWxJbmZvIHtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluTGluTGV2ZWxzOiBBcnJheTxudW1iZXI+O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX21heExpbkxldmVsczogQXJyYXk8bnVtYmVyPjtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNoYW5uZWxDb3VudDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBzdGFydEZyYW1lOiBudW1iZXIgPSAwLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBmcmFtZUxlbmd0aDogbnVtYmVyID0gMCxcclxuICAgICAgICAgICAgICBtaW5MaW5MZXZlbHM/OiBBcnJheTxudW1iZXI+LFxyXG4gICAgICAgICAgICAgIG1heExpbkxldmVscz86IEFycmF5PG51bWJlcj4pIHtcclxuICAgIHRoaXMuX21pbkxpbkxldmVscyA9IHRoaXMuY2hlY2tPckluaXRBcnJheShtaW5MaW5MZXZlbHMpO1xyXG4gICAgdGhpcy5fbWF4TGluTGV2ZWxzID0gdGhpcy5jaGVja09ySW5pdEFycmF5KG1heExpbkxldmVscyk7XHJcbiAgfVxyXG5cclxuICBnZXQgbWluTGluTGV2ZWxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkxpbkxldmVscztcclxuICB9XHJcblxyXG4gIGdldCBtYXhMaW5MZXZlbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF4TGluTGV2ZWxzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja09ySW5pdEFycmF5KGFycjogQXJyYXk8bnVtYmVyPiB8IHVuZGVmaW5lZCk6IEFycmF5PG51bWJlcj4ge1xyXG4gICAgaWYgKGFycikge1xyXG4gICAgICBpZiAoYXJyLmxlbmd0aCAhPT0gdGhpcy5jaGFubmVsQ291bnQpXHJcbiAgICAgICAgdGhyb3cgIG5ldyBFcnJvcihcIkxldmVsIGFycmF5cyBtdXN0IGJlIGVxdWFsIHRvIGNoYW5uZWwgY291bnQgXCIgKyB0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZXJnZShsZXZlbEluZm86IExldmVsSW5mbykge1xyXG4gICAgaWYgKGxldmVsSW5mbyA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFubmVsQ291bnQgIT09IGxldmVsSW5mby5jaGFubmVsQ291bnQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hhbm5lbCBjb3VudCBvZiBsZXZlbCBpbmZvIHRvIG1lcmdlIG11c3QgYmUgZXF1YWwuIChcIiArIHRoaXMuY2hhbm5lbENvdW50ICsgXCIgIT0gXCIgKyBsZXZlbEluZm8uY2hhbm5lbENvdW50ICsgXCIpXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBlbmRGcmFtZSA9IHRoaXMuc3RhcnRGcmFtZSArIHRoaXMuZnJhbWVMZW5ndGg7XHJcbiAgICBsZXQgbWVyZ2VFbmRGcmFtZSA9IGxldmVsSW5mby5zdGFydEZyYW1lICsgbGV2ZWxJbmZvLmZyYW1lTGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZXZlbEluZm8uc3RhcnRGcmFtZSA8IHRoaXMuc3RhcnRGcmFtZSkge1xyXG4gICAgICB0aGlzLnN0YXJ0RnJhbWUgPSBsZXZlbEluZm8uc3RhcnRGcmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWVyZ2VFbmRGcmFtZSA+IGVuZEZyYW1lKSB7XHJcbiAgICAgIHRoaXMuZnJhbWVMZW5ndGggPSBtZXJnZUVuZEZyYW1lIC0gdGhpcy5zdGFydEZyYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxDb3VudDsgY2grKykge1xyXG5cclxuICAgICAgaWYgKGxldmVsSW5mby5taW5MaW5MZXZlbHNbY2hdIDwgdGhpcy5taW5MaW5MZXZlbHNbY2hdKSB7XHJcbiAgICAgICAgdGhpcy5taW5MaW5MZXZlbHNbY2hdID0gbGV2ZWxJbmZvLm1pbkxpbkxldmVsc1tjaF07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGxldmVsSW5mby5tYXhMaW5MZXZlbHNbY2hdID4gdGhpcy5tYXhMaW5MZXZlbHNbY2hdKSB7XHJcbiAgICAgICAgdGhpcy5tYXhMaW5MZXZlbHNbY2hdID0gbGV2ZWxJbmZvLm1heExpbkxldmVsc1tjaF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxldmVsc0xpbigpOiBBcnJheTxudW1iZXI+IHtcclxuICAgIGxldCBsdmxzTGluID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgIGx2bHNMaW5bY2hdID0gTWF0aC5tYXgoTWF0aC5hYnModGhpcy5taW5MaW5MZXZlbHNbY2hdKSwgTWF0aC5hYnModGhpcy5tYXhMaW5MZXZlbHNbY2hdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbHZsc0xpbjtcclxuICB9XHJcblxyXG4gIHBvd2VyTGV2ZWxzREIoKTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICBsZXQgbHZsc0RiID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgIGx2bHNEYltjaF0gPSBEU1BVdGlscy50b1Bvd2VyTGV2ZWxJbkRCKHRoaXMubGV2ZWxzTGluKClbY2hdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsdmxzRGI7XHJcbiAgfVxyXG5cclxuICBwb3dlckxldmVsREIoKTogbnVtYmVyIHtcclxuICAgIGxldCBwTHZsc0RiID0gdGhpcy5wb3dlckxldmVsc0RCKCk7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4ucEx2bHNEYik7XHJcbiAgfVxyXG5cclxuICBjbG9uZSgpOiBMZXZlbEluZm8ge1xyXG4gICAgcmV0dXJuIG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQsIHRoaXMuc3RhcnRGcmFtZSwgdGhpcy5mcmFtZUxlbmd0aCwgQXJyYXlzLmNsb25lTnVtYmVyQXJyYXkodGhpcy5taW5MaW5MZXZlbHMpLFxyXG4gICAgICBBcnJheXMuY2xvbmVOdW1iZXJBcnJheSh0aGlzLm1heExpbkxldmVscykpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExldmVsSW5mb3Mge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBidWZmZXJMZXZlbEluZm9zOiBBcnJheTxMZXZlbEluZm8+LCBwdWJsaWMgcmVhZG9ubHkgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvKSB7XHJcbiAgfVxyXG5cclxuICBmcmFtZXNQZXJCdWZmZXIoKTpudW1iZXJ7XHJcbiAgICBpZih0aGlzLmJ1ZmZlckxldmVsSW5mb3MubGVuZ3RoPjApe1xyXG4gICAgICByZXR1cm4gdGhpcy5idWZmZXJMZXZlbEluZm9zWzBdLmZyYW1lTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucGVha0xldmVsSW5mby5mcmFtZUxlbmd0aC90aGlzLmJ1ZmZlckxldmVsSW5mb3MubGVuZ3RoO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxMaXN0ZW5lciB7XHJcbiAgY2hhbm5lbENvdW50OiBudW1iZXI7XHJcblxyXG4gIHVwZGF0ZShsZXZlbEluZm86IExldmVsSW5mbywgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvKTogdm9pZDtcclxuXHJcbiAgc3RyZWFtRmluaXNoZWQoKTogdm9pZDtcclxuXHJcbiAgcmVzZXQoKTogdm9pZDtcclxufVxyXG5cclxuZGVjbGFyZSBmdW5jdGlvbiBwb3N0TWVzc2FnZShtZXNzYWdlOiBhbnksIHRyYW5zZmVyPzogQXJyYXk8YW55Pik6IHZvaWQ7XHJcblxyXG5leHBvcnQgY2xhc3MgTGV2ZWxNZWFzdXJlIHtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZXJVUkw6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLndvcmtlclVSTCA9IFdvcmtlckhlbHBlci5idWlsZFdvcmtlckJsb2JVUkwodGhpcy53b3JrZXJGdW5jdGlvbik7XHJcbiAgfVxyXG5cclxuICBjYWxjQnVmZmVyTGV2ZWxJbmZvcyhhdWRpb0RhdGFIb2xkZXI6QXVkaW9EYXRhSG9sZGVyLCBidWZmZXJUaW1lTGVuZ3RoOiBudW1iZXIpOiBPYnNlcnZhYmxlPExldmVsSW5mb3M+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxMZXZlbEluZm9zPihzdWJzY3JpYmVyID0+IHtcclxuXHJcbiAgICAgIGxldCBjaHMgPSBhdWRpb0RhdGFIb2xkZXIubnVtYmVyT2ZDaGFubmVscztcclxuICAgICAgbGV0IGJ1ZmZlckZyYW1lTGVuZ3RoID0gTWF0aC5yb3VuZChhdWRpb0RhdGFIb2xkZXIuc2FtcGxlUmF0ZSAqIGJ1ZmZlclRpbWVMZW5ndGgpO1xyXG5cclxuICAgICAgbGV0IGFpcyA9IGF1ZGlvRGF0YUhvbGRlci5hdWRpb0lucHV0U3RyZWFtKCk7XHJcbiAgICAgIC8vIFRlc3Q6IENoZWNrIENSQ1xyXG4gICAgICAvL2xldCBjcmNWYWw6bnVtYmVyPTA7XHJcbiAgICAgIC8vbGV0IGNyY2xlbjpudW1iZXI9MDtcclxuICAgICAgaWYgKGFpcykge1xyXG5cclxuICAgICAgICBsZXQgYXVkaW9CdWZmZXJzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBsZXQgdHJCdWZmZXJzID0gbmV3IEFycmF5PEFycmF5QnVmZmVyPihjaHMpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgIGF1ZGlvQnVmZmVyc1tjaF0gPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGJ1ZmZlckxldmVsSW5mb3MgPSBuZXcgQXJyYXk8TGV2ZWxJbmZvPigpO1xyXG4gICAgICAgIGxldCBwZWFrTGV2ZWxJbmZvID0gbmV3IExldmVsSW5mbyhjaHMpO1xyXG5cclxuICAgICAgICBsZXQgd29ya2VyID0gbmV3IFdvcmtlcih0aGlzLndvcmtlclVSTCk7XHJcbiAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IChtZSkgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChtZS5kYXRhLmxpbkxldmVsQnVmZmVycykge1xyXG4gICAgICAgICAgICBsZXQgbGluTGV2ZWxBcnJzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgIGxpbkxldmVsQXJyc1tjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1lLmRhdGEubGluTGV2ZWxCdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBidWZmZXJDb3VudCA9IE1hdGguY2VpbChtZS5kYXRhLmZyYW1lTGVuZ3RoIC8gbWUuZGF0YS5idWZmZXJGcmFtZUxlbmd0aCk7XHJcbiAgICAgICAgICAgIGxldCBmcmFtZVBvcyA9IDA7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBiaSA9IDA7IGJpIDwgYnVmZmVyQ291bnQ7IGJpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgbWluTGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4oY2hzKTtcclxuICAgICAgICAgICAgICBsZXQgbWF4TGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4oY2hzKTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluTHZsQXJyUG9zID0gYmkgKiAyO1xyXG4gICAgICAgICAgICAgICAgbWluTGV2ZWxzW2NoXSA9IGxpbkxldmVsQXJyc1tjaF1bbGluTHZsQXJyUG9zXTtcclxuICAgICAgICAgICAgICAgIG1heExldmVsc1tjaF0gPSBsaW5MZXZlbEFycnNbY2hdW2xpbkx2bEFyclBvcyArIDFdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsZXQgYmxpID0gbmV3IExldmVsSW5mbyhjaHMsIGZyYW1lUG9zLCBtZS5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoLCBtaW5MZXZlbHMsIG1heExldmVscyk7XHJcbiAgICAgICAgICAgICAgYnVmZmVyTGV2ZWxJbmZvcy5wdXNoKGJsaSk7XHJcbiAgICAgICAgICAgICAgcGVha0xldmVsSW5mby5tZXJnZShibGkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1lLmRhdGEuZW9kID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIC8vIGVuZCBvZiBkYXRhLCB0ZXJtaW5hdGUgd29ya2VyIGFuZCByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIC8vdGhpcy50ZXJtaW5hdGVXb3JrZXIoKTtcclxuICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xyXG4gICAgICAgICAgICBhaXM/LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkF1ZGlvIGlucHV0IHN0cmVhbSBDUkMgaGV4OiBcIitjcmNWYWwudG9TdHJpbmcoMTYpK1wiLCBjcmNMZW46IFwiK2NyY2xlbitcIiwgYnVmZmVyIGZyYW1lIGxlbjogXCIrYnVmZmVyRnJhbWVMZW5ndGgpO1xyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobmV3IExldmVsSW5mb3MoYnVmZmVyTGV2ZWxJbmZvcywgcGVha0xldmVsSW5mbykpO1xyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoYWlzKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHJlYWQgPSBhaXMucmVhZChhdWRpb0J1ZmZlcnMpO1xyXG4gICAgICAgICAgICAgIC8vIFRFU1Q6XHJcbiAgICAgICAgICAgICAgLy8gaWYoYXVkaW9CdWZmZXJzICYmIGF1ZGlvQnVmZmVycy5sZW5ndGg+MCkge1xyXG4gICAgICAgICAgICAgIC8vICAgY3JjVmFsID0gY3JjMzIoYXVkaW9CdWZmZXJzWzBdLmJ1ZmZlciwgY3JjVmFsKTtcclxuICAgICAgICAgICAgICAvLyAgIGNyY2xlbiArPSBhdWRpb0J1ZmZlcnNbMF0uYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgLy8gICAvL2NvbnNvbGUuZGVidWcoXCJ0ckJ1ZmZlcnMubGVuZ3RoOiBcIit0ckJ1ZmZlcnNbMF0ubGVuZ3RoK1wiLCBDUkMgbGVuOiBcIitjcmNsZW4pO1xyXG4gICAgICAgICAgICAgIC8vIH1lbHNle1xyXG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcImF1ZGlvQnVmZmVycyBub3QgYXZhaWwhXCIpO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgY29weSA9IG5ldyBGbG9hdDMyQXJyYXkoYXVkaW9CdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAgICAgICAvLyB0ckJ1ZmZlcnNbY2hdID0gY29weS5idWZmZXI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJBYkJ1ZkNoPWF1ZGlvQnVmZmVyc1tjaF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZExlbiA9IGFyckFiQnVmQ2guYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyQnVmZmVyc1tjaF0gfHwgdHJCdWZmZXJzW2NoXS5ieXRlTGVuZ3RoICE9PSAgYWRMZW4pIHtcclxuICAgICAgICAgICAgICAgICAgdHJCdWZmZXJzW2NoXSA9IG5ldyBBcnJheUJ1ZmZlcihhZExlbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZkFkYUNoPW5ldyBGbG9hdDMyQXJyYXkodHJCdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAgICAgICBmQWRhQ2guc2V0KGF1ZGlvQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlckZyYW1lTGVuZ3RoOiBidWZmZXJGcmFtZUxlbmd0aCxcclxuICAgICAgICAgICAgICAgIGF1ZGlvRGF0YTogdHJCdWZmZXJzLFxyXG4gICAgICAgICAgICAgICAgY2hzOiBjaHMsXHJcbiAgICAgICAgICAgICAgICBsZW46IHJlYWRcclxuICAgICAgICAgICAgICB9LCB0ckJ1ZmZlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IHJlYWQgPSBhaXMucmVhZChhdWRpb0J1ZmZlcnMpO1xyXG4gICAgICAgIC8vIFRFU1Q6XHJcbiAgICAgICAgLy8gaWYoYXVkaW9CdWZmZXJzICYmIGF1ZGlvQnVmZmVycy5sZW5ndGg+MCkge1xyXG4gICAgICAgIC8vICAgY3JjVmFsID0gY3JjMzIoYXVkaW9CdWZmZXJzWzBdLmJ1ZmZlciwgY3JjVmFsKTtcclxuICAgICAgICAvLyAgIGNyY2xlbiArPSBhdWRpb0J1ZmZlcnNbMF0uYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgLy8gICAvL2NvbnNvbGUuZGVidWcoXCJ0ckJ1ZmZlcnMubGVuZ3RoOiBcIit0ckJ1ZmZlcnNbMF0ubGVuZ3RoK1wiLCBDUkMgbGVuOiBcIitjcmNsZW4pO1xyXG4gICAgICAgIC8vIH1lbHNle1xyXG4gICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcImF1ZGlvQnVmZmVycyBub3QgYXZhaWwhXCIpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAvLyBsZXQgY29weSA9IG5ldyBGbG9hdDMyQXJyYXkoYXVkaW9CdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAvLyB0ckJ1ZmZlcnNbY2hdID0gY29weS5idWZmZXI7XHJcbiAgICAgICAgICBjb25zdCBhcnJBYkJ1ZkNoPWF1ZGlvQnVmZmVyc1tjaF07XHJcbiAgICAgICAgICBjb25zdCBhZExlbiA9IGFyckFiQnVmQ2guYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICBpZiAoIXRyQnVmZmVyc1tjaF0gfHwgdHJCdWZmZXJzW2NoXS5ieXRlTGVuZ3RoICE9PSAgYWRMZW4pIHtcclxuICAgICAgICAgICAgdHJCdWZmZXJzW2NoXSA9IG5ldyBBcnJheUJ1ZmZlcihhZExlbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgZkFkYUNoPW5ldyBGbG9hdDMyQXJyYXkodHJCdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICBmQWRhQ2guc2V0KGF1ZGlvQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgIGJ1ZmZlckZyYW1lTGVuZ3RoOiBidWZmZXJGcmFtZUxlbmd0aCxcclxuICAgICAgICAgIGF1ZGlvRGF0YTogdHJCdWZmZXJzLFxyXG4gICAgICAgICAgY2hzOiBjaHMsXHJcbiAgICAgICAgICBsZW46IHJlYWRcclxuICAgICAgICB9LCB0ckJ1ZmZlcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBsZXQgYUFpcyA9IGF1ZGlvRGF0YUhvbGRlci5hc3luY0F1ZGlvSW5wdXRTdHJlYW0oKTtcclxuICAgICAgICBsZXQgYXVkaW9CdWZmZXJzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBsZXQgdHJCdWZmZXJzID0gbmV3IEFycmF5PGFueT4oY2hzKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBhdWRpb0J1ZmZlcnNbY2hdID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJGcmFtZUxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBidWZmZXJMZXZlbEluZm9zID0gbmV3IEFycmF5PExldmVsSW5mbz4oKTtcclxuICAgICAgICBsZXQgcGVha0xldmVsSW5mbyA9IG5ldyBMZXZlbEluZm8oY2hzKTtcclxuXHJcbiAgICAgICAgbGV0IHdvcmtlciA9IG5ldyBXb3JrZXIodGhpcy53b3JrZXJVUkwpO1xyXG4gICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAobWUpID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcclxuICAgICAgICAgICAgLy8gc3Vic2NyaWJlciBhYmFuZG9uZWRcclxuICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xyXG4gICAgICAgICAgICBhaXM/LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIGFBaXM/LmNsb3NlKCk7XHJcbiAgICAgICAgICB9ZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZiAobWUuZGF0YS5saW5MZXZlbEJ1ZmZlcnMpIHtcclxuICAgICAgICAgICAgICBsZXQgbGluTGV2ZWxBcnJzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5MZXZlbEFycnNbY2hdID0gbmV3IEZsb2F0MzJBcnJheShtZS5kYXRhLmxpbkxldmVsQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbGV0IGJ1ZmZlckNvdW50ID0gTWF0aC5jZWlsKG1lLmRhdGEuZnJhbWVMZW5ndGggLyBtZS5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICAgICAgICBsZXQgZnJhbWVQb3MgPSAwO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGxldCBiaSA9IDA7IGJpIDwgYnVmZmVyQ291bnQ7IGJpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBtaW5MZXZlbHMgPSBuZXcgQXJyYXk8bnVtYmVyPihjaHMpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1heExldmVscyA9IG5ldyBBcnJheTxudW1iZXI+KGNocyk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBsaW5MdmxBcnJQb3MgPSBiaSAqIDI7XHJcbiAgICAgICAgICAgICAgICAgIG1pbkxldmVsc1tjaF0gPSBsaW5MZXZlbEFycnNbY2hdW2xpbkx2bEFyclBvc107XHJcbiAgICAgICAgICAgICAgICAgIG1heExldmVsc1tjaF0gPSBsaW5MZXZlbEFycnNbY2hdW2xpbkx2bEFyclBvcyArIDFdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGJsaSA9IG5ldyBMZXZlbEluZm8oY2hzLCBmcmFtZVBvcywgbWUuZGF0YS5idWZmZXJGcmFtZUxlbmd0aCwgbWluTGV2ZWxzLCBtYXhMZXZlbHMpO1xyXG4gICAgICAgICAgICAgICAgYnVmZmVyTGV2ZWxJbmZvcy5wdXNoKGJsaSk7XHJcbiAgICAgICAgICAgICAgICBwZWFrTGV2ZWxJbmZvLm1lcmdlKGJsaSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWUuZGF0YS5lb2QgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAvLyBlbmQgb2YgZGF0YSwgdGVybWluYXRlIHdvcmtlciBhbmQgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgIC8vdGhpcy50ZXJtaW5hdGVXb3JrZXIoKTtcclxuICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XHJcbiAgICAgICAgICAgICAgYWlzPy5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgIGFBaXM/LmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQXVkaW8gaW5wdXQgc3RyZWFtIENSQyBoZXg6IFwiK2NyY1ZhbC50b1N0cmluZygxNikrXCIsIGNyY0xlbjogXCIrY3JjbGVuK1wiLCBidWZmZXIgZnJhbWUgbGVuOiBcIitidWZmZXJGcmFtZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG5ldyBMZXZlbEluZm9zKGJ1ZmZlckxldmVsSW5mb3MsIHBlYWtMZXZlbEluZm8pKTtcclxuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChhQWlzKSB7XHJcbiAgICAgICAgICAgICAgICBhQWlzPy5yZWFkT2JzKGF1ZGlvQnVmZmVycykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiAocmVhZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gVEVTVDpcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKGF1ZGlvQnVmZmVycyAmJiBhdWRpb0J1ZmZlcnMubGVuZ3RoPjApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgY3JjVmFsID0gY3JjMzIoYXVkaW9CdWZmZXJzWzBdLmJ1ZmZlciwgY3JjVmFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgY3JjbGVuICs9IGF1ZGlvQnVmZmVyc1swXS5idWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgLy9jb25zb2xlLmRlYnVnKFwidHJCdWZmZXJzLmxlbmd0aDogXCIrdHJCdWZmZXJzWzBdLmxlbmd0aCtcIiwgQ1JDIGxlbjogXCIrY3JjbGVuKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmRlYnVnKFwiYXVkaW9CdWZmZXJzIG5vdCBhdmFpbCFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgY29weSA9IG5ldyBGbG9hdDMyQXJyYXkoYXVkaW9CdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyQnVmZmVyc1tjaF0gPSBjb3B5LmJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyQWJCdWZDaD1hdWRpb0J1ZmZlcnNbY2hdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZExlbiA9IGFyckFiQnVmQ2guYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJCdWZmZXJzW2NoXSB8fCB0ckJ1ZmZlcnNbY2hdLmJ5dGVMZW5ndGggIT09ICBhZExlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyQnVmZmVyc1tjaF0gPSBuZXcgQXJyYXlCdWZmZXIoYWRMZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmQWRhQ2g9bmV3IEZsb2F0MzJBcnJheSh0ckJ1ZmZlcnNbY2hdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZkFkYUNoLnNldChhdWRpb0J1ZmZlcnNbY2hdKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJGcmFtZUxlbmd0aDogYnVmZmVyRnJhbWVMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRGF0YTogdHJCdWZmZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaHM6IGNocyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVuOiByZWFkXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LCB0ckJ1ZmZlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBhQWlzPy5yZWFkT2JzKGF1ZGlvQnVmZmVycykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlYWQpID0+IHtcclxuICAgICAgICAgICAgICAvLyBURVNUOlxyXG4gICAgICAgICAgICAgIC8vIGlmKGF1ZGlvQnVmZmVycyAmJiBhdWRpb0J1ZmZlcnMubGVuZ3RoPjApIHtcclxuICAgICAgICAgICAgICAvLyAgIGNyY1ZhbCA9IGNyYzMyKGF1ZGlvQnVmZmVyc1swXS5idWZmZXIsIGNyY1ZhbCk7XHJcbiAgICAgICAgICAgICAgLy8gICBjcmNsZW4gKz0gYXVkaW9CdWZmZXJzWzBdLmJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICAgIC8vICAgLy9jb25zb2xlLmRlYnVnKFwidHJCdWZmZXJzLmxlbmd0aDogXCIrdHJCdWZmZXJzWzBdLmxlbmd0aCtcIiwgQ1JDIGxlbjogXCIrY3JjbGVuKTtcclxuICAgICAgICAgICAgICAvLyB9ZWxzZXtcclxuICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUuZGVidWcoXCJhdWRpb0J1ZmZlcnMgbm90IGF2YWlsIVwiKTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgICAgLy8gbGV0IGNvcHkgPSBuZXcgRmxvYXQzMkFycmF5KGF1ZGlvQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgICAgICAgLy8gdHJCdWZmZXJzW2NoXSA9IGNvcHkuYnVmZmVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyckFiQnVmQ2g9YXVkaW9CdWZmZXJzW2NoXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFkTGVuID0gYXJyQWJCdWZDaC5idWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmICghdHJCdWZmZXJzW2NoXSB8fCB0ckJ1ZmZlcnNbY2hdLmJ5dGVMZW5ndGggIT09ICBhZExlbikge1xyXG4gICAgICAgICAgICAgICAgICB0ckJ1ZmZlcnNbY2hdID0gbmV3IEFycmF5QnVmZmVyKGFkTGVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBmQWRhQ2g9bmV3IEZsb2F0MzJBcnJheSh0ckJ1ZmZlcnNbY2hdKTtcclxuICAgICAgICAgICAgICAgIGZBZGFDaC5zZXQoYXVkaW9CdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgICBidWZmZXJGcmFtZUxlbmd0aDogYnVmZmVyRnJhbWVMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBhdWRpb0RhdGE6IHRyQnVmZmVycyxcclxuICAgICAgICAgICAgICAgIGNoczogY2hzLFxyXG4gICAgICAgICAgICAgICAgbGVuOiByZWFkXHJcbiAgICAgICAgICAgICAgfSwgdHJCdWZmZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiAgTWV0aG9kIHVzZWQgYXMgd29ya2VyIGNvZGUuXHJcbiAgICovXHJcbiAgd29ya2VyRnVuY3Rpb24oKSB7XHJcbiAgICBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChtc2c6TWVzc2FnZUV2ZW50KSB7XHJcblxyXG4gICAgICBsZXQgbGVuPW1zZy5kYXRhLmxlbjtcclxuICAgICAgbGV0IGJ1ZmZlckZyYW1lTGVuZ3RoID0gbXNnLmRhdGEuYnVmZmVyRnJhbWVMZW5ndGg7XHJcbiAgICAgIGlmKGxlbj09LTEpe1xyXG4gICAgICAgIC8vIHN0YXJ0XHJcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgZW9kOmZhbHNlLFxyXG4gICAgICAgICAgYnVmZmVyRnJhbWVMZW5ndGg6IGJ1ZmZlckZyYW1lTGVuZ3RoLFxyXG4gICAgICAgICAgZnJhbWVMZW5ndGg6IGxlblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihsZW49PTApIHtcclxuICAgICAgICBwb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICBlb2Q6dHJ1ZSxcclxuICAgICAgICAgIGJ1ZmZlckZyYW1lTGVuZ3RoOiBidWZmZXJGcmFtZUxlbmd0aCxcclxuICAgICAgICAgIGZyYW1lTGVuZ3RoOiBsZW5cclxuICAgICAgICB9KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgbGV0IGNocyA9IG1zZy5kYXRhLmNocztcclxuXHJcbiAgICAgICAgbGV0IGF1ZGlvRGF0YSA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgICAgbGV0IGxpbkxldmVscyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgIGF1ZGlvRGF0YVtjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1zZy5kYXRhLmF1ZGlvRGF0YVtjaF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9sZXQgZnJhbWVMZW5ndGggPSBhdWRpb0RhdGFbMF0ubGVuZ3RoO1xyXG5cclxuICAgICAgICBsZXQgYnVmZmVyQ291bnQgPSBNYXRoLmNlaWwobGVuIC8gYnVmZmVyRnJhbWVMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgIGxpbkxldmVsc1tjaF0gPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckNvdW50ICogMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhdWRpb0RhdGEgJiYgY2hzID4gMCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICBsZXQgY2hEYXRhID0gYXVkaW9EYXRhW2NoXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgbGVuOyBzKyspIHtcclxuICAgICAgICAgICAgICBsZXQgYmkgPSBNYXRoLmZsb29yKHMgLyBidWZmZXJGcmFtZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgbGV0IGx2bEFyclBvcyA9IGJpICogMjtcclxuICAgICAgICAgICAgICAvL2xldCBicyA9IHMgJSBidWZmZXJGcmFtZUxlbmd0aDtcclxuICAgICAgICAgICAgICBsZXQgY2hTYW1wbGUgPSBjaERhdGFbc107XHJcbiAgICAgICAgICAgICAgaWYgKGNoU2FtcGxlIDwgbGluTGV2ZWxzW2NoXVtsdmxBcnJQb3NdKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5MZXZlbHNbY2hdW2x2bEFyclBvc10gPSBjaFNhbXBsZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbHZsQXJyUG9zKys7XHJcbiAgICAgICAgICAgICAgaWYgKGNoU2FtcGxlID4gbGluTGV2ZWxzW2NoXVtsdmxBcnJQb3NdKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5MZXZlbHNbY2hdW2x2bEFyclBvc10gPSBjaFNhbXBsZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGxpbkxldmVsQnVmcyA9IG5ldyBBcnJheTxhbnk+KGNocyk7XHJcbiAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgIGxpbkxldmVsQnVmc1tjaF0gPSBsaW5MZXZlbHNbY2hdLmJ1ZmZlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgZW9kOmZhbHNlLFxyXG4gICAgICAgICAgICBidWZmZXJGcmFtZUxlbmd0aDogYnVmZmVyRnJhbWVMZW5ndGgsXHJcbiAgICAgICAgICAgIGZyYW1lTGVuZ3RoOiBsZW4sXHJcbiAgICAgICAgICAgIGxpbkxldmVsQnVmZmVyczogbGluTGV2ZWxCdWZzXHJcbiAgICAgICAgICB9LCBsaW5MZXZlbEJ1ZnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTdHJlYW1MZXZlbE1lYXN1cmUgaW1wbGVtZW50cyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSB7XHJcblxyXG4gIGN1cnJlbnRMZXZlbEluZm9zOiBMZXZlbEluZm98bnVsbD1udWxsO1xyXG4gIHBlYWtMZXZlbEluZm86IExldmVsSW5mb3xudWxsPW51bGw7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2VyVVJMOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB3b3JrZXI6IFdvcmtlcnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBjaGFubmVsQ291bnQ6IG51bWJlcj0wO1xyXG4gIHByaXZhdGUgYnVmZmVySW5kZXg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBmcmFtZUNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICBsZXZlbExpc3RlbmVyOiBMZXZlbExpc3RlbmVyfG51bGw9bnVsbDtcclxuICBwZWFrTGV2ZWxMaXN0ZW5lcjogKChwZWFrTHZsSW5EYjpudW1iZXIpPT52b2lkKXxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBwZWFrTGV2ZWxJbkRiOm51bWJlcj1NSU5fREJfTEVWRUw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy53b3JrZXJVUkwgPSBXb3JrZXJIZWxwZXIuYnVpbGRXb3JrZXJCbG9iVVJMKHRoaXMud29ya2VyRnVuY3Rpb24pXHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlciwgc2FtcGxlUmF0ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmNoYW5uZWxDb3VudCA9IGNoYW5uZWxzO1xyXG4gICAgdGhpcy5jdXJyZW50TGV2ZWxJbmZvcyA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgdGhpcy5wZWFrTGV2ZWxJbmZvID0gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICB0aGlzLndvcmtlciA9IG5ldyBXb3JrZXIodGhpcy53b3JrZXJVUkwpO1xyXG4gICAgdGhpcy53b3JrZXIub25tZXNzYWdlID0gKG1lKSA9PiB7XHJcbiAgICAgIGxldCBzdHJlYW1GaW5pc2hlZCA9IG1lLmRhdGEuc3RyZWFtRmluaXNoZWQ7XHJcbiAgICAgIGlmIChzdHJlYW1GaW5pc2hlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxldmVsTGlzdGVuZXIpIHtcclxuICAgICAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5zdHJlYW1GaW5pc2hlZCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBsZXQgbWluTGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgICAgIGxldCBtYXhMZXZlbHMgPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgICAgICBsZXQgZmxzID0gbmV3IEZsb2F0MzJBcnJheShtZS5kYXRhLmxpbkxldmVsQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgbWluTGV2ZWxzW2NoXSA9IGZsc1swXTtcclxuICAgICAgICAgIG1heExldmVsc1tjaF0gPSBmbHNbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBiaSA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQsIHRoaXMuZnJhbWVDb3VudCwgbWUuZGF0YS5mcmFtZUxlbmd0aCwgbWluTGV2ZWxzLCBtYXhMZXZlbHMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGV2ZWxzKGJpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG5leHRTdHJlYW0oKSB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0KCkge1xyXG4gICAgdGhpcy5jdXJyZW50TGV2ZWxJbmZvcyA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgdGhpcy5wZWFrTGV2ZWxJbmZvID0gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICBpZiAodGhpcy5sZXZlbExpc3RlbmVyKSB7XHJcbiAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5yZXNldCgpO1xyXG4gICAgICB0aGlzLmxldmVsTGlzdGVuZXIuY2hhbm5lbENvdW50ID0gdGhpcy5jaGFubmVsQ291bnQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wZWFrTGV2ZWxMaXN0ZW5lcikge1xyXG4gICAgICB0aGlzLnBlYWtMZXZlbEluRGI9TUlOX0RCX0xFVkVMO1xyXG4gICAgICB0aGlzLnBlYWtMZXZlbExpc3RlbmVyKHRoaXMucGVha0xldmVsSW5EYik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3cml0ZShidWZmZXJEYXRhOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyIHtcclxuICAgIGxldCBidWZBcnJDb3BpZXMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihidWZmZXJEYXRhLmxlbmd0aCk7XHJcbiAgICBsZXQgYnVmZmVycyA9IG5ldyBBcnJheTxhbnk+KGJ1ZmZlckRhdGEubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBidWZmZXJEYXRhLmxlbmd0aDsgY2grKykge1xyXG4gICAgICBidWZBcnJDb3BpZXNbY2hdID0gYnVmZmVyRGF0YVtjaF0uc2xpY2UoKTtcclxuICAgICAgYnVmZmVyc1tjaF0gPSBidWZBcnJDb3BpZXNbY2hdLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRoaXMud29ya2VyPy5wb3N0TWVzc2FnZSh7XHJcbiAgICAgIHN0cmVhbUZpbmlzaGVkOiBmYWxzZSxcclxuICAgICAgYXVkaW9EYXRhOiBidWZmZXJzLFxyXG4gICAgICBjaHM6IHRoaXMuY2hhbm5lbENvdW50LFxyXG4gICAgICBidWZmZXJJbmRleDogdGhpcy5idWZmZXJJbmRleFxyXG4gICAgfSwgYnVmZmVycyk7XHJcbiAgICB0aGlzLmJ1ZmZlckluZGV4Kys7XHJcbiAgICByZXR1cm4gYnVmQXJyQ29waWVzWzBdLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGZsdXNoKCkge1xyXG4gICAgdGhpcy53b3JrZXI/LnBvc3RNZXNzYWdlKHtzdHJlYW1GaW5pc2hlZDogdHJ1ZX0pO1xyXG5cclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgICB0aGlzLndvcmtlcj8udGVybWluYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBNZXRob2QgdXNlZCBhcyB3b3JrZXIgY29kZS5cclxuICAgKi9cclxuICB3b3JrZXJGdW5jdGlvbigpIHtcclxuICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKG1zZzpNZXNzYWdlRXZlbnQpIHtcclxuICAgICAgbGV0IHN0cmVhbUZpbmlzaGVkID0gbXNnLmRhdGEuc3RyZWFtRmluaXNoZWQ7XHJcbiAgICAgIGlmIChzdHJlYW1GaW5pc2hlZCkge1xyXG4gICAgICAgIHBvc3RNZXNzYWdlKHtzdHJlYW1GaW5pc2hlZDogdHJ1ZX0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjaHMgPSBtc2cuZGF0YS5jaHM7XHJcbiAgICAgICAgbGV0IGZyYW1lTGVuZ3RoID0gbnVsbDtcclxuICAgICAgICBsZXQgYXVkaW9EYXRhID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBsZXQgbGluTGV2ZWxzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBsaW5MZXZlbHNbY2hdID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcclxuICAgICAgICAgIGF1ZGlvRGF0YVtjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1zZy5kYXRhLmF1ZGlvRGF0YVtjaF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGF1ZGlvRGF0YSkge1xyXG4gICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICBsZXQgY2hEYXRhID0gYXVkaW9EYXRhW2NoXTtcclxuICAgICAgICAgICAgaWYgKGZyYW1lTGVuZ3RoID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgZnJhbWVMZW5ndGggPSBjaERhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgZnJhbWVMZW5ndGg7IHMrKykge1xyXG4gICAgICAgICAgICAgIGxldCBjaFNhbXBsZT1jaERhdGFbc107XHJcbiAgICAgICAgICAgICAgaWYgKGNoU2FtcGxlIDwgbGluTGV2ZWxzW2NoXVswXSkge1xyXG4gICAgICAgICAgICAgICAgbGluTGV2ZWxzW2NoXVswXSA9IGNoU2FtcGxlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY2hTYW1wbGUgPiBsaW5MZXZlbHNbY2hdWzFdKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5MZXZlbHNbY2hdWzFdID0gY2hTYW1wbGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBsaW5MZXZlbEJ1ZnMgPSBuZXcgQXJyYXk8YW55PihjaHMpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgIGxpbkxldmVsQnVmc1tjaF0gPSBsaW5MZXZlbHNbY2hdLmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe3N0cmVhbUZpbmlzaGVkOiBmYWxzZSwgZnJhbWVMZW5ndGg6IGZyYW1lTGVuZ3RoLCBsaW5MZXZlbEJ1ZmZlcnM6IGxpbkxldmVsQnVmc30sIGxpbkxldmVsQnVmcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUxldmVscyhidWZmZXJMZXZlbEluZm86IExldmVsSW5mbykge1xyXG5cclxuICAgIHRoaXMuY3VycmVudExldmVsSW5mb3MgPSBidWZmZXJMZXZlbEluZm87XHJcbiAgICBpZih0aGlzLnBlYWtMZXZlbEluZm8pIHtcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbmZvLm1lcmdlKGJ1ZmZlckxldmVsSW5mbyk7XHJcbiAgICAgIGlmICh0aGlzLmxldmVsTGlzdGVuZXIpIHtcclxuICAgICAgICB0aGlzLmxldmVsTGlzdGVuZXIudXBkYXRlKHRoaXMuY3VycmVudExldmVsSW5mb3MsIHRoaXMucGVha0xldmVsSW5mby5jbG9uZSgpKTtcclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLnBlYWtMZXZlbExpc3RlbmVyKXtcclxuICAgICAgICBsZXQgcGVha0RCVmFsID0gYnVmZmVyTGV2ZWxJbmZvLnBvd2VyTGV2ZWxEQigpO1xyXG4gICAgICAgIGlmICh0aGlzLnBlYWtMZXZlbEluRGIgPCBwZWFrREJWYWwpIHtcclxuICAgICAgICAgIHRoaXMucGVha0xldmVsSW5EYiA9IHBlYWtEQlZhbDtcclxuICAgICAgICAgIC8vIHRoZSBldmVudCBjb21lcyBmcm9tIG91dHNpZGUgYW4gQW5ndWxhciB6b25lXHJcbiAgICAgICAgICB0aGlzLnBlYWtMZXZlbExpc3RlbmVyKHRoaXMucGVha0xldmVsSW5EYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy53b3JrZXI/LnRlcm1pbmF0ZSgpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV2ZWxfbWVhc3VyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9kc3AvbGV2ZWxfbWVhc3VyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUV2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWhDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQztBQUVsQyxNQUFNLE9BQU8sU0FBUztJQUtwQixZQUE0QixZQUFvQixFQUM3QixhQUFxQixDQUFDLEVBQ3RCLGNBQXNCLENBQUMsRUFDOUIsWUFBNEIsRUFDNUIsWUFBNEI7UUFKWixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUM3QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBR3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsR0FBOEI7UUFDckQsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsWUFBWTtnQkFDbEMsTUFBTyxJQUFJLEtBQUssQ0FBQyw4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aUJBQWlCLEdBQUcsZUFBZSxDQUFDO1FBQ3pDLElBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzFDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2hGLENBQUM7WUFDRCxJQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBQyxDQUFDO2dCQUN6QixJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQy9DLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7b0JBQy9CLCtDQUErQztvQkFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RFNQVXRpbHN9IGZyb20gXCIuLi8uLi9kc3AvdXRpbHNcIjtcclxuaW1wb3J0IHtTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbX0gZnJvbSBcIi4uL2lvL3N0cmVhbVwiO1xyXG5pbXBvcnQge0FycmF5cywgV29ya2VySGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtBdWRpb0RhdGFIb2xkZXJ9IGZyb20gXCIuLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgTUlOX0RCX0xFVkVMID0gLTQwLjA7XHJcblxyXG5leHBvcnQgY2xhc3MgTGV2ZWxJbmZvIHtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluTGluTGV2ZWxzOiBBcnJheTxudW1iZXI+O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX21heExpbkxldmVsczogQXJyYXk8bnVtYmVyPjtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNoYW5uZWxDb3VudDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBzdGFydEZyYW1lOiBudW1iZXIgPSAwLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBmcmFtZUxlbmd0aDogbnVtYmVyID0gMCxcclxuICAgICAgICAgICAgICBtaW5MaW5MZXZlbHM/OiBBcnJheTxudW1iZXI+LFxyXG4gICAgICAgICAgICAgIG1heExpbkxldmVscz86IEFycmF5PG51bWJlcj4pIHtcclxuICAgIHRoaXMuX21pbkxpbkxldmVscyA9IHRoaXMuY2hlY2tPckluaXRBcnJheShtaW5MaW5MZXZlbHMpO1xyXG4gICAgdGhpcy5fbWF4TGluTGV2ZWxzID0gdGhpcy5jaGVja09ySW5pdEFycmF5KG1heExpbkxldmVscyk7XHJcbiAgfVxyXG5cclxuICBnZXQgbWluTGluTGV2ZWxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkxpbkxldmVscztcclxuICB9XHJcblxyXG4gIGdldCBtYXhMaW5MZXZlbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF4TGluTGV2ZWxzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja09ySW5pdEFycmF5KGFycjogQXJyYXk8bnVtYmVyPiB8IHVuZGVmaW5lZCk6IEFycmF5PG51bWJlcj4ge1xyXG4gICAgaWYgKGFycikge1xyXG4gICAgICBpZiAoYXJyLmxlbmd0aCAhPT0gdGhpcy5jaGFubmVsQ291bnQpXHJcbiAgICAgICAgdGhyb3cgIG5ldyBFcnJvcihcIkxldmVsIGFycmF5cyBtdXN0IGJlIGVxdWFsIHRvIGNoYW5uZWwgY291bnQgXCIgKyB0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZXJnZShsZXZlbEluZm86IExldmVsSW5mbykge1xyXG4gICAgaWYgKGxldmVsSW5mbyA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFubmVsQ291bnQgIT09IGxldmVsSW5mby5jaGFubmVsQ291bnQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hhbm5lbCBjb3VudCBvZiBsZXZlbCBpbmZvIHRvIG1lcmdlIG11c3QgYmUgZXF1YWwuIChcIiArIHRoaXMuY2hhbm5lbENvdW50ICsgXCIgIT0gXCIgKyBsZXZlbEluZm8uY2hhbm5lbENvdW50ICsgXCIpXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBlbmRGcmFtZSA9IHRoaXMuc3RhcnRGcmFtZSArIHRoaXMuZnJhbWVMZW5ndGg7XHJcbiAgICBsZXQgbWVyZ2VFbmRGcmFtZSA9IGxldmVsSW5mby5zdGFydEZyYW1lICsgbGV2ZWxJbmZvLmZyYW1lTGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZXZlbEluZm8uc3RhcnRGcmFtZSA8IHRoaXMuc3RhcnRGcmFtZSkge1xyXG4gICAgICB0aGlzLnN0YXJ0RnJhbWUgPSBsZXZlbEluZm8uc3RhcnRGcmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWVyZ2VFbmRGcmFtZSA+IGVuZEZyYW1lKSB7XHJcbiAgICAgIHRoaXMuZnJhbWVMZW5ndGggPSBtZXJnZUVuZEZyYW1lIC0gdGhpcy5zdGFydEZyYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxDb3VudDsgY2grKykge1xyXG5cclxuICAgICAgaWYgKGxldmVsSW5mby5taW5MaW5MZXZlbHNbY2hdIDwgdGhpcy5taW5MaW5MZXZlbHNbY2hdKSB7XHJcbiAgICAgICAgdGhpcy5taW5MaW5MZXZlbHNbY2hdID0gbGV2ZWxJbmZvLm1pbkxpbkxldmVsc1tjaF07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGxldmVsSW5mby5tYXhMaW5MZXZlbHNbY2hdID4gdGhpcy5tYXhMaW5MZXZlbHNbY2hdKSB7XHJcbiAgICAgICAgdGhpcy5tYXhMaW5MZXZlbHNbY2hdID0gbGV2ZWxJbmZvLm1heExpbkxldmVsc1tjaF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxldmVsc0xpbigpOiBBcnJheTxudW1iZXI+IHtcclxuICAgIGxldCBsdmxzTGluID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgIGx2bHNMaW5bY2hdID0gTWF0aC5tYXgoTWF0aC5hYnModGhpcy5taW5MaW5MZXZlbHNbY2hdKSwgTWF0aC5hYnModGhpcy5tYXhMaW5MZXZlbHNbY2hdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbHZsc0xpbjtcclxuICB9XHJcblxyXG4gIHBvd2VyTGV2ZWxzREIoKTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICBsZXQgbHZsc0RiID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgIGx2bHNEYltjaF0gPSBEU1BVdGlscy50b1Bvd2VyTGV2ZWxJbkRCKHRoaXMubGV2ZWxzTGluKClbY2hdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsdmxzRGI7XHJcbiAgfVxyXG5cclxuICBwb3dlckxldmVsREIoKTogbnVtYmVyIHtcclxuICAgIGxldCBwTHZsc0RiID0gdGhpcy5wb3dlckxldmVsc0RCKCk7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4ucEx2bHNEYik7XHJcbiAgfVxyXG5cclxuICBjbG9uZSgpOiBMZXZlbEluZm8ge1xyXG4gICAgcmV0dXJuIG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQsIHRoaXMuc3RhcnRGcmFtZSwgdGhpcy5mcmFtZUxlbmd0aCwgQXJyYXlzLmNsb25lTnVtYmVyQXJyYXkodGhpcy5taW5MaW5MZXZlbHMpLFxyXG4gICAgICBBcnJheXMuY2xvbmVOdW1iZXJBcnJheSh0aGlzLm1heExpbkxldmVscykpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExldmVsSW5mb3Mge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBidWZmZXJMZXZlbEluZm9zOiBBcnJheTxMZXZlbEluZm8+LCBwdWJsaWMgcmVhZG9ubHkgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvKSB7XHJcbiAgfVxyXG5cclxuICBmcmFtZXNQZXJCdWZmZXIoKTpudW1iZXJ7XHJcbiAgICBpZih0aGlzLmJ1ZmZlckxldmVsSW5mb3MubGVuZ3RoPjApe1xyXG4gICAgICByZXR1cm4gdGhpcy5idWZmZXJMZXZlbEluZm9zWzBdLmZyYW1lTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucGVha0xldmVsSW5mby5mcmFtZUxlbmd0aC90aGlzLmJ1ZmZlckxldmVsSW5mb3MubGVuZ3RoO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxMaXN0ZW5lciB7XHJcbiAgY2hhbm5lbENvdW50OiBudW1iZXI7XHJcblxyXG4gIHVwZGF0ZShsZXZlbEluZm86IExldmVsSW5mbywgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvKTogdm9pZDtcclxuXHJcbiAgc3RyZWFtRmluaXNoZWQoKTogdm9pZDtcclxuXHJcbiAgcmVzZXQoKTogdm9pZDtcclxufVxyXG5cclxuZGVjbGFyZSBmdW5jdGlvbiBwb3N0TWVzc2FnZShtZXNzYWdlOiBhbnksIHRyYW5zZmVyPzogQXJyYXk8YW55Pik6IHZvaWQ7XHJcblxyXG5leHBvcnQgY2xhc3MgTGV2ZWxNZWFzdXJlIHtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZXJVUkw6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLndvcmtlclVSTCA9IFdvcmtlckhlbHBlci5idWlsZFdvcmtlckJsb2JVUkwodGhpcy53b3JrZXJGdW5jdGlvbik7XHJcbiAgfVxyXG5cclxuICBjYWxjQnVmZmVyTGV2ZWxJbmZvcyhhdWRpb0RhdGFIb2xkZXI6QXVkaW9EYXRhSG9sZGVyLCBidWZmZXJUaW1lTGVuZ3RoOiBudW1iZXIpOiBPYnNlcnZhYmxlPExldmVsSW5mb3M+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxMZXZlbEluZm9zPihzdWJzY3JpYmVyID0+IHtcclxuXHJcbiAgICAgIGxldCBjaHMgPSBhdWRpb0RhdGFIb2xkZXIubnVtYmVyT2ZDaGFubmVscztcclxuICAgICAgbGV0IGJ1ZmZlckZyYW1lTGVuZ3RoID0gTWF0aC5yb3VuZChhdWRpb0RhdGFIb2xkZXIuc2FtcGxlUmF0ZSAqIGJ1ZmZlclRpbWVMZW5ndGgpO1xyXG5cclxuICAgICAgbGV0IGFpcyA9IGF1ZGlvRGF0YUhvbGRlci5hdWRpb0lucHV0U3RyZWFtKCk7XHJcbiAgICAgIC8vIFRlc3Q6IENoZWNrIENSQ1xyXG4gICAgICAvL2xldCBjcmNWYWw6bnVtYmVyPTA7XHJcbiAgICAgIC8vbGV0IGNyY2xlbjpudW1iZXI9MDtcclxuICAgICAgaWYgKGFpcykge1xyXG5cclxuICAgICAgICBsZXQgYXVkaW9CdWZmZXJzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBsZXQgdHJCdWZmZXJzID0gbmV3IEFycmF5PEFycmF5QnVmZmVyPihjaHMpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgIGF1ZGlvQnVmZmVyc1tjaF0gPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGJ1ZmZlckxldmVsSW5mb3MgPSBuZXcgQXJyYXk8TGV2ZWxJbmZvPigpO1xyXG4gICAgICAgIGxldCBwZWFrTGV2ZWxJbmZvID0gbmV3IExldmVsSW5mbyhjaHMpO1xyXG5cclxuICAgICAgICBsZXQgd29ya2VyID0gbmV3IFdvcmtlcih0aGlzLndvcmtlclVSTCk7XHJcbiAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IChtZSkgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChtZS5kYXRhLmxpbkxldmVsQnVmZmVycykge1xyXG4gICAgICAgICAgICBsZXQgbGluTGV2ZWxBcnJzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgIGxpbkxldmVsQXJyc1tjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1lLmRhdGEubGluTGV2ZWxCdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBidWZmZXJDb3VudCA9IE1hdGguY2VpbChtZS5kYXRhLmZyYW1lTGVuZ3RoIC8gbWUuZGF0YS5idWZmZXJGcmFtZUxlbmd0aCk7XHJcbiAgICAgICAgICAgIGxldCBmcmFtZVBvcyA9IDA7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBiaSA9IDA7IGJpIDwgYnVmZmVyQ291bnQ7IGJpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgbWluTGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4oY2hzKTtcclxuICAgICAgICAgICAgICBsZXQgbWF4TGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4oY2hzKTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluTHZsQXJyUG9zID0gYmkgKiAyO1xyXG4gICAgICAgICAgICAgICAgbWluTGV2ZWxzW2NoXSA9IGxpbkxldmVsQXJyc1tjaF1bbGluTHZsQXJyUG9zXTtcclxuICAgICAgICAgICAgICAgIG1heExldmVsc1tjaF0gPSBsaW5MZXZlbEFycnNbY2hdW2xpbkx2bEFyclBvcyArIDFdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsZXQgYmxpID0gbmV3IExldmVsSW5mbyhjaHMsIGZyYW1lUG9zLCBtZS5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoLCBtaW5MZXZlbHMsIG1heExldmVscyk7XHJcbiAgICAgICAgICAgICAgYnVmZmVyTGV2ZWxJbmZvcy5wdXNoKGJsaSk7XHJcbiAgICAgICAgICAgICAgcGVha0xldmVsSW5mby5tZXJnZShibGkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1lLmRhdGEuZW9kID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIC8vIGVuZCBvZiBkYXRhLCB0ZXJtaW5hdGUgd29ya2VyIGFuZCByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIC8vdGhpcy50ZXJtaW5hdGVXb3JrZXIoKTtcclxuICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xyXG4gICAgICAgICAgICBhaXM/LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkF1ZGlvIGlucHV0IHN0cmVhbSBDUkMgaGV4OiBcIitjcmNWYWwudG9TdHJpbmcoMTYpK1wiLCBjcmNMZW46IFwiK2NyY2xlbitcIiwgYnVmZmVyIGZyYW1lIGxlbjogXCIrYnVmZmVyRnJhbWVMZW5ndGgpO1xyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobmV3IExldmVsSW5mb3MoYnVmZmVyTGV2ZWxJbmZvcywgcGVha0xldmVsSW5mbykpO1xyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoYWlzKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHJlYWQgPSBhaXMucmVhZChhdWRpb0J1ZmZlcnMpO1xyXG4gICAgICAgICAgICAgIC8vIFRFU1Q6XHJcbiAgICAgICAgICAgICAgLy8gaWYoYXVkaW9CdWZmZXJzICYmIGF1ZGlvQnVmZmVycy5sZW5ndGg+MCkge1xyXG4gICAgICAgICAgICAgIC8vICAgY3JjVmFsID0gY3JjMzIoYXVkaW9CdWZmZXJzWzBdLmJ1ZmZlciwgY3JjVmFsKTtcclxuICAgICAgICAgICAgICAvLyAgIGNyY2xlbiArPSBhdWRpb0J1ZmZlcnNbMF0uYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgLy8gICAvL2NvbnNvbGUuZGVidWcoXCJ0ckJ1ZmZlcnMubGVuZ3RoOiBcIit0ckJ1ZmZlcnNbMF0ubGVuZ3RoK1wiLCBDUkMgbGVuOiBcIitjcmNsZW4pO1xyXG4gICAgICAgICAgICAgIC8vIH1lbHNle1xyXG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcImF1ZGlvQnVmZmVycyBub3QgYXZhaWwhXCIpO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgY29weSA9IG5ldyBGbG9hdDMyQXJyYXkoYXVkaW9CdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAgICAgICAvLyB0ckJ1ZmZlcnNbY2hdID0gY29weS5idWZmZXI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJBYkJ1ZkNoPWF1ZGlvQnVmZmVyc1tjaF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZExlbiA9IGFyckFiQnVmQ2guYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyQnVmZmVyc1tjaF0gfHwgdHJCdWZmZXJzW2NoXS5ieXRlTGVuZ3RoICE9PSAgYWRMZW4pIHtcclxuICAgICAgICAgICAgICAgICAgdHJCdWZmZXJzW2NoXSA9IG5ldyBBcnJheUJ1ZmZlcihhZExlbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZkFkYUNoPW5ldyBGbG9hdDMyQXJyYXkodHJCdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAgICAgICBmQWRhQ2guc2V0KGF1ZGlvQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlckZyYW1lTGVuZ3RoOiBidWZmZXJGcmFtZUxlbmd0aCxcclxuICAgICAgICAgICAgICAgIGF1ZGlvRGF0YTogdHJCdWZmZXJzLFxyXG4gICAgICAgICAgICAgICAgY2hzOiBjaHMsXHJcbiAgICAgICAgICAgICAgICBsZW46IHJlYWRcclxuICAgICAgICAgICAgICB9LCB0ckJ1ZmZlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IHJlYWQgPSBhaXMucmVhZChhdWRpb0J1ZmZlcnMpO1xyXG4gICAgICAgIC8vIFRFU1Q6XHJcbiAgICAgICAgLy8gaWYoYXVkaW9CdWZmZXJzICYmIGF1ZGlvQnVmZmVycy5sZW5ndGg+MCkge1xyXG4gICAgICAgIC8vICAgY3JjVmFsID0gY3JjMzIoYXVkaW9CdWZmZXJzWzBdLmJ1ZmZlciwgY3JjVmFsKTtcclxuICAgICAgICAvLyAgIGNyY2xlbiArPSBhdWRpb0J1ZmZlcnNbMF0uYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgLy8gICAvL2NvbnNvbGUuZGVidWcoXCJ0ckJ1ZmZlcnMubGVuZ3RoOiBcIit0ckJ1ZmZlcnNbMF0ubGVuZ3RoK1wiLCBDUkMgbGVuOiBcIitjcmNsZW4pO1xyXG4gICAgICAgIC8vIH1lbHNle1xyXG4gICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcImF1ZGlvQnVmZmVycyBub3QgYXZhaWwhXCIpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAvLyBsZXQgY29weSA9IG5ldyBGbG9hdDMyQXJyYXkoYXVkaW9CdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAvLyB0ckJ1ZmZlcnNbY2hdID0gY29weS5idWZmZXI7XHJcbiAgICAgICAgICBjb25zdCBhcnJBYkJ1ZkNoPWF1ZGlvQnVmZmVyc1tjaF07XHJcbiAgICAgICAgICBjb25zdCBhZExlbiA9IGFyckFiQnVmQ2guYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICBpZiAoIXRyQnVmZmVyc1tjaF0gfHwgdHJCdWZmZXJzW2NoXS5ieXRlTGVuZ3RoICE9PSAgYWRMZW4pIHtcclxuICAgICAgICAgICAgdHJCdWZmZXJzW2NoXSA9IG5ldyBBcnJheUJ1ZmZlcihhZExlbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgZkFkYUNoPW5ldyBGbG9hdDMyQXJyYXkodHJCdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICBmQWRhQ2guc2V0KGF1ZGlvQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgIGJ1ZmZlckZyYW1lTGVuZ3RoOiBidWZmZXJGcmFtZUxlbmd0aCxcclxuICAgICAgICAgIGF1ZGlvRGF0YTogdHJCdWZmZXJzLFxyXG4gICAgICAgICAgY2hzOiBjaHMsXHJcbiAgICAgICAgICBsZW46IHJlYWRcclxuICAgICAgICB9LCB0ckJ1ZmZlcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBsZXQgYUFpcyA9IGF1ZGlvRGF0YUhvbGRlci5hc3luY0F1ZGlvSW5wdXRTdHJlYW0oKTtcclxuICAgICAgICBsZXQgYXVkaW9CdWZmZXJzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBsZXQgdHJCdWZmZXJzID0gbmV3IEFycmF5PGFueT4oY2hzKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBhdWRpb0J1ZmZlcnNbY2hdID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJGcmFtZUxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBidWZmZXJMZXZlbEluZm9zID0gbmV3IEFycmF5PExldmVsSW5mbz4oKTtcclxuICAgICAgICBsZXQgcGVha0xldmVsSW5mbyA9IG5ldyBMZXZlbEluZm8oY2hzKTtcclxuXHJcbiAgICAgICAgbGV0IHdvcmtlciA9IG5ldyBXb3JrZXIodGhpcy53b3JrZXJVUkwpO1xyXG4gICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAobWUpID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcclxuICAgICAgICAgICAgLy8gc3Vic2NyaWJlciBhYmFuZG9uZWRcclxuICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xyXG4gICAgICAgICAgICBpZihhQWlzKSB7XHJcbiAgICAgICAgICAgICAgYUFpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9ZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZiAobWUuZGF0YS5saW5MZXZlbEJ1ZmZlcnMpIHtcclxuICAgICAgICAgICAgICBsZXQgbGluTGV2ZWxBcnJzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5MZXZlbEFycnNbY2hdID0gbmV3IEZsb2F0MzJBcnJheShtZS5kYXRhLmxpbkxldmVsQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbGV0IGJ1ZmZlckNvdW50ID0gTWF0aC5jZWlsKG1lLmRhdGEuZnJhbWVMZW5ndGggLyBtZS5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICAgICAgICBsZXQgZnJhbWVQb3MgPSAwO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGxldCBiaSA9IDA7IGJpIDwgYnVmZmVyQ291bnQ7IGJpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBtaW5MZXZlbHMgPSBuZXcgQXJyYXk8bnVtYmVyPihjaHMpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1heExldmVscyA9IG5ldyBBcnJheTxudW1iZXI+KGNocyk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBsaW5MdmxBcnJQb3MgPSBiaSAqIDI7XHJcbiAgICAgICAgICAgICAgICAgIG1pbkxldmVsc1tjaF0gPSBsaW5MZXZlbEFycnNbY2hdW2xpbkx2bEFyclBvc107XHJcbiAgICAgICAgICAgICAgICAgIG1heExldmVsc1tjaF0gPSBsaW5MZXZlbEFycnNbY2hdW2xpbkx2bEFyclBvcyArIDFdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGJsaSA9IG5ldyBMZXZlbEluZm8oY2hzLCBmcmFtZVBvcywgbWUuZGF0YS5idWZmZXJGcmFtZUxlbmd0aCwgbWluTGV2ZWxzLCBtYXhMZXZlbHMpO1xyXG4gICAgICAgICAgICAgICAgYnVmZmVyTGV2ZWxJbmZvcy5wdXNoKGJsaSk7XHJcbiAgICAgICAgICAgICAgICBwZWFrTGV2ZWxJbmZvLm1lcmdlKGJsaSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWUuZGF0YS5lb2QgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAvLyBlbmQgb2YgZGF0YSwgdGVybWluYXRlIHdvcmtlciBhbmQgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAgIC8vdGhpcy50ZXJtaW5hdGVXb3JrZXIoKTtcclxuICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XHJcbiAgICAgICAgICAgICAgLy9haXM/LmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgYUFpcz8uY2xvc2UoKTtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBdWRpbyBpbnB1dCBzdHJlYW0gQ1JDIGhleDogXCIrY3JjVmFsLnRvU3RyaW5nKDE2KStcIiwgY3JjTGVuOiBcIitjcmNsZW4rXCIsIGJ1ZmZlciBmcmFtZSBsZW46IFwiK2J1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobmV3IExldmVsSW5mb3MoYnVmZmVyTGV2ZWxJbmZvcywgcGVha0xldmVsSW5mbykpO1xyXG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGFBaXMpIHtcclxuICAgICAgICAgICAgICAgIGFBaXM/LnJlYWRPYnMoYXVkaW9CdWZmZXJzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChyZWFkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBURVNUOlxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYoYXVkaW9CdWZmZXJzICYmIGF1ZGlvQnVmZmVycy5sZW5ndGg+MCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBjcmNWYWwgPSBjcmMzMihhdWRpb0J1ZmZlcnNbMF0uYnVmZmVyLCBjcmNWYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBjcmNsZW4gKz0gYXVkaW9CdWZmZXJzWzBdLmJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAvL2NvbnNvbGUuZGVidWcoXCJ0ckJ1ZmZlcnMubGVuZ3RoOiBcIit0ckJ1ZmZlcnNbMF0ubGVuZ3RoK1wiLCBDUkMgbGVuOiBcIitjcmNsZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUuZGVidWcoXCJhdWRpb0J1ZmZlcnMgbm90IGF2YWlsIVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBjb3B5ID0gbmV3IEZsb2F0MzJBcnJheShhdWRpb0J1ZmZlcnNbY2hdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJCdWZmZXJzW2NoXSA9IGNvcHkuYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJBYkJ1ZkNoPWF1ZGlvQnVmZmVyc1tjaF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkTGVuID0gYXJyQWJCdWZDaC5idWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ckJ1ZmZlcnNbY2hdIHx8IHRyQnVmZmVyc1tjaF0uYnl0ZUxlbmd0aCAhPT0gIGFkTGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJCdWZmZXJzW2NoXSA9IG5ldyBBcnJheUJ1ZmZlcihhZExlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZBZGFDaD1uZXcgRmxvYXQzMkFycmF5KHRyQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmQWRhQ2guc2V0KGF1ZGlvQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckZyYW1lTGVuZ3RoOiBidWZmZXJGcmFtZUxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9EYXRhOiB0ckJ1ZmZlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoczogY2hzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZW46IHJlYWRcclxuICAgICAgICAgICAgICAgICAgICAgIH0sIHRyQnVmZmVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGFBaXM/LnJlYWRPYnMoYXVkaW9CdWZmZXJzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVhZCkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIFRFU1Q6XHJcbiAgICAgICAgICAgICAgLy8gaWYoYXVkaW9CdWZmZXJzICYmIGF1ZGlvQnVmZmVycy5sZW5ndGg+MCkge1xyXG4gICAgICAgICAgICAgIC8vICAgY3JjVmFsID0gY3JjMzIoYXVkaW9CdWZmZXJzWzBdLmJ1ZmZlciwgY3JjVmFsKTtcclxuICAgICAgICAgICAgICAvLyAgIGNyY2xlbiArPSBhdWRpb0J1ZmZlcnNbMF0uYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgLy8gICAvL2NvbnNvbGUuZGVidWcoXCJ0ckJ1ZmZlcnMubGVuZ3RoOiBcIit0ckJ1ZmZlcnNbMF0ubGVuZ3RoK1wiLCBDUkMgbGVuOiBcIitjcmNsZW4pO1xyXG4gICAgICAgICAgICAgIC8vIH1lbHNle1xyXG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcImF1ZGlvQnVmZmVycyBub3QgYXZhaWwhXCIpO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgY29weSA9IG5ldyBGbG9hdDMyQXJyYXkoYXVkaW9CdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICAgICAgICAvLyB0ckJ1ZmZlcnNbY2hdID0gY29weS5idWZmZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyQWJCdWZDaD1hdWRpb0J1ZmZlcnNbY2hdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWRMZW4gPSBhcnJBYkJ1ZkNoLmJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0ckJ1ZmZlcnNbY2hdIHx8IHRyQnVmZmVyc1tjaF0uYnl0ZUxlbmd0aCAhPT0gIGFkTGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRyQnVmZmVyc1tjaF0gPSBuZXcgQXJyYXlCdWZmZXIoYWRMZW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGZBZGFDaD1uZXcgRmxvYXQzMkFycmF5KHRyQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgICAgICAgZkFkYUNoLnNldChhdWRpb0J1ZmZlcnNbY2hdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlckZyYW1lTGVuZ3RoOiBidWZmZXJGcmFtZUxlbmd0aCxcclxuICAgICAgICAgICAgICAgIGF1ZGlvRGF0YTogdHJCdWZmZXJzLFxyXG4gICAgICAgICAgICAgICAgY2hzOiBjaHMsXHJcbiAgICAgICAgICAgICAgICBsZW46IHJlYWRcclxuICAgICAgICAgICAgICB9LCB0ckJ1ZmZlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBNZXRob2QgdXNlZCBhcyB3b3JrZXIgY29kZS5cclxuICAgKi9cclxuICB3b3JrZXJGdW5jdGlvbigpIHtcclxuICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKG1zZzpNZXNzYWdlRXZlbnQpIHtcclxuXHJcbiAgICAgIGxldCBsZW49bXNnLmRhdGEubGVuO1xyXG4gICAgICBsZXQgYnVmZmVyRnJhbWVMZW5ndGggPSBtc2cuZGF0YS5idWZmZXJGcmFtZUxlbmd0aDtcclxuICAgICAgaWYobGVuPT0tMSl7XHJcbiAgICAgICAgLy8gc3RhcnRcclxuICAgICAgICBwb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICBlb2Q6ZmFsc2UsXHJcbiAgICAgICAgICBidWZmZXJGcmFtZUxlbmd0aDogYnVmZmVyRnJhbWVMZW5ndGgsXHJcbiAgICAgICAgICBmcmFtZUxlbmd0aDogbGVuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGxlbj09MCkge1xyXG4gICAgICAgIHBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgIGVvZDp0cnVlLFxyXG4gICAgICAgICAgYnVmZmVyRnJhbWVMZW5ndGg6IGJ1ZmZlckZyYW1lTGVuZ3RoLFxyXG4gICAgICAgICAgZnJhbWVMZW5ndGg6IGxlblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBsZXQgY2hzID0gbXNnLmRhdGEuY2hzO1xyXG5cclxuICAgICAgICBsZXQgYXVkaW9EYXRhID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBsZXQgbGluTGV2ZWxzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgYXVkaW9EYXRhW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkobXNnLmRhdGEuYXVkaW9EYXRhW2NoXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2xldCBmcmFtZUxlbmd0aCA9IGF1ZGlvRGF0YVswXS5sZW5ndGg7XHJcblxyXG4gICAgICAgIGxldCBidWZmZXJDb3VudCA9IE1hdGguY2VpbChsZW4gLyBidWZmZXJGcmFtZUxlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgbGluTGV2ZWxzW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQ291bnQgKiAyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF1ZGlvRGF0YSAmJiBjaHMgPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjaERhdGEgPSBhdWRpb0RhdGFbY2hdO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBsZW47IHMrKykge1xyXG4gICAgICAgICAgICAgIGxldCBiaSA9IE1hdGguZmxvb3IocyAvIGJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICAgICAgICBsZXQgbHZsQXJyUG9zID0gYmkgKiAyO1xyXG4gICAgICAgICAgICAgIC8vbGV0IGJzID0gcyAlIGJ1ZmZlckZyYW1lTGVuZ3RoO1xyXG4gICAgICAgICAgICAgIGxldCBjaFNhbXBsZSA9IGNoRGF0YVtzXTtcclxuICAgICAgICAgICAgICBpZiAoY2hTYW1wbGUgPCBsaW5MZXZlbHNbY2hdW2x2bEFyclBvc10pIHtcclxuICAgICAgICAgICAgICAgIGxpbkxldmVsc1tjaF1bbHZsQXJyUG9zXSA9IGNoU2FtcGxlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsdmxBcnJQb3MrKztcclxuICAgICAgICAgICAgICBpZiAoY2hTYW1wbGUgPiBsaW5MZXZlbHNbY2hdW2x2bEFyclBvc10pIHtcclxuICAgICAgICAgICAgICAgIGxpbkxldmVsc1tjaF1bbHZsQXJyUG9zXSA9IGNoU2FtcGxlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgbGluTGV2ZWxCdWZzID0gbmV3IEFycmF5PGFueT4oY2hzKTtcclxuICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgbGluTGV2ZWxCdWZzW2NoXSA9IGxpbkxldmVsc1tjaF0uYnVmZmVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBlb2Q6ZmFsc2UsXHJcbiAgICAgICAgICAgIGJ1ZmZlckZyYW1lTGVuZ3RoOiBidWZmZXJGcmFtZUxlbmd0aCxcclxuICAgICAgICAgICAgZnJhbWVMZW5ndGg6IGxlbixcclxuICAgICAgICAgICAgbGluTGV2ZWxCdWZmZXJzOiBsaW5MZXZlbEJ1ZnNcclxuICAgICAgICAgIH0sIGxpbkxldmVsQnVmcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFN0cmVhbUxldmVsTWVhc3VyZSBpbXBsZW1lbnRzIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtIHtcclxuXHJcbiAgY3VycmVudExldmVsSW5mb3M6IExldmVsSW5mb3xudWxsPW51bGw7XHJcbiAgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvfG51bGw9bnVsbDtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZXJVUkw6IHN0cmluZztcclxuICBwcml2YXRlIHdvcmtlcjogV29ya2VyfG51bGw9bnVsbDtcclxuICBwcml2YXRlIGNoYW5uZWxDb3VudDogbnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSBidWZmZXJJbmRleDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIGZyYW1lQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIGxldmVsTGlzdGVuZXI6IExldmVsTGlzdGVuZXJ8bnVsbD1udWxsO1xyXG4gIHBlYWtMZXZlbExpc3RlbmVyOiAoKHBlYWtMdmxJbkRiOm51bWJlcik9PnZvaWQpfG51bGw9bnVsbDtcclxuICBwcml2YXRlIHBlYWtMZXZlbEluRGI6bnVtYmVyPU1JTl9EQl9MRVZFTDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLndvcmtlclVSTCA9IFdvcmtlckhlbHBlci5idWlsZFdvcmtlckJsb2JVUkwodGhpcy53b3JrZXJGdW5jdGlvbilcclxuICB9XHJcblxyXG4gIHNldEZvcm1hdChjaGFubmVsczogbnVtYmVyLCBzYW1wbGVSYXRlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuY2hhbm5lbENvdW50ID0gY2hhbm5lbHM7XHJcbiAgICB0aGlzLmN1cnJlbnRMZXZlbEluZm9zID0gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICB0aGlzLnBlYWtMZXZlbEluZm8gPSBuZXcgTGV2ZWxJbmZvKHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcih0aGlzLndvcmtlclVSTCk7XHJcbiAgICB0aGlzLndvcmtlci5vbm1lc3NhZ2UgPSAobWUpID0+IHtcclxuICAgICAgbGV0IHN0cmVhbUZpbmlzaGVkID0gbWUuZGF0YS5zdHJlYW1GaW5pc2hlZDtcclxuICAgICAgaWYgKHN0cmVhbUZpbmlzaGVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGV2ZWxMaXN0ZW5lcikge1xyXG4gICAgICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLnN0cmVhbUZpbmlzaGVkKClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIGxldCBtaW5MZXZlbHMgPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICAgICAgbGV0IG1heExldmVscyA9IG5ldyBBcnJheTxudW1iZXI+KHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5jaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgICAgICAgIGxldCBmbHMgPSBuZXcgRmxvYXQzMkFycmF5KG1lLmRhdGEubGluTGV2ZWxCdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICBtaW5MZXZlbHNbY2hdID0gZmxzWzBdO1xyXG4gICAgICAgICAgbWF4TGV2ZWxzW2NoXSA9IGZsc1sxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGJpID0gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCwgdGhpcy5mcmFtZUNvdW50LCBtZS5kYXRhLmZyYW1lTGVuZ3RoLCBtaW5MZXZlbHMsIG1heExldmVscyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMZXZlbHMoYmkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgbmV4dFN0cmVhbSgpIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXQoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRMZXZlbEluZm9zID0gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICB0aGlzLnBlYWtMZXZlbEluZm8gPSBuZXcgTGV2ZWxJbmZvKHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgIGlmICh0aGlzLmxldmVsTGlzdGVuZXIpIHtcclxuICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5jaGFubmVsQ291bnQgPSB0aGlzLmNoYW5uZWxDb3VudDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBlYWtMZXZlbExpc3RlbmVyKSB7XHJcbiAgICAgIHRoaXMucGVha0xldmVsSW5EYj1NSU5fREJfTEVWRUw7XHJcbiAgICAgIHRoaXMucGVha0xldmVsTGlzdGVuZXIodGhpcy5wZWFrTGV2ZWxJbkRiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlKGJ1ZmZlckRhdGE6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IGJ1ZkFyckNvcGllcyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGJ1ZmZlckRhdGEubGVuZ3RoKTtcclxuICAgIGxldCBidWZmZXJzID0gbmV3IEFycmF5PGFueT4oYnVmZmVyRGF0YS5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGJ1ZmZlckRhdGEubGVuZ3RoOyBjaCsrKSB7XHJcbiAgICAgIGJ1ZkFyckNvcGllc1tjaF0gPSBidWZmZXJEYXRhW2NoXS5zbGljZSgpO1xyXG4gICAgICBidWZmZXJzW2NoXSA9IGJ1ZkFyckNvcGllc1tjaF0uYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdGhpcy53b3JrZXI/LnBvc3RNZXNzYWdlKHtcclxuICAgICAgc3RyZWFtRmluaXNoZWQ6IGZhbHNlLFxyXG4gICAgICBhdWRpb0RhdGE6IGJ1ZmZlcnMsXHJcbiAgICAgIGNoczogdGhpcy5jaGFubmVsQ291bnQsXHJcbiAgICAgIGJ1ZmZlckluZGV4OiB0aGlzLmJ1ZmZlckluZGV4XHJcbiAgICB9LCBidWZmZXJzKTtcclxuICAgIHRoaXMuYnVmZmVySW5kZXgrKztcclxuICAgIHJldHVybiBidWZBcnJDb3BpZXNbMF0ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZmx1c2goKSB7XHJcbiAgICB0aGlzLndvcmtlcj8ucG9zdE1lc3NhZ2Uoe3N0cmVhbUZpbmlzaGVkOiB0cnVlfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICAgIHRoaXMud29ya2VyPy50ZXJtaW5hdGUoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIE1ldGhvZCB1c2VkIGFzIHdvcmtlciBjb2RlLlxyXG4gICAqL1xyXG4gIHdvcmtlckZ1bmN0aW9uKCkge1xyXG4gICAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAobXNnOk1lc3NhZ2VFdmVudCkge1xyXG4gICAgICBsZXQgc3RyZWFtRmluaXNoZWQgPSBtc2cuZGF0YS5zdHJlYW1GaW5pc2hlZDtcclxuICAgICAgaWYgKHN0cmVhbUZpbmlzaGVkKSB7XHJcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe3N0cmVhbUZpbmlzaGVkOiB0cnVlfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGNocyA9IG1zZy5kYXRhLmNocztcclxuICAgICAgICBsZXQgZnJhbWVMZW5ndGggPSBudWxsO1xyXG4gICAgICAgIGxldCBhdWRpb0RhdGEgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihjaHMpO1xyXG4gICAgICAgIGxldCBsaW5MZXZlbHMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihjaHMpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgIGxpbkxldmVsc1tjaF0gPSBuZXcgRmxvYXQzMkFycmF5KDIpO1xyXG4gICAgICAgICAgYXVkaW9EYXRhW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkobXNnLmRhdGEuYXVkaW9EYXRhW2NoXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXVkaW9EYXRhKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjaERhdGEgPSBhdWRpb0RhdGFbY2hdO1xyXG4gICAgICAgICAgICBpZiAoZnJhbWVMZW5ndGggPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBmcmFtZUxlbmd0aCA9IGNoRGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBmcmFtZUxlbmd0aDsgcysrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNoU2FtcGxlPWNoRGF0YVtzXTtcclxuICAgICAgICAgICAgICBpZiAoY2hTYW1wbGUgPCBsaW5MZXZlbHNbY2hdWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5MZXZlbHNbY2hdWzBdID0gY2hTYW1wbGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChjaFNhbXBsZSA+IGxpbkxldmVsc1tjaF1bMV0pIHtcclxuICAgICAgICAgICAgICAgIGxpbkxldmVsc1tjaF1bMV0gPSBjaFNhbXBsZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGxpbkxldmVsQnVmcyA9IG5ldyBBcnJheTxhbnk+KGNocyk7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgbGluTGV2ZWxCdWZzW2NoXSA9IGxpbkxldmVsc1tjaF0uYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwb3N0TWVzc2FnZSh7c3RyZWFtRmluaXNoZWQ6IGZhbHNlLCBmcmFtZUxlbmd0aDogZnJhbWVMZW5ndGgsIGxpbkxldmVsQnVmZmVyczogbGluTGV2ZWxCdWZzfSwgbGluTGV2ZWxCdWZzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTGV2ZWxzKGJ1ZmZlckxldmVsSW5mbzogTGV2ZWxJbmZvKSB7XHJcblxyXG4gICAgdGhpcy5jdXJyZW50TGV2ZWxJbmZvcyA9IGJ1ZmZlckxldmVsSW5mbztcclxuICAgIGlmKHRoaXMucGVha0xldmVsSW5mbykge1xyXG4gICAgICB0aGlzLnBlYWtMZXZlbEluZm8ubWVyZ2UoYnVmZmVyTGV2ZWxJbmZvKTtcclxuICAgICAgaWYgKHRoaXMubGV2ZWxMaXN0ZW5lcikge1xyXG4gICAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci51cGRhdGUodGhpcy5jdXJyZW50TGV2ZWxJbmZvcywgdGhpcy5wZWFrTGV2ZWxJbmZvLmNsb25lKCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMucGVha0xldmVsTGlzdGVuZXIpe1xyXG4gICAgICAgIGxldCBwZWFrREJWYWwgPSBidWZmZXJMZXZlbEluZm8ucG93ZXJMZXZlbERCKCk7XHJcbiAgICAgICAgaWYgKHRoaXMucGVha0xldmVsSW5EYiA8IHBlYWtEQlZhbCkge1xyXG4gICAgICAgICAgdGhpcy5wZWFrTGV2ZWxJbkRiID0gcGVha0RCVmFsO1xyXG4gICAgICAgICAgLy8gdGhlIGV2ZW50IGNvbWVzIGZyb20gb3V0c2lkZSBhbiBBbmd1bGFyIHpvbmVcclxuICAgICAgICAgIHRoaXMucGVha0xldmVsTGlzdGVuZXIodGhpcy5wZWFrTGV2ZWxJbkRiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLndvcmtlcj8udGVybWluYXRlKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -131,4 +131,4 @@ export class WavReader {
131
131
  return chsArr;
132
132
  }
133
133
  }
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F2cmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2ltcGwvd2F2cmVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUVwRCxNQUFNLE9BQU8sU0FBUztJQU9sQixZQUFZLElBQWdCO1FBSnBCLFdBQU0sR0FBdUIsSUFBSSxDQUFDO1FBQ2xDLGdCQUFXLEdBQVEsQ0FBQyxDQUFDO1FBQ3JCLG9CQUFlLEdBQWEsSUFBSSxDQUFDO1FBR3JDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sVUFBVTtRQUNkLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksRUFBRSxLQUFLLGFBQWEsQ0FBQyxRQUFRLEVBQUU7WUFDL0IsTUFBTSxNQUFNLEdBQUMsNkJBQTZCLEdBQUUsRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0I7UUFDRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsR0FBQyxFQUFFLEdBQUMsY0FBYyxHQUFDLENBQUMsSUFBSSxDQUFDLEVB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LElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRTtnQkFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM3QyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUU7d0JBQ3BELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ3RDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDO3FCQUNqQztpQkFDRjthQUNGO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXYXZGaWxlRm9ybWF0IH0gZnJvbSAnLi93YXZmb3JtYXQnXHJcbmltcG9ydCB7IFBDTUF1ZGlvRm9ybWF0IH0gZnJvbSAnLi4vZm9ybWF0J1xyXG5pbXBvcnQgeyBCaW5hcnlCeXRlUmVhZGVyIH0gZnJvbSAnLi4vLi4vaW8vQmluYXJ5UmVhZGVyJ1xyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBXYXZSZWFkZXIge1xyXG5cclxuICAgICAgICBwcml2YXRlIGJyOkJpbmFyeUJ5dGVSZWFkZXI7XHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtYXQ6UENNQXVkaW9Gb3JtYXQgfCBudWxsPW51bGw7XHJcbiAgICAgICAgcHJpdmF0ZSB0b3RhbExlbmd0aDpudW1iZXI9MDtcclxuICAgICAgICBwcml2YXRlIGRhdGFDaHVua0xlbmd0aDpudW1iZXJ8bnVsbD1udWxsO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3RvcihkYXRhOkFycmF5QnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnIgPSBuZXcgQmluYXJ5Qnl0ZVJlYWRlcihkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgcmVhZEhlYWRlcigpe1xyXG4gICAgICAgICAgICBjb25zdCByaCA9IHRoaXMuYnIucmVhZEFzY2lpKDQpO1xyXG4gICAgICAgICAgICBpZiAocmggIT09IFdhdkZpbGVGb3JtYXQuUklGRl9LRVkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVyck1zZz1cIkV4cGVjdGVkIFJJRkYgaGVhZGVyLCBub3Q6IFwiKyByaDtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGNsID0gdGhpcy5ici5yZWFkVWludDMyTEUoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYnIucG9zICsgY2wgIT09IHRoaXMuYnIubGVuZ3RoKCkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGNodW5rc2l6ZSBpbiBSSUZGIGhlYWRlcjogXCIrY2wrXCIgKGV4cGVjdGVkOiBcIisodGhpcy5ici5sZW5ndGgoKSAtIHRoaXMuYnIucG9zKSsgXCIgKVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRvdGFsTGVuZ3RoID0gY2w7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBydCA9IHRoaXMuYnIucmVhZEFzY2lpKDQpO1xyXG4gICAgICAgICAgICBpZiAocnQgIT09IFdhdkZpbGVGb3JtYXQuV0FWX0tFWSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyTXNnPVwiRXhwZWN0ZWQgXCIrV2F2RmlsZUZvcm1hdC5XQVZfS0VZK1wiIG5vdDogXCIrIHJ0O1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlYWRGb3JtYXQoKTpQQ01BdWRpb0Zvcm1hdHxudWxse1xyXG4gICAgICAgICAgICB0aGlzLmJyLnBvcz0wO1xyXG4gICAgICAgICAgICB0aGlzLnJlYWRIZWFkZXIoKTtcclxuICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLm5hdmlnYXRlVG9DaHVuaygnZm10ICcpO1xyXG4gICAgICAgICAgaWYgKCFzKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJNc2c9XCJXQVYgZmlsZSBkb2VzIG5vdCBjb250YWluIGEgZm10IGNodW5rXCI7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IHRoaXMucGFyc2VGbXRDaHVuaygpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIF9mcmFtZUxlbmd0aCgpOm51bWJlcnxudWxse1xyXG4gICAgICAgICAgbGV0IGZsOm51bWJlcnxudWxsPW51bGw7XHJcbiAgICAgICAgICBpZih0aGlzLmZvcm1hdCAmJiB0aGlzLmRhdGFDaHVua0xlbmd0aCE9bnVsbCkge1xyXG4gICAgICAgICAgICBmbCA9IHRoaXMuZGF0YUNodW5rTGVuZ3RoIC8gdGhpcy5mb3JtYXQuY2hhbm5lbENvdW50IC8gdGhpcy5mb3JtYXQuc2FtcGxlU2l6ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZyYW1lTGVuZ3RoKCk6bnVtYmVyfG51bGwge1xyXG4gICAgICAgICAgbGV0IGZsOm51bWJlcnxudWxsPXRoaXMuX2ZyYW1lTGVuZ3RoKCk7XHJcbiAgICAgICAgICBpZihmbD09PW51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLnJlYWRGb3JtYXQoKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhQ2h1bmtMZW5ndGg9dGhpcy5uYXZpZ2F0ZVRvQ2h1bmsoJ2RhdGEnKTtcclxuICAgICAgICAgICAgZmw9dGhpcy5fZnJhbWVMZW5ndGgoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE5vdCB0ZXN0ZWQgeWV0ISEhXHJcbiAgICAgICAgcmVhZCgpOkF1ZGlvQnVmZmVyIHwgbnVsbHtcclxuICAgICAgICAgICAgdGhpcy5ici5wb3M9MDtcclxuICAgICAgICAgICAgbGV0IGFiOkF1ZGlvQnVmZmVyfG51bGw9bnVsbDtcclxuICAgICAgICAgICAgdGhpcy5yZWFkSGVhZGVyKCk7XHJcbiAgICAgICAgICAgIGxldCBzID0gdGhpcy5uYXZpZ2F0ZVRvQ2h1bmsoJ2ZtdCAnKTtcclxuICAgICAgICAgICAgaWYgKCFzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyTXNnPVwiV0FWIGZpbGUgZG9lcyBub3QgY29udGFpbiBhIGZtdCBjaHVua1wiO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSB0aGlzLnBhcnNlRm10Q2h1bmsoKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhQ2h1bmtMZW5ndGggPSB0aGlzLm5hdmlnYXRlVG9DaHVuaygnZGF0YScpO1xyXG4gICAgICAgICAgICBsZXQgY2hzQXJyID0gdGhpcy5yZWFkRGF0YSgpO1xyXG4gICAgICAgICAgICBsZXQgc3I9dGhpcy5mb3JtYXQ/LnNhbXBsZVJhdGU7XHJcbiAgICAgICAgICAgIGxldCBuQ2hzPXRoaXMuZm9ybWF0Py5jaGFubmVsQ291bnQ7XHJcbiAgICAgICAgICAgIGlmKHNyICYmIGNoc0FyciAmJiBuQ2hzICYmIG5DaHM+MCAmJiBuQ2hzPT1jaHNBcnI/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgYWIgPSBuZXcgQXVkaW9CdWZmZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aDogY2hzQXJyWzBdLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkNoYW5uZWxzOiB0aGlzLmZvcm1hdD8uY2hhbm5lbENvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZVJhdGU6IHNyXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2g9MDtjaDxuQ2hzO2NoKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBhYi5jb3B5VG9DaGFubmVsKGNoc0FycltjaF0sIGNoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYWI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIG5hdmlnYXRlVG9DaHVuayhjaHVua1N0cmluZzpzdHJpbmcpOm51bWJlciB7XHJcbiAgICAgICAgICAgIC8vIHBvc2l0aW9uIGFmdGVyIFJJRkYgaGVhZGVyXHJcbiAgICAgICAgICAvLyBUT0RPIGFzc3VtZXMgbm8gb3RoZXIgY2h1bmtzIGV4Y2VwdCAnZGF0YSdcclxuICAgICAgICAgICAgdGhpcy5ici5wb3MgPSAxMjtcclxuICAgICAgICAgICAgbGV0IGNoa1N0ciA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBjaGtMZW4gPSAtMTtcclxuICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmJyLmVvZigpKSB7XHJcbiAgICAgICAgICAgICAgICBjaGtTdHIgPSB0aGlzLmJyLnJlYWRBc2NpaSg0KTtcclxuICAgICAgICAgICAgICAgIGNoa0xlbiA9IHRoaXMuYnIucmVhZFVpbnQzMkxFKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmtTdHJpbmcgPT09IGNoa1N0cikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGtMZW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyLnBvcyArPSBjaGtMZW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNoa0xlbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgcGFyc2VGbXRDaHVuaygpOlBDTUF1ZGlvRm9ybWF0IHwgbnVsbCB7XHJcbiAgICAgICAgICAgIGxldCBwY21BZjpQQ01BdWRpb0Zvcm1hdHxudWxsPW51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IGZtdCA9IHRoaXMuYnIucmVhZFVpbnQxNkxFKCk7XHJcbiAgICAgICAgICAgIGlmIChmbXQgPT09IFdhdkZpbGVGb3JtYXQuUENNKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVscyA9IHRoaXMuYnIucmVhZFVpbnQxNkxFKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzYW1wbGVSYXRlID0gdGhpcy5ici5yZWFkVWludDMyTEUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBza2lwIGJhbmR3aWR0aFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ici5za2lwKDQpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGZyYW1lIHNpemVcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZyYW1lU2l6ZSA9IHRoaXMuYnIucmVhZFVpbnQxNkxFKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gc2FtcGxlIHNpemUgaW4gYml0cyAoUENNIGZvcm1hdCBvbmx5KVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2FtcGxlU2l6ZUluQml0cyA9IHRoaXMuYnIucmVhZFVpbnQxNkxFKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcGNtQWY9bmV3IFBDTUF1ZGlvRm9ybWF0KHNhbXBsZVJhdGUsIGNoYW5uZWxzLCBmcmFtZVNpemUgLyBjaGFubmVscywgc2FtcGxlU2l6ZUluQml0cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHBjbUFmO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkRGF0YSgpOkFycmF5PEZsb2F0MzJBcnJheT4gfCBudWxse1xyXG4gICAgICAgICAgICBsZXQgY2hzQXJyPW51bGw7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgY2hzQXJyID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4odGhpcy5mb3JtYXQuY2hhbm5lbENvdW50KTtcclxuICAgICAgICAgICAgICBjb25zdCBzYW1wbGVDb3VudCA9IHRoaXMudG90YWxMZW5ndGggLyB0aGlzLmZvcm1hdC5jaGFubmVsQ291bnQgLyB0aGlzLmZvcm1hdC5zYW1wbGVTaXplO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmZvcm1hdC5jaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgIGNoc0FycltjaF0gPSBuZXcgRmxvYXQzMkFycmF5KHNhbXBsZUNvdW50KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWF0LnNhbXBsZVNpemUgPT0gMikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRvdGFsTGVuZ3RoIC8gMjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmZvcm1hdC5jaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzMTZBbXBsID0gdGhpcy5ici5yZWFkSW50MTZMRSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoc0FycltjaF1baV0gPSBzMTZBbXBsIC8gMzI3Njg7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNoc0FycjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4iXX0=
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F2cmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2ltcGwvd2F2cmVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUVwRCxNQUFNLE9BQU8sU0FBUztJQU9sQixZQUFZLElBQWdCO1FBSnBCLFdBQU0sR0FBdUIsSUFBSSxDQUFDO1FBQ2xDLGdCQUFXLEdBQVEsQ0FBQyxDQUFDO1FBQ3JCLG9CQUFlLEdBQWEsSUFBSSxDQUFDO1FBR3JDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sVUFBVTtRQUNkLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksRUFBRSxLQUFLLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxNQUFNLE1BQU0sR0FBQyw2QkFBNkIsR0FBRSxFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsR0FBQyxFQUFFLEdBQUMsY0FBYyxHQUFDLENB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QUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDOUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7d0JBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ3RDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNsQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdhdkZpbGVGb3JtYXQgfSBmcm9tICcuL3dhdmZvcm1hdCdcclxuaW1wb3J0IHsgUENNQXVkaW9Gb3JtYXQgfSBmcm9tICcuLi9mb3JtYXQnXHJcbmltcG9ydCB7IEJpbmFyeUJ5dGVSZWFkZXIgfSBmcm9tICcuLi8uLi9pby9CaW5hcnlSZWFkZXInXHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIFdhdlJlYWRlciB7XHJcblxyXG4gICAgICAgIHByaXZhdGUgYnI6QmluYXJ5Qnl0ZVJlYWRlcjtcclxuICAgICAgICBwcml2YXRlIGZvcm1hdDpQQ01BdWRpb0Zvcm1hdCB8IG51bGw9bnVsbDtcclxuICAgICAgICBwcml2YXRlIHRvdGFsTGVuZ3RoOm51bWJlcj0wO1xyXG4gICAgICAgIHByaXZhdGUgZGF0YUNodW5rTGVuZ3RoOm51bWJlcnxudWxsPW51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yKGRhdGE6QXJyYXlCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5iciA9IG5ldyBCaW5hcnlCeXRlUmVhZGVyKGRhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkSGVhZGVyKCl7XHJcbiAgICAgICAgICAgIGNvbnN0IHJoID0gdGhpcy5ici5yZWFkQXNjaWkoNCk7XHJcbiAgICAgICAgICAgIGlmIChyaCAhPT0gV2F2RmlsZUZvcm1hdC5SSUZGX0tFWSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyTXNnPVwiRXhwZWN0ZWQgUklGRiBoZWFkZXIsIG5vdDogXCIrIHJoO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgY2wgPSB0aGlzLmJyLnJlYWRVaW50MzJMRSgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ici5wb3MgKyBjbCAhPT0gdGhpcy5ici5sZW5ndGgoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgY2h1bmtzaXplIGluIFJJRkYgaGVhZGVyOiBcIitjbCtcIiAoZXhwZWN0ZWQ6IFwiKyh0aGlzLmJyLmxlbmd0aCgpIC0gdGhpcy5ici5wb3MpKyBcIiApXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxMZW5ndGggPSBjbDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJ0ID0gdGhpcy5ici5yZWFkQXNjaWkoNCk7XHJcbiAgICAgICAgICAgIGlmIChydCAhPT0gV2F2RmlsZUZvcm1hdC5XQVZfS0VZKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJNc2c9XCJFeHBlY3RlZCBcIitXYXZGaWxlRm9ybWF0LldBVl9LRVkrXCIgbm90OiBcIisgcnQ7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVhZEZvcm1hdCgpOlBDTUF1ZGlvRm9ybWF0fG51bGx7XHJcbiAgICAgICAgICAgIHRoaXMuYnIucG9zPTA7XHJcbiAgICAgICAgICAgIHRoaXMucmVhZEhlYWRlcigpO1xyXG4gICAgICAgICAgY29uc3QgcyA9IHRoaXMubmF2aWdhdGVUb0NodW5rKCdmbXQgJyk7XHJcbiAgICAgICAgICBpZiAoIXMpIHtcclxuICAgICAgICAgICAgbGV0IGVyck1zZz1cIldBViBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYSBmbXQgY2h1bmtcIjtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gdGhpcy5wYXJzZUZtdENodW5rKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgX2ZyYW1lTGVuZ3RoKCk6bnVtYmVyfG51bGx7XHJcbiAgICAgICAgICBsZXQgZmw6bnVtYmVyfG51bGw9bnVsbDtcclxuICAgICAgICAgIGlmKHRoaXMuZm9ybWF0ICYmIHRoaXMuZGF0YUNodW5rTGVuZ3RoIT1udWxsKSB7XHJcbiAgICAgICAgICAgIGZsID0gdGhpcy5kYXRhQ2h1bmtMZW5ndGggLyB0aGlzLmZvcm1hdC5jaGFubmVsQ291bnQgLyB0aGlzLmZvcm1hdC5zYW1wbGVTaXplO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnJhbWVMZW5ndGgoKTpudW1iZXJ8bnVsbCB7XHJcbiAgICAgICAgICBsZXQgZmw6bnVtYmVyfG51bGw9dGhpcy5fZnJhbWVMZW5ndGgoKTtcclxuICAgICAgICAgIGlmKGZsPT09bnVsbCl7XHJcbiAgICAgICAgICAgIHRoaXMucmVhZEZvcm1hdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFDaHVua0xlbmd0aD10aGlzLm5hdmlnYXRlVG9DaHVuaygnZGF0YScpO1xyXG4gICAgICAgICAgICBmbD10aGlzLl9mcmFtZUxlbmd0aCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTm90IHRlc3RlZCB5ZXQhISFcclxuICAgICAgICByZWFkKCk6QXVkaW9CdWZmZXIgfCBudWxse1xyXG4gICAgICAgICAgICB0aGlzLmJyLnBvcz0wO1xyXG4gICAgICAgICAgICBsZXQgYWI6QXVkaW9CdWZmZXJ8bnVsbD1udWxsO1xyXG4gICAgICAgICAgICB0aGlzLnJlYWRIZWFkZXIoKTtcclxuICAgICAgICAgICAgbGV0IHMgPSB0aGlzLm5hdmlnYXRlVG9DaHVuaygnZm10ICcpO1xyXG4gICAgICAgICAgICBpZiAoIXMpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlcnJNc2c9XCJXQVYgZmlsZSBkb2VzIG5vdCBjb250YWluIGEgZm10IGNodW5rXCI7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IHRoaXMucGFyc2VGbXRDaHVuaygpO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFDaHVua0xlbmd0aCA9IHRoaXMubmF2aWdhdGVUb0NodW5rKCdkYXRhJyk7XHJcbiAgICAgICAgICAgIGxldCBjaHNBcnIgPSB0aGlzLnJlYWREYXRhKCk7XHJcbiAgICAgICAgICAgIGxldCBzcj10aGlzLmZvcm1hdD8uc2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgbGV0IG5DaHM9dGhpcy5mb3JtYXQ/LmNoYW5uZWxDb3VudDtcclxuICAgICAgICAgICAgaWYoc3IgJiYgY2hzQXJyICYmIG5DaHMgJiYgbkNocz4wICYmIG5DaHM9PWNoc0Fycj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBhYiA9IG5ldyBBdWRpb0J1ZmZlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBjaHNBcnJbMF0ubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlck9mQ2hhbm5lbHM6IHRoaXMuZm9ybWF0Py5jaGFubmVsQ291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlUmF0ZTogc3JcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBjaD0wO2NoPG5DaHM7Y2grKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGFiLmNvcHlUb0NoYW5uZWwoY2hzQXJyW2NoXSwgY2gpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhYjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGVUb0NodW5rKGNodW5rU3RyaW5nOnN0cmluZyk6bnVtYmVyIHtcclxuICAgICAgICAgICAgLy8gcG9zaXRpb24gYWZ0ZXIgUklGRiBoZWFkZXJcclxuICAgICAgICAgIC8vIFRPRE8gYXNzdW1lcyBubyBvdGhlciBjaHVua3MgZXhjZXB0ICdkYXRhJ1xyXG4gICAgICAgICAgICB0aGlzLmJyLnBvcyA9IDEyO1xyXG4gICAgICAgICAgICBsZXQgY2hrU3RyID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGNoa0xlbiA9IC0xO1xyXG4gICAgICAgICAgICB3aGlsZSAoIXRoaXMuYnIuZW9mKCkpIHtcclxuICAgICAgICAgICAgICAgIGNoa1N0ciA9IHRoaXMuYnIucmVhZEFzY2lpKDQpO1xyXG4gICAgICAgICAgICAgICAgY2hrTGVuID0gdGhpcy5ici5yZWFkVWludDMyTEUoKTtcclxuICAgICAgICAgICAgICAgIGlmIChjaHVua1N0cmluZyA9PT0gY2hrU3RyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoa0xlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYnIucG9zICs9IGNoa0xlbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY2hrTGVuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBwYXJzZUZtdENodW5rKCk6UENNQXVkaW9Gb3JtYXQgfCBudWxsIHtcclxuICAgICAgICAgICAgbGV0IHBjbUFmOlBDTUF1ZGlvRm9ybWF0fG51bGw9bnVsbDtcclxuICAgICAgICAgICAgY29uc3QgZm10ID0gdGhpcy5ici5yZWFkVWludDE2TEUoKTtcclxuICAgICAgICAgICAgaWYgKGZtdCA9PT0gV2F2RmlsZUZvcm1hdC5QQ00pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5uZWxzID0gdGhpcy5ici5yZWFkVWludDE2TEUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNhbXBsZVJhdGUgPSB0aGlzLmJyLnJlYWRVaW50MzJMRSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHNraXAgYmFuZHdpZHRoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyLnNraXAoNCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZnJhbWUgc2l6ZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZnJhbWVTaXplID0gdGhpcy5ici5yZWFkVWludDE2TEUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBzYW1wbGUgc2l6ZSBpbiBiaXRzIChQQ00gZm9ybWF0IG9ubHkpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzYW1wbGVTaXplSW5CaXRzID0gdGhpcy5ici5yZWFkVWludDE2TEUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBwY21BZj1uZXcgUENNQXVkaW9Gb3JtYXQoc2FtcGxlUmF0ZSwgY2hhbm5lbHMsIGZyYW1lU2l6ZSAvIGNoYW5uZWxzLCBzYW1wbGVTaXplSW5CaXRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcGNtQWY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHJlYWREYXRhKCk6QXJyYXk8RmxvYXQzMkFycmF5PiB8IG51bGx7XHJcbiAgICAgICAgICAgIGxldCBjaHNBcnI9bnVsbDtcclxuICAgICAgICAgICAgaWYodGhpcy5mb3JtYXQpIHtcclxuICAgICAgICAgICAgICBjaHNBcnIgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5Pih0aGlzLmZvcm1hdC5jaGFubmVsQ291bnQpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNhbXBsZUNvdW50ID0gdGhpcy50b3RhbExlbmd0aCAvIHRoaXMuZm9ybWF0LmNoYW5uZWxDb3VudCAvIHRoaXMuZm9ybWF0LnNhbXBsZVNpemU7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuZm9ybWF0LmNoYW5uZWxDb3VudDsgY2grKykge1xyXG4gICAgICAgICAgICAgICAgY2hzQXJyW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkoc2FtcGxlQ291bnQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtYXQuc2FtcGxlU2l6ZSA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG90YWxMZW5ndGggLyAyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuZm9ybWF0LmNoYW5uZWxDb3VudDsgY2grKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHMxNkFtcGwgPSB0aGlzLmJyLnJlYWRJbnQxNkxFKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hzQXJyW2NoXVtpXSA9IHMxNkFtcGwgLyAzMjc2ODtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY2hzQXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
@@ -102,4 +102,4 @@ export class WavWriter {
102
102
  return dataChkByteLen;
103
103
  }
104
104
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F2d3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2ltcGwvd2F2d3JpdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSTVDLE1BQU0sT0FBTyxTQUFTO2FBRUosOEJBQXlCLEdBQVUsQ0FBQyxBQUFYLENBQVk7SUFHckQ7UUFEUSxjQUFTLEdBQWMsSUFBSSxDQUFDO1FBRWxDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsR0FBZ0I7WUFFekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUzRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0MsMkJBQTJCO2dCQUUzQixLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVB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Q0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBQyxjQUFjLENBQUMsQ0FBQztRQUM3QyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2F2RmlsZUZvcm1hdCB9IGZyb20gJy4vd2F2Zm9ybWF0J1xyXG5pbXBvcnQgeyBCaW5hcnlCeXRlV3JpdGVyIH0gZnJvbSAnLi4vLi4vaW8vQmluYXJ5V3JpdGVyJ1xyXG5pbXBvcnQge1dvcmtlckhlbHBlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XHJcbmRlY2xhcmUgZnVuY3Rpb24gcG9zdE1lc3NhZ2UgKG1lc3NhZ2U6YW55LCB0cmFuc2ZlcjpBcnJheTxhbnk+KTp2b2lkO1xyXG5cclxuXHJcbiAgIGV4cG9ydCBjbGFzcyBXYXZXcml0ZXIge1xyXG5cclxuICAgICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9TQU1QTEVfU0laRV9CWVRFUzpudW1iZXIgPSAyO1xyXG4gICAgIHByaXZhdGUgYnc6QmluYXJ5Qnl0ZVdyaXRlcjtcclxuICAgICBwcml2YXRlIHdvcmtlclVSTDogc3RyaW5nfG51bGw9bnVsbDtcclxuICAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgIHRoaXMuYncgPSBuZXcgQmluYXJ5Qnl0ZVdyaXRlcigpO1xyXG4gICAgIH1cclxuXHJcbiAgICAgLypcclxuICAgICAgKiAgTWV0aG9kIHVzZWQgYXMgd29ya2VyIGNvZGUuXHJcbiAgICAgICovXHJcbiAgICAgd29ya2VyRnVuY3Rpb24oKSB7XHJcbiAgICAgICBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChtc2c6TWVzc2FnZUV2ZW50KSB7XHJcblxyXG4gICAgICAgICBjb25zdCB2YWxWaWV3ID0gbmV3IERhdGFWaWV3KG1zZy5kYXRhLmJ1Zixtc2cuZGF0YS5idWZQb3MpO1xyXG5cclxuICAgICAgICAgbGV0IGJ1ZlBvcyA9IDA7XHJcbiAgICAgICAgIGxldCBoRHluSW50UmFuZ2UgPSAxIDw8IChtc2cuZGF0YS5zYW1wbGVTaXplSW5CaXRzIC0gMSk7XHJcbiAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgbXNnLmRhdGEuZnJhbWVMZW5ndGg7IHMrKykge1xyXG4gICAgICAgICAgIC8vIGludGVybGVhdmVkIGNoYW5uZWwgZGF0YVxyXG5cclxuICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgbXNnLmRhdGEuY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICBsZXQgc3JjUG9zPShjaCptc2cuZGF0YS5mcmFtZUxlbmd0aCkrcztcclxuICAgICAgICAgICAgIGxldCB2YWxGbHQgPSBtc2cuZGF0YS5hdWRpb0RhdGFbc3JjUG9zXTtcclxuICAgICAgICAgICAgIGxldCB2YWxJbnQgPSBNYXRoLnJvdW5kKHZhbEZsdCAqIGhEeW5JbnRSYW5nZSk7XHJcbiAgICAgICAgICAgICB2YWxWaWV3LnNldEludDE2KGJ1ZlBvcywgdmFsSW50LCB0cnVlKTtcclxuICAgICAgICAgICAgIGJ1ZlBvcys9MjtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgcG9zdE1lc3NhZ2Uoe2J1Zjptc2cuZGF0YS5idWZ9LCBbbXNnLmRhdGEuYnVmXSk7XHJcbiAgICAgICAgIC8vc2VsZi5jbG9zZSgpXHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG5cclxuXHJcbiAgICAgd3JpdGVGbXRDaHVuayhhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcil7XHJcblxyXG4gICAgICAgdGhpcy5idy53cml0ZVVpbnQxNihXYXZGaWxlRm9ybWF0LlBDTSx0cnVlKTtcclxuICAgICAgIGxldCBmcmFtZVNpemU9V2F2V3JpdGVyLkRFRkFVTFRfU0FNUExFX1NJWkVfQllURVMqYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVsczsgLy8gZml4ZWQgMTYtYml0IGZvciBub3dcclxuICAgICAgIHRoaXMuYncud3JpdGVVaW50MTYoYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVscyx0cnVlKTtcclxuICAgICAgIHRoaXMuYncud3JpdGVVaW50MzIoYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZSx0cnVlKTtcclxuICAgICAgICAgLy8gZHdBdmdCeXRlc1BlclNlY1xyXG4gICAgICAgdGhpcy5idy53cml0ZVVpbnQzMihmcmFtZVNpemUqYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZSx0cnVlKTtcclxuICAgICAgIHRoaXMuYncud3JpdGVVaW50MTYoZnJhbWVTaXplLHRydWUpO1xyXG4gICAgICAgLy8gc2FtcGxlIHNpemUgaW4gYml0cyAoUENNIGZvcm1hdCBvbmx5KVxyXG4gICAgICAgdGhpcy5idy53cml0ZVVpbnQxNihXYXZXcml0ZXIuREVGQVVMVF9TQU1QTEVfU0laRV9CWVRFUyo4LHRydWUpO1xyXG4gICAgIH1cclxuXHJcbiAgICAgd3JpdGVEYXRhQ2h1bmsoYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpe1xyXG5cclxuICAgICAgIGxldCBjaERhdGEwPWF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xyXG4gICAgICAgbGV0IGRhdGFMZW49Y2hEYXRhMC5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGhEeW5JbnRSYW5nZT0xIDw8ICgoV2F2V3JpdGVyLkRFRkFVTFRfU0FNUExFX1NJWkVfQllURVMqOCktMSk7XHJcbiAgICAgICBmb3IobGV0IHM9MDtzPGRhdGFMZW47cysrKSB7XHJcbiAgICAgICAgIC8vIGludGVybGVhdmVkIGNoYW5uZWwgZGF0YVxyXG4gICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVsczsgY2grKykge1xyXG4gICAgICAgICAgIGxldCBjaERhdGEgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCk7XHJcbiAgICAgICAgICAgbGV0IHZhbEZsdD1jaERhdGFbc107XHJcbiAgICAgICAgICAgbGV0IHZhbEludD1NYXRoLnJvdW5kKHZhbEZsdCpoRHluSW50UmFuZ2UpO1xyXG4gICAgICAgICAgIHRoaXMuYncud3JpdGVJbnQxNih2YWxJbnQsdHJ1ZSk7XHJcbiAgICAgICAgIH1cclxuICAgICAgIH1cclxuXHJcbiAgICAgfVxyXG5cclxuICAgICB3cml0ZUNodW5rSGVhZGVyKG5hbWU6c3RyaW5nLGNoa0xlbjpudW1iZXIpe1xyXG4gICAgICAgdGhpcy5idy53cml0ZUFzY2lpKG5hbWUpO1xyXG4gICAgICAgdGhpcy5idy53cml0ZVVpbnQzMihjaGtMZW4sdHJ1ZSk7XHJcbiAgICAgfVxyXG5cclxuICAgICB3cml0ZUFzeW5jKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyLGNhbGxiYWNrOiAod2F2RmlsZURhdGE6VWludDhBcnJheSk9PiBhbnkpe1xyXG5cclxuICAgICAgIGxldCBkYXRhQ2hrQnl0ZUxlbj10aGlzLndyaXRlSGVhZGVyKGF1ZGlvQnVmZmVyKTtcclxuICAgICAgIGlmICghdGhpcy53b3JrZXJVUkwpIHtcclxuICAgICAgICAgdGhpcy53b3JrZXJVUkwgPSBXb3JrZXJIZWxwZXIuYnVpbGRXb3JrZXJCbG9iVVJMKHRoaXMud29ya2VyRnVuY3Rpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgbGV0IHdvID0gbmV3IFdvcmtlcih0aGlzLndvcmtlclVSTCk7XHJcblxyXG4gICAgICAgbGV0IGNocyA9IGF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcblxyXG4gICAgICAgbGV0IGZyYW1lTGVuZ3RoID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCkubGVuZ3RoO1xyXG4gICAgICAgbGV0IGFkID0gbmV3IEZsb2F0MzJBcnJheShjaHMgKiBmcmFtZUxlbmd0aCk7XHJcbiAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgIGFkLnNldChhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCksIGNoICogZnJhbWVMZW5ndGgpO1xyXG4gICAgICAgfVxyXG4gICAgICAgICAvLyBlbnN1cmVDYXBhY2l0eSBibG9ja3MgISEhXHJcbiAgICAgICB0aGlzLmJ3LmVuc3VyZUNhcGFjaXR5KGRhdGFDaGtCeXRlTGVuKTtcclxuICAgICAgIHdvLm9ubWVzc2FnZSA9IChtZSkgPT4ge1xyXG4gICAgICAgICBjYWxsYmFjayhtZS5kYXRhLmJ1Zik7XHJcbiAgICAgICAgIHdvLnRlcm1pbmF0ZSgpO1xyXG4gICAgICAgfVxyXG4gICAgICAgLy9UT0RPIEZpeGVkIHNhbXBsZSBzaXplIG9mIDE2IGJpdHNcclxuICAgICAgIHdvLnBvc3RNZXNzYWdlKHtzYW1wbGVTaXplSW5CaXRzOjE2LCBjaHM6IGNocywgZnJhbWVMZW5ndGg6IGZyYW1lTGVuZ3RoLCBhdWRpb0RhdGE6IGFkLGJ1Zjp0aGlzLmJ3LmJ1ZixidWZQb3M6dGhpcy5idy5wb3N9LCBbYWQuYnVmZmVyLHRoaXMuYncuYnVmXSk7XHJcblxyXG4gICAgIH1cclxuXHJcbiAgICAgd3JpdGUoYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpOlVpbnQ4QXJyYXl7XHJcbiAgICAgICB0aGlzLndyaXRlSGVhZGVyKGF1ZGlvQnVmZmVyKTtcclxuICAgICAgIHRoaXMud3JpdGVEYXRhQ2h1bmsoYXVkaW9CdWZmZXIpO1xyXG4gICAgICAgcmV0dXJuIHRoaXMuYncuZmluaXNoKCk7XHJcbiAgICAgfVxyXG5cclxuXHJcbiAgICAgIHdyaXRlSGVhZGVyKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKTpudW1iZXJ7XHJcbiAgICAgICAgdGhpcy5idy53cml0ZUFzY2lpKFdhdkZpbGVGb3JtYXQuUklGRl9LRVkpO1xyXG4gICAgICAgIGxldCBkYXRhQ2hrQnl0ZUxlbj0wO1xyXG4gICAgICAgIC8vY29uc3QgZGF0YUNoa0J5dGVMZW49YXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCkubGVuZ3RoKldhdldyaXRlci5ERUZBVUxUX1NBTVBMRV9TSVpFX0JZVEVTKmF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICAgICAgY29uc3QgYWJDaHM9YXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVscztcclxuICAgICAgICBpZihhYkNocz4wKXtcclxuICAgICAgICAgIGNvbnN0IGFiQ2gwPWF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xyXG4gICAgICAgICAgZGF0YUNoa0J5dGVMZW49YWJDaDAubGVuZ3RoKldhdldyaXRlci5ERUZBVUxUX1NBTVBMRV9TSVpFX0JZVEVTKmFiQ2hzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3YXZDaHVua0J5dGVMZW49KDQrNCkqMysxNitkYXRhQ2hrQnl0ZUxlbjtcclxuICAgICAgICB0aGlzLmJ3LndyaXRlVWludDMyKHdhdkNodW5rQnl0ZUxlbix0cnVlKTsgLy8gbXVzdCBiZSBzZXQgdG8gZmlsZSBsZW5ndGgtOCBsYXRlclxyXG4gICAgICAgIHRoaXMuYncud3JpdGVBc2NpaShXYXZGaWxlRm9ybWF0LldBVl9LRVkpO1xyXG4gICAgICAgIHRoaXMud3JpdGVDaHVua0hlYWRlcignZm10ICcsMTYpO1xyXG4gICAgICAgIHRoaXMud3JpdGVGbXRDaHVuayhhdWRpb0J1ZmZlcik7XHJcbiAgICAgICAgdGhpcy53cml0ZUNodW5rSGVhZGVyKCdkYXRhJyxkYXRhQ2hrQnl0ZUxlbik7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFDaGtCeXRlTGVuO1xyXG4gICAgICB9XHJcblxyXG4gICB9XHJcblxyXG5cclxuXHJcbiJdfQ==
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F2d3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2ltcGwvd2F2d3JpdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSTVDLE1BQU0sT0FBTyxTQUFTO2FBRUosOEJBQXlCLEdBQVUsQ0FBQyxBQUFYLENBQVk7SUFHckQ7UUFEUSxjQUFTLEdBQWMsSUFBSSxDQUFDO1FBRWxDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsR0FBZ0I7WUFFekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUzRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM5QywyQkFBMkI7Z0JBRTNCLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVB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QyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFDQUFxQztRQUNoRixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0MsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdhdkZpbGVGb3JtYXQgfSBmcm9tICcuL3dhdmZvcm1hdCdcclxuaW1wb3J0IHsgQmluYXJ5Qnl0ZVdyaXRlciB9IGZyb20gJy4uLy4uL2lvL0JpbmFyeVdyaXRlcidcclxuaW1wb3J0IHtXb3JrZXJIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xyXG5kZWNsYXJlIGZ1bmN0aW9uIHBvc3RNZXNzYWdlIChtZXNzYWdlOmFueSwgdHJhbnNmZXI6QXJyYXk8YW55Pik6dm9pZDtcclxuXHJcblxyXG4gICBleHBvcnQgY2xhc3MgV2F2V3JpdGVyIHtcclxuXHJcbiAgICAgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfU0FNUExFX1NJWkVfQllURVM6bnVtYmVyID0gMjtcclxuICAgICBwcml2YXRlIGJ3OkJpbmFyeUJ5dGVXcml0ZXI7XHJcbiAgICAgcHJpdmF0ZSB3b3JrZXJVUkw6IHN0cmluZ3xudWxsPW51bGw7XHJcbiAgICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICB0aGlzLmJ3ID0gbmV3IEJpbmFyeUJ5dGVXcml0ZXIoKTtcclxuICAgICB9XHJcblxyXG4gICAgIC8qXHJcbiAgICAgICogIE1ldGhvZCB1c2VkIGFzIHdvcmtlciBjb2RlLlxyXG4gICAgICAqL1xyXG4gICAgIHdvcmtlckZ1bmN0aW9uKCkge1xyXG4gICAgICAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAobXNnOk1lc3NhZ2VFdmVudCkge1xyXG5cclxuICAgICAgICAgY29uc3QgdmFsVmlldyA9IG5ldyBEYXRhVmlldyhtc2cuZGF0YS5idWYsbXNnLmRhdGEuYnVmUG9zKTtcclxuXHJcbiAgICAgICAgIGxldCBidWZQb3MgPSAwO1xyXG4gICAgICAgICBsZXQgaER5bkludFJhbmdlID0gMSA8PCAobXNnLmRhdGEuc2FtcGxlU2l6ZUluQml0cyAtIDEpO1xyXG4gICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IG1zZy5kYXRhLmZyYW1lTGVuZ3RoOyBzKyspIHtcclxuICAgICAgICAgICAvLyBpbnRlcmxlYXZlZCBjaGFubmVsIGRhdGFcclxuXHJcbiAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IG1zZy5kYXRhLmNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgbGV0IHNyY1Bvcz0oY2gqbXNnLmRhdGEuZnJhbWVMZW5ndGgpK3M7XHJcbiAgICAgICAgICAgICBsZXQgdmFsRmx0ID0gbXNnLmRhdGEuYXVkaW9EYXRhW3NyY1Bvc107XHJcbiAgICAgICAgICAgICBsZXQgdmFsSW50ID0gTWF0aC5yb3VuZCh2YWxGbHQgKiBoRHluSW50UmFuZ2UpO1xyXG4gICAgICAgICAgICAgdmFsVmlldy5zZXRJbnQxNihidWZQb3MsIHZhbEludCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICBidWZQb3MrPTI7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHBvc3RNZXNzYWdlKHtidWY6bXNnLmRhdGEuYnVmfSwgW21zZy5kYXRhLmJ1Zl0pO1xyXG4gICAgICAgICAvL3NlbGYuY2xvc2UoKVxyXG4gICAgICAgfVxyXG4gICAgIH1cclxuXHJcblxyXG4gICAgIHdyaXRlRm10Q2h1bmsoYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpe1xyXG5cclxuICAgICAgIHRoaXMuYncud3JpdGVVaW50MTYoV2F2RmlsZUZvcm1hdC5QQ00sdHJ1ZSk7XHJcbiAgICAgICBsZXQgZnJhbWVTaXplPVdhdldyaXRlci5ERUZBVUxUX1NBTVBMRV9TSVpFX0JZVEVTKmF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7IC8vIGZpeGVkIDE2LWJpdCBmb3Igbm93XHJcbiAgICAgICB0aGlzLmJ3LndyaXRlVWludDE2KGF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHMsdHJ1ZSk7XHJcbiAgICAgICB0aGlzLmJ3LndyaXRlVWludDMyKGF1ZGlvQnVmZmVyLnNhbXBsZVJhdGUsdHJ1ZSk7XHJcbiAgICAgICAgIC8vIGR3QXZnQnl0ZXNQZXJTZWNcclxuICAgICAgIHRoaXMuYncud3JpdGVVaW50MzIoZnJhbWVTaXplKmF1ZGlvQnVmZmVyLnNhbXBsZVJhdGUsdHJ1ZSk7XHJcbiAgICAgICB0aGlzLmJ3LndyaXRlVWludDE2KGZyYW1lU2l6ZSx0cnVlKTtcclxuICAgICAgIC8vIHNhbXBsZSBzaXplIGluIGJpdHMgKFBDTSBmb3JtYXQgb25seSlcclxuICAgICAgIHRoaXMuYncud3JpdGVVaW50MTYoV2F2V3JpdGVyLkRFRkFVTFRfU0FNUExFX1NJWkVfQllURVMqOCx0cnVlKTtcclxuICAgICB9XHJcblxyXG4gICAgIHdyaXRlRGF0YUNodW5rKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKXtcclxuXHJcbiAgICAgICBsZXQgY2hEYXRhMD1hdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcclxuICAgICAgIGxldCBkYXRhTGVuPWNoRGF0YTAubGVuZ3RoO1xyXG4gICAgICAgIGxldCBoRHluSW50UmFuZ2U9MSA8PCAoKFdhdldyaXRlci5ERUZBVUxUX1NBTVBMRV9TSVpFX0JZVEVTKjgpLTEpO1xyXG4gICAgICAgZm9yKGxldCBzPTA7czxkYXRhTGVuO3MrKykge1xyXG4gICAgICAgICAvLyBpbnRlcmxlYXZlZCBjaGFubmVsIGRhdGFcclxuICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7IGNoKyspIHtcclxuICAgICAgICAgICBsZXQgY2hEYXRhID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gICAgICAgICAgIGxldCB2YWxGbHQ9Y2hEYXRhW3NdO1xyXG4gICAgICAgICAgIGxldCB2YWxJbnQ9TWF0aC5yb3VuZCh2YWxGbHQqaER5bkludFJhbmdlKTtcclxuICAgICAgICAgICB0aGlzLmJ3LndyaXRlSW50MTYodmFsSW50LHRydWUpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICB9XHJcblxyXG4gICAgIH1cclxuXHJcbiAgICAgd3JpdGVDaHVua0hlYWRlcihuYW1lOnN0cmluZyxjaGtMZW46bnVtYmVyKXtcclxuICAgICAgIHRoaXMuYncud3JpdGVBc2NpaShuYW1lKTtcclxuICAgICAgIHRoaXMuYncud3JpdGVVaW50MzIoY2hrTGVuLHRydWUpO1xyXG4gICAgIH1cclxuXHJcbiAgICAgd3JpdGVBc3luYyhhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcixjYWxsYmFjazogKHdhdkZpbGVEYXRhOlVpbnQ4QXJyYXkpPT4gYW55KXtcclxuXHJcbiAgICAgICBsZXQgZGF0YUNoa0J5dGVMZW49dGhpcy53cml0ZUhlYWRlcihhdWRpb0J1ZmZlcik7XHJcbiAgICAgICBpZiAoIXRoaXMud29ya2VyVVJMKSB7XHJcbiAgICAgICAgIHRoaXMud29ya2VyVVJMID0gV29ya2VySGVscGVyLmJ1aWxkV29ya2VyQmxvYlVSTCh0aGlzLndvcmtlckZ1bmN0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgIGxldCB3byA9IG5ldyBXb3JrZXIodGhpcy53b3JrZXJVUkwpO1xyXG5cclxuICAgICAgIGxldCBjaHMgPSBhdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG5cclxuICAgICAgIGxldCBmcmFtZUxlbmd0aCA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApLmxlbmd0aDtcclxuICAgICAgIGxldCBhZCA9IG5ldyBGbG9hdDMyQXJyYXkoY2hzICogZnJhbWVMZW5ndGgpO1xyXG4gICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICBhZC5zZXQoYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpLCBjaCAqIGZyYW1lTGVuZ3RoKTtcclxuICAgICAgIH1cclxuICAgICAgICAgLy8gZW5zdXJlQ2FwYWNpdHkgYmxvY2tzICEhIVxyXG4gICAgICAgdGhpcy5idy5lbnN1cmVDYXBhY2l0eShkYXRhQ2hrQnl0ZUxlbik7XHJcbiAgICAgICB3by5vbm1lc3NhZ2UgPSAobWUpID0+IHtcclxuICAgICAgICAgY2FsbGJhY2sobWUuZGF0YS5idWYpO1xyXG4gICAgICAgICB3by50ZXJtaW5hdGUoKTtcclxuICAgICAgIH1cclxuICAgICAgIC8vVE9ETyBGaXhlZCBzYW1wbGUgc2l6ZSBvZiAxNiBiaXRzXHJcbiAgICAgICB3by5wb3N0TWVzc2FnZSh7c2FtcGxlU2l6ZUluQml0czoxNiwgY2hzOiBjaHMsIGZyYW1lTGVuZ3RoOiBmcmFtZUxlbmd0aCwgYXVkaW9EYXRhOiBhZCxidWY6dGhpcy5idy5idWYsYnVmUG9zOnRoaXMuYncucG9zfSwgW2FkLmJ1ZmZlcix0aGlzLmJ3LmJ1Zl0pO1xyXG5cclxuICAgICB9XHJcblxyXG4gICAgIHdyaXRlKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKTpVaW50OEFycmF5e1xyXG4gICAgICAgdGhpcy53cml0ZUhlYWRlcihhdWRpb0J1ZmZlcik7XHJcbiAgICAgICB0aGlzLndyaXRlRGF0YUNodW5rKGF1ZGlvQnVmZmVyKTtcclxuICAgICAgIHJldHVybiB0aGlzLmJ3LmZpbmlzaCgpO1xyXG4gICAgIH1cclxuXHJcblxyXG4gICAgICB3cml0ZUhlYWRlcihhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcik6bnVtYmVye1xyXG4gICAgICAgIHRoaXMuYncud3JpdGVBc2NpaShXYXZGaWxlRm9ybWF0LlJJRkZfS0VZKTtcclxuICAgICAgICBsZXQgZGF0YUNoa0J5dGVMZW49MDtcclxuICAgICAgICAvL2NvbnN0IGRhdGFDaGtCeXRlTGVuPWF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApLmxlbmd0aCpXYXZXcml0ZXIuREVGQVVMVF9TQU1QTEVfU0laRV9CWVRFUyphdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICAgIGNvbnN0IGFiQ2hzPWF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICAgICAgaWYoYWJDaHM+MCl7XHJcbiAgICAgICAgICBjb25zdCBhYkNoMD1hdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcclxuICAgICAgICAgIGRhdGFDaGtCeXRlTGVuPWFiQ2gwLmxlbmd0aCpXYXZXcml0ZXIuREVGQVVMVF9TQU1QTEVfU0laRV9CWVRFUyphYkNocztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd2F2Q2h1bmtCeXRlTGVuPSg0KzQpKjMrMTYrZGF0YUNoa0J5dGVMZW47XHJcbiAgICAgICAgdGhpcy5idy53cml0ZVVpbnQzMih3YXZDaHVua0J5dGVMZW4sdHJ1ZSk7IC8vIG11c3QgYmUgc2V0IHRvIGZpbGUgbGVuZ3RoLTggbGF0ZXJcclxuICAgICAgICB0aGlzLmJ3LndyaXRlQXNjaWkoV2F2RmlsZUZvcm1hdC5XQVZfS0VZKTtcclxuICAgICAgICB0aGlzLndyaXRlQ2h1bmtIZWFkZXIoJ2ZtdCAnLDE2KTtcclxuICAgICAgICB0aGlzLndyaXRlRm10Q2h1bmsoYXVkaW9CdWZmZXIpO1xyXG4gICAgICAgIHRoaXMud3JpdGVDaHVua0hlYWRlcignZGF0YScsZGF0YUNoa0J5dGVMZW4pO1xyXG4gICAgICAgIHJldHVybiBkYXRhQ2hrQnl0ZUxlbjtcclxuICAgICAgfVxyXG5cclxuICAgfVxyXG5cclxuXHJcblxyXG4iXX0=