@jubbio/voice 1.0.1 → 1.0.3

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 (2) hide show
  1. package/dist/AudioPlayer.js +56 -11
  2. package/package.json +1 -1
@@ -165,27 +165,72 @@ class AudioPlayer extends events_1.EventEmitter {
165
165
  async startFFmpeg() {
166
166
  if (!this.currentResource)
167
167
  return;
168
- const inputSource = this.currentResource.getInputSource();
168
+ let inputSource = this.currentResource.getInputSource();
169
169
  console.log(`FFmpeg input source: ${inputSource.substring(0, 100)}...`);
170
+ // Check if input is a URL or search query
171
+ const isUrl = inputSource.startsWith('http://') ||
172
+ inputSource.startsWith('https://') ||
173
+ inputSource.startsWith('ytsearch:');
174
+ // If not a URL, treat as YouTube search
175
+ if (!isUrl) {
176
+ inputSource = `ytsearch1:${inputSource}`;
177
+ console.log(`Converted to YouTube search: ${inputSource}`);
178
+ }
170
179
  // Check if this is a streaming URL that needs yt-dlp
171
180
  const needsYtDlp = inputSource.includes('youtube.com') ||
172
181
  inputSource.includes('youtu.be') ||
173
182
  inputSource.includes('soundcloud.com') ||
174
183
  inputSource.includes('twitch.tv') ||
175
- inputSource.startsWith('ytsearch:');
184
+ inputSource.startsWith('ytsearch');
176
185
  if (needsYtDlp) {
177
186
  // Use yt-dlp to pipe audio directly to FFmpeg
178
187
  console.log('Using yt-dlp pipe mode');
179
- // Detect platform and use appropriate shell
188
+ // Detect platform
180
189
  const isWindows = process.platform === 'win32';
181
190
  const ytDlpPath = isWindows ? 'yt-dlp' : '~/.local/bin/yt-dlp';
182
- const command = `${ytDlpPath} -f "bestaudio/best" -o - --no-playlist --no-warnings "${inputSource}" | ffmpeg -i pipe:0 -f s16le -ar ${SAMPLE_RATE} -ac ${CHANNELS} -acodec pcm_s16le -`;
183
- if (isWindows) {
184
- this.ffmpegProcess = (0, child_process_1.spawn)('cmd', ['/c', command], { stdio: ['pipe', 'pipe', 'pipe'] });
185
- }
186
- else {
187
- this.ffmpegProcess = (0, child_process_1.spawn)('bash', ['-c', command], { stdio: ['pipe', 'pipe', 'pipe'] });
188
- }
191
+ // Spawn yt-dlp and ffmpeg separately, pipe between them
192
+ const ytdlpArgs = [
193
+ '-f', 'bestaudio/best',
194
+ '-o', '-',
195
+ '--no-playlist',
196
+ '--no-warnings',
197
+ inputSource
198
+ ];
199
+ const ffmpegArgs = [
200
+ '-i', 'pipe:0',
201
+ '-f', 's16le',
202
+ '-ar', String(SAMPLE_RATE),
203
+ '-ac', String(CHANNELS),
204
+ '-acodec', 'pcm_s16le',
205
+ '-'
206
+ ];
207
+ // Spawn yt-dlp
208
+ const ytdlpProcess = (0, child_process_1.spawn)(ytDlpPath, ytdlpArgs, {
209
+ stdio: ['pipe', 'pipe', 'pipe'],
210
+ shell: isWindows // Use shell on Windows to resolve PATH
211
+ });
212
+ // Spawn ffmpeg
213
+ this.ffmpegProcess = (0, child_process_1.spawn)('ffmpeg', ffmpegArgs, {
214
+ stdio: ['pipe', 'pipe', 'pipe'],
215
+ shell: isWindows
216
+ });
217
+ // Pipe yt-dlp stdout to ffmpeg stdin
218
+ ytdlpProcess.stdout?.pipe(this.ffmpegProcess.stdin);
219
+ // Handle yt-dlp errors
220
+ ytdlpProcess.stderr?.on('data', (data) => {
221
+ const msg = data.toString();
222
+ if (msg.includes('ERROR')) {
223
+ console.error('yt-dlp error:', msg);
224
+ }
225
+ });
226
+ ytdlpProcess.on('error', (err) => {
227
+ console.error('yt-dlp process error:', err.message);
228
+ });
229
+ ytdlpProcess.on('close', (code) => {
230
+ if (code !== 0) {
231
+ console.error(`yt-dlp exited with code ${code}`);
232
+ }
233
+ });
189
234
  }
190
235
  else {
191
236
  console.log('Using direct FFmpeg mode');
@@ -388,4 +433,4 @@ exports.AudioPlayer = AudioPlayer;
388
433
  function createAudioPlayer(options) {
389
434
  return new AudioPlayer(options);
390
435
  }
391
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVkaW9QbGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQXVkaW9QbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMGNBLDhDQUVDO0FBNWNELG1DQUFzQztBQUN0QyxpREFBb0Q7QUFDcEQscUNBQWlDO0FBQ2pDLGdEQU8yQjtBQUMzQixtQ0FBNEM7QUFLNUMsNENBQTRDO0FBQzVDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQztBQUMxQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDN0IsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU07QUFFMUUseUJBQXlCO0FBQ3pCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO0FBQ3BFLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDLENBQUMsa0NBQWtDO0FBQ3BFLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDLENBQUkseUNBQXlDO0FBQzFFLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUcsb0RBQW9EO0FBQ3JGLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDLENBQUMseUNBQXlDO0FBRTFFOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEscUJBQVk7SUFDM0MsMkJBQTJCO0lBQ3BCLEtBQUssR0FBcUIsRUFBRSxNQUFNLEVBQUUseUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFcEUscUJBQXFCO0lBQ2IsT0FBTyxDQUEyQjtJQUUxQyxtQ0FBbUM7SUFDM0IsYUFBYSxHQUF5QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXhELDZCQUE2QjtJQUNyQixlQUFlLEdBQXlCLElBQUksQ0FBQztJQUVyRCxxQkFBcUI7SUFDYixhQUFhLEdBQXdCLElBQUksQ0FBQztJQUVs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RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCB7IHNwYXduLCBDaGlsZFByb2Nlc3MgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuaW1wb3J0IHsgaHJ0aW1lIH0gZnJvbSAncHJvY2Vzcyc7XHJcbmltcG9ydCB7IFxyXG4gIFJvb20sIFxyXG4gIExvY2FsQXVkaW9UcmFjaywgXHJcbiAgQXVkaW9Tb3VyY2UsIFxyXG4gIFRyYWNrUHVibGlzaE9wdGlvbnMsIFxyXG4gIFRyYWNrU291cmNlLFxyXG4gIEF1ZGlvRnJhbWUgXHJcbn0gZnJvbSAnQGxpdmVraXQvcnRjLW5vZGUnO1xyXG5pbXBvcnQgeyBBdWRpb1BsYXllclN0YXR1cyB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBDcmVhdGVBdWRpb1BsYXllck9wdGlvbnMsIEF1ZGlvUGxheWVyU3RhdGUgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgQXVkaW9SZXNvdXJjZSB9IGZyb20gJy4vQXVkaW9SZXNvdXJjZSc7XHJcbmltcG9ydCB7IFZvaWNlQ29ubmVjdGlvbiB9IGZyb20gJy4vVm9pY2VDb25uZWN0aW9uJztcclxuXHJcbi8vIEF1ZGlvIHNldHRpbmdzIGZvciBMaXZlS2l0ICg0OGtIeiBzdGVyZW8pXHJcbmNvbnN0IFNBTVBMRV9SQVRFID0gNDgwMDA7XHJcbmNvbnN0IENIQU5ORUxTID0gMjtcclxuY29uc3QgRlJBTUVfRFVSQVRJT05fTVMgPSAyMDtcclxuY29uc3QgU0FNUExFU19QRVJfRlJBTUUgPSAoU0FNUExFX1JBVEUgKiBGUkFNRV9EVVJBVElPTl9NUykgLyAxMDAwOyAvLyA5NjBcclxuXHJcbi8vIEppdHRlciBidWZmZXIgc2V0dGluZ3NcclxuY29uc3QgRlJBTUVfSU5URVJWQUxfTlMgPSBCaWdJbnQoMjBfMDAwXzAwMCk7IC8vIDIwbXMgaW4gbmFub3NlY29uZHNcclxuY29uc3QgVEFSR0VUX0JVRkZFUl9GUkFNRVMgPSAxNTA7IC8vIH4zIHNlY29uZHMgLSB0YXJnZXQgYnVmZmVyIHNpemVcclxuY29uc3QgTUlOX0JVRkZFUl9GUkFNRVMgPSA3NTsgICAgLy8gfjEuNSBzZWNvbmRzIC0gbWluaW11bSBiZWZvcmUgd2Ugc3RhcnRcclxuY29uc3QgTUFYX0JVRkZFUl9GUkFNRVMgPSA1MDA7ICAgLy8gfjEwIHNlY29uZHMgLSBtYXggYnVmZmVyIHRvIHByZXZlbnQgbWVtb3J5IGlzc3Vlc1xyXG5jb25zdCBMT1dfQlVGRkVSX1RIUkVTSE9MRCA9IDUwOyAvLyB+MSBzZWNvbmQgLSB3aGVuIHRvIHNsb3cgZG93biBwbGF5YmFja1xyXG5cclxuLyoqXHJcbiAqIEF1ZGlvIHBsYXllciBmb3IgcGxheWluZyBhdWRpbyByZXNvdXJjZXNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBBdWRpb1BsYXllciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgLyoqIEN1cnJlbnQgcGxheWVyIHN0YXRlICovXHJcbiAgcHVibGljIHN0YXRlOiBBdWRpb1BsYXllclN0YXRlID0geyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLklkbGUgfTtcclxuICBcclxuICAvKiogUGxheWVyIG9wdGlvbnMgKi9cclxuICBwcml2YXRlIG9wdGlvbnM6IENyZWF0ZUF1ZGlvUGxheWVyT3B0aW9ucztcclxuICBcclxuICAvKiogU3Vic2NyaWJlZCB2b2ljZSBjb25uZWN0aW9ucyAqL1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU2V0PFZvaWNlQ29ubmVjdGlvbj4gPSBuZXcgU2V0KCk7XHJcbiAgXHJcbiAgLyoqIEN1cnJlbnQgYXVkaW8gcmVzb3VyY2UgKi9cclxuICBwcml2YXRlIGN1cnJlbnRSZXNvdXJjZTogQXVkaW9SZXNvdXJjZSB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gIC8qKiBGRm1wZWcgcHJvY2VzcyAqL1xyXG4gIHByaXZhdGUgZmZtcGVnUHJvY2VzczogQ2hpbGRQcm9jZXNzIHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgLyoqIExpdmVLaXQgYXVkaW8gc291cmNlIGFuZCB0cmFjayAqL1xyXG4gIHByaXZhdGUgYXVkaW9Tb3VyY2U6IEF1ZGlvU291cmNlIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBhdWRpb1RyYWNrOiBMb2NhbEF1ZGlvVHJhY2sgfCBudWxsID0gbnVsbDtcclxuICBcclxuICAvKiogRnJhbWUgcXVldWUgYW5kIHBsYXliYWNrIHN0YXRlICovXHJcbiAgcHJpdmF0ZSBmcmFtZVF1ZXVlOiBJbnQxNkFycmF5W10gPSBbXTtcclxuICBwcml2YXRlIHBsYXliYWNrVGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxlZnRvdmVyQnVmZmVyOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGlzUHVibGlzaGVkID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqIEhpZ2gtcmVzb2x1dGlvbiB0aW1pbmcgKi9cclxuICBwcml2YXRlIG5leHRGcmFtZVRpbWU6IGJpZ2ludCA9IEJpZ0ludCgwKTtcclxuICBwcml2YXRlIGlzUGxheWJhY2tMb29wUnVubmluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZmZtcGVnRG9uZSA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKiBCdWZmZXIgc3RhdGlzdGljcyAqL1xyXG4gIHByaXZhdGUgYnVmZmVyVW5kZXJydW5zID0gMDtcclxuICBwcml2YXRlIGZyYW1lc1BsYXllZCA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENyZWF0ZUF1ZGlvUGxheWVyT3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5vcHRpb25zID0ge1xyXG4gICAgICBiZWhhdmlvcnM6IHtcclxuICAgICAgICBub1N1YnNjcmliZXI6ICdwYXVzZScsXHJcbiAgICAgICAgbWF4TWlzc2VkRnJhbWVzOiA1LFxyXG4gICAgICAgIC4uLm9wdGlvbnMuYmVoYXZpb3JzXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGF5IGFuIGF1ZGlvIHJlc291cmNlXHJcbiAgICovXHJcbiAgcGxheShyZXNvdXJjZTogQXVkaW9SZXNvdXJjZSk6IHZvaWQge1xyXG4gICAgLy8gU3RvcCBjdXJyZW50IHBsYXliYWNrXHJcbiAgICB0aGlzLnN0b3AoKTtcclxuICAgIFxyXG4gICAgdGhpcy5jdXJyZW50UmVzb3VyY2UgPSByZXNvdXJjZTtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLkJ1ZmZlcmluZywgcmVzb3VyY2UgfSk7XHJcbiAgICBcclxuICAgIC8vIFN0YXJ0IHBsYXliYWNrIGlmIHdlIGhhdmUgYSByZWFkeSBjb25uZWN0aW9uXHJcbiAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGhpcy5zdWJzY3JpcHRpb25zKSB7XHJcbiAgICAgIGlmIChjb25uZWN0aW9uLmdldFJvb20oKSkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRQbGF5YmFjayhjb25uZWN0aW9uKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgcGxheWJhY2tcclxuICAgKi9cclxuICBwYXVzZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5QYXVzZWQsIHJlc291cmNlOiB0aGlzLmN1cnJlbnRSZXNvdXJjZSB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5wYXVzZSBwbGF5YmFja1xyXG4gICAqL1xyXG4gIHVucGF1c2UoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZS5zdGF0dXMgIT09IEF1ZGlvUGxheWVyU3RhdHVzLlBhdXNlZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nLCByZXNvdXJjZTogdGhpcy5jdXJyZW50UmVzb3VyY2UgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgcGxheWJhY2tcclxuICAgKi9cclxuICBzdG9wKGZvcmNlID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnN0YXRlLnN0YXR1cyA9PT0gQXVkaW9QbGF5ZXJTdGF0dXMuSWRsZSAmJiAhZm9yY2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGVhbnVwKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRSZXNvdXJjZSA9IG51bGw7XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5JZGxlIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgYSB2b2ljZSBjb25uZWN0aW9uIHRvIHRoaXMgcGxheWVyXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgc3Vic2NyaWJlKGNvbm5lY3Rpb246IFZvaWNlQ29ubmVjdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChjb25uZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIGEgdm9pY2UgY29ubmVjdGlvbiBmcm9tIHRoaXMgcGxheWVyXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgdW5zdWJzY3JpYmUoY29ubmVjdGlvbjogVm9pY2VDb25uZWN0aW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZGVsZXRlKGNvbm5lY3Rpb24pO1xyXG4gICAgXHJcbiAgICAvLyBBdXRvLXBhdXNlIGlmIG5vIHN1YnNjcmliZXJzXHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zLnNpemUgPT09IDAgJiYgdGhpcy5vcHRpb25zLmJlaGF2aW9ycz8ubm9TdWJzY3JpYmVyID09PSAncGF1c2UnKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlLnN0YXR1cyA9PT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZykge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLkF1dG9QYXVzZWQsIHJlc291cmNlOiB0aGlzLmN1cnJlbnRSZXNvdXJjZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGJlY29tZXMgcmVhZHlcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvbkNvbm5lY3Rpb25SZWFkeShjb25uZWN0aW9uOiBWb2ljZUNvbm5lY3Rpb24pOiB2b2lkIHtcclxuICAgIC8vIElmIHdlIGhhdmUgYSByZXNvdXJjZSB3YWl0aW5nLCBzdGFydCBwbGF5YmFja1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFJlc291cmNlICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBBdWRpb1BsYXllclN0YXR1cy5CdWZmZXJpbmcpIHtcclxuICAgICAgdGhpcy5zdGFydFBsYXliYWNrKGNvbm5lY3Rpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzdGFydFBsYXliYWNrKGNvbm5lY3Rpb246IFZvaWNlQ29ubmVjdGlvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgcm9vbSA9IGNvbm5lY3Rpb24uZ2V0Um9vbSgpO1xyXG4gICAgaWYgKCFyb29tIHx8ICF0aGlzLmN1cnJlbnRSZXNvdXJjZSkgcmV0dXJuO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhdWRpbyBzb3VyY2UgYW5kIHRyYWNrXHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0dXBBdWRpb1RyYWNrKHJvb20pO1xyXG4gICAgICBcclxuICAgICAgLy8gU3RhcnQgRkZtcGVnIHRvIGRlY29kZSBhdWRpbyAtIHRoaXMgd2lsbCBzZXQgc3RhdGUgdG8gUGxheWluZyB3aGVuIHJlYWR5XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRGRm1wZWcoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB7IG1lc3NhZ2U6IChlcnJvciBhcyBFcnJvcikubWVzc2FnZSwgcmVzb3VyY2U6IHRoaXMuY3VycmVudFJlc291cmNlIH0pO1xyXG4gICAgICB0aGlzLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0dXBBdWRpb1RyYWNrKHJvb206IFJvb20pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmlzUHVibGlzaGVkKSByZXR1cm47XHJcbiAgICBcclxuICAgIHRoaXMuYXVkaW9Tb3VyY2UgPSBuZXcgQXVkaW9Tb3VyY2UoU0FNUExFX1JBVEUsIENIQU5ORUxTKTtcclxuICAgIHRoaXMuYXVkaW9UcmFjayA9IExvY2FsQXVkaW9UcmFjay5jcmVhdGVBdWRpb1RyYWNrKCdtdXNpYycsIHRoaXMuYXVkaW9Tb3VyY2UpO1xyXG4gICAgXHJcbiAgICBjb25zdCBvcHRpb25zID0gbmV3IFRyYWNrUHVibGlzaE9wdGlvbnMoKTtcclxuICAgIG9wdGlvbnMuc291cmNlID0gVHJhY2tTb3VyY2UuU09VUkNFX01JQ1JPUEhPTkU7XHJcbiAgICBcclxuICAgIGlmIChyb29tLmxvY2FsUGFydGljaXBhbnQpIHtcclxuICAgICAgYXdhaXQgcm9vbS5sb2NhbFBhcnRpY2lwYW50LnB1Ymxpc2hUcmFjayh0aGlzLmF1ZGlvVHJhY2ssIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1B1Ymxpc2hlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHN0YXJ0RkZtcGVnKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRSZXNvdXJjZSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICBjb25zdCBpbnB1dFNvdXJjZSA9IHRoaXMuY3VycmVudFJlc291cmNlLmdldElucHV0U291cmNlKCk7XHJcbiAgICBjb25zb2xlLmxvZyhgRkZtcGVnIGlucHV0IHNvdXJjZTogJHtpbnB1dFNvdXJjZS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKTtcclxuICAgIFxyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHN0cmVhbWluZyBVUkwgdGhhdCBuZWVkcyB5dC1kbHBcclxuICAgIGNvbnN0IG5lZWRzWXREbHAgPSBpbnB1dFNvdXJjZS5pbmNsdWRlcygneW91dHViZS5jb20nKSB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZS5pbmNsdWRlcygneW91dHUuYmUnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGlucHV0U291cmNlLmluY2x1ZGVzKCdzb3VuZGNsb3VkLmNvbScpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTb3VyY2UuaW5jbHVkZXMoJ3R3aXRjaC50dicpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTb3VyY2Uuc3RhcnRzV2l0aCgneXRzZWFyY2g6Jyk7XHJcbiAgICBcclxuICAgIGlmIChuZWVkc1l0RGxwKSB7XHJcbiAgICAgIC8vIFVzZSB5dC1kbHAgdG8gcGlwZSBhdWRpbyBkaXJlY3RseSB0byBGRm1wZWdcclxuICAgICAgY29uc29sZS5sb2coJ1VzaW5nIHl0LWRscCBwaXBlIG1vZGUnKTtcclxuICAgICAgXHJcbiAgICAgIC8vIERldGVjdCBwbGF0Zm9ybSBhbmQgdXNlIGFwcHJvcHJpYXRlIHNoZWxsXHJcbiAgICAgIGNvbnN0IGlzV2luZG93cyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMic7XHJcbiAgICAgIGNvbnN0IHl0RGxwUGF0aCA9IGlzV2luZG93cyA/ICd5dC1kbHAnIDogJ34vLmxvY2FsL2Jpbi95dC1kbHAnO1xyXG4gICAgICBjb25zdCBjb21tYW5kID0gYCR7eXREbHBQYXRofSAtZiBcImJlc3RhdWRpby9iZXN0XCIgLW8gLSAtLW5vLXBsYXlsaXN0IC0tbm8td2FybmluZ3MgXCIke2lucHV0U291cmNlfVwiIHwgZmZtcGVnIC1pIHBpcGU6MCAtZiBzMTZsZSAtYXIgJHtTQU1QTEVfUkFURX0gLWFjICR7Q0hBTk5FTFN9IC1hY29kZWMgcGNtX3MxNmxlIC1gO1xyXG4gICAgICBcclxuICAgICAgaWYgKGlzV2luZG93cykge1xyXG4gICAgICAgIHRoaXMuZmZtcGVnUHJvY2VzcyA9IHNwYXduKCdjbWQnLCBbJy9jJywgY29tbWFuZF0sIHsgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZmbXBlZ1Byb2Nlc3MgPSBzcGF3bignYmFzaCcsIFsnLWMnLCBjb21tYW5kXSwgeyBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgZGlyZWN0IEZGbXBlZyBtb2RlJyk7XHJcbiAgICAgIHRoaXMuZmZtcGVnUHJvY2VzcyA9IHNwYXduKCdmZm1wZWcnLCBbXHJcbiAgICAgICAgJy1yZWNvbm5lY3QnLCAnMScsXHJcbiAgICAgICAgJy1yZWNvbm5lY3Rfc3RyZWFtZWQnLCAnMScsXHJcbiAgICAgICAgJy1yZWNvbm5lY3RfZGVsYXlfbWF4JywgJzUnLFxyXG4gICAgICAgICctaScsIGlucHV0U291cmNlLFxyXG4gICAgICAgICctZicsICdzMTZsZScsXHJcbiAgICAgICAgJy1hcicsIFN0cmluZyhTQU1QTEVfUkFURSksXHJcbiAgICAgICAgJy1hYycsIFN0cmluZyhDSEFOTkVMUyksXHJcbiAgICAgICAgJy1hY29kZWMnLCAncGNtX3MxNmxlJyxcclxuICAgICAgICAnLSdcclxuICAgICAgXSwgeyBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZyYW1lU2l6ZSA9IFNBTVBMRVNfUEVSX0ZSQU1FICogQ0hBTk5FTFMgKiAyO1xyXG4gICAgdGhpcy5mZm1wZWdEb25lID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzUmVjZWl2ZWREYXRhID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5mZm1wZWdQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCAoY2h1bms6IEJ1ZmZlcikgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5zdGF0dXMgIT09IEF1ZGlvUGxheWVyU3RhdHVzLlBsYXlpbmcgJiYgXHJcbiAgICAgICAgICB0aGlzLnN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuQnVmZmVyaW5nKSByZXR1cm47XHJcbiAgICAgIFxyXG4gICAgICBoYXNSZWNlaXZlZERhdGEgPSB0cnVlO1xyXG4gICAgICBcclxuICAgICAgLy8gSGFuZGxlIGxlZnRvdmVyIGZyb20gcHJldmlvdXMgY2h1bmtcclxuICAgICAgaWYgKHRoaXMubGVmdG92ZXJCdWZmZXIgJiYgdGhpcy5sZWZ0b3ZlckJ1ZmZlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuY29uY2F0KFt0aGlzLmxlZnRvdmVyQnVmZmVyLCBjaHVua10pO1xyXG4gICAgICAgIHRoaXMubGVmdG92ZXJCdWZmZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBsZXQgb2Zmc2V0ID0gMDtcclxuICAgICAgd2hpbGUgKG9mZnNldCArIGZyYW1lU2l6ZSA8PSBjaHVuay5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBmcmFtZSA9IGNodW5rLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZnJhbWVTaXplKTtcclxuICAgICAgICBjb25zdCBpbnQxNkFycmF5ID0gbmV3IEludDE2QXJyYXkoU0FNUExFU19QRVJfRlJBTUUgKiBDSEFOTkVMUyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnQxNkFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpbnQxNkFycmF5W2ldID0gZnJhbWUucmVhZEludDE2TEUoaSAqIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmZyYW1lUXVldWUucHVzaChpbnQxNkFycmF5KTtcclxuICAgICAgICBvZmZzZXQgKz0gZnJhbWVTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBTYXZlIGxlZnRvdmVyXHJcbiAgICAgIGlmIChvZmZzZXQgPCBjaHVuay5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmxlZnRvdmVyQnVmZmVyID0gY2h1bmsuc2xpY2Uob2Zmc2V0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHN0ZGVyck91dHB1dCA9ICcnO1xyXG4gICAgdGhpcy5mZm1wZWdQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XHJcbiAgICAgIHN0ZGVyck91dHB1dCArPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZmbXBlZ1Byb2Nlc3Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcclxuICAgICAgdGhpcy5mZm1wZWdEb25lID0gdHJ1ZTtcclxuICAgICAgdGhpcy5mZm1wZWdQcm9jZXNzID0gbnVsbDtcclxuICAgICAgaWYgKGNvZGUgIT09IDApIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBGRm1wZWcgc3RkZXJyOlxcbiR7c3RkZXJyT3V0cHV0fWApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIEZGbXBlZyBjbG9zZWQgd2l0aCBjb2RlICR7Y29kZX0sIGhhc1JlY2VpdmVkRGF0YTogJHtoYXNSZWNlaXZlZERhdGF9LCBxdWV1ZTogJHt0aGlzLmZyYW1lUXVldWUubGVuZ3RofWApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mZm1wZWdQcm9jZXNzLm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRkZtcGVnIHByb2Nlc3MgZXJyb3I6JywgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgeyBtZXNzYWdlOiBlcnIubWVzc2FnZSwgcmVzb3VyY2U6IHRoaXMuY3VycmVudFJlc291cmNlIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV2FpdCBmb3IgaW5pdGlhbCBidWZmZXIgd2l0aCB0aW1lb3V0XHJcbiAgICBjb25zdCBidWZmZXJUaW1lb3V0ID0gMTAwMDA7IC8vIDEwIHNlY29uZHMgZm9yIGluaXRpYWwgYnVmZmVyXHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgXHJcbiAgICB3aGlsZSAodGhpcy5mcmFtZVF1ZXVlLmxlbmd0aCA8IE1JTl9CVUZGRVJfRlJBTUVTICYmIERhdGUubm93KCkgLSBzdGFydFRpbWUgPCBidWZmZXJUaW1lb3V0KSB7XHJcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAxMDApKTtcclxuICAgICAgXHJcbiAgICAgIC8vIENoZWNrIGlmIEZGbXBlZyBmYWlsZWQgZWFybHlcclxuICAgICAgaWYgKHRoaXMuZmZtcGVnRG9uZSAmJiB0aGlzLmZyYW1lUXVldWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGRm1wZWcgZmFpbGVkIHRvIHByb2R1Y2UgYXVkaW8gZGF0YScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmZyYW1lUXVldWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGltZW91dCB3YWl0aW5nIGZvciBhdWRpbyBkYXRhJyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIFN0YXJ0aW5nIHBsYXliYWNrIHdpdGggJHt0aGlzLmZyYW1lUXVldWUubGVuZ3RofSBmcmFtZXMgYnVmZmVyZWQgKHRhcmdldDogJHtUQVJHRVRfQlVGRkVSX0ZSQU1FU30pYCk7XHJcblxyXG4gICAgLy8gTWFyayByZWFkeSBmb3IgcGxheWJhY2sgLSBzZXRTdGF0ZSB3aWxsIHRyaWdnZXIgdGhlIGxvb3BcclxuICAgIHRoaXMuaXNQbGF5YmFja0xvb3BSdW5uaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubmV4dEZyYW1lVGltZSA9IGhydGltZS5iaWdpbnQoKTtcclxuICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIFBsYXliYWNrIHJlYWR5LCBhdWRpb1NvdXJjZSBleGlzdHM6ICR7ISF0aGlzLmF1ZGlvU291cmNlfWApO1xyXG4gICAgXHJcbiAgICAvLyBTZXQgc3RhdGUgdG8gcGxheWluZyAtIHRoaXMgd2lsbCB0cmlnZ2VyIHNjaGVkdWxlTmV4dEZyYW1lIHZpYSBzZXRTdGF0ZVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHN0YXR1czogQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZywgcmVzb3VyY2U6IHRoaXMuY3VycmVudFJlc291cmNlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGlnaC1yZXNvbHV0aW9uIGZyYW1lIHNjaGVkdWxpbmcgdXNpbmcgaHJ0aW1lXHJcbiAgICogVGhpcyBwcm92aWRlcyBtdWNoIG1vcmUgYWNjdXJhdGUgdGltaW5nIHRoYW4gc2V0SW50ZXJ2YWxcclxuICAgKi9cclxuICBwcml2YXRlIHNjaGVkdWxlTmV4dEZyYW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzUGxheWJhY2tMb29wUnVubmluZyB8fCB0aGlzLnN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZykge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBzY2hlZHVsZU5leHRGcmFtZSBza2lwcGVkOiBsb29wUnVubmluZz0ke3RoaXMuaXNQbGF5YmFja0xvb3BSdW5uaW5nfSwgc3RhdHVzPSR7dGhpcy5zdGF0ZS5zdGF0dXN9YCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub3cgPSBocnRpbWUuYmlnaW50KCk7XHJcbiAgICBjb25zdCBkZWxheU5zID0gdGhpcy5uZXh0RnJhbWVUaW1lIC0gbm93O1xyXG4gICAgY29uc3QgZGVsYXlNcyA9IE51bWJlcihkZWxheU5zKSAvIDFfMDAwXzAwMDtcclxuXHJcbiAgICBpZiAodGhpcy5mcmFtZXNQbGF5ZWQgPT09IDApIHtcclxuICAgICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gRmlyc3QgZnJhbWUgc2NoZWR1bGluZzogZGVsYXlNcz0ke2RlbGF5TXMudG9GaXhlZCgyKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTY2hlZHVsZSBuZXh0IGZyYW1lXHJcbiAgICBpZiAoZGVsYXlNcyA+IDEpIHtcclxuICAgICAgdGhpcy5wbGF5YmFja1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucHJvY2Vzc0ZyYW1lKCksIE1hdGgubWF4KDEsIGRlbGF5TXMgLSAxKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBXZSdyZSBiZWhpbmQsIHByb2Nlc3MgaW1tZWRpYXRlbHlcclxuICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHRoaXMucHJvY2Vzc0ZyYW1lKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBhbmQgc2VuZCBhIHNpbmdsZSBhdWRpbyBmcmFtZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0ZyYW1lKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmlzUGxheWJhY2tMb29wUnVubmluZyB8fCB0aGlzLnN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZykge1xyXG4gICAgICBpZiAodGhpcy5mcmFtZXNQbGF5ZWQgPT09IDApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBwcm9jZXNzRnJhbWUgc2tpcHBlZDogbG9vcFJ1bm5pbmc9JHt0aGlzLmlzUGxheWJhY2tMb29wUnVubmluZ30sIHN0YXR1cz0ke3RoaXMuc3RhdGUuc3RhdHVzfWApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBidWZmZXIgc3RhdHVzXHJcbiAgICBjb25zdCBidWZmZXJTaXplID0gdGhpcy5mcmFtZVF1ZXVlLmxlbmd0aDtcclxuICAgIFxyXG4gICAgaWYgKGJ1ZmZlclNpemUgPiAwICYmIHRoaXMuYXVkaW9Tb3VyY2UpIHtcclxuICAgICAgY29uc3QgaW50MTZBcnJheSA9IHRoaXMuZnJhbWVRdWV1ZS5zaGlmdCgpITtcclxuICAgICAgY29uc3QgYXVkaW9GcmFtZSA9IG5ldyBBdWRpb0ZyYW1lKGludDE2QXJyYXksIFNBTVBMRV9SQVRFLCBDSEFOTkVMUywgU0FNUExFU19QRVJfRlJBTUUpO1xyXG4gICAgICBcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmF1ZGlvU291cmNlLmNhcHR1cmVGcmFtZShhdWRpb0ZyYW1lKTtcclxuICAgICAgICB0aGlzLmZyYW1lc1BsYXllZCsrO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIExvZyBwcm9ncmVzcyBldmVyeSA1MDAgZnJhbWVzICh+MTAgc2Vjb25kcylcclxuICAgICAgICBpZiAodGhpcy5mcmFtZXNQbGF5ZWQgJSA1MDAgPT09IDApIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIFByb2dyZXNzOiAke3RoaXMuZnJhbWVzUGxheWVkfSBmcmFtZXMgcGxheWVkLCBidWZmZXI6ICR7YnVmZmVyU2l6ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBbQXVkaW9QbGF5ZXJdIEZyYW1lIGVycm9yOmAsIChlIGFzIEVycm9yKS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gVXBkYXRlIHRpbWluZyBmb3IgbmV4dCBmcmFtZVxyXG4gICAgICB0aGlzLm5leHRGcmFtZVRpbWUgKz0gRlJBTUVfSU5URVJWQUxfTlM7XHJcbiAgICAgIFxyXG4gICAgICAvLyBBZGFwdGl2ZSB0aW1pbmc6IGlmIGJ1ZmZlciBpcyBsb3csIHNsb3cgZG93biBzbGlnaHRseSB0byBsZXQgaXQgcmVjb3ZlclxyXG4gICAgICBpZiAoYnVmZmVyU2l6ZSA8IExPV19CVUZGRVJfVEhSRVNIT0xEICYmICF0aGlzLmZmbXBlZ0RvbmUpIHtcclxuICAgICAgICAvLyBBZGQgMW1zIGRlbGF5IHRvIGxldCBidWZmZXIgcmVjb3ZlclxyXG4gICAgICAgIHRoaXMubmV4dEZyYW1lVGltZSArPSBCaWdJbnQoMV8wMDBfMDAwKTtcclxuICAgICAgICB0aGlzLmJ1ZmZlclVuZGVycnVucysrO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlclVuZGVycnVucyAlIDUwID09PSAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBCdWZmZXIgbG93OiAke2J1ZmZlclNpemV9IGZyYW1lcywgJHt0aGlzLmJ1ZmZlclVuZGVycnVuc30gdW5kZXJydW5zYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBTY2hlZHVsZSBuZXh0IGZyYW1lXHJcbiAgICAgIHRoaXMuc2NoZWR1bGVOZXh0RnJhbWUoKTtcclxuICAgICAgXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmZtcGVnRG9uZSAmJiBidWZmZXJTaXplID09PSAwKSB7XHJcbiAgICAgIC8vIFBsYXliYWNrIGZpbmlzaGVkXHJcbiAgICAgIGNvbnNvbGUubG9nKCdbQXVkaW9QbGF5ZXJdIFBsYXliYWNrIGZpbmlzaGVkIC0gcXVldWUgZW1wdHkgYW5kIEZGbXBlZyBkb25lJyk7XHJcbiAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgfSBlbHNlIGlmIChidWZmZXJTaXplID09PSAwKSB7XHJcbiAgICAgIC8vIEJ1ZmZlciB1bmRlcnJ1biAtIHdhaXQgZm9yIG1vcmUgZGF0YVxyXG4gICAgICB0aGlzLmJ1ZmZlclVuZGVycnVucysrO1xyXG4gICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBCdWZmZXIgdW5kZXJydW4gIyR7dGhpcy5idWZmZXJVbmRlcnJ1bnN9LCB3YWl0aW5nIGZvciBkYXRhLi4uYCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBXYWl0IGEgYml0IGFuZCB0cnkgYWdhaW5cclxuICAgICAgdGhpcy5uZXh0RnJhbWVUaW1lID0gaHJ0aW1lLmJpZ2ludCgpICsgQmlnSW50KDUwXzAwMF8wMDApOyAvLyA1MG1zXHJcbiAgICAgIHRoaXMuc2NoZWR1bGVOZXh0RnJhbWUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW51cCgpOiB2b2lkIHtcclxuICAgIC8vIFN0b3AgcGxheWJhY2sgbG9vcFxyXG4gICAgdGhpcy5pc1BsYXliYWNrTG9vcFJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnBsYXliYWNrVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wbGF5YmFja1RpbWVvdXQpO1xyXG4gICAgICB0aGlzLnBsYXliYWNrVGltZW91dCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEtpbGwgRkZtcGVnXHJcbiAgICBpZiAodGhpcy5mZm1wZWdQcm9jZXNzKSB7XHJcbiAgICAgIHRoaXMuZmZtcGVnUHJvY2Vzcy5raWxsKCdTSUdLSUxMJyk7XHJcbiAgICAgIHRoaXMuZmZtcGVnUHJvY2VzcyA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIENsZWFyIGZyYW1lIHF1ZXVlXHJcbiAgICB0aGlzLmZyYW1lUXVldWUgPSBbXTtcclxuICAgIHRoaXMubGVmdG92ZXJCdWZmZXIgPSBudWxsO1xyXG4gICAgXHJcbiAgICAvLyBSZXNldCB0aW1pbmcgYW5kIHN0YXRlXHJcbiAgICB0aGlzLm5leHRGcmFtZVRpbWUgPSBCaWdJbnQoMCk7XHJcbiAgICB0aGlzLmZmbXBlZ0RvbmUgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgLy8gTG9nIHN0YXRzXHJcbiAgICBpZiAodGhpcy5mcmFtZXNQbGF5ZWQgPiAwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIFBsYXliYWNrIHN0YXRzOiAke3RoaXMuZnJhbWVzUGxheWVkfSBmcmFtZXMsICR7dGhpcy5idWZmZXJVbmRlcnJ1bnN9IHVuZGVycnVuc2ApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5idWZmZXJVbmRlcnJ1bnMgPSAwO1xyXG4gICAgdGhpcy5mcmFtZXNQbGF5ZWQgPSAwO1xyXG4gICAgXHJcbiAgICAvLyBOb3RlOiBXZSBkb24ndCB1bnB1Ymxpc2ggdGhlIHRyYWNrIC0gaXQgc3RheXMgcHVibGlzaGVkIGZvciBuZXh0IHBsYXlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3RhdGUobmV3U3RhdGU6IEF1ZGlvUGxheWVyU3RhdGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9sZFN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcclxuICAgIHRoaXMuZW1pdCgnc3RhdGVDaGFuZ2UnLCBvbGRTdGF0ZSwgbmV3U3RhdGUpO1xyXG4gICAgXHJcbiAgICAvLyBTdGFydCBwbGF5YmFjayBsb29wIHdoZW4gdHJhbnNpdGlvbmluZyB0byBQbGF5aW5nXHJcbiAgICBpZiAobmV3U3RhdGUuc3RhdHVzID09PSBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nICYmIG9sZFN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZykge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBTdGF0ZSBjaGFuZ2VkIHRvIFBsYXlpbmcsIHN0YXJ0aW5nIHBsYXliYWNrIGxvb3BgKTtcclxuICAgICAgdGhpcy5zY2hlZHVsZU5leHRGcmFtZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBhdWRpbyBwbGF5ZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBdWRpb1BsYXllcihvcHRpb25zPzogQ3JlYXRlQXVkaW9QbGF5ZXJPcHRpb25zKTogQXVkaW9QbGF5ZXIge1xyXG4gIHJldHVybiBuZXcgQXVkaW9QbGF5ZXIob3B0aW9ucyk7XHJcbn1cclxuIl19
436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVkaW9QbGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQXVkaW9QbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaWdCQSw4Q0FFQztBQW5nQkQsbUNBQXNDO0FBQ3RDLGlEQUFvRDtBQUNwRCxxQ0FBaUM7QUFDakMsZ0RBTzJCO0FBQzNCLG1DQUE0QztBQUs1Qyw0Q0FBNEM7QUFDNUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzFCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLGlCQUFpQixHQUFHLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUUxRSx5QkFBeUI7QUFDekIsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7QUFDcEUsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsQ0FBQyxrQ0FBa0M7QUFDcEUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsQ0FBSSx5Q0FBeUM7QUFDMUUsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBRyxvREFBb0Q7QUFDckYsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7QUFFMUU7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSxxQkFBWTtJQUMzQywyQkFBMkI7SUFDcEIsS0FBSyxHQUFxQixFQUFFLE1BQU0sRUFBRSx5QkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVwRSxxQkFBcUI7SUFDYixPQUFPLENBQTJCO0lBRTFDLG1DQUFtQztJQUMzQixhQUFhLEdBQXlCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFeEQsNkJBQTZCO0lBQ3JCLGVBQWUsR0FBeUIsSUFBSSxDQUFDO0lBRXJELHFCQUFxQjtJQUNiLGFBQWEsR0FBd0IsSUFBSSxDQUFDO0lB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QUUsQ0FBQztZQUNuRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTVkRCxrQ0E0ZEM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE9BQWtDO0lBQ2xFLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCB7IHNwYXduLCBDaGlsZFByb2Nlc3MgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuaW1wb3J0IHsgaHJ0aW1lIH0gZnJvbSAncHJvY2Vzcyc7XHJcbmltcG9ydCB7IFxyXG4gIFJvb20sIFxyXG4gIExvY2FsQXVkaW9UcmFjaywgXHJcbiAgQXVkaW9Tb3VyY2UsIFxyXG4gIFRyYWNrUHVibGlzaE9wdGlvbnMsIFxyXG4gIFRyYWNrU291cmNlLFxyXG4gIEF1ZGlvRnJhbWUgXHJcbn0gZnJvbSAnQGxpdmVraXQvcnRjLW5vZGUnO1xyXG5pbXBvcnQgeyBBdWRpb1BsYXllclN0YXR1cyB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBDcmVhdGVBdWRpb1BsYXllck9wdGlvbnMsIEF1ZGlvUGxheWVyU3RhdGUgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgQXVkaW9SZXNvdXJjZSB9IGZyb20gJy4vQXVkaW9SZXNvdXJjZSc7XHJcbmltcG9ydCB7IFZvaWNlQ29ubmVjdGlvbiB9IGZyb20gJy4vVm9pY2VDb25uZWN0aW9uJztcclxuXHJcbi8vIEF1ZGlvIHNldHRpbmdzIGZvciBMaXZlS2l0ICg0OGtIeiBzdGVyZW8pXHJcbmNvbnN0IFNBTVBMRV9SQVRFID0gNDgwMDA7XHJcbmNvbnN0IENIQU5ORUxTID0gMjtcclxuY29uc3QgRlJBTUVfRFVSQVRJT05fTVMgPSAyMDtcclxuY29uc3QgU0FNUExFU19QRVJfRlJBTUUgPSAoU0FNUExFX1JBVEUgKiBGUkFNRV9EVVJBVElPTl9NUykgLyAxMDAwOyAvLyA5NjBcclxuXHJcbi8vIEppdHRlciBidWZmZXIgc2V0dGluZ3NcclxuY29uc3QgRlJBTUVfSU5URVJWQUxfTlMgPSBCaWdJbnQoMjBfMDAwXzAwMCk7IC8vIDIwbXMgaW4gbmFub3NlY29uZHNcclxuY29uc3QgVEFSR0VUX0JVRkZFUl9GUkFNRVMgPSAxNTA7IC8vIH4zIHNlY29uZHMgLSB0YXJnZXQgYnVmZmVyIHNpemVcclxuY29uc3QgTUlOX0JVRkZFUl9GUkFNRVMgPSA3NTsgICAgLy8gfjEuNSBzZWNvbmRzIC0gbWluaW11bSBiZWZvcmUgd2Ugc3RhcnRcclxuY29uc3QgTUFYX0JVRkZFUl9GUkFNRVMgPSA1MDA7ICAgLy8gfjEwIHNlY29uZHMgLSBtYXggYnVmZmVyIHRvIHByZXZlbnQgbWVtb3J5IGlzc3Vlc1xyXG5jb25zdCBMT1dfQlVGRkVSX1RIUkVTSE9MRCA9IDUwOyAvLyB+MSBzZWNvbmQgLSB3aGVuIHRvIHNsb3cgZG93biBwbGF5YmFja1xyXG5cclxuLyoqXHJcbiAqIEF1ZGlvIHBsYXllciBmb3IgcGxheWluZyBhdWRpbyByZXNvdXJjZXNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBBdWRpb1BsYXllciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgLyoqIEN1cnJlbnQgcGxheWVyIHN0YXRlICovXHJcbiAgcHVibGljIHN0YXRlOiBBdWRpb1BsYXllclN0YXRlID0geyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLklkbGUgfTtcclxuICBcclxuICAvKiogUGxheWVyIG9wdGlvbnMgKi9cclxuICBwcml2YXRlIG9wdGlvbnM6IENyZWF0ZUF1ZGlvUGxheWVyT3B0aW9ucztcclxuICBcclxuICAvKiogU3Vic2NyaWJlZCB2b2ljZSBjb25uZWN0aW9ucyAqL1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU2V0PFZvaWNlQ29ubmVjdGlvbj4gPSBuZXcgU2V0KCk7XHJcbiAgXHJcbiAgLyoqIEN1cnJlbnQgYXVkaW8gcmVzb3VyY2UgKi9cclxuICBwcml2YXRlIGN1cnJlbnRSZXNvdXJjZTogQXVkaW9SZXNvdXJjZSB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gIC8qKiBGRm1wZWcgcHJvY2VzcyAqL1xyXG4gIHByaXZhdGUgZmZtcGVnUHJvY2VzczogQ2hpbGRQcm9jZXNzIHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgLyoqIExpdmVLaXQgYXVkaW8gc291cmNlIGFuZCB0cmFjayAqL1xyXG4gIHByaXZhdGUgYXVkaW9Tb3VyY2U6IEF1ZGlvU291cmNlIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBhdWRpb1RyYWNrOiBMb2NhbEF1ZGlvVHJhY2sgfCBudWxsID0gbnVsbDtcclxuICBcclxuICAvKiogRnJhbWUgcXVldWUgYW5kIHBsYXliYWNrIHN0YXRlICovXHJcbiAgcHJpdmF0ZSBmcmFtZVF1ZXVlOiBJbnQxNkFycmF5W10gPSBbXTtcclxuICBwcml2YXRlIHBsYXliYWNrVGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxlZnRvdmVyQnVmZmVyOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGlzUHVibGlzaGVkID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqIEhpZ2gtcmVzb2x1dGlvbiB0aW1pbmcgKi9cclxuICBwcml2YXRlIG5leHRGcmFtZVRpbWU6IGJpZ2ludCA9IEJpZ0ludCgwKTtcclxuICBwcml2YXRlIGlzUGxheWJhY2tMb29wUnVubmluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZmZtcGVnRG9uZSA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKiBCdWZmZXIgc3RhdGlzdGljcyAqL1xyXG4gIHByaXZhdGUgYnVmZmVyVW5kZXJydW5zID0gMDtcclxuICBwcml2YXRlIGZyYW1lc1BsYXllZCA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENyZWF0ZUF1ZGlvUGxheWVyT3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5vcHRpb25zID0ge1xyXG4gICAgICBiZWhhdmlvcnM6IHtcclxuICAgICAgICBub1N1YnNjcmliZXI6ICdwYXVzZScsXHJcbiAgICAgICAgbWF4TWlzc2VkRnJhbWVzOiA1LFxyXG4gICAgICAgIC4uLm9wdGlvbnMuYmVoYXZpb3JzXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGF5IGFuIGF1ZGlvIHJlc291cmNlXHJcbiAgICovXHJcbiAgcGxheShyZXNvdXJjZTogQXVkaW9SZXNvdXJjZSk6IHZvaWQge1xyXG4gICAgLy8gU3RvcCBjdXJyZW50IHBsYXliYWNrXHJcbiAgICB0aGlzLnN0b3AoKTtcclxuICAgIFxyXG4gICAgdGhpcy5jdXJyZW50UmVzb3VyY2UgPSByZXNvdXJjZTtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLkJ1ZmZlcmluZywgcmVzb3VyY2UgfSk7XHJcbiAgICBcclxuICAgIC8vIFN0YXJ0IHBsYXliYWNrIGlmIHdlIGhhdmUgYSByZWFkeSBjb25uZWN0aW9uXHJcbiAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGhpcy5zdWJzY3JpcHRpb25zKSB7XHJcbiAgICAgIGlmIChjb25uZWN0aW9uLmdldFJvb20oKSkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRQbGF5YmFjayhjb25uZWN0aW9uKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgcGxheWJhY2tcclxuICAgKi9cclxuICBwYXVzZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5QYXVzZWQsIHJlc291cmNlOiB0aGlzLmN1cnJlbnRSZXNvdXJjZSB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5wYXVzZSBwbGF5YmFja1xyXG4gICAqL1xyXG4gIHVucGF1c2UoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZS5zdGF0dXMgIT09IEF1ZGlvUGxheWVyU3RhdHVzLlBhdXNlZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nLCByZXNvdXJjZTogdGhpcy5jdXJyZW50UmVzb3VyY2UgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgcGxheWJhY2tcclxuICAgKi9cclxuICBzdG9wKGZvcmNlID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnN0YXRlLnN0YXR1cyA9PT0gQXVkaW9QbGF5ZXJTdGF0dXMuSWRsZSAmJiAhZm9yY2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGVhbnVwKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRSZXNvdXJjZSA9IG51bGw7XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5JZGxlIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgYSB2b2ljZSBjb25uZWN0aW9uIHRvIHRoaXMgcGxheWVyXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgc3Vic2NyaWJlKGNvbm5lY3Rpb246IFZvaWNlQ29ubmVjdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChjb25uZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIGEgdm9pY2UgY29ubmVjdGlvbiBmcm9tIHRoaXMgcGxheWVyXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgdW5zdWJzY3JpYmUoY29ubmVjdGlvbjogVm9pY2VDb25uZWN0aW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZGVsZXRlKGNvbm5lY3Rpb24pO1xyXG4gICAgXHJcbiAgICAvLyBBdXRvLXBhdXNlIGlmIG5vIHN1YnNjcmliZXJzXHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zLnNpemUgPT09IDAgJiYgdGhpcy5vcHRpb25zLmJlaGF2aW9ycz8ubm9TdWJzY3JpYmVyID09PSAncGF1c2UnKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlLnN0YXR1cyA9PT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZykge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLkF1dG9QYXVzZWQsIHJlc291cmNlOiB0aGlzLmN1cnJlbnRSZXNvdXJjZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGJlY29tZXMgcmVhZHlcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvbkNvbm5lY3Rpb25SZWFkeShjb25uZWN0aW9uOiBWb2ljZUNvbm5lY3Rpb24pOiB2b2lkIHtcclxuICAgIC8vIElmIHdlIGhhdmUgYSByZXNvdXJjZSB3YWl0aW5nLCBzdGFydCBwbGF5YmFja1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFJlc291cmNlICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBBdWRpb1BsYXllclN0YXR1cy5CdWZmZXJpbmcpIHtcclxuICAgICAgdGhpcy5zdGFydFBsYXliYWNrKGNvbm5lY3Rpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzdGFydFBsYXliYWNrKGNvbm5lY3Rpb246IFZvaWNlQ29ubmVjdGlvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgcm9vbSA9IGNvbm5lY3Rpb24uZ2V0Um9vbSgpO1xyXG4gICAgaWYgKCFyb29tIHx8ICF0aGlzLmN1cnJlbnRSZXNvdXJjZSkgcmV0dXJuO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhdWRpbyBzb3VyY2UgYW5kIHRyYWNrXHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0dXBBdWRpb1RyYWNrKHJvb20pO1xyXG4gICAgICBcclxuICAgICAgLy8gU3RhcnQgRkZtcGVnIHRvIGRlY29kZSBhdWRpbyAtIHRoaXMgd2lsbCBzZXQgc3RhdGUgdG8gUGxheWluZyB3aGVuIHJlYWR5XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRGRm1wZWcoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB7IG1lc3NhZ2U6IChlcnJvciBhcyBFcnJvcikubWVzc2FnZSwgcmVzb3VyY2U6IHRoaXMuY3VycmVudFJlc291cmNlIH0pO1xyXG4gICAgICB0aGlzLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0dXBBdWRpb1RyYWNrKHJvb206IFJvb20pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmlzUHVibGlzaGVkKSByZXR1cm47XHJcbiAgICBcclxuICAgIHRoaXMuYXVkaW9Tb3VyY2UgPSBuZXcgQXVkaW9Tb3VyY2UoU0FNUExFX1JBVEUsIENIQU5ORUxTKTtcclxuICAgIHRoaXMuYXVkaW9UcmFjayA9IExvY2FsQXVkaW9UcmFjay5jcmVhdGVBdWRpb1RyYWNrKCdtdXNpYycsIHRoaXMuYXVkaW9Tb3VyY2UpO1xyXG4gICAgXHJcbiAgICBjb25zdCBvcHRpb25zID0gbmV3IFRyYWNrUHVibGlzaE9wdGlvbnMoKTtcclxuICAgIG9wdGlvbnMuc291cmNlID0gVHJhY2tTb3VyY2UuU09VUkNFX01JQ1JPUEhPTkU7XHJcbiAgICBcclxuICAgIGlmIChyb29tLmxvY2FsUGFydGljaXBhbnQpIHtcclxuICAgICAgYXdhaXQgcm9vbS5sb2NhbFBhcnRpY2lwYW50LnB1Ymxpc2hUcmFjayh0aGlzLmF1ZGlvVHJhY2ssIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1B1Ymxpc2hlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHN0YXJ0RkZtcGVnKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRSZXNvdXJjZSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICBsZXQgaW5wdXRTb3VyY2UgPSB0aGlzLmN1cnJlbnRSZXNvdXJjZS5nZXRJbnB1dFNvdXJjZSgpO1xyXG4gICAgY29uc29sZS5sb2coYEZGbXBlZyBpbnB1dCBzb3VyY2U6ICR7aW5wdXRTb3VyY2Uuc3Vic3RyaW5nKDAsIDEwMCl9Li4uYCk7XHJcbiAgICBcclxuICAgIC8vIENoZWNrIGlmIGlucHV0IGlzIGEgVVJMIG9yIHNlYXJjaCBxdWVyeVxyXG4gICAgY29uc3QgaXNVcmwgPSBpbnB1dFNvdXJjZS5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgXHJcbiAgICAgICAgICAgICAgICAgIGlucHV0U291cmNlLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgfHwgXHJcbiAgICAgICAgICAgICAgICAgIGlucHV0U291cmNlLnN0YXJ0c1dpdGgoJ3l0c2VhcmNoOicpO1xyXG4gICAgXHJcbiAgICAvLyBJZiBub3QgYSBVUkwsIHRyZWF0IGFzIFlvdVR1YmUgc2VhcmNoXHJcbiAgICBpZiAoIWlzVXJsKSB7XHJcbiAgICAgIGlucHV0U291cmNlID0gYHl0c2VhcmNoMToke2lucHV0U291cmNlfWA7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBDb252ZXJ0ZWQgdG8gWW91VHViZSBzZWFyY2g6ICR7aW5wdXRTb3VyY2V9YCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBzdHJlYW1pbmcgVVJMIHRoYXQgbmVlZHMgeXQtZGxwXHJcbiAgICBjb25zdCBuZWVkc1l0RGxwID0gaW5wdXRTb3VyY2UuaW5jbHVkZXMoJ3lvdXR1YmUuY29tJykgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTb3VyY2UuaW5jbHVkZXMoJ3lvdXR1LmJlJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZS5pbmNsdWRlcygnc291bmRjbG91ZC5jb20nKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGlucHV0U291cmNlLmluY2x1ZGVzKCd0d2l0Y2gudHYnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGlucHV0U291cmNlLnN0YXJ0c1dpdGgoJ3l0c2VhcmNoJyk7XHJcbiAgICBcclxuICAgIGlmIChuZWVkc1l0RGxwKSB7XHJcbiAgICAgIC8vIFVzZSB5dC1kbHAgdG8gcGlwZSBhdWRpbyBkaXJlY3RseSB0byBGRm1wZWdcclxuICAgICAgY29uc29sZS5sb2coJ1VzaW5nIHl0LWRscCBwaXBlIG1vZGUnKTtcclxuICAgICAgXHJcbiAgICAgIC8vIERldGVjdCBwbGF0Zm9ybVxyXG4gICAgICBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xyXG4gICAgICBjb25zdCB5dERscFBhdGggPSBpc1dpbmRvd3MgPyAneXQtZGxwJyA6ICd+Ly5sb2NhbC9iaW4veXQtZGxwJztcclxuICAgICAgXHJcbiAgICAgIC8vIFNwYXduIHl0LWRscCBhbmQgZmZtcGVnIHNlcGFyYXRlbHksIHBpcGUgYmV0d2VlbiB0aGVtXHJcbiAgICAgIGNvbnN0IHl0ZGxwQXJncyA9IFtcclxuICAgICAgICAnLWYnLCAnYmVzdGF1ZGlvL2Jlc3QnLFxyXG4gICAgICAgICctbycsICctJyxcclxuICAgICAgICAnLS1uby1wbGF5bGlzdCcsXHJcbiAgICAgICAgJy0tbm8td2FybmluZ3MnLFxyXG4gICAgICAgIGlucHV0U291cmNlXHJcbiAgICAgIF07XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBmZm1wZWdBcmdzID0gW1xyXG4gICAgICAgICctaScsICdwaXBlOjAnLFxyXG4gICAgICAgICctZicsICdzMTZsZScsXHJcbiAgICAgICAgJy1hcicsIFN0cmluZyhTQU1QTEVfUkFURSksXHJcbiAgICAgICAgJy1hYycsIFN0cmluZyhDSEFOTkVMUyksXHJcbiAgICAgICAgJy1hY29kZWMnLCAncGNtX3MxNmxlJyxcclxuICAgICAgICAnLSdcclxuICAgICAgXTtcclxuICAgICAgXHJcbiAgICAgIC8vIFNwYXduIHl0LWRscFxyXG4gICAgICBjb25zdCB5dGRscFByb2Nlc3MgPSBzcGF3bih5dERscFBhdGgsIHl0ZGxwQXJncywgeyBcclxuICAgICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxyXG4gICAgICAgIHNoZWxsOiBpc1dpbmRvd3MgLy8gVXNlIHNoZWxsIG9uIFdpbmRvd3MgdG8gcmVzb2x2ZSBQQVRIXHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgLy8gU3Bhd24gZmZtcGVnXHJcbiAgICAgIHRoaXMuZmZtcGVnUHJvY2VzcyA9IHNwYXduKCdmZm1wZWcnLCBmZm1wZWdBcmdzLCB7IFxyXG4gICAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXHJcbiAgICAgICAgc2hlbGw6IGlzV2luZG93c1xyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIC8vIFBpcGUgeXQtZGxwIHN0ZG91dCB0byBmZm1wZWcgc3RkaW5cclxuICAgICAgeXRkbHBQcm9jZXNzLnN0ZG91dD8ucGlwZSh0aGlzLmZmbXBlZ1Byb2Nlc3Muc3RkaW4hKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEhhbmRsZSB5dC1kbHAgZXJyb3JzXHJcbiAgICAgIHl0ZGxwUHJvY2Vzcy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IGRhdGEudG9TdHJpbmcoKTtcclxuICAgICAgICBpZiAobXNnLmluY2x1ZGVzKCdFUlJPUicpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCd5dC1kbHAgZXJyb3I6JywgbXNnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgeXRkbHBQcm9jZXNzLm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCd5dC1kbHAgcHJvY2VzcyBlcnJvcjonLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgeXRkbHBQcm9jZXNzLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHl0LWRscCBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ1VzaW5nIGRpcmVjdCBGRm1wZWcgbW9kZScpO1xyXG4gICAgICB0aGlzLmZmbXBlZ1Byb2Nlc3MgPSBzcGF3bignZmZtcGVnJywgW1xyXG4gICAgICAgICctcmVjb25uZWN0JywgJzEnLFxyXG4gICAgICAgICctcmVjb25uZWN0X3N0cmVhbWVkJywgJzEnLFxyXG4gICAgICAgICctcmVjb25uZWN0X2RlbGF5X21heCcsICc1JyxcclxuICAgICAgICAnLWknLCBpbnB1dFNvdXJjZSxcclxuICAgICAgICAnLWYnLCAnczE2bGUnLFxyXG4gICAgICAgICctYXInLCBTdHJpbmcoU0FNUExFX1JBVEUpLFxyXG4gICAgICAgICctYWMnLCBTdHJpbmcoQ0hBTk5FTFMpLFxyXG4gICAgICAgICctYWNvZGVjJywgJ3BjbV9zMTZsZScsXHJcbiAgICAgICAgJy0nXHJcbiAgICAgIF0sIHsgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmcmFtZVNpemUgPSBTQU1QTEVTX1BFUl9GUkFNRSAqIENIQU5ORUxTICogMjtcclxuICAgIHRoaXMuZmZtcGVnRG9uZSA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc1JlY2VpdmVkRGF0YSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZmZtcGVnUHJvY2Vzcy5zdGRvdXQ/Lm9uKCdkYXRhJywgKGNodW5rOiBCdWZmZXIpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUuc3RhdHVzICE9PSBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nICYmIFxyXG4gICAgICAgICAgdGhpcy5zdGF0ZS5zdGF0dXMgIT09IEF1ZGlvUGxheWVyU3RhdHVzLkJ1ZmZlcmluZykgcmV0dXJuO1xyXG4gICAgICBcclxuICAgICAgaGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTtcclxuICAgICAgXHJcbiAgICAgIC8vIEhhbmRsZSBsZWZ0b3ZlciBmcm9tIHByZXZpb3VzIGNodW5rXHJcbiAgICAgIGlmICh0aGlzLmxlZnRvdmVyQnVmZmVyICYmIHRoaXMubGVmdG92ZXJCdWZmZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNodW5rID0gQnVmZmVyLmNvbmNhdChbdGhpcy5sZWZ0b3ZlckJ1ZmZlciwgY2h1bmtdKTtcclxuICAgICAgICB0aGlzLmxlZnRvdmVyQnVmZmVyID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgbGV0IG9mZnNldCA9IDA7XHJcbiAgICAgIHdoaWxlIChvZmZzZXQgKyBmcmFtZVNpemUgPD0gY2h1bmsubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZnJhbWUgPSBjaHVuay5zbGljZShvZmZzZXQsIG9mZnNldCArIGZyYW1lU2l6ZSk7XHJcbiAgICAgICAgY29uc3QgaW50MTZBcnJheSA9IG5ldyBJbnQxNkFycmF5KFNBTVBMRVNfUEVSX0ZSQU1FICogQ0hBTk5FTFMpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50MTZBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaW50MTZBcnJheVtpXSA9IGZyYW1lLnJlYWRJbnQxNkxFKGkgKiAyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5mcmFtZVF1ZXVlLnB1c2goaW50MTZBcnJheSk7XHJcbiAgICAgICAgb2Zmc2V0ICs9IGZyYW1lU2l6ZTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gU2F2ZSBsZWZ0b3ZlclxyXG4gICAgICBpZiAob2Zmc2V0IDwgY2h1bmsubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5sZWZ0b3ZlckJ1ZmZlciA9IGNodW5rLnNsaWNlKG9mZnNldCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBzdGRlcnJPdXRwdXQgPSAnJztcclxuICAgIHRoaXMuZmZtcGVnUHJvY2Vzcy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xyXG4gICAgICBzdGRlcnJPdXRwdXQgKz0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mZm1wZWdQcm9jZXNzLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XHJcbiAgICAgIHRoaXMuZmZtcGVnRG9uZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuZmZtcGVnUHJvY2VzcyA9IG51bGw7XHJcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgRkZtcGVnIHN0ZGVycjpcXG4ke3N0ZGVyck91dHB1dH1gKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBGRm1wZWcgY2xvc2VkIHdpdGggY29kZSAke2NvZGV9LCBoYXNSZWNlaXZlZERhdGE6ICR7aGFzUmVjZWl2ZWREYXRhfSwgcXVldWU6ICR7dGhpcy5mcmFtZVF1ZXVlLmxlbmd0aH1gKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZmZtcGVnUHJvY2Vzcy5vbignZXJyb3InLCAoZXJyKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZGbXBlZyBwcm9jZXNzIGVycm9yOicsIGVyci5tZXNzYWdlKTtcclxuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHsgbWVzc2FnZTogZXJyLm1lc3NhZ2UsIHJlc291cmNlOiB0aGlzLmN1cnJlbnRSZXNvdXJjZSB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFdhaXQgZm9yIGluaXRpYWwgYnVmZmVyIHdpdGggdGltZW91dFxyXG4gICAgY29uc3QgYnVmZmVyVGltZW91dCA9IDEwMDAwOyAvLyAxMCBzZWNvbmRzIGZvciBpbml0aWFsIGJ1ZmZlclxyXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgIFxyXG4gICAgd2hpbGUgKHRoaXMuZnJhbWVRdWV1ZS5sZW5ndGggPCBNSU5fQlVGRkVSX0ZSQU1FUyAmJiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgYnVmZmVyVGltZW91dCkge1xyXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTAwKSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBDaGVjayBpZiBGRm1wZWcgZmFpbGVkIGVhcmx5XHJcbiAgICAgIGlmICh0aGlzLmZmbXBlZ0RvbmUgJiYgdGhpcy5mcmFtZVF1ZXVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRkZtcGVnIGZhaWxlZCB0byBwcm9kdWNlIGF1ZGlvIGRhdGEnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5mcmFtZVF1ZXVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVvdXQgd2FpdGluZyBmb3IgYXVkaW8gZGF0YScpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBTdGFydGluZyBwbGF5YmFjayB3aXRoICR7dGhpcy5mcmFtZVF1ZXVlLmxlbmd0aH0gZnJhbWVzIGJ1ZmZlcmVkICh0YXJnZXQ6ICR7VEFSR0VUX0JVRkZFUl9GUkFNRVN9KWApO1xyXG5cclxuICAgIC8vIE1hcmsgcmVhZHkgZm9yIHBsYXliYWNrIC0gc2V0U3RhdGUgd2lsbCB0cmlnZ2VyIHRoZSBsb29wXHJcbiAgICB0aGlzLmlzUGxheWJhY2tMb29wUnVubmluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5leHRGcmFtZVRpbWUgPSBocnRpbWUuYmlnaW50KCk7XHJcbiAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBQbGF5YmFjayByZWFkeSwgYXVkaW9Tb3VyY2UgZXhpc3RzOiAkeyEhdGhpcy5hdWRpb1NvdXJjZX1gKTtcclxuICAgIFxyXG4gICAgLy8gU2V0IHN0YXRlIHRvIHBsYXlpbmcgLSB0aGlzIHdpbGwgdHJpZ2dlciBzY2hlZHVsZU5leHRGcmFtZSB2aWEgc2V0U3RhdGVcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLlBsYXlpbmcsIHJlc291cmNlOiB0aGlzLmN1cnJlbnRSZXNvdXJjZSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhpZ2gtcmVzb2x1dGlvbiBmcmFtZSBzY2hlZHVsaW5nIHVzaW5nIGhydGltZVxyXG4gICAqIFRoaXMgcHJvdmlkZXMgbXVjaCBtb3JlIGFjY3VyYXRlIHRpbWluZyB0aGFuIHNldEludGVydmFsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzY2hlZHVsZU5leHRGcmFtZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1BsYXliYWNrTG9vcFJ1bm5pbmcgfHwgdGhpcy5zdGF0ZS5zdGF0dXMgIT09IEF1ZGlvUGxheWVyU3RhdHVzLlBsYXlpbmcpIHtcclxuICAgICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gc2NoZWR1bGVOZXh0RnJhbWUgc2tpcHBlZDogbG9vcFJ1bm5pbmc9JHt0aGlzLmlzUGxheWJhY2tMb29wUnVubmluZ30sIHN0YXR1cz0ke3RoaXMuc3RhdGUuc3RhdHVzfWApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm93ID0gaHJ0aW1lLmJpZ2ludCgpO1xyXG4gICAgY29uc3QgZGVsYXlOcyA9IHRoaXMubmV4dEZyYW1lVGltZSAtIG5vdztcclxuICAgIGNvbnN0IGRlbGF5TXMgPSBOdW1iZXIoZGVsYXlOcykgLyAxXzAwMF8wMDA7XHJcblxyXG4gICAgaWYgKHRoaXMuZnJhbWVzUGxheWVkID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIEZpcnN0IGZyYW1lIHNjaGVkdWxpbmc6IGRlbGF5TXM9JHtkZWxheU1zLnRvRml4ZWQoMil9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2NoZWR1bGUgbmV4dCBmcmFtZVxyXG4gICAgaWYgKGRlbGF5TXMgPiAxKSB7XHJcbiAgICAgIHRoaXMucGxheWJhY2tUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnByb2Nlc3NGcmFtZSgpLCBNYXRoLm1heCgxLCBkZWxheU1zIC0gMSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gV2UncmUgYmVoaW5kLCBwcm9jZXNzIGltbWVkaWF0ZWx5XHJcbiAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB0aGlzLnByb2Nlc3NGcmFtZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgYW5kIHNlbmQgYSBzaW5nbGUgYXVkaW8gZnJhbWVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NGcmFtZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5pc1BsYXliYWNrTG9vcFJ1bm5pbmcgfHwgdGhpcy5zdGF0ZS5zdGF0dXMgIT09IEF1ZGlvUGxheWVyU3RhdHVzLlBsYXlpbmcpIHtcclxuICAgICAgaWYgKHRoaXMuZnJhbWVzUGxheWVkID09PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gcHJvY2Vzc0ZyYW1lIHNraXBwZWQ6IGxvb3BSdW5uaW5nPSR7dGhpcy5pc1BsYXliYWNrTG9vcFJ1bm5pbmd9LCBzdGF0dXM9JHt0aGlzLnN0YXRlLnN0YXR1c31gKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgYnVmZmVyIHN0YXR1c1xyXG4gICAgY29uc3QgYnVmZmVyU2l6ZSA9IHRoaXMuZnJhbWVRdWV1ZS5sZW5ndGg7XHJcbiAgICBcclxuICAgIGlmIChidWZmZXJTaXplID4gMCAmJiB0aGlzLmF1ZGlvU291cmNlKSB7XHJcbiAgICAgIGNvbnN0IGludDE2QXJyYXkgPSB0aGlzLmZyYW1lUXVldWUuc2hpZnQoKSE7XHJcbiAgICAgIGNvbnN0IGF1ZGlvRnJhbWUgPSBuZXcgQXVkaW9GcmFtZShpbnQxNkFycmF5LCBTQU1QTEVfUkFURSwgQ0hBTk5FTFMsIFNBTVBMRVNfUEVSX0ZSQU1FKTtcclxuICAgICAgXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hdWRpb1NvdXJjZS5jYXB0dXJlRnJhbWUoYXVkaW9GcmFtZSk7XHJcbiAgICAgICAgdGhpcy5mcmFtZXNQbGF5ZWQrKztcclxuICAgICAgICBcclxuICAgICAgICAvLyBMb2cgcHJvZ3Jlc3MgZXZlcnkgNTAwIGZyYW1lcyAofjEwIHNlY29uZHMpXHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWVzUGxheWVkICUgNTAwID09PSAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBQcm9ncmVzczogJHt0aGlzLmZyYW1lc1BsYXllZH0gZnJhbWVzIHBsYXllZCwgYnVmZmVyOiAke2J1ZmZlclNpemV9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgW0F1ZGlvUGxheWVyXSBGcmFtZSBlcnJvcjpgLCAoZSBhcyBFcnJvcikubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFVwZGF0ZSB0aW1pbmcgZm9yIG5leHQgZnJhbWVcclxuICAgICAgdGhpcy5uZXh0RnJhbWVUaW1lICs9IEZSQU1FX0lOVEVSVkFMX05TO1xyXG4gICAgICBcclxuICAgICAgLy8gQWRhcHRpdmUgdGltaW5nOiBpZiBidWZmZXIgaXMgbG93LCBzbG93IGRvd24gc2xpZ2h0bHkgdG8gbGV0IGl0IHJlY292ZXJcclxuICAgICAgaWYgKGJ1ZmZlclNpemUgPCBMT1dfQlVGRkVSX1RIUkVTSE9MRCAmJiAhdGhpcy5mZm1wZWdEb25lKSB7XHJcbiAgICAgICAgLy8gQWRkIDFtcyBkZWxheSB0byBsZXQgYnVmZmVyIHJlY292ZXJcclxuICAgICAgICB0aGlzLm5leHRGcmFtZVRpbWUgKz0gQmlnSW50KDFfMDAwXzAwMCk7XHJcbiAgICAgICAgdGhpcy5idWZmZXJVbmRlcnJ1bnMrKztcclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5idWZmZXJVbmRlcnJ1bnMgJSA1MCA9PT0gMCkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gQnVmZmVyIGxvdzogJHtidWZmZXJTaXplfSBmcmFtZXMsICR7dGhpcy5idWZmZXJVbmRlcnJ1bnN9IHVuZGVycnVuc2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gU2NoZWR1bGUgbmV4dCBmcmFtZVxyXG4gICAgICB0aGlzLnNjaGVkdWxlTmV4dEZyYW1lKCk7XHJcbiAgICAgIFxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZmbXBlZ0RvbmUgJiYgYnVmZmVyU2l6ZSA9PT0gMCkge1xyXG4gICAgICAvLyBQbGF5YmFjayBmaW5pc2hlZFxyXG4gICAgICBjb25zb2xlLmxvZygnW0F1ZGlvUGxheWVyXSBQbGF5YmFjayBmaW5pc2hlZCAtIHF1ZXVlIGVtcHR5IGFuZCBGRm1wZWcgZG9uZScpO1xyXG4gICAgICB0aGlzLnN0b3AoKTtcclxuICAgIH0gZWxzZSBpZiAoYnVmZmVyU2l6ZSA9PT0gMCkge1xyXG4gICAgICAvLyBCdWZmZXIgdW5kZXJydW4gLSB3YWl0IGZvciBtb3JlIGRhdGFcclxuICAgICAgdGhpcy5idWZmZXJVbmRlcnJ1bnMrKztcclxuICAgICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gQnVmZmVyIHVuZGVycnVuICMke3RoaXMuYnVmZmVyVW5kZXJydW5zfSwgd2FpdGluZyBmb3IgZGF0YS4uLmApO1xyXG4gICAgICBcclxuICAgICAgLy8gV2FpdCBhIGJpdCBhbmQgdHJ5IGFnYWluXHJcbiAgICAgIHRoaXMubmV4dEZyYW1lVGltZSA9IGhydGltZS5iaWdpbnQoKSArIEJpZ0ludCg1MF8wMDBfMDAwKTsgLy8gNTBtc1xyXG4gICAgICB0aGlzLnNjaGVkdWxlTmV4dEZyYW1lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFudXAoKTogdm9pZCB7XHJcbiAgICAvLyBTdG9wIHBsYXliYWNrIGxvb3BcclxuICAgIHRoaXMuaXNQbGF5YmFja0xvb3BSdW5uaW5nID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5wbGF5YmFja1RpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucGxheWJhY2tUaW1lb3V0KTtcclxuICAgICAgdGhpcy5wbGF5YmFja1RpbWVvdXQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBLaWxsIEZGbXBlZ1xyXG4gICAgaWYgKHRoaXMuZmZtcGVnUHJvY2Vzcykge1xyXG4gICAgICB0aGlzLmZmbXBlZ1Byb2Nlc3Mua2lsbCgnU0lHS0lMTCcpO1xyXG4gICAgICB0aGlzLmZmbXBlZ1Byb2Nlc3MgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBDbGVhciBmcmFtZSBxdWV1ZVxyXG4gICAgdGhpcy5mcmFtZVF1ZXVlID0gW107XHJcbiAgICB0aGlzLmxlZnRvdmVyQnVmZmVyID0gbnVsbDtcclxuICAgIFxyXG4gICAgLy8gUmVzZXQgdGltaW5nIGFuZCBzdGF0ZVxyXG4gICAgdGhpcy5uZXh0RnJhbWVUaW1lID0gQmlnSW50KDApO1xyXG4gICAgdGhpcy5mZm1wZWdEb25lID0gZmFsc2U7XHJcbiAgICBcclxuICAgIC8vIExvZyBzdGF0c1xyXG4gICAgaWYgKHRoaXMuZnJhbWVzUGxheWVkID4gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBQbGF5YmFjayBzdGF0czogJHt0aGlzLmZyYW1lc1BsYXllZH0gZnJhbWVzLCAke3RoaXMuYnVmZmVyVW5kZXJydW5zfSB1bmRlcnJ1bnNgKTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyVW5kZXJydW5zID0gMDtcclxuICAgIHRoaXMuZnJhbWVzUGxheWVkID0gMDtcclxuICAgIFxyXG4gICAgLy8gTm90ZTogV2UgZG9uJ3QgdW5wdWJsaXNoIHRoZSB0cmFjayAtIGl0IHN0YXlzIHB1Ymxpc2hlZCBmb3IgbmV4dCBwbGF5XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFN0YXRlKG5ld1N0YXRlOiBBdWRpb1BsYXllclN0YXRlKTogdm9pZCB7XHJcbiAgICBjb25zdCBvbGRTdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XHJcbiAgICB0aGlzLmVtaXQoJ3N0YXRlQ2hhbmdlJywgb2xkU3RhdGUsIG5ld1N0YXRlKTtcclxuICAgIFxyXG4gICAgLy8gU3RhcnQgcGxheWJhY2sgbG9vcCB3aGVuIHRyYW5zaXRpb25pbmcgdG8gUGxheWluZ1xyXG4gICAgaWYgKG5ld1N0YXRlLnN0YXR1cyA9PT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZyAmJiBvbGRTdGF0ZS5zdGF0dXMgIT09IEF1ZGlvUGxheWVyU3RhdHVzLlBsYXlpbmcpIHtcclxuICAgICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gU3RhdGUgY2hhbmdlZCB0byBQbGF5aW5nLCBzdGFydGluZyBwbGF5YmFjayBsb29wYCk7XHJcbiAgICAgIHRoaXMuc2NoZWR1bGVOZXh0RnJhbWUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gYXVkaW8gcGxheWVyXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXVkaW9QbGF5ZXIob3B0aW9ucz86IENyZWF0ZUF1ZGlvUGxheWVyT3B0aW9ucyk6IEF1ZGlvUGxheWVyIHtcclxuICByZXR1cm4gbmV3IEF1ZGlvUGxheWVyKG9wdGlvbnMpO1xyXG59XHJcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jubbio/voice",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Voice library for Jubbio bots with LiveKit backend",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",