speechrecorderng 2.25.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/esm2020/lib/audio/array_audio_buffer.mjs +101 -0
  2. package/esm2020/lib/audio/array_audio_buffer_input_stream.mjs +86 -0
  3. package/esm2020/lib/audio/audio_data_holder.mjs +109 -0
  4. package/esm2020/lib/audio/audio_display.mjs +5 -5
  5. package/esm2020/lib/audio/audio_player.mjs +9 -7
  6. package/esm2020/lib/audio/capture/capture.mjs +6 -1
  7. package/esm2020/lib/audio/dsp/level_measure.mjs +97 -55
  8. package/esm2020/lib/audio/io/stream.mjs +3 -3
  9. package/esm2020/lib/audio/persistor.mjs +5 -6
  10. package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +265 -0
  11. package/esm2020/lib/audio/playback/player.mjs +184 -50
  12. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +25 -13
  13. package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +2 -2
  14. package/esm2020/lib/audio/ui/audiosignal.mjs +206 -77
  15. package/esm2020/lib/audio/ui/container.mjs +14 -14
  16. package/esm2020/lib/audio/ui/livelevel.mjs +15 -2
  17. package/esm2020/lib/audio/ui/sonagram.mjs +343 -160
  18. package/esm2020/lib/io/stream.mjs +77 -1
  19. package/esm2020/lib/net/uploader.mjs +15 -3
  20. package/esm2020/lib/speechrecorder/recording.mjs +52 -7
  21. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +99 -7
  22. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +117 -101
  23. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +34 -6
  24. package/esm2020/lib/speechrecorder/session/progress.mjs +2 -2
  25. package/esm2020/lib/speechrecorder/session/prompting.mjs +2 -2
  26. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +6 -3
  27. package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +182 -0
  28. package/esm2020/lib/speechrecorder/session/recording_list.mjs +23 -10
  29. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +12 -6
  30. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +5 -5
  31. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +13 -9
  32. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +8 -5
  33. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +118 -95
  34. package/esm2020/lib/speechrecorderng.component.mjs +2 -2
  35. package/esm2020/lib/speechrecorderng.module.mjs +5 -4
  36. package/esm2020/lib/spr.module.version.mjs +2 -2
  37. package/esm2020/lib/ui/recordingitem_display.mjs +2 -2
  38. package/fesm2015/speechrecorderng.mjs +2321 -743
  39. package/fesm2015/speechrecorderng.mjs.map +1 -1
  40. package/fesm2020/speechrecorderng.mjs +2321 -753
  41. package/fesm2020/speechrecorderng.mjs.map +1 -1
  42. package/lib/audio/array_audio_buffer.d.ts +15 -0
  43. package/lib/audio/array_audio_buffer_input_stream.d.ts +14 -0
  44. package/lib/audio/audio_data_holder.d.ts +29 -0
  45. package/lib/audio/audio_display.d.ts +2 -1
  46. package/lib/audio/audio_player.d.ts +2 -1
  47. package/lib/audio/capture/capture.d.ts +2 -0
  48. package/lib/audio/dsp/level_measure.d.ts +2 -1
  49. package/lib/audio/persistor.d.ts +4 -3
  50. package/lib/audio/playback/array_audio_buffer_source_node.d.ts +24 -0
  51. package/lib/audio/playback/player.d.ts +6 -0
  52. package/lib/audio/ui/audio_canvas_layer_comp.d.ts +4 -1
  53. package/lib/audio/ui/audio_display_scroll_pane.d.ts +2 -1
  54. package/lib/audio/ui/audiosignal.d.ts +3 -2
  55. package/lib/audio/ui/container.d.ts +3 -2
  56. package/lib/audio/ui/livelevel.d.ts +3 -1
  57. package/lib/audio/ui/sonagram.d.ts +3 -2
  58. package/lib/io/stream.d.ts +17 -0
  59. package/lib/net/uploader.d.ts +6 -1
  60. package/lib/speechrecorder/recording.d.ts +15 -3
  61. package/lib/speechrecorder/recordings/recordings.service.d.ts +2 -0
  62. package/lib/speechrecorder/session/audiorecorder.d.ts +2 -7
  63. package/lib/speechrecorder/session/basicrecorder.d.ts +9 -3
  64. package/lib/speechrecorder/session/progress.d.ts +1 -1
  65. package/lib/speechrecorder/session/prompting.d.ts +1 -1
  66. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +3 -1
  67. package/lib/speechrecorder/session/recording_file_cache.d.ts +30 -0
  68. package/lib/speechrecorder/session/recording_list.d.ts +3 -1
  69. package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +2 -1
  70. package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +1 -0
  71. package/lib/speechrecorder/session/sessionmanager.d.ts +5 -11
  72. package/lib/speechrecorderng.module.d.ts +2 -1
  73. package/lib/spr.module.version.d.ts +1 -1
  74. package/package.json +1 -1
@@ -120,47 +120,66 @@ export class PeakLevelInterceptor {
120
120
  }
121
121
  }
122
122
  export class LevelMeasure {
123
+ //private bufferLevelInfos=new Array<LevelInfo>();
124
+ //private peakLevelInfo!:LevelInfo;
123
125
  constructor() {
124
126
  this.worker = null;
125
127
  this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction);
126
128
  }
127
- calcBufferLevelInfos(audioBuffer, bufferTimeLength) {
129
+ calcBufferLevelInfos(audioDataHolder, bufferTimeLength) {
128
130
  return new Promise((resolve) => {
129
- let chs = audioBuffer.numberOfChannels;
130
- let bufferFrameLength = Math.round(audioBuffer.sampleRate * bufferTimeLength);
131
- let buffers = new Array(chs);
131
+ let chs = audioDataHolder.numberOfChannels;
132
+ let bufferFrameLength = Math.round(audioDataHolder.sampleRate * bufferTimeLength);
133
+ let ais = audioDataHolder.audioInputStream();
134
+ let audioBuffers = new Array(chs);
135
+ let trBuffers = new Array(chs);
132
136
  for (let ch = 0; ch < chs; ch++) {
133
- let adCh = audioBuffer.getChannelData(ch);
134
- let adChCopy = new Float32Array(adCh.length);
135
- adChCopy.set(adCh);
136
- buffers[ch] = adChCopy.buffer;
137
+ audioBuffers[ch] = new Float32Array(bufferFrameLength);
137
138
  }
139
+ let bufferLevelInfos = new Array();
140
+ let peakLevelInfo = new LevelInfo(chs);
138
141
  this.worker = new Worker(this.workerURL);
139
142
  this.worker.onmessage = (me) => {
140
- let linLevelArrs = new Array(chs);
141
- for (let ch = 0; ch < chs; ch++) {
142
- linLevelArrs[ch] = new Float32Array(me.data.linLevelBuffers[ch]);
143
+ if (me.data.linLevelBuffers) {
144
+ let linLevelArrs = new Array(chs);
145
+ for (let ch = 0; ch < chs; ch++) {
146
+ linLevelArrs[ch] = new Float32Array(me.data.linLevelBuffers[ch]);
147
+ }
148
+ let bufferCount = Math.ceil(me.data.frameLength / me.data.bufferFrameLength);
149
+ let framePos = 0;
150
+ for (let bi = 0; bi < bufferCount; bi++) {
151
+ let minLevels = new Array(chs);
152
+ let maxLevels = new Array(chs);
153
+ for (let ch = 0; ch < chs; ch++) {
154
+ let linLvlArrPos = bi * 2;
155
+ minLevels[ch] = linLevelArrs[ch][linLvlArrPos];
156
+ maxLevels[ch] = linLevelArrs[ch][linLvlArrPos + 1];
157
+ }
158
+ let bli = new LevelInfo(chs, framePos, me.data.bufferFrameLength, minLevels, maxLevels);
159
+ bufferLevelInfos.push(bli);
160
+ peakLevelInfo.merge(bli);
161
+ }
162
+ }
163
+ if (me.data.eod === true) {
164
+ // end of data, terminate worker and return result
165
+ this.terminateWorker();
166
+ resolve(new LevelInfos(bufferLevelInfos, peakLevelInfo));
143
167
  }
144
- let bufferCount = Math.ceil(me.data.frameLength / me.data.bufferFrameLength);
145
- let framePos = 0;
146
- let bufferLevelInfos = new Array();
147
- let peakLevelInfo = new LevelInfo(chs);
148
- for (let bi = 0; bi < bufferCount; bi++) {
149
- let minLevels = new Array(chs);
150
- let maxLevels = new Array(chs);
168
+ else {
169
+ let read = ais.read(audioBuffers);
151
170
  for (let ch = 0; ch < chs; ch++) {
152
- let linLvlArrPos = bi * 2;
153
- minLevels[ch] = linLevelArrs[ch][linLvlArrPos];
154
- maxLevels[ch] = linLevelArrs[ch][linLvlArrPos + 1];
171
+ let copy = new Float32Array(audioBuffers[ch]);
172
+ trBuffers[ch] = copy.buffer;
155
173
  }
156
- let bli = new LevelInfo(chs, framePos, me.data.bufferFrameLength, minLevels, maxLevels);
157
- bufferLevelInfos.push(bli);
158
- peakLevelInfo.merge(bli);
174
+ this.worker?.postMessage({ bufferFrameLength: bufferFrameLength, audioData: trBuffers, chs: chs, len: read }, trBuffers);
159
175
  }
160
- this.terminateWorker();
161
- resolve(new LevelInfos(bufferLevelInfos, peakLevelInfo));
162
176
  };
163
- this.worker.postMessage({ bufferFrameLength: bufferFrameLength, audioData: buffers, chs: chs }, buffers);
177
+ let read = ais.read(audioBuffers);
178
+ for (let ch = 0; ch < chs; ch++) {
179
+ let copy = new Float32Array(audioBuffers[ch]);
180
+ trBuffers[ch] = copy.buffer;
181
+ }
182
+ this.worker?.postMessage({ bufferFrameLength: bufferFrameLength, audioData: trBuffers, chs: chs, len: read }, trBuffers);
164
183
  });
165
184
  }
166
185
  terminateWorker() {
@@ -171,40 +190,63 @@ export class LevelMeasure {
171
190
  */
172
191
  workerFunction() {
173
192
  self.onmessage = function (msg) {
174
- let chs = msg.data.chs;
193
+ let len = msg.data.len;
175
194
  let bufferFrameLength = msg.data.bufferFrameLength;
176
- let audioData = new Array(chs);
177
- let linLevels = new Array(chs);
178
- for (let ch = 0; ch < chs; ch++) {
179
- audioData[ch] = new Float32Array(msg.data.audioData[ch]);
195
+ if (len == -1) {
196
+ // start
197
+ postMessage({
198
+ eod: false,
199
+ bufferFrameLength: bufferFrameLength,
200
+ frameLength: len
201
+ });
180
202
  }
181
- let frameLength = audioData[0].length;
182
- let bufferCount = Math.ceil(frameLength / bufferFrameLength);
183
- for (let ch = 0; ch < chs; ch++) {
184
- linLevels[ch] = new Float32Array(bufferCount * 2);
203
+ if (len == 0) {
204
+ postMessage({
205
+ eod: true,
206
+ bufferFrameLength: bufferFrameLength,
207
+ frameLength: len
208
+ });
185
209
  }
186
- if (audioData && chs > 0) {
210
+ else {
211
+ let chs = msg.data.chs;
212
+ let audioData = new Array(chs);
213
+ let linLevels = new Array(chs);
187
214
  for (let ch = 0; ch < chs; ch++) {
188
- let chData = audioData[ch];
189
- for (let s = 0; s < frameLength; s++) {
190
- let bi = Math.floor(s / bufferFrameLength);
191
- let lvlArrPos = bi * 2;
192
- //let bs = s % bufferFrameLength;
193
- let chSample = chData[s];
194
- if (chSample < linLevels[ch][lvlArrPos]) {
195
- linLevels[ch][lvlArrPos] = chSample;
196
- }
197
- lvlArrPos++;
198
- if (chSample > linLevels[ch][lvlArrPos]) {
199
- linLevels[ch][lvlArrPos] = chSample;
200
- }
201
- }
215
+ audioData[ch] = new Float32Array(msg.data.audioData[ch]);
202
216
  }
203
- const linLevelBufs = new Array(chs);
217
+ //let frameLength = audioData[0].length;
218
+ let bufferCount = Math.ceil(len / bufferFrameLength);
204
219
  for (let ch = 0; ch < chs; ch++) {
205
- linLevelBufs[ch] = linLevels[ch].buffer;
220
+ linLevels[ch] = new Float32Array(bufferCount * 2);
221
+ }
222
+ if (audioData && chs > 0) {
223
+ for (let ch = 0; ch < chs; ch++) {
224
+ let chData = audioData[ch];
225
+ for (let s = 0; s < len; s++) {
226
+ let bi = Math.floor(s / bufferFrameLength);
227
+ let lvlArrPos = bi * 2;
228
+ //let bs = s % bufferFrameLength;
229
+ let chSample = chData[s];
230
+ if (chSample < linLevels[ch][lvlArrPos]) {
231
+ linLevels[ch][lvlArrPos] = chSample;
232
+ }
233
+ lvlArrPos++;
234
+ if (chSample > linLevels[ch][lvlArrPos]) {
235
+ linLevels[ch][lvlArrPos] = chSample;
236
+ }
237
+ }
238
+ }
239
+ const linLevelBufs = new Array(chs);
240
+ for (let ch = 0; ch < chs; ch++) {
241
+ linLevelBufs[ch] = linLevels[ch].buffer;
242
+ }
243
+ postMessage({
244
+ eod: false,
245
+ bufferFrameLength: bufferFrameLength,
246
+ frameLength: len,
247
+ linLevelBuffers: linLevelBufs
248
+ }, linLevelBufs);
206
249
  }
207
- postMessage({ bufferFrameLength: bufferFrameLength, frameLength: frameLength, linLevelBuffers: linLevelBufs }, linLevelBufs);
208
250
  }
209
251
  };
210
252
  }
@@ -348,4 +390,4 @@ export class StreamLevelMeasure {
348
390
  this.worker?.terminate();
349
391
  }
350
392
  }
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV2ZWxfbWVhc3VyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9kc3AvbGV2ZWxfbWVhc3VyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFJbEMsTUFBTSxPQUFPLFNBQVM7SUFLcEIsWUFBNEIsWUFBb0IsRUFDN0IsYUFBcUIsQ0FBQyxFQUN0QixjQUFzQixDQUFDLEVBQzlCLFlBQTRCLEVBQzVCLFlBQTRCO1FBSlosaUJBQVksR0FBWixZQUFZLENBQVE7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUd4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEdBQThCO1FBQ3JELElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUNsQyxNQUFPLElBQUksS0FBSyxDQUFDLDhDQUE4QyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RixPQUFP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LGlCQUFpQixFQUFDO2dCQUN4QixJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQy9DLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO29CQUMvQixrREFBa0Q7b0JBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQzVDO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFHRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RTUFV0aWxzfSBmcm9tIFwiLi4vLi4vZHNwL3V0aWxzXCI7XHJcbmltcG9ydCB7U2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtBcnJheXMsIFdvcmtlckhlbHBlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgTUlOX0RCX0xFVkVMID0gLTQwLjA7XHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBMZXZlbEluZm8ge1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9taW5MaW5MZXZlbHM6IEFycmF5PG51bWJlcj47XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4TGluTGV2ZWxzOiBBcnJheTxudW1iZXI+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY2hhbm5lbENvdW50OiBudW1iZXIsXHJcbiAgICAgICAgICAgICAgcHVibGljIHN0YXJ0RnJhbWU6IG51bWJlciA9IDAsXHJcbiAgICAgICAgICAgICAgcHVibGljIGZyYW1lTGVuZ3RoOiBudW1iZXIgPSAwLFxyXG4gICAgICAgICAgICAgIG1pbkxpbkxldmVscz86IEFycmF5PG51bWJlcj4sXHJcbiAgICAgICAgICAgICAgbWF4TGluTGV2ZWxzPzogQXJyYXk8bnVtYmVyPikge1xyXG4gICAgdGhpcy5fbWluTGluTGV2ZWxzID0gdGhpcy5jaGVja09ySW5pdEFycmF5KG1pbkxpbkxldmVscyk7XHJcbiAgICB0aGlzLl9tYXhMaW5MZXZlbHMgPSB0aGlzLmNoZWNrT3JJbml0QXJyYXkobWF4TGluTGV2ZWxzKTtcclxuICB9XHJcblxyXG4gIGdldCBtaW5MaW5MZXZlbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluTGluTGV2ZWxzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1heExpbkxldmVscygpIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXhMaW5MZXZlbHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrT3JJbml0QXJyYXkoYXJyOiBBcnJheTxudW1iZXI+IHwgdW5kZWZpbmVkKTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICBpZiAoYXJyKSB7XHJcbiAgICAgIGlmIChhcnIubGVuZ3RoICE9PSB0aGlzLmNoYW5uZWxDb3VudClcclxuICAgICAgICB0aHJvdyAgbmV3IEVycm9yKFwiTGV2ZWwgYXJyYXlzIG11c3QgYmUgZXF1YWwgdG8gY2hhbm5lbCBjb3VudCBcIiArIHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgICAgcmV0dXJuIGFycjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmNoYW5uZWxDb3VudClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1lcmdlKGxldmVsSW5mbzogTGV2ZWxJbmZvKSB7XHJcbiAgICBpZiAobGV2ZWxJbmZvID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxDb3VudCAhPT0gbGV2ZWxJbmZvLmNoYW5uZWxDb3VudCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGFubmVsIGNvdW50IG9mIGxldmVsIGluZm8gdG8gbWVyZ2UgbXVzdCBiZSBlcXVhbC4gKFwiICsgdGhpcy5jaGFubmVsQ291bnQgKyBcIiAhPSBcIiArIGxldmVsSW5mby5jaGFubmVsQ291bnQgKyBcIilcIik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGVuZEZyYW1lID0gdGhpcy5zdGFydEZyYW1lICsgdGhpcy5mcmFtZUxlbmd0aDtcclxuICAgIGxldCBtZXJnZUVuZEZyYW1lID0gbGV2ZWxJbmZvLnN0YXJ0RnJhbWUgKyBsZXZlbEluZm8uZnJhbWVMZW5ndGg7XHJcblxyXG4gICAgaWYgKGxldmVsSW5mby5zdGFydEZyYW1lIDwgdGhpcy5zdGFydEZyYW1lKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRGcmFtZSA9IGxldmVsSW5mby5zdGFydEZyYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXJnZUVuZEZyYW1lID4gZW5kRnJhbWUpIHtcclxuICAgICAgdGhpcy5mcmFtZUxlbmd0aCA9IG1lcmdlRW5kRnJhbWUgLSB0aGlzLnN0YXJ0RnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcblxyXG4gICAgICBpZiAobGV2ZWxJbmZvLm1pbkxpbkxldmVsc1tjaF0gPCB0aGlzLm1pbkxpbkxldmVsc1tjaF0pIHtcclxuICAgICAgICB0aGlzLm1pbkxpbkxldmVsc1tjaF0gPSBsZXZlbEluZm8ubWluTGluTGV2ZWxzW2NoXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobGV2ZWxJbmZvLm1heExpbkxldmVsc1tjaF0gPiB0aGlzLm1heExpbkxldmVsc1tjaF0pIHtcclxuICAgICAgICB0aGlzLm1heExpbkxldmVsc1tjaF0gPSBsZXZlbEluZm8ubWF4TGluTGV2ZWxzW2NoXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGV2ZWxzTGluKCk6IEFycmF5PG51bWJlcj4ge1xyXG4gICAgbGV0IGx2bHNMaW4gPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5jaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgICAgbHZsc0xpbltjaF0gPSBNYXRoLm1heChNYXRoLmFicyh0aGlzLm1pbkxpbkxldmVsc1tjaF0pLCBNYXRoLmFicyh0aGlzLm1heExpbkxldmVsc1tjaF0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsdmxzTGluO1xyXG4gIH1cclxuXHJcbiAgcG93ZXJMZXZlbHNEQigpOiBBcnJheTxudW1iZXI+IHtcclxuICAgIGxldCBsdmxzRGIgPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5jaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgICAgbHZsc0RiW2NoXSA9IERTUFV0aWxzLnRvUG93ZXJMZXZlbEluREIodGhpcy5sZXZlbHNMaW4oKVtjaF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGx2bHNEYjtcclxuICB9XHJcblxyXG4gIHBvd2VyTGV2ZWxEQigpOiBudW1iZXIge1xyXG4gICAgbGV0IHBMdmxzRGIgPSB0aGlzLnBvd2VyTGV2ZWxzREIoKTtcclxuICAgIHJldHVybiBNYXRoLm1heCguLi5wTHZsc0RiKTtcclxuICB9XHJcblxyXG4gIGNsb25lKCk6IExldmVsSW5mbyB7XHJcbiAgICByZXR1cm4gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCwgdGhpcy5zdGFydEZyYW1lLCB0aGlzLmZyYW1lTGVuZ3RoLCBBcnJheXMuY2xvbmVOdW1iZXJBcnJheSh0aGlzLm1pbkxpbkxldmVscyksXHJcbiAgICAgIEFycmF5cy5jbG9uZU51bWJlckFycmF5KHRoaXMubWF4TGluTGV2ZWxzKSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGV2ZWxJbmZvcyB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGJ1ZmZlckxldmVsSW5mb3M6IEFycmF5PExldmVsSW5mbz4sIHB1YmxpYyByZWFkb25seSBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pIHtcclxuICB9XHJcblxyXG4gIGZyYW1lc1BlckJ1ZmZlcigpOm51bWJlcntcclxuICAgIGlmKHRoaXMuYnVmZmVyTGV2ZWxJbmZvcy5sZW5ndGg+MCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlckxldmVsSW5mb3NbMF0uZnJhbWVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wZWFrTGV2ZWxJbmZvLmZyYW1lTGVuZ3RoL3RoaXMuYnVmZmVyTGV2ZWxJbmZvcy5sZW5ndGg7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMZXZlbExpc3RlbmVyIHtcclxuICBjaGFubmVsQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgdXBkYXRlKGxldmVsSW5mbzogTGV2ZWxJbmZvLCBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pOiB2b2lkO1xyXG5cclxuICBzdHJlYW1GaW5pc2hlZCgpOiB2b2lkO1xyXG5cclxuICByZXNldCgpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBlYWtMZXZlbExpc3RlbmVyIHtcclxuICB1cGRhdGUocGVha0xldmVsOm51bWJlcik6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGVha0xldmVsTGlzdGVuZXIge1xyXG5cclxuICB1cGRhdGUobGV2ZWxJbmZvOiBMZXZlbEluZm8sIHBlYWtMZXZlbEluZm86IExldmVsSW5mbyk6IHZvaWQ7XHJcblxyXG4gIHN0cmVhbUZpbmlzaGVkKCk6IHZvaWQ7XHJcblxyXG4gIHJlc2V0KCk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQZWFrTGV2ZWxJbnRlcmNlcHRvciBpbXBsZW1lbnRzIExldmVsTGlzdGVuZXJ7XHJcbiAgZ2V0IHBlYWtEYkx2bCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BlYWtEYkx2bDtcclxuICB9XHJcbiAgZ2V0IGNoYW5uZWxDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb3VudDtcclxuICB9XHJcblxyXG4gIHNldCBjaGFubmVsQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fY2hhbm5lbENvdW50ID0gdmFsdWU7XHJcbiAgICBpZih0aGlzLmxldmVsTGlzdGVuZXIpe1xyXG4gICAgICB0aGlzLmxldmVsTGlzdGVuZXIuY2hhbm5lbENvdW50PXZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hhbm5lbENvdW50OiBudW1iZXI9MDtcclxuXHJcbiAgcHJpdmF0ZSBfcGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG5cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGV2ZWxMaXN0ZW5lcj86TGV2ZWxMaXN0ZW5lcikge31cclxuXHJcbiAgdXBkYXRlKGxldmVsSW5mbzogTGV2ZWxJbmZvLCBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pOiB2b2lke1xyXG4gICAgbGV0IHBlYWtEQlZhbCA9IGxldmVsSW5mby5wb3dlckxldmVsREIoKTtcclxuICAgIGlmICh0aGlzLnBlYWtEYkx2bCA8IHBlYWtEQlZhbCkge1xyXG4gICAgICB0aGlzLl9wZWFrRGJMdmwgPSBwZWFrREJWYWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdHJlYW1GaW5pc2hlZCgpOiB2b2lke1xyXG4gICAgaWYodGhpcy5sZXZlbExpc3RlbmVyKXtcclxuICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLnN0cmVhbUZpbmlzaGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpOiB2b2lke1xyXG4gICAgdGhpcy5fcGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG4gICAgaWYodGhpcy5sZXZlbExpc3RlbmVyKXtcclxuICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5kZWNsYXJlIGZ1bmN0aW9uIHBvc3RNZXNzYWdlKG1lc3NhZ2U6IGFueSwgdHJhbnNmZXI/OiBBcnJheTxhbnk+KTogdm9pZDtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgTGV2ZWxNZWFzdXJlIHtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZXJVUkw6IHN0cmluZztcclxuICBwcml2YXRlIHdvcmtlcjogV29ya2VyfG51bGw9bnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLndvcmtlclVSTCA9IFdvcmtlckhlbHBlci5idWlsZFdvcmtlckJsb2JVUkwodGhpcy53b3JrZXJGdW5jdGlvbilcclxuICB9XHJcblxyXG4gIGNhbGNCdWZmZXJMZXZlbEluZm9zKGF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciwgYnVmZmVyVGltZUxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxMZXZlbEluZm9zPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGV2ZWxJbmZvcz4oKHJlc29sdmUpPT57XHJcbiAgICAgIGxldCBjaHMgPSBhdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICBsZXQgYnVmZmVyRnJhbWVMZW5ndGg9TWF0aC5yb3VuZChhdWRpb0J1ZmZlci5zYW1wbGVSYXRlKmJ1ZmZlclRpbWVMZW5ndGgpO1xyXG4gICAgICBsZXQgYnVmZmVycyA9IG5ldyBBcnJheTxhbnk+KGNocyk7XHJcbiAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICBsZXQgYWRDaD1hdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCk7XHJcbiAgICAgICAgbGV0IGFkQ2hDb3B5PW5ldyBGbG9hdDMyQXJyYXkoYWRDaC5sZW5ndGgpO1xyXG4gICAgICAgIGFkQ2hDb3B5LnNldChhZENoKTtcclxuICAgICAgICBidWZmZXJzW2NoXSA9IGFkQ2hDb3B5LmJ1ZmZlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHRoaXMud29ya2VyVVJMKTtcclxuICAgICAgdGhpcy53b3JrZXIub25tZXNzYWdlID0gKG1lKSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBsaW5MZXZlbEFycnM9bmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBsaW5MZXZlbEFycnNbY2hdID0gbmV3IEZsb2F0MzJBcnJheShtZS5kYXRhLmxpbkxldmVsQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGJ1ZmZlckNvdW50PU1hdGguY2VpbChtZS5kYXRhLmZyYW1lTGVuZ3RoL21lLmRhdGEuYnVmZmVyRnJhbWVMZW5ndGgpO1xyXG4gICAgICAgIGxldCBmcmFtZVBvcz0wO1xyXG4gICAgICAgIGxldCBidWZmZXJMZXZlbEluZm9zPW5ldyBBcnJheTxMZXZlbEluZm8+KCk7XHJcbiAgICAgICAgbGV0IHBlYWtMZXZlbEluZm89bmV3IExldmVsSW5mbyhjaHMpO1xyXG4gICAgICAgIGZvcihsZXQgYmk9MDtiaTxidWZmZXJDb3VudDtiaSsrKSB7XHJcbiAgICAgICAgICBsZXQgbWluTGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4oY2hzKTtcclxuICAgICAgICAgIGxldCBtYXhMZXZlbHMgPSBuZXcgQXJyYXk8bnVtYmVyPihjaHMpO1xyXG4gICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICBsZXQgbGluTHZsQXJyUG9zPWJpKjI7XHJcbiAgICAgICAgICAgIG1pbkxldmVsc1tjaF09bGluTGV2ZWxBcnJzW2NoXVtsaW5MdmxBcnJQb3NdO1xyXG4gICAgICAgICAgICBtYXhMZXZlbHNbY2hdPWxpbkxldmVsQXJyc1tjaF1bbGluTHZsQXJyUG9zKzFdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGJsaSA9IG5ldyBMZXZlbEluZm8oY2hzLCBmcmFtZVBvcywgbWUuZGF0YS5idWZmZXJGcmFtZUxlbmd0aCwgbWluTGV2ZWxzLCBtYXhMZXZlbHMpO1xyXG4gICAgICAgICAgYnVmZmVyTGV2ZWxJbmZvcy5wdXNoKGJsaSk7XHJcbiAgICAgICAgICBwZWFrTGV2ZWxJbmZvLm1lcmdlKGJsaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVybWluYXRlV29ya2VyKCk7XHJcbiAgICAgICAgcmVzb2x2ZShuZXcgTGV2ZWxJbmZvcyhidWZmZXJMZXZlbEluZm9zLCBwZWFrTGV2ZWxJbmZvKSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7YnVmZmVyRnJhbWVMZW5ndGg6YnVmZmVyRnJhbWVMZW5ndGgsYXVkaW9EYXRhOiBidWZmZXJzLCBjaHM6IGNoc30sIGJ1ZmZlcnMpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHRlcm1pbmF0ZVdvcmtlcigpIHtcclxuICAgIHRoaXMud29ya2VyPy50ZXJtaW5hdGUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBNZXRob2QgdXNlZCBhcyB3b3JrZXIgY29kZS5cclxuICAgKi9cclxuICB3b3JrZXJGdW5jdGlvbigpIHtcclxuICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKG1zZzpNZXNzYWdlRXZlbnQpIHtcclxuXHJcbiAgICAgIGxldCBjaHMgPSBtc2cuZGF0YS5jaHM7XHJcbiAgICAgIGxldCBidWZmZXJGcmFtZUxlbmd0aCA9IG1zZy5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoO1xyXG5cclxuICAgICAgbGV0IGF1ZGlvRGF0YSA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgIGxldCBsaW5MZXZlbHMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihjaHMpO1xyXG5cclxuICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgIGF1ZGlvRGF0YVtjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1zZy5kYXRhLmF1ZGlvRGF0YVtjaF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBmcmFtZUxlbmd0aCA9IGF1ZGlvRGF0YVswXS5sZW5ndGg7XHJcbiAgICAgIGxldCBidWZmZXJDb3VudD1NYXRoLmNlaWwoZnJhbWVMZW5ndGgvYnVmZmVyRnJhbWVMZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgbGluTGV2ZWxzW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQ291bnQqMik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGF1ZGlvRGF0YSAmJiBjaHMgPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgbGV0IGNoRGF0YSA9IGF1ZGlvRGF0YVtjaF07XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBmcmFtZUxlbmd0aDsgcysrKSB7XHJcbiAgICAgICAgICAgIGxldCBiaSA9IE1hdGguZmxvb3IocyAvIGJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICAgICAgbGV0IGx2bEFyclBvcyA9IGJpICogMjtcclxuICAgICAgICAgICAgLy9sZXQgYnMgPSBzICUgYnVmZmVyRnJhbWVMZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBjaFNhbXBsZT1jaERhdGFbc107XHJcbiAgICAgICAgICAgIGlmIChjaFNhbXBsZSA8IGxpbkxldmVsc1tjaF1bbHZsQXJyUG9zXSkge1xyXG4gICAgICAgICAgICAgIGxpbkxldmVsc1tjaF1bbHZsQXJyUG9zXSA9IGNoU2FtcGxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGx2bEFyclBvcysrO1xyXG4gICAgICAgICAgICBpZiAoY2hTYW1wbGUgPiBsaW5MZXZlbHNbY2hdW2x2bEFyclBvc10pIHtcclxuICAgICAgICAgICAgICBsaW5MZXZlbHNbY2hdW2x2bEFyclBvc10gPSBjaFNhbXBsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsaW5MZXZlbEJ1ZnMgPSBuZXcgQXJyYXk8YW55PihjaHMpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgIGxpbkxldmVsQnVmc1tjaF0gPSBsaW5MZXZlbHNbY2hdLmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe2J1ZmZlckZyYW1lTGVuZ3RoOmJ1ZmZlckZyYW1lTGVuZ3RoLGZyYW1lTGVuZ3RoOmZyYW1lTGVuZ3RoLGxpbkxldmVsQnVmZmVyczogbGluTGV2ZWxCdWZzfSwgbGluTGV2ZWxCdWZzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTdHJlYW1MZXZlbE1lYXN1cmUgaW1wbGVtZW50cyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSB7XHJcblxyXG4gIGN1cnJlbnRMZXZlbEluZm9zOiBMZXZlbEluZm98bnVsbD1udWxsO1xyXG4gIHBlYWtMZXZlbEluZm86IExldmVsSW5mb3xudWxsPW51bGw7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2VyVVJMOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB3b3JrZXI6IFdvcmtlcnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBjaGFubmVsQ291bnQ6IG51bWJlcj0wO1xyXG4gIHByaXZhdGUgYnVmZmVySW5kZXg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBmcmFtZUNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICBsZXZlbExpc3RlbmVyOiBMZXZlbExpc3RlbmVyfG51bGw9bnVsbDtcclxuICBwZWFrTGV2ZWxMaXN0ZW5lcjogKChwZWFrTHZsSW5EYjpudW1iZXIpPT52b2lkKXxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBwZWFrTGV2ZWxJbkRiOm51bWJlcj1NSU5fREJfTEVWRUw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy53b3JrZXJVUkwgPSBXb3JrZXJIZWxwZXIuYnVpbGRXb3JrZXJCbG9iVVJMKHRoaXMud29ya2VyRnVuY3Rpb24pXHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlciwgc2FtcGxlUmF0ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmNoYW5uZWxDb3VudCA9IGNoYW5uZWxzO1xyXG4gICAgdGhpcy5jdXJyZW50TGV2ZWxJbmZvcyA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgdGhpcy5wZWFrTGV2ZWxJbmZvID0gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICB0aGlzLndvcmtlciA9IG5ldyBXb3JrZXIodGhpcy53b3JrZXJVUkwpO1xyXG4gICAgdGhpcy53b3JrZXIub25tZXNzYWdlID0gKG1lKSA9PiB7XHJcbiAgICAgIGxldCBzdHJlYW1GaW5pc2hlZCA9IG1lLmRhdGEuc3RyZWFtRmluaXNoZWQ7XHJcbiAgICAgIGlmIChzdHJlYW1GaW5pc2hlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxldmVsTGlzdGVuZXIpIHtcclxuICAgICAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5zdHJlYW1GaW5pc2hlZCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBsZXQgbWluTGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgICAgIGxldCBtYXhMZXZlbHMgPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgICAgICBsZXQgZmxzID0gbmV3IEZsb2F0MzJBcnJheShtZS5kYXRhLmxpbkxldmVsQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgbWluTGV2ZWxzW2NoXSA9IGZsc1swXTtcclxuICAgICAgICAgIG1heExldmVsc1tjaF0gPSBmbHNbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBiaSA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQsIHRoaXMuZnJhbWVDb3VudCwgbWUuZGF0YS5mcmFlbUxlbmd0aCwgbWluTGV2ZWxzLCBtYXhMZXZlbHMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGV2ZWxzKGJpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG5leHRTdHJlYW0oKSB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0KCkge1xyXG4gICAgdGhpcy5jdXJyZW50TGV2ZWxJbmZvcyA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgdGhpcy5wZWFrTGV2ZWxJbmZvID0gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICBpZiAodGhpcy5sZXZlbExpc3RlbmVyKSB7XHJcbiAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5yZXNldCgpO1xyXG4gICAgICB0aGlzLmxldmVsTGlzdGVuZXIuY2hhbm5lbENvdW50ID0gdGhpcy5jaGFubmVsQ291bnQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wZWFrTGV2ZWxMaXN0ZW5lcikge1xyXG4gICAgICB0aGlzLnBlYWtMZXZlbEluRGI9TUlOX0RCX0xFVkVMO1xyXG4gICAgICB0aGlzLnBlYWtMZXZlbExpc3RlbmVyKHRoaXMucGVha0xldmVsSW5EYik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3cml0ZShidWZmZXJEYXRhOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyIHtcclxuICAgIGxldCBidWZBcnJDb3BpZXMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihidWZmZXJEYXRhLmxlbmd0aCk7XHJcbiAgICBsZXQgYnVmZmVycyA9IG5ldyBBcnJheTxhbnk+KGJ1ZmZlckRhdGEubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBidWZmZXJEYXRhLmxlbmd0aDsgY2grKykge1xyXG4gICAgICBidWZBcnJDb3BpZXNbY2hdID0gYnVmZmVyRGF0YVtjaF0uc2xpY2UoKTtcclxuICAgICAgYnVmZmVyc1tjaF0gPSBidWZBcnJDb3BpZXNbY2hdLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRoaXMud29ya2VyPy5wb3N0TWVzc2FnZSh7XHJcbiAgICAgIHN0cmVhbUZpbmlzaGVkOiBmYWxzZSxcclxuICAgICAgYXVkaW9EYXRhOiBidWZmZXJzLFxyXG4gICAgICBjaHM6IHRoaXMuY2hhbm5lbENvdW50LFxyXG4gICAgICBidWZmZXJJbmRleDogdGhpcy5idWZmZXJJbmRleFxyXG4gICAgfSwgYnVmZmVycyk7XHJcbiAgICB0aGlzLmJ1ZmZlckluZGV4Kys7XHJcbiAgICByZXR1cm4gYnVmQXJyQ29waWVzWzBdLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGZsdXNoKCkge1xyXG4gICAgdGhpcy53b3JrZXI/LnBvc3RNZXNzYWdlKHtzdHJlYW1GaW5pc2hlZDogdHJ1ZX0pO1xyXG5cclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgICB0aGlzLndvcmtlcj8udGVybWluYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBNZXRob2QgdXNlZCBhcyB3b3JrZXIgY29kZS5cclxuICAgKi9cclxuICB3b3JrZXJGdW5jdGlvbigpIHtcclxuICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKG1zZzpNZXNzYWdlRXZlbnQpIHtcclxuICAgICAgbGV0IHN0cmVhbUZpbmlzaGVkID0gbXNnLmRhdGEuc3RyZWFtRmluaXNoZWQ7XHJcbiAgICAgIGlmIChzdHJlYW1GaW5pc2hlZCkge1xyXG4gICAgICAgIHBvc3RNZXNzYWdlKHtzdHJlYW1GaW5pc2hlZDogdHJ1ZX0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjaHMgPSBtc2cuZGF0YS5jaHM7XHJcbiAgICAgICAgbGV0IGZyYW1lTGVuZ3RoID0gbnVsbDtcclxuICAgICAgICBsZXQgYXVkaW9EYXRhID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBsZXQgbGluTGV2ZWxzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBsaW5MZXZlbHNbY2hdID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcclxuICAgICAgICAgIGF1ZGlvRGF0YVtjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1zZy5kYXRhLmF1ZGlvRGF0YVtjaF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGF1ZGlvRGF0YSkge1xyXG4gICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICBsZXQgY2hEYXRhID0gYXVkaW9EYXRhW2NoXTtcclxuICAgICAgICAgICAgaWYgKGZyYW1lTGVuZ3RoID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgZnJhbWVMZW5ndGggPSBjaERhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgZnJhbWVMZW5ndGg7IHMrKykge1xyXG4gICAgICAgICAgICAgIGxldCBjaFNhbXBsZT1jaERhdGFbc107XHJcbiAgICAgICAgICAgICAgaWYgKGNoU2FtcGxlIDwgbGluTGV2ZWxzW2NoXVswXSkge1xyXG4gICAgICAgICAgICAgICAgbGluTGV2ZWxzW2NoXVswXSA9IGNoU2FtcGxlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY2hTYW1wbGUgPiBsaW5MZXZlbHNbY2hdWzFdKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5MZXZlbHNbY2hdWzFdID0gY2hTYW1wbGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBsaW5MZXZlbEJ1ZnMgPSBuZXcgQXJyYXk8YW55PihjaHMpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgIGxpbkxldmVsQnVmc1tjaF0gPSBsaW5MZXZlbHNbY2hdLmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe3N0cmVhbUZpbmlzaGVkOiBmYWxzZSwgZnJhbWVMZW5ndGg6IGZyYW1lTGVuZ3RoLCBsaW5MZXZlbEJ1ZmZlcnM6IGxpbkxldmVsQnVmc30sIGxpbkxldmVsQnVmcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUxldmVscyhidWZmZXJMZXZlbEluZm86IExldmVsSW5mbykge1xyXG5cclxuICAgIHRoaXMuY3VycmVudExldmVsSW5mb3MgPSBidWZmZXJMZXZlbEluZm87XHJcbiAgICBpZih0aGlzLnBlYWtMZXZlbEluZm8pIHtcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbmZvLm1lcmdlKGJ1ZmZlckxldmVsSW5mbyk7XHJcbiAgICAgIGlmICh0aGlzLmxldmVsTGlzdGVuZXIpIHtcclxuICAgICAgICB0aGlzLmxldmVsTGlzdGVuZXIudXBkYXRlKHRoaXMuY3VycmVudExldmVsSW5mb3MsIHRoaXMucGVha0xldmVsSW5mby5jbG9uZSgpKTtcclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLnBlYWtMZXZlbExpc3RlbmVyKXtcclxuICAgICAgICBsZXQgcGVha0RCVmFsID0gYnVmZmVyTGV2ZWxJbmZvLnBvd2VyTGV2ZWxEQigpO1xyXG4gICAgICAgIGlmICh0aGlzLnBlYWtMZXZlbEluRGIgPCBwZWFrREJWYWwpIHtcclxuICAgICAgICAgIHRoaXMucGVha0xldmVsSW5EYiA9IHBlYWtEQlZhbDtcclxuICAgICAgICAgIC8vIHRoZSBldmVudCBjb21lcyBmcm9tIG91dHNpZGUgb2YgYW4gQW5ndWxhciB6b25lXHJcbiAgICAgICAgICB0aGlzLnBlYWtMZXZlbExpc3RlbmVyKHRoaXMucGVha0xldmVsSW5EYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIHRoaXMud29ya2VyPy50ZXJtaW5hdGUoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV2ZWxfbWVhc3VyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9kc3AvbGV2ZWxfbWVhc3VyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUd2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFJbEMsTUFBTSxPQUFPLFNBQVM7SUFLcEIsWUFBNEIsWUFBb0IsRUFDN0IsYUFBcUIsQ0FBQyxFQUN0QixjQUFzQixDQUFDLEVBQzlCLFlBQTRCLEVBQzVCLFlBQTRCO1FBSlosaUJBQVksR0FBWixZQUFZLENBQVE7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUd4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEdBQThCO1FBQ3JELElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUNsQyxNQUFPLElBQUksS0FBSyxDQUFDLDhDQUE4QyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RixPQUFP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QUksQ0FBQyxhQUFhLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQy9FO1lBQ0QsSUFBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUM7Z0JBQ3hCLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7b0JBQy9CLGtEQUFrRDtvQkFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDNUM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUdELElBQUk7UUFDRixJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RFNQVXRpbHN9IGZyb20gXCIuLi8uLi9kc3AvdXRpbHNcIjtcclxuaW1wb3J0IHtTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbX0gZnJvbSBcIi4uL2lvL3N0cmVhbVwiO1xyXG5pbXBvcnQge0FycmF5cywgV29ya2VySGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtBdWRpb0RhdGFIb2xkZXJ9IGZyb20gXCIuLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1JTl9EQl9MRVZFTCA9IC00MC4wO1xyXG5cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgTGV2ZWxJbmZvIHtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluTGluTGV2ZWxzOiBBcnJheTxudW1iZXI+O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX21heExpbkxldmVsczogQXJyYXk8bnVtYmVyPjtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNoYW5uZWxDb3VudDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBzdGFydEZyYW1lOiBudW1iZXIgPSAwLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBmcmFtZUxlbmd0aDogbnVtYmVyID0gMCxcclxuICAgICAgICAgICAgICBtaW5MaW5MZXZlbHM/OiBBcnJheTxudW1iZXI+LFxyXG4gICAgICAgICAgICAgIG1heExpbkxldmVscz86IEFycmF5PG51bWJlcj4pIHtcclxuICAgIHRoaXMuX21pbkxpbkxldmVscyA9IHRoaXMuY2hlY2tPckluaXRBcnJheShtaW5MaW5MZXZlbHMpO1xyXG4gICAgdGhpcy5fbWF4TGluTGV2ZWxzID0gdGhpcy5jaGVja09ySW5pdEFycmF5KG1heExpbkxldmVscyk7XHJcbiAgfVxyXG5cclxuICBnZXQgbWluTGluTGV2ZWxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkxpbkxldmVscztcclxuICB9XHJcblxyXG4gIGdldCBtYXhMaW5MZXZlbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF4TGluTGV2ZWxzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja09ySW5pdEFycmF5KGFycjogQXJyYXk8bnVtYmVyPiB8IHVuZGVmaW5lZCk6IEFycmF5PG51bWJlcj4ge1xyXG4gICAgaWYgKGFycikge1xyXG4gICAgICBpZiAoYXJyLmxlbmd0aCAhPT0gdGhpcy5jaGFubmVsQ291bnQpXHJcbiAgICAgICAgdGhyb3cgIG5ldyBFcnJvcihcIkxldmVsIGFycmF5cyBtdXN0IGJlIGVxdWFsIHRvIGNoYW5uZWwgY291bnQgXCIgKyB0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZXJnZShsZXZlbEluZm86IExldmVsSW5mbykge1xyXG4gICAgaWYgKGxldmVsSW5mbyA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFubmVsQ291bnQgIT09IGxldmVsSW5mby5jaGFubmVsQ291bnQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hhbm5lbCBjb3VudCBvZiBsZXZlbCBpbmZvIHRvIG1lcmdlIG11c3QgYmUgZXF1YWwuIChcIiArIHRoaXMuY2hhbm5lbENvdW50ICsgXCIgIT0gXCIgKyBsZXZlbEluZm8uY2hhbm5lbENvdW50ICsgXCIpXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBlbmRGcmFtZSA9IHRoaXMuc3RhcnRGcmFtZSArIHRoaXMuZnJhbWVMZW5ndGg7XHJcbiAgICBsZXQgbWVyZ2VFbmRGcmFtZSA9IGxldmVsSW5mby5zdGFydEZyYW1lICsgbGV2ZWxJbmZvLmZyYW1lTGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZXZlbEluZm8uc3RhcnRGcmFtZSA8IHRoaXMuc3RhcnRGcmFtZSkge1xyXG4gICAgICB0aGlzLnN0YXJ0RnJhbWUgPSBsZXZlbEluZm8uc3RhcnRGcmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWVyZ2VFbmRGcmFtZSA+IGVuZEZyYW1lKSB7XHJcbiAgICAgIHRoaXMuZnJhbWVMZW5ndGggPSBtZXJnZUVuZEZyYW1lIC0gdGhpcy5zdGFydEZyYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxDb3VudDsgY2grKykge1xyXG5cclxuICAgICAgaWYgKGxldmVsSW5mby5taW5MaW5MZXZlbHNbY2hdIDwgdGhpcy5taW5MaW5MZXZlbHNbY2hdKSB7XHJcbiAgICAgICAgdGhpcy5taW5MaW5MZXZlbHNbY2hdID0gbGV2ZWxJbmZvLm1pbkxpbkxldmVsc1tjaF07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGxldmVsSW5mby5tYXhMaW5MZXZlbHNbY2hdID4gdGhpcy5tYXhMaW5MZXZlbHNbY2hdKSB7XHJcbiAgICAgICAgdGhpcy5tYXhMaW5MZXZlbHNbY2hdID0gbGV2ZWxJbmZvLm1heExpbkxldmVsc1tjaF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxldmVsc0xpbigpOiBBcnJheTxudW1iZXI+IHtcclxuICAgIGxldCBsdmxzTGluID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgIGx2bHNMaW5bY2hdID0gTWF0aC5tYXgoTWF0aC5hYnModGhpcy5taW5MaW5MZXZlbHNbY2hdKSwgTWF0aC5hYnModGhpcy5tYXhMaW5MZXZlbHNbY2hdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbHZsc0xpbjtcclxuICB9XHJcblxyXG4gIHBvd2VyTGV2ZWxzREIoKTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICBsZXQgbHZsc0RiID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgIGx2bHNEYltjaF0gPSBEU1BVdGlscy50b1Bvd2VyTGV2ZWxJbkRCKHRoaXMubGV2ZWxzTGluKClbY2hdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsdmxzRGI7XHJcbiAgfVxyXG5cclxuICBwb3dlckxldmVsREIoKTogbnVtYmVyIHtcclxuICAgIGxldCBwTHZsc0RiID0gdGhpcy5wb3dlckxldmVsc0RCKCk7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4ucEx2bHNEYik7XHJcbiAgfVxyXG5cclxuICBjbG9uZSgpOiBMZXZlbEluZm8ge1xyXG4gICAgcmV0dXJuIG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQsIHRoaXMuc3RhcnRGcmFtZSwgdGhpcy5mcmFtZUxlbmd0aCwgQXJyYXlzLmNsb25lTnVtYmVyQXJyYXkodGhpcy5taW5MaW5MZXZlbHMpLFxyXG4gICAgICBBcnJheXMuY2xvbmVOdW1iZXJBcnJheSh0aGlzLm1heExpbkxldmVscykpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExldmVsSW5mb3Mge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBidWZmZXJMZXZlbEluZm9zOiBBcnJheTxMZXZlbEluZm8+LCBwdWJsaWMgcmVhZG9ubHkgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvKSB7XHJcbiAgfVxyXG5cclxuICBmcmFtZXNQZXJCdWZmZXIoKTpudW1iZXJ7XHJcbiAgICBpZih0aGlzLmJ1ZmZlckxldmVsSW5mb3MubGVuZ3RoPjApe1xyXG4gICAgICByZXR1cm4gdGhpcy5idWZmZXJMZXZlbEluZm9zWzBdLmZyYW1lTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucGVha0xldmVsSW5mby5mcmFtZUxlbmd0aC90aGlzLmJ1ZmZlckxldmVsSW5mb3MubGVuZ3RoO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxMaXN0ZW5lciB7XHJcbiAgY2hhbm5lbENvdW50OiBudW1iZXI7XHJcblxyXG4gIHVwZGF0ZShsZXZlbEluZm86IExldmVsSW5mbywgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvKTogdm9pZDtcclxuXHJcbiAgc3RyZWFtRmluaXNoZWQoKTogdm9pZDtcclxuXHJcbiAgcmVzZXQoKTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQZWFrTGV2ZWxMaXN0ZW5lciB7XHJcbiAgdXBkYXRlKHBlYWtMZXZlbDpudW1iZXIpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBlYWtMZXZlbExpc3RlbmVyIHtcclxuXHJcbiAgdXBkYXRlKGxldmVsSW5mbzogTGV2ZWxJbmZvLCBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pOiB2b2lkO1xyXG5cclxuICBzdHJlYW1GaW5pc2hlZCgpOiB2b2lkO1xyXG5cclxuICByZXNldCgpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUGVha0xldmVsSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBMZXZlbExpc3RlbmVye1xyXG4gIGdldCBwZWFrRGJMdmwoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wZWFrRGJMdmw7XHJcbiAgfVxyXG4gIGdldCBjaGFubmVsQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ291bnQ7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hhbm5lbENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NoYW5uZWxDb3VudCA9IHZhbHVlO1xyXG4gICAgaWYodGhpcy5sZXZlbExpc3RlbmVyKXtcclxuICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLmNoYW5uZWxDb3VudD12YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoYW5uZWxDb3VudDogbnVtYmVyPTA7XHJcblxyXG4gIHByaXZhdGUgX3BlYWtEYkx2bCA9IE1JTl9EQl9MRVZFTDtcclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxldmVsTGlzdGVuZXI/OkxldmVsTGlzdGVuZXIpIHt9XHJcblxyXG4gIHVwZGF0ZShsZXZlbEluZm86IExldmVsSW5mbywgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvKTogdm9pZHtcclxuICAgIGxldCBwZWFrREJWYWwgPSBsZXZlbEluZm8ucG93ZXJMZXZlbERCKCk7XHJcbiAgICBpZiAodGhpcy5wZWFrRGJMdmwgPCBwZWFrREJWYWwpIHtcclxuICAgICAgdGhpcy5fcGVha0RiTHZsID0gcGVha0RCVmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RyZWFtRmluaXNoZWQoKTogdm9pZHtcclxuICAgIGlmKHRoaXMubGV2ZWxMaXN0ZW5lcil7XHJcbiAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5zdHJlYW1GaW5pc2hlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKTogdm9pZHtcclxuICAgIHRoaXMuX3BlYWtEYkx2bCA9IE1JTl9EQl9MRVZFTDtcclxuICAgIGlmKHRoaXMubGV2ZWxMaXN0ZW5lcil7XHJcbiAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5yZXNldCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZGVjbGFyZSBmdW5jdGlvbiBwb3N0TWVzc2FnZShtZXNzYWdlOiBhbnksIHRyYW5zZmVyPzogQXJyYXk8YW55Pik6IHZvaWQ7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIExldmVsTWVhc3VyZSB7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2VyVVJMOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB3b3JrZXI6IFdvcmtlcnxudWxsPW51bGw7XHJcbiAgLy9wcml2YXRlIGJ1ZmZlckxldmVsSW5mb3M9bmV3IEFycmF5PExldmVsSW5mbz4oKTtcclxuICAvL3ByaXZhdGUgcGVha0xldmVsSW5mbyE6TGV2ZWxJbmZvO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMud29ya2VyVVJMID0gV29ya2VySGVscGVyLmJ1aWxkV29ya2VyQmxvYlVSTCh0aGlzLndvcmtlckZ1bmN0aW9uKVxyXG4gIH1cclxuXHJcbiAgY2FsY0J1ZmZlckxldmVsSW5mb3MoYXVkaW9EYXRhSG9sZGVyOkF1ZGlvRGF0YUhvbGRlciwgYnVmZmVyVGltZUxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxMZXZlbEluZm9zPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGV2ZWxJbmZvcz4oKHJlc29sdmUpPT57XHJcbiAgICAgIGxldCBjaHMgPSBhdWRpb0RhdGFIb2xkZXIubnVtYmVyT2ZDaGFubmVscztcclxuICAgICAgbGV0IGJ1ZmZlckZyYW1lTGVuZ3RoPU1hdGgucm91bmQoYXVkaW9EYXRhSG9sZGVyLnNhbXBsZVJhdGUqYnVmZmVyVGltZUxlbmd0aCk7XHJcbiAgICAgIGxldCBhaXM9YXVkaW9EYXRhSG9sZGVyLmF1ZGlvSW5wdXRTdHJlYW0oKTtcclxuICAgICAgbGV0IGF1ZGlvQnVmZmVycyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgIGxldCB0ckJ1ZmZlcnM9bmV3IEFycmF5PGFueT4oY2hzKTtcclxuICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgIGF1ZGlvQnVmZmVyc1tjaF09bmV3IEZsb2F0MzJBcnJheShidWZmZXJGcmFtZUxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGJ1ZmZlckxldmVsSW5mb3M9bmV3IEFycmF5PExldmVsSW5mbz4oKTtcclxuICAgICAgbGV0IHBlYWtMZXZlbEluZm89bmV3IExldmVsSW5mbyhjaHMpO1xyXG5cclxuXHJcbiAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcih0aGlzLndvcmtlclVSTCk7XHJcbiAgICAgIHRoaXMud29ya2VyLm9ubWVzc2FnZSA9IChtZSkgPT4ge1xyXG5cclxuICAgICAgICBpZihtZS5kYXRhLmxpbkxldmVsQnVmZmVycykge1xyXG4gICAgICAgICAgbGV0IGxpbkxldmVsQXJycyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgIGxpbkxldmVsQXJyc1tjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1lLmRhdGEubGluTGV2ZWxCdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IGJ1ZmZlckNvdW50ID0gTWF0aC5jZWlsKG1lLmRhdGEuZnJhbWVMZW5ndGggLyBtZS5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICAgIGxldCBmcmFtZVBvcyA9IDA7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgYmkgPSAwOyBiaSA8IGJ1ZmZlckNvdW50OyBiaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBtaW5MZXZlbHMgPSBuZXcgQXJyYXk8bnVtYmVyPihjaHMpO1xyXG4gICAgICAgICAgICBsZXQgbWF4TGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4oY2hzKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgIGxldCBsaW5MdmxBcnJQb3MgPSBiaSAqIDI7XHJcbiAgICAgICAgICAgICAgbWluTGV2ZWxzW2NoXSA9IGxpbkxldmVsQXJyc1tjaF1bbGluTHZsQXJyUG9zXTtcclxuICAgICAgICAgICAgICBtYXhMZXZlbHNbY2hdID0gbGluTGV2ZWxBcnJzW2NoXVtsaW5MdmxBcnJQb3MgKyAxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgYmxpID0gbmV3IExldmVsSW5mbyhjaHMsIGZyYW1lUG9zLCBtZS5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoLCBtaW5MZXZlbHMsIG1heExldmVscyk7XHJcbiAgICAgICAgICAgIGJ1ZmZlckxldmVsSW5mb3MucHVzaChibGkpO1xyXG4gICAgICAgICAgICBwZWFrTGV2ZWxJbmZvLm1lcmdlKGJsaSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihtZS5kYXRhLmVvZD09PXRydWUpIHtcclxuICAgICAgICAgIC8vIGVuZCBvZiBkYXRhLCB0ZXJtaW5hdGUgd29ya2VyIGFuZCByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICB0aGlzLnRlcm1pbmF0ZVdvcmtlcigpO1xyXG4gICAgICAgICAgcmVzb2x2ZShuZXcgTGV2ZWxJbmZvcyhidWZmZXJMZXZlbEluZm9zLCBwZWFrTGV2ZWxJbmZvKSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBsZXQgcmVhZD1haXMucmVhZChhdWRpb0J1ZmZlcnMpO1xyXG4gICAgICAgICAgZm9yKGxldCBjaD0wO2NoPGNocztjaCsrKXtcclxuICAgICAgICAgICAgbGV0IGNvcHk9bmV3IEZsb2F0MzJBcnJheShhdWRpb0J1ZmZlcnNbY2hdKTtcclxuICAgICAgICAgICAgdHJCdWZmZXJzW2NoXT1jb3B5LmJ1ZmZlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMud29ya2VyPy5wb3N0TWVzc2FnZSh7YnVmZmVyRnJhbWVMZW5ndGg6IGJ1ZmZlckZyYW1lTGVuZ3RoLCBhdWRpb0RhdGE6IHRyQnVmZmVycywgY2hzOiBjaHMsbGVuOnJlYWR9LCB0ckJ1ZmZlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGxldCByZWFkPWFpcy5yZWFkKGF1ZGlvQnVmZmVycyk7XHJcbiAgICAgIGZvcihsZXQgY2g9MDtjaDxjaHM7Y2grKyl7XHJcbiAgICAgICAgbGV0IGNvcHk9bmV3IEZsb2F0MzJBcnJheShhdWRpb0J1ZmZlcnNbY2hdKTtcclxuICAgICAgICB0ckJ1ZmZlcnNbY2hdPWNvcHkuYnVmZmVyO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMud29ya2VyPy5wb3N0TWVzc2FnZSh7YnVmZmVyRnJhbWVMZW5ndGg6IGJ1ZmZlckZyYW1lTGVuZ3RoLCBhdWRpb0RhdGE6IHRyQnVmZmVycywgY2hzOiBjaHMsbGVuOnJlYWR9LCB0ckJ1ZmZlcnMpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgdGVybWluYXRlV29ya2VyKCkge1xyXG4gICAgdGhpcy53b3JrZXI/LnRlcm1pbmF0ZSgpO1xyXG5cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIE1ldGhvZCB1c2VkIGFzIHdvcmtlciBjb2RlLlxyXG4gICAqL1xyXG4gIHdvcmtlckZ1bmN0aW9uKCkge1xyXG4gICAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAobXNnOk1lc3NhZ2VFdmVudCkge1xyXG5cclxuICAgICAgbGV0IGxlbj1tc2cuZGF0YS5sZW47XHJcbiAgICAgIGxldCBidWZmZXJGcmFtZUxlbmd0aCA9IG1zZy5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoO1xyXG4gICAgICBpZihsZW49PS0xKXtcclxuICAgICAgICAvLyBzdGFydFxyXG4gICAgICAgIHBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgIGVvZDpmYWxzZSxcclxuICAgICAgICAgIGJ1ZmZlckZyYW1lTGVuZ3RoOiBidWZmZXJGcmFtZUxlbmd0aCxcclxuICAgICAgICAgIGZyYW1lTGVuZ3RoOiBsZW5cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYobGVuPT0wKSB7XHJcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgZW9kOnRydWUsXHJcbiAgICAgICAgICBidWZmZXJGcmFtZUxlbmd0aDogYnVmZmVyRnJhbWVMZW5ndGgsXHJcbiAgICAgICAgICBmcmFtZUxlbmd0aDogbGVuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGxldCBjaHMgPSBtc2cuZGF0YS5jaHM7XHJcblxyXG4gICAgICAgIGxldCBhdWRpb0RhdGEgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihjaHMpO1xyXG4gICAgICAgIGxldCBsaW5MZXZlbHMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihjaHMpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBhdWRpb0RhdGFbY2hdID0gbmV3IEZsb2F0MzJBcnJheShtc2cuZGF0YS5hdWRpb0RhdGFbY2hdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vbGV0IGZyYW1lTGVuZ3RoID0gYXVkaW9EYXRhWzBdLmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGJ1ZmZlckNvdW50ID0gTWF0aC5jZWlsKGxlbiAvIGJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBsaW5MZXZlbHNbY2hdID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJDb3VudCAqIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXVkaW9EYXRhICYmIGNocyA+IDApIHtcclxuICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgbGV0IGNoRGF0YSA9IGF1ZGlvRGF0YVtjaF07XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGxlbjsgcysrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGJpID0gTWF0aC5mbG9vcihzIC8gYnVmZmVyRnJhbWVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgIGxldCBsdmxBcnJQb3MgPSBiaSAqIDI7XHJcbiAgICAgICAgICAgICAgLy9sZXQgYnMgPSBzICUgYnVmZmVyRnJhbWVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgbGV0IGNoU2FtcGxlID0gY2hEYXRhW3NdO1xyXG4gICAgICAgICAgICAgIGlmIChjaFNhbXBsZSA8IGxpbkxldmVsc1tjaF1bbHZsQXJyUG9zXSkge1xyXG4gICAgICAgICAgICAgICAgbGluTGV2ZWxzW2NoXVtsdmxBcnJQb3NdID0gY2hTYW1wbGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGx2bEFyclBvcysrO1xyXG4gICAgICAgICAgICAgIGlmIChjaFNhbXBsZSA+IGxpbkxldmVsc1tjaF1bbHZsQXJyUG9zXSkge1xyXG4gICAgICAgICAgICAgICAgbGluTGV2ZWxzW2NoXVtsdmxBcnJQb3NdID0gY2hTYW1wbGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBsaW5MZXZlbEJ1ZnMgPSBuZXcgQXJyYXk8YW55PihjaHMpO1xyXG4gICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICBsaW5MZXZlbEJ1ZnNbY2hdID0gbGluTGV2ZWxzW2NoXS5idWZmZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgIGVvZDpmYWxzZSxcclxuICAgICAgICAgICAgYnVmZmVyRnJhbWVMZW5ndGg6IGJ1ZmZlckZyYW1lTGVuZ3RoLFxyXG4gICAgICAgICAgICBmcmFtZUxlbmd0aDogbGVuLFxyXG4gICAgICAgICAgICBsaW5MZXZlbEJ1ZmZlcnM6IGxpbkxldmVsQnVmc1xyXG4gICAgICAgICAgfSwgbGluTGV2ZWxCdWZzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU3RyZWFtTGV2ZWxNZWFzdXJlIGltcGxlbWVudHMgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0ge1xyXG5cclxuICBjdXJyZW50TGV2ZWxJbmZvczogTGV2ZWxJbmZvfG51bGw9bnVsbDtcclxuICBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm98bnVsbD1udWxsO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtlclVSTDogc3RyaW5nO1xyXG4gIHByaXZhdGUgd29ya2VyOiBXb3JrZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgY2hhbm5lbENvdW50OiBudW1iZXI9MDtcclxuICBwcml2YXRlIGJ1ZmZlckluZGV4OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgZnJhbWVDb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgbGV2ZWxMaXN0ZW5lcjogTGV2ZWxMaXN0ZW5lcnxudWxsPW51bGw7XHJcbiAgcGVha0xldmVsTGlzdGVuZXI6ICgocGVha0x2bEluRGI6bnVtYmVyKT0+dm9pZCl8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcGVha0xldmVsSW5EYjpudW1iZXI9TUlOX0RCX0xFVkVMO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMud29ya2VyVVJMID0gV29ya2VySGVscGVyLmJ1aWxkV29ya2VyQmxvYlVSTCh0aGlzLndvcmtlckZ1bmN0aW9uKVxyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNoYW5uZWxzOiBudW1iZXIsIHNhbXBsZVJhdGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5jaGFubmVsQ291bnQgPSBjaGFubmVscztcclxuICAgIHRoaXMuY3VycmVudExldmVsSW5mb3MgPSBuZXcgTGV2ZWxJbmZvKHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgIHRoaXMucGVha0xldmVsSW5mbyA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHRoaXMud29ya2VyVVJMKTtcclxuICAgIHRoaXMud29ya2VyLm9ubWVzc2FnZSA9IChtZSkgPT4ge1xyXG4gICAgICBsZXQgc3RyZWFtRmluaXNoZWQgPSBtZS5kYXRhLnN0cmVhbUZpbmlzaGVkO1xyXG4gICAgICBpZiAoc3RyZWFtRmluaXNoZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5sZXZlbExpc3RlbmVyKSB7XHJcbiAgICAgICAgICB0aGlzLmxldmVsTGlzdGVuZXIuc3RyZWFtRmluaXNoZWQoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgbGV0IG1pbkxldmVscyA9IG5ldyBBcnJheTxudW1iZXI+KHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgICAgICBsZXQgbWF4TGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxDb3VudDsgY2grKykge1xyXG4gICAgICAgICAgbGV0IGZscyA9IG5ldyBGbG9hdDMyQXJyYXkobWUuZGF0YS5saW5MZXZlbEJ1ZmZlcnNbY2hdKTtcclxuICAgICAgICAgIG1pbkxldmVsc1tjaF0gPSBmbHNbMF07XHJcbiAgICAgICAgICBtYXhMZXZlbHNbY2hdID0gZmxzWzFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYmkgPSBuZXcgTGV2ZWxJbmZvKHRoaXMuY2hhbm5lbENvdW50LCB0aGlzLmZyYW1lQ291bnQsIG1lLmRhdGEuZnJhZW1MZW5ndGgsIG1pbkxldmVscywgbWF4TGV2ZWxzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxldmVscyhiaSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBuZXh0U3RyZWFtKCkge1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldCgpIHtcclxuICAgIHRoaXMuY3VycmVudExldmVsSW5mb3MgPSBuZXcgTGV2ZWxJbmZvKHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgIHRoaXMucGVha0xldmVsSW5mbyA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgaWYgKHRoaXMubGV2ZWxMaXN0ZW5lcikge1xyXG4gICAgICB0aGlzLmxldmVsTGlzdGVuZXIucmVzZXQoKTtcclxuICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLmNoYW5uZWxDb3VudCA9IHRoaXMuY2hhbm5lbENvdW50O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucGVha0xldmVsTGlzdGVuZXIpIHtcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbkRiPU1JTl9EQl9MRVZFTDtcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxMaXN0ZW5lcih0aGlzLnBlYWtMZXZlbEluRGIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGUoYnVmZmVyRGF0YTogQXJyYXk8RmxvYXQzMkFycmF5Pik6IG51bWJlciB7XHJcbiAgICBsZXQgYnVmQXJyQ29waWVzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oYnVmZmVyRGF0YS5sZW5ndGgpO1xyXG4gICAgbGV0IGJ1ZmZlcnMgPSBuZXcgQXJyYXk8YW55PihidWZmZXJEYXRhLmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgYnVmZmVyRGF0YS5sZW5ndGg7IGNoKyspIHtcclxuICAgICAgYnVmQXJyQ29waWVzW2NoXSA9IGJ1ZmZlckRhdGFbY2hdLnNsaWNlKCk7XHJcbiAgICAgIGJ1ZmZlcnNbY2hdID0gYnVmQXJyQ29waWVzW2NoXS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLndvcmtlcj8ucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICBzdHJlYW1GaW5pc2hlZDogZmFsc2UsXHJcbiAgICAgIGF1ZGlvRGF0YTogYnVmZmVycyxcclxuICAgICAgY2hzOiB0aGlzLmNoYW5uZWxDb3VudCxcclxuICAgICAgYnVmZmVySW5kZXg6IHRoaXMuYnVmZmVySW5kZXhcclxuICAgIH0sIGJ1ZmZlcnMpO1xyXG4gICAgdGhpcy5idWZmZXJJbmRleCsrO1xyXG4gICAgcmV0dXJuIGJ1ZkFyckNvcGllc1swXS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBmbHVzaCgpIHtcclxuICAgIHRoaXMud29ya2VyPy5wb3N0TWVzc2FnZSh7c3RyZWFtRmluaXNoZWQ6IHRydWV9KTtcclxuXHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgICAgdGhpcy53b3JrZXI/LnRlcm1pbmF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiAgTWV0aG9kIHVzZWQgYXMgd29ya2VyIGNvZGUuXHJcbiAgICovXHJcbiAgd29ya2VyRnVuY3Rpb24oKSB7XHJcbiAgICBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChtc2c6TWVzc2FnZUV2ZW50KSB7XHJcbiAgICAgIGxldCBzdHJlYW1GaW5pc2hlZCA9IG1zZy5kYXRhLnN0cmVhbUZpbmlzaGVkO1xyXG4gICAgICBpZiAoc3RyZWFtRmluaXNoZWQpIHtcclxuICAgICAgICBwb3N0TWVzc2FnZSh7c3RyZWFtRmluaXNoZWQ6IHRydWV9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgY2hzID0gbXNnLmRhdGEuY2hzO1xyXG4gICAgICAgIGxldCBmcmFtZUxlbmd0aCA9IG51bGw7XHJcbiAgICAgICAgbGV0IGF1ZGlvRGF0YSA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgICAgbGV0IGxpbkxldmVscyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgbGluTGV2ZWxzW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkoMik7XHJcbiAgICAgICAgICBhdWRpb0RhdGFbY2hdID0gbmV3IEZsb2F0MzJBcnJheShtc2cuZGF0YS5hdWRpb0RhdGFbY2hdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhdWRpb0RhdGEpIHtcclxuICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgbGV0IGNoRGF0YSA9IGF1ZGlvRGF0YVtjaF07XHJcbiAgICAgICAgICAgIGlmIChmcmFtZUxlbmd0aCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGZyYW1lTGVuZ3RoID0gY2hEYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGZyYW1lTGVuZ3RoOyBzKyspIHtcclxuICAgICAgICAgICAgICBsZXQgY2hTYW1wbGU9Y2hEYXRhW3NdO1xyXG4gICAgICAgICAgICAgIGlmIChjaFNhbXBsZSA8IGxpbkxldmVsc1tjaF1bMF0pIHtcclxuICAgICAgICAgICAgICAgIGxpbkxldmVsc1tjaF1bMF0gPSBjaFNhbXBsZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGNoU2FtcGxlID4gbGluTGV2ZWxzW2NoXVsxXSkge1xyXG4gICAgICAgICAgICAgICAgbGluTGV2ZWxzW2NoXVsxXSA9IGNoU2FtcGxlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGluTGV2ZWxCdWZzID0gbmV3IEFycmF5PGFueT4oY2hzKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBsaW5MZXZlbEJ1ZnNbY2hdID0gbGluTGV2ZWxzW2NoXS5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvc3RNZXNzYWdlKHtzdHJlYW1GaW5pc2hlZDogZmFsc2UsIGZyYW1lTGVuZ3RoOiBmcmFtZUxlbmd0aCwgbGluTGV2ZWxCdWZmZXJzOiBsaW5MZXZlbEJ1ZnN9LCBsaW5MZXZlbEJ1ZnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMZXZlbHMoYnVmZmVyTGV2ZWxJbmZvOiBMZXZlbEluZm8pIHtcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRMZXZlbEluZm9zID0gYnVmZmVyTGV2ZWxJbmZvO1xyXG4gICAgaWYodGhpcy5wZWFrTGV2ZWxJbmZvKSB7XHJcbiAgICAgIHRoaXMucGVha0xldmVsSW5mby5tZXJnZShidWZmZXJMZXZlbEluZm8pO1xyXG4gICAgICBpZiAodGhpcy5sZXZlbExpc3RlbmVyKSB7XHJcbiAgICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLnVwZGF0ZSh0aGlzLmN1cnJlbnRMZXZlbEluZm9zLCB0aGlzLnBlYWtMZXZlbEluZm8uY2xvbmUoKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5wZWFrTGV2ZWxMaXN0ZW5lcil7XHJcbiAgICAgICAgbGV0IHBlYWtEQlZhbCA9IGJ1ZmZlckxldmVsSW5mby5wb3dlckxldmVsREIoKTtcclxuICAgICAgICBpZiAodGhpcy5wZWFrTGV2ZWxJbkRiIDwgcGVha0RCVmFsKSB7XHJcbiAgICAgICAgICB0aGlzLnBlYWtMZXZlbEluRGIgPSBwZWFrREJWYWw7XHJcbiAgICAgICAgICAvLyB0aGUgZXZlbnQgY29tZXMgZnJvbSBvdXRzaWRlIG9mIGFuIEFuZ3VsYXIgem9uZVxyXG4gICAgICAgICAgdGhpcy5wZWFrTGV2ZWxMaXN0ZW5lcih0aGlzLnBlYWtMZXZlbEluRGIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLndvcmtlcj8udGVybWluYXRlKCk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19
@@ -7,11 +7,11 @@ export class SequenceAudioFloat32ChunkerOutStream extends Float32ArrayChunkerOut
7
7
  this.sequenceAudioFloat32OutStream = outStream;
8
8
  }
9
9
  setFormat(channels, sampleRate) {
10
- console.debug("SequenceAudioFloat32ChunkerOutStream:setFormat(channels: " + channels + ",sampleRate: " + sampleRate + ")");
10
+ //console.debug("SequenceAudioFloat32ChunkerOutStream:setFormat(channels: "+channels+",sampleRate: "+sampleRate+")")
11
11
  this.channels = channels;
12
12
  this.sampleRate = sampleRate;
13
13
  this.chunkSize = Math.round(sampleRate * this.chunkDurationSeconds);
14
- console.debug("SequenceAudioFloat32ChunkerOutStream: chunkSize: " + this.chunkSize);
14
+ //console.debug("SequenceAudioFloat32ChunkerOutStream: chunkSize: "+this.chunkSize);
15
15
  this.sequenceAudioFloat32OutStream.setFormat(channels, sampleRate);
16
16
  }
17
17
  nextStream() {
@@ -56,4 +56,4 @@ export class SequenceAudioFloat32OutStreamMultiplier {
56
56
  return toWrite;
57
57
  }
58
58
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2lvL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsNEJBQTRCLEVBQXdCLE1BQU0saUJBQWlCLENBQUM7QUFVcEYsTUFBTSxPQUFPLG9DQUFxQyxTQUFRLDRCQUE0QjtJQUlwRixZQUFZLFNBQXVDLEVBQVUsb0JBQTJCO1FBQ3RGLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUQwQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQU87UUFGaEYsZUFBVSxHQUFhLElBQUksQ0FBQztRQUlsQyxJQUFJLENBQUMsNkJBQTZCLEdBQUMsU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFRCxTQUFTLENBQUMsUUFBZ0IsRUFBQyxVQUFpQjtRQUMxQyxPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxHQUFDLFFBQVEsR0FBQyxlQUFlLEdBQUMsVUFBVSxHQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xILElBQUksQ0FBQyxRQUFRLEdBQUMsUUFBUSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUMsVUFBVSxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDaEUsT0FBTyxDQUFDLEtBQUssQ0FBQyxtREFBbUQsR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsNkJBQTZCLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sdUNBQXVDO0lBSWxEO1FBQ0UsSUFBSSxDQUFDLCtCQUErQixHQUFDLElBQUksS0FBSyxFQUFpQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxJQUFJLDhCQUE4QjtRQUNoQyxPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQWdCLEVBQUMsVUFBaUI7UUFDMUMsS0FBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUM7WUFDL0MsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBQ0QsVUFBVTtRQUNSLEtBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFDO1lBQ2pELEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsS0FBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUM7WUFDakQsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ1o7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILEtBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFDO1lBQ2pELEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNaO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUE0QjtRQUNoQyxJQUFJLE9BQU8sR0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQ25ELEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkI7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Zsb2F0MzJBcnJheUNodW5rZXJPdXRTdHJlYW0sIEZsb2F0MzJBcnJheU91dFN0cmVhbX0gZnJvbSBcIi4uLy4uL2lvL3N0cmVhbVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0Zsb2F0MzJPdXRTdHJlYW0gZXh0ZW5kcyBGbG9hdDMyQXJyYXlPdXRTdHJlYW17XHJcbiAgICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlcixzYW1wbGVSYXRlOm51bWJlcik6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSBleHRlbmRzIEF1ZGlvRmxvYXQzMk91dFN0cmVhbXtcclxuICAgIG5leHRTdHJlYW0oKTp2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtIGV4dGVuZHMgRmxvYXQzMkFycmF5Q2h1bmtlck91dFN0cmVhbSBpbXBsZW1lbnRzIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFte1xyXG5cclxuICBwcml2YXRlIHNhbXBsZVJhdGU6bnVtYmVyfG51bGw9bnVsbDtcclxuICBwcml2YXRlIHNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtOlNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtO1xyXG4gIGNvbnN0cnVjdG9yKG91dFN0cmVhbTpTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSwgcHJpdmF0ZSBjaHVua0R1cmF0aW9uU2Vjb25kczpudW1iZXIpe1xyXG4gICAgc3VwZXIob3V0U3RyZWFtKTtcclxuICAgIHRoaXMuc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW09b3V0U3RyZWFtO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNoYW5uZWxzOiBudW1iZXIsc2FtcGxlUmF0ZTpudW1iZXIpOnZvaWR7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtOnNldEZvcm1hdChjaGFubmVsczogXCIrY2hhbm5lbHMrXCIsc2FtcGxlUmF0ZTogXCIrc2FtcGxlUmF0ZStcIilcIilcclxuICAgIHRoaXMuY2hhbm5lbHM9Y2hhbm5lbHM7XHJcbiAgICB0aGlzLnNhbXBsZVJhdGU9c2FtcGxlUmF0ZTtcclxuICAgIHRoaXMuY2h1bmtTaXplPU1hdGgucm91bmQoc2FtcGxlUmF0ZSp0aGlzLmNodW5rRHVyYXRpb25TZWNvbmRzKTtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW06IGNodW5rU2l6ZTogXCIrdGhpcy5jaHVua1NpemUpO1xyXG4gICAgdGhpcy5zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbS5zZXRGb3JtYXQoY2hhbm5lbHMsc2FtcGxlUmF0ZSk7XHJcbiAgfVxyXG4gIG5leHRTdHJlYW0oKTp2b2lke1xyXG4gICAgdGhpcy5zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbS5uZXh0U3RyZWFtKCk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogU3RyZWFtcyBhIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtIHRvIG11bHRpcGxlIHN0cmVhbXNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbU11bHRpcGxpZXIgaW1wbGVtZW50cyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXtcclxuXHJcbiAgcHJpdmF0ZSBfc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zITpBcnJheTxTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zPW5ldyBBcnJheTxTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbT4oKTtcclxuICB9XHJcblxyXG4gIGdldCBzZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMoKTogQXJyYXk8U2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0+IHtcclxuICAgIHJldHVybiB0aGlzLl9zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXM7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlcixzYW1wbGVSYXRlOm51bWJlcik6dm9pZHtcclxuICAgIGZvcihsZXQgb3Mgb2YgdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKXtcclxuICAgICAgICBvcy5zZXRGb3JtYXQoY2hhbm5lbHMsc2FtcGxlUmF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5leHRTdHJlYW0oKTp2b2lke1xyXG4gICAgZm9yKGxldCBvcyBvZiB0aGlzLl9zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMpe1xyXG4gICAgICBvcy5uZXh0U3RyZWFtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIGZvcihsZXQgb3Mgb2YgdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKXtcclxuICAgICAgb3MuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZsdXNoKCk6IHZvaWQge1xyXG4gICAgZm9yKGxldCBvcyBvZiB0aGlzLl9zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMpe1xyXG4gICAgICBvcy5mbHVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGUoYnVmZmVyczogQXJyYXk8RmxvYXQzMkFycmF5Pik6IG51bWJlciB7XHJcbiAgICBsZXQgdG9Xcml0ZTpudW1iZXI9YnVmZmVycy5sZW5ndGg7XHJcbiAgICAgIGZvciAobGV0IG9zIG9mIHRoaXMuX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcykge1xyXG4gICAgICAgIG9zLndyaXRlKGJ1ZmZlcnMpO1xyXG4gICAgICB9XHJcbiAgICByZXR1cm4gdG9Xcml0ZTtcclxuICB9XHJcbn1cclxuIl19
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2lvL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsNEJBQTRCLEVBQXdCLE1BQU0saUJBQWlCLENBQUM7QUFVcEYsTUFBTSxPQUFPLG9DQUFxQyxTQUFRLDRCQUE0QjtJQUlwRixZQUFZLFNBQXVDLEVBQVUsb0JBQTJCO1FBQ3RGLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUQwQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQU87UUFGaEYsZUFBVSxHQUFhLElBQUksQ0FBQztRQUlsQyxJQUFJLENBQUMsNkJBQTZCLEdBQUMsU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFRCxTQUFTLENBQUMsUUFBZ0IsRUFBQyxVQUFpQjtRQUMxQyxvSEFBb0g7UUFDcEgsSUFBSSxDQUFDLFFBQVEsR0FBQyxRQUFRLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBQyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNoRSxvRkFBb0Y7UUFDcEYsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsNkJBQTZCLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sdUNBQXVDO0lBSWxEO1FBQ0UsSUFBSSxDQUFDLCtCQUErQixHQUFDLElBQUksS0FBSyxFQUFpQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxJQUFJLDhCQUE4QjtRQUNoQyxPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQWdCLEVBQUMsVUFBaUI7UUFDMUMsS0FBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUM7WUFDL0MsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBQ0QsVUFBVTtRQUNSLEtBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFDO1lBQ2pELEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsS0FBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUM7WUFDakQsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ1o7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILEtBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFDO1lBQ2pELEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNaO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUE0QjtRQUNoQyxJQUFJLE9BQU8sR0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQ25ELEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkI7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Zsb2F0MzJBcnJheUNodW5rZXJPdXRTdHJlYW0sIEZsb2F0MzJBcnJheU91dFN0cmVhbX0gZnJvbSBcIi4uLy4uL2lvL3N0cmVhbVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0Zsb2F0MzJPdXRTdHJlYW0gZXh0ZW5kcyBGbG9hdDMyQXJyYXlPdXRTdHJlYW17XHJcbiAgICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlcixzYW1wbGVSYXRlOm51bWJlcik6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSBleHRlbmRzIEF1ZGlvRmxvYXQzMk91dFN0cmVhbXtcclxuICAgIG5leHRTdHJlYW0oKTp2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtIGV4dGVuZHMgRmxvYXQzMkFycmF5Q2h1bmtlck91dFN0cmVhbSBpbXBsZW1lbnRzIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFte1xyXG5cclxuICBwcml2YXRlIHNhbXBsZVJhdGU6bnVtYmVyfG51bGw9bnVsbDtcclxuICBwcml2YXRlIHNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtOlNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtO1xyXG4gIGNvbnN0cnVjdG9yKG91dFN0cmVhbTpTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSwgcHJpdmF0ZSBjaHVua0R1cmF0aW9uU2Vjb25kczpudW1iZXIpe1xyXG4gICAgc3VwZXIob3V0U3RyZWFtKTtcclxuICAgIHRoaXMuc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW09b3V0U3RyZWFtO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNoYW5uZWxzOiBudW1iZXIsc2FtcGxlUmF0ZTpudW1iZXIpOnZvaWR7XHJcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW06c2V0Rm9ybWF0KGNoYW5uZWxzOiBcIitjaGFubmVscytcIixzYW1wbGVSYXRlOiBcIitzYW1wbGVSYXRlK1wiKVwiKVxyXG4gICAgdGhpcy5jaGFubmVscz1jaGFubmVscztcclxuICAgIHRoaXMuc2FtcGxlUmF0ZT1zYW1wbGVSYXRlO1xyXG4gICAgdGhpcy5jaHVua1NpemU9TWF0aC5yb3VuZChzYW1wbGVSYXRlKnRoaXMuY2h1bmtEdXJhdGlvblNlY29uZHMpO1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtOiBjaHVua1NpemU6IFwiK3RoaXMuY2h1bmtTaXplKTtcclxuICAgIHRoaXMuc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0uc2V0Rm9ybWF0KGNoYW5uZWxzLHNhbXBsZVJhdGUpO1xyXG4gIH1cclxuICBuZXh0U3RyZWFtKCk6dm9pZHtcclxuICAgIHRoaXMuc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0ubmV4dFN0cmVhbSgpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFN0cmVhbXMgYSBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSB0byBtdWx0aXBsZSBzdHJlYW1zXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1NdWx0aXBsaWVyIGltcGxlbWVudHMgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW17XHJcblxyXG4gIHByaXZhdGUgX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcyE6QXJyYXk8U2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0+O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcz1uZXcgQXJyYXk8U2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0+KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKCk6IEFycmF5PFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNoYW5uZWxzOiBudW1iZXIsc2FtcGxlUmF0ZTpudW1iZXIpOnZvaWR7XHJcbiAgICBmb3IobGV0IG9zIG9mIHRoaXMuX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcyl7XHJcbiAgICAgICAgb3Muc2V0Rm9ybWF0KGNoYW5uZWxzLHNhbXBsZVJhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZXh0U3RyZWFtKCk6dm9pZHtcclxuICAgIGZvcihsZXQgb3Mgb2YgdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKXtcclxuICAgICAgb3MubmV4dFN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICBmb3IobGV0IG9zIG9mIHRoaXMuX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcyl7XHJcbiAgICAgIG9zLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmbHVzaCgpOiB2b2lkIHtcclxuICAgIGZvcihsZXQgb3Mgb2YgdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKXtcclxuICAgICAgb3MuZmx1c2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IHRvV3JpdGU6bnVtYmVyPWJ1ZmZlcnMubGVuZ3RoO1xyXG4gICAgICBmb3IgKGxldCBvcyBvZiB0aGlzLl9zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMpIHtcclxuICAgICAgICBvcy53cml0ZShidWZmZXJzKTtcclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHRvV3JpdGU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,14 +1,13 @@
1
1
  export class AudioClip {
2
- constructor(buffer) {
2
+ constructor(_audioDataHolder) {
3
+ this._audioDataHolder = _audioDataHolder;
3
4
  this._selection = null;
4
5
  this._levelInfos = null;
5
6
  this.selectionObservers = new Array();
6
- this._buffer = buffer;
7
7
  }
8
- get buffer() {
9
- return this._buffer;
8
+ get audioDataHolder() {
9
+ return this._audioDataHolder;
10
10
  }
11
- ;
12
11
  get selection() {
13
12
  return this._selection;
14
13
  }
@@ -73,4 +72,4 @@ export class Selection {
73
72
  return "Selection: from: " + this.leftFrame + " to: " + this.rightFrame + " frame. Refers to sample rate :" + this._sampleRate;
74
73
  }
75
74
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3BlcnNpc3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sU0FBUztJQU9kLFlBQVksTUFBbUI7UUFKdkIsZUFBVSxHQUFnQixJQUFJLENBQUM7UUFDL0IsZ0JBQVcsR0FBbUIsSUFBSSxDQUFDO1FBSXpDLElBQUksQ0FBQyxrQkFBa0IsR0FBQyxJQUFJLEtBQUssRUFBK0IsQ0FBQTtRQUM5RCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFBQSxDQUFDO0lBRUosSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFxQjtRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4Qiw0Q0FBNEM7UUFDNUMsNENBQTRDO1FBQzVDLG9DQUFvQztRQUNwQyxjQUFjO1FBQ2QsTUFBTTtRQUNOLEtBQUksSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFDO1lBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUNiO0lBQ0gsQ0FBQztJQUVMLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBd0I7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVHLG9CQUFvQixDQUFDLGlCQUE2QyxFQUFDLElBQUksR0FBQyxLQUFLO1FBQzNFLElBQUksZ0JBQWdCLEdBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUEsQ0FBQyxHQUFHLEtBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFBO1FBQ25GLElBQUcsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUE7U0FDaEQ7UUFDRCxJQUFHLElBQUksRUFBQztZQUNOLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLGlCQUE2QztRQUNuRSxJQUFJLENBQUMsa0JBQWtCLEdBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFLEdBQUMsR0FBRyxLQUFHLGlCQUFpQixDQUFBLENBQUEsQ0FBQyxDQUFDLENBQUE7SUFDMUYsQ0FBQztDQUNGO0FBU0QsTUFBTSxPQUFPLFNBQVM7SUFLcEIsWUFBWSxVQUFpQixFQUFDLFVBQWlCLEVBQUMsUUFBZTtRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFDLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFDLFVBQVUsQ0FBQTtRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFDLFFBQVEsQ0FBQztJQUMxQixDQUFDO0lBRUMsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNILElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFBO0lBQ2pGLENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUE7SUFDakYsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUF1QztRQUM1QyxJQUFHLGNBQWMsRUFBRTtZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLGNBQWMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxjQUFjLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzdKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU8sbUJBQW1CLEdBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxpQ0FBaUMsR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3pILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGV2ZWxJbmZvc30gZnJvbSBcIi4vZHNwL2xldmVsX21lYXN1cmVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0NsaXAge1xyXG5cclxuICAgICAgICBwcml2YXRlIF9idWZmZXI6IEF1ZGlvQnVmZmVyO1xyXG4gICAgICAgIHByaXZhdGUgX3NlbGVjdGlvbjpTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICAgIHByaXZhdGUgX2xldmVsSW5mb3M6TGV2ZWxJbmZvcyB8IG51bGw9bnVsbDtcclxuICAgICAgICBwcml2YXRlIHNlbGVjdGlvbk9ic2VydmVyczpBcnJheTwoYXVkaW9DbGlwOkF1ZGlvQ2xpcCk9PnZvaWQ+O1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3RvcihidWZmZXI6IEF1ZGlvQnVmZmVyKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbk9ic2VydmVycz1uZXcgQXJyYXk8KGF1ZGlvQ2xpcDpBdWRpb0NsaXApPT52b2lkPigpXHJcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBidWZmZXIoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgIGdldCBzZWxlY3Rpb24oKTogU2VsZWN0aW9ufG51bGx7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0IHNlbGVjdGlvbih2YWx1ZTogU2VsZWN0aW9ufG51bGwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSB2YWx1ZTtcclxuICAgICAgICAvLyBsZXQgb2JzQ250PXRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzLmxlbmd0aFxyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzLmZvckVhY2goKG9icyk9PiB7XHJcbiAgICAgICAgLy8gICBjb25zb2xlLmxvZyhcIkNhbGxpbmcgb2JzZXJ2ZXJcIilcclxuICAgICAgICAvLyAgIG9icyh0aGlzKVxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIGZvcihsZXQgc2VsT2JzIG9mIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzKXtcclxuICAgICAgICAgIHNlbE9icyh0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICBnZXQgbGV2ZWxJbmZvcygpOiBMZXZlbEluZm9zIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWxJbmZvcztcclxuICB9XHJcblxyXG4gIHNldCBsZXZlbEluZm9zKHZhbHVlOiBMZXZlbEluZm9zIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fbGV2ZWxJbmZvcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgICAgIGFkZFNlbGVjdGlvbk9ic2VydmVyKHNlbGVjdGlvbk9ic2VydmVyOihhdWRpb0NsaXA6QXVkaW9DbGlwKT0+dm9pZCxpbml0PWZhbHNlKXtcclxuICAgICAgICBsZXQgb2JzQWxyZWFkeUluTGlzdD10aGlzLnNlbGVjdGlvbk9ic2VydmVycy5maW5kKChvYnMpPT4ob2JzPT09c2VsZWN0aW9uT2JzZXJ2ZXIpKVxyXG4gICAgICAgIGlmKCFvYnNBbHJlYWR5SW5MaXN0KSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbk9ic2VydmVycy5wdXNoKHNlbGVjdGlvbk9ic2VydmVyKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpbml0KXtcclxuICAgICAgICAgIHNlbGVjdGlvbk9ic2VydmVyKHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZW1vdmVTZWxlY3Rpb25PYnNlcnZlcihzZWxlY3Rpb25PYnNlcnZlcjooYXVkaW9DbGlwOkF1ZGlvQ2xpcCk9PnZvaWQpe1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzPXRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzLmZpbHRlcigob2JzKT0+e29icyE9PXNlbGVjdGlvbk9ic2VydmVyfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBpbnRlcmZhY2UgUmVhZGVyIHtcclxuICAgICAgICByZWFkKGRhdGE6IEJsb2IpOiBBdWRpb0NsaXA7XHJcbiAgICB9XHJcbiAgICBleHBvcnQgaW50ZXJmYWNlIFdyaXRlciB7XHJcbiAgICAgICAgd3JpdGUoYXVkaW9EYXRhOiBBdWRpb0NsaXApOiBCbG9iO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBTZWxlY3Rpb257XHJcbiAgICAgIHByaXZhdGUgX3NhbXBsZVJhdGU6bnVtYmVyO1xyXG4gICAgICBwcml2YXRlIF9zdGFydEZyYW1lOm51bWJlcjtcclxuICAgICAgcHJpdmF0ZSBfZW5kRnJhbWU6bnVtYmVyO1xyXG5cclxuICAgICAgY29uc3RydWN0b3Ioc2FtcGxlUmF0ZTpudW1iZXIsc3RhcnRGcmFtZTpudW1iZXIsZW5kRnJhbWU6bnVtYmVyKXtcclxuICAgICAgICAgIHRoaXMuX3NhbXBsZVJhdGU9c2FtcGxlUmF0ZTtcclxuICAgICAgICB0aGlzLl9zdGFydEZyYW1lPXN0YXJ0RnJhbWVcclxuICAgICAgICB0aGlzLl9lbmRGcmFtZT1lbmRGcmFtZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgc2FtcGxlUmF0ZSgpOiBudW1iZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2FtcGxlUmF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2V0IGVuZEZyYW1lKCk6bnVtYmVye1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEZyYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgZ2V0IHN0YXJ0RnJhbWUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRGcmFtZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2V0IGxlZnRGcmFtZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fc3RhcnRGcmFtZSA8PSB0aGlzLl9lbmRGcmFtZSkgPyB0aGlzLl9zdGFydEZyYW1lIDogdGhpcy5fZW5kRnJhbWVcclxuICAgICAgfVxyXG4gICAgICBnZXQgcmlnaHRGcmFtZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fc3RhcnRGcmFtZSA8PSB0aGlzLl9lbmRGcmFtZSkgPyB0aGlzLl9lbmRGcmFtZSA6IHRoaXMuX3N0YXJ0RnJhbWVcclxuICAgICAgfVxyXG5cclxuICAgICAgZXF1YWxzKG90aGVyU2VsZWN0aW9uOlNlbGVjdGlvbnxudWxsfHVuZGVmaW5lZCk6Ym9vbGVhbntcclxuICAgICAgICBpZihvdGhlclNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuX3NhbXBsZVJhdGUgPT0gb3RoZXJTZWxlY3Rpb24uX3NhbXBsZVJhdGUgJiYgdGhpcy5fc3RhcnRGcmFtZSA9PT0gb3RoZXJTZWxlY3Rpb24uX3N0YXJ0RnJhbWUgJiYgdGhpcy5fZW5kRnJhbWUgPT09IG90aGVyU2VsZWN0aW9uLl9lbmRGcmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdG9TdHJpbmcoKXtcclxuICAgICAgICAgIHJldHVybiBcIlNlbGVjdGlvbjogZnJvbTogXCIrdGhpcy5sZWZ0RnJhbWUrXCIgdG86IFwiK3RoaXMucmlnaHRGcmFtZStcIiBmcmFtZS4gUmVmZXJzIHRvIHNhbXBsZSByYXRlIDpcIit0aGlzLl9zYW1wbGVSYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuIl19
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3BlcnNpc3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sU0FBUztJQU1wQixZQUFvQixnQkFBZ0M7UUFBaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQjtRQUo1QyxlQUFVLEdBQWdCLElBQUksQ0FBQztRQUN6QixnQkFBVyxHQUFtQixJQUFJLENBQUM7UUFLL0MsSUFBSSxDQUFDLGtCQUFrQixHQUFDLElBQUksS0FBSyxFQUErQixDQUFBO0lBQ2xFLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsS0FBcUI7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsNENBQTRDO1FBQzVDLDRDQUE0QztRQUM1QyxvQ0FBb0M7UUFDcEMsY0FBYztRQUNkLE1BQU07UUFDTixLQUFJLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBQztZQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDYjtJQUNILENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLEtBQXdCO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxpQkFBNkMsRUFBQyxJQUFJLEdBQUMsS0FBSztRQUMzRSxJQUFJLGdCQUFnQixHQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFBLENBQUMsR0FBRyxLQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtRQUNuRixJQUFHLENBQUMsZ0JBQWdCLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1NBQ2hEO1FBQ0QsSUFBRyxJQUFJLEVBQUM7WUFDTixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUN4QjtJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxpQkFBNkM7UUFDbkUsSUFBSSxDQUFDLGtCQUFrQixHQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRSxHQUFDLEdBQUcsS0FBRyxpQkFBaUIsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFBO0lBQzFGLENBQUM7Q0FDRjtBQVNELE1BQU0sT0FBTyxTQUFTO0lBS3BCLFlBQVksVUFBaUIsRUFBQyxVQUFpQixFQUFDLFFBQWU7UUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBQyxVQUFVLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBQyxVQUFVLENBQUE7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBQyxRQUFRLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUNqRixDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFBO0lBQ2pGLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBdUM7UUFDNUMsSUFBRyxjQUFjLEVBQUU7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksY0FBYyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLGNBQWMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDM0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxtQkFBbUIsR0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLE9BQU8sR0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLGlDQUFpQyxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDdkgsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMZXZlbEluZm9zfSBmcm9tIFwiLi9kc3AvbGV2ZWxfbWVhc3VyZVwiO1xyXG5pbXBvcnQge0F1ZGlvRGF0YUhvbGRlcn0gZnJvbSBcIi4vYXVkaW9fZGF0YV9ob2xkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0NsaXAge1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3Rpb246U2VsZWN0aW9ufG51bGw9bnVsbDtcclxuICAgICAgICBwcml2YXRlIF9sZXZlbEluZm9zOkxldmVsSW5mb3MgfCBudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBzZWxlY3Rpb25PYnNlcnZlcnM6QXJyYXk8KGF1ZGlvQ2xpcDpBdWRpb0NsaXApPT52b2lkPjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXVkaW9EYXRhSG9sZGVyOkF1ZGlvRGF0YUhvbGRlcikge1xyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzPW5ldyBBcnJheTwoYXVkaW9DbGlwOkF1ZGlvQ2xpcCk9PnZvaWQ+KClcclxuICB9XHJcblxyXG4gIGdldCBhdWRpb0RhdGFIb2xkZXIoKTogQXVkaW9EYXRhSG9sZGVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpb0RhdGFIb2xkZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0aW9uKCk6IFNlbGVjdGlvbnxudWxse1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3Rpb24odmFsdWU6IFNlbGVjdGlvbnxudWxsKSB7XHJcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSB2YWx1ZTtcclxuICAgIC8vIGxldCBvYnNDbnQ9dGhpcy5zZWxlY3Rpb25PYnNlcnZlcnMubGVuZ3RoXHJcbiAgICAvLyB0aGlzLnNlbGVjdGlvbk9ic2VydmVycy5mb3JFYWNoKChvYnMpPT4ge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhcIkNhbGxpbmcgb2JzZXJ2ZXJcIilcclxuICAgIC8vICAgb2JzKHRoaXMpXHJcbiAgICAvLyB9KTtcclxuICAgIGZvcihsZXQgc2VsT2JzIG9mIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzKXtcclxuICAgICAgc2VsT2JzKHRoaXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGV2ZWxJbmZvcygpOiBMZXZlbEluZm9zIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWxJbmZvcztcclxuICB9XHJcblxyXG4gIHNldCBsZXZlbEluZm9zKHZhbHVlOiBMZXZlbEluZm9zIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fbGV2ZWxJbmZvcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYWRkU2VsZWN0aW9uT2JzZXJ2ZXIoc2VsZWN0aW9uT2JzZXJ2ZXI6KGF1ZGlvQ2xpcDpBdWRpb0NsaXApPT52b2lkLGluaXQ9ZmFsc2Upe1xyXG4gICAgbGV0IG9ic0FscmVhZHlJbkxpc3Q9dGhpcy5zZWxlY3Rpb25PYnNlcnZlcnMuZmluZCgob2JzKT0+KG9icz09PXNlbGVjdGlvbk9ic2VydmVyKSlcclxuICAgIGlmKCFvYnNBbHJlYWR5SW5MaXN0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzLnB1c2goc2VsZWN0aW9uT2JzZXJ2ZXIpXHJcbiAgICB9XHJcbiAgICBpZihpbml0KXtcclxuICAgICAgc2VsZWN0aW9uT2JzZXJ2ZXIodGhpcylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdGlvbk9ic2VydmVyKHNlbGVjdGlvbk9ic2VydmVyOihhdWRpb0NsaXA6QXVkaW9DbGlwKT0+dm9pZCl7XHJcbiAgICB0aGlzLnNlbGVjdGlvbk9ic2VydmVycz10aGlzLnNlbGVjdGlvbk9ic2VydmVycy5maWx0ZXIoKG9icyk9PntvYnMhPT1zZWxlY3Rpb25PYnNlcnZlcn0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRlciB7XHJcbiAgcmVhZChkYXRhOiBCbG9iKTogQXVkaW9DbGlwO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVyIHtcclxuICB3cml0ZShhdWRpb0RhdGE6IEF1ZGlvQ2xpcCk6IEJsb2I7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb257XHJcbiAgcHJpdmF0ZSBfc2FtcGxlUmF0ZTpudW1iZXI7XHJcbiAgcHJpdmF0ZSBfc3RhcnRGcmFtZTpudW1iZXI7XHJcbiAgcHJpdmF0ZSBfZW5kRnJhbWU6bnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihzYW1wbGVSYXRlOm51bWJlcixzdGFydEZyYW1lOm51bWJlcixlbmRGcmFtZTpudW1iZXIpe1xyXG4gICAgdGhpcy5fc2FtcGxlUmF0ZT1zYW1wbGVSYXRlO1xyXG4gICAgdGhpcy5fc3RhcnRGcmFtZT1zdGFydEZyYW1lXHJcbiAgICB0aGlzLl9lbmRGcmFtZT1lbmRGcmFtZTtcclxuICB9XHJcblxyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcbiAgZ2V0IGVuZEZyYW1lKCk6bnVtYmVye1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuZEZyYW1lO1xyXG4gIH1cclxuICBnZXQgc3RhcnRGcmFtZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RnJhbWU7XHJcbiAgfVxyXG5cclxuICBnZXQgbGVmdEZyYW1lKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3N0YXJ0RnJhbWUgPD0gdGhpcy5fZW5kRnJhbWUpID8gdGhpcy5fc3RhcnRGcmFtZSA6IHRoaXMuX2VuZEZyYW1lXHJcbiAgfVxyXG4gIGdldCByaWdodEZyYW1lKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3N0YXJ0RnJhbWUgPD0gdGhpcy5fZW5kRnJhbWUpID8gdGhpcy5fZW5kRnJhbWUgOiB0aGlzLl9zdGFydEZyYW1lXHJcbiAgfVxyXG5cclxuICBlcXVhbHMob3RoZXJTZWxlY3Rpb246U2VsZWN0aW9ufG51bGx8dW5kZWZpbmVkKTpib29sZWFue1xyXG4gICAgaWYob3RoZXJTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuICh0aGlzLl9zYW1wbGVSYXRlID09IG90aGVyU2VsZWN0aW9uLl9zYW1wbGVSYXRlICYmIHRoaXMuX3N0YXJ0RnJhbWUgPT09IG90aGVyU2VsZWN0aW9uLl9zdGFydEZyYW1lICYmIHRoaXMuX2VuZEZyYW1lID09PSBvdGhlclNlbGVjdGlvbi5fZW5kRnJhbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdG9TdHJpbmcoKXtcclxuICAgIHJldHVybiBcIlNlbGVjdGlvbjogZnJvbTogXCIrdGhpcy5sZWZ0RnJhbWUrXCIgdG86IFwiK3RoaXMucmlnaHRGcmFtZStcIiBmcmFtZS4gUmVmZXJzIHRvIHNhbXBsZSByYXRlIDpcIit0aGlzLl9zYW1wbGVSYXRlO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==