@lowlighter/run 3.4.0 → 3.4.1

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/command.js +11 -4
  2. package/package.json +4 -4
package/command.js CHANGED
@@ -167,6 +167,7 @@ import { debounce } from "@std/async/debounce";
167
167
  }
168
168
  /** Spawn a command. */ function spawn(command, { bin, log, callback = noop, buffering = 250, throw: _throw, background, ...channels }) {
169
169
  const process = command.spawn();
170
+ const status = process.status;
170
171
  const start = Date.now();
171
172
  const stdio = {
172
173
  stdio: [],
@@ -186,6 +187,7 @@ import { debounce } from "@std/async/debounce";
186
187
  let notify = null;
187
188
  let pending = true;
188
189
  let ended = false;
190
+ let exited = false;
189
191
  let interaction = Promise.resolve();
190
192
  if (handle(channels.stdin) === "piped") {
191
193
  const writer = process.stdin.getWriter();
@@ -223,6 +225,7 @@ import { debounce } from "@std/async/debounce";
223
225
  });
224
226
  try {
225
227
  for await (const content of generator){
228
+ if (exited) throw new EvalError("Cannot write to stdin: process already exited");
226
229
  const t = Date.now() - start;
227
230
  logged(log, "stdin", t, `${content}`);
228
231
  stdio.stdio.push([
@@ -237,7 +240,7 @@ import { debounce } from "@std/async/debounce";
237
240
  } catch (error) {
238
241
  await close();
239
242
  abort(process);
240
- await process.status;
243
+ await status;
241
244
  throw error;
242
245
  }
243
246
  })();
@@ -274,7 +277,11 @@ import { debounce } from "@std/async/debounce";
274
277
  debounced();
275
278
  }
276
279
  }));
277
- void outputs.then(release, release);
280
+ const settle = ()=>{
281
+ exited = true;
282
+ release();
283
+ };
284
+ void status.then(settle, settle);
278
285
  // Compute result
279
286
  const result = (async ()=>{
280
287
  const [output, interacted] = await Promise.allSettled([
@@ -282,7 +289,7 @@ import { debounce } from "@std/async/debounce";
282
289
  interaction
283
290
  ]);
284
291
  debounced.clear();
285
- const { success, code } = await process.status;
292
+ const { success, code } = await status;
286
293
  if (output.status === "rejected" || interacted.status === "rejected") throw output.reason ?? interacted.reason;
287
294
  if (!success && _throw) throw new EvalError(`${bin} exited with non-zero code ${code}:\n${stdio.stdout}\n${stdio.stderr}`);
288
295
  return {
@@ -329,4 +336,4 @@ import { debounce } from "@std/async/debounce";
329
336
  });
330
337
  }
331
338
  }
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9saWJzL2xpYnMvQGxpYnMvcnVuL2NvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IHR5cGUgeyBOdWxsYWJsZSwgUHJvbWlzYWJsZSB9IGZyb20gXCJAbGlicy90eXBpbmdcIlxuaW1wb3J0IHsgZ2V0TG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCJcbmltcG9ydCB7IFRleHRMaW5lU3RyZWFtIH0gZnJvbSBcIkBzdGQvc3RyZWFtc1wiXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gXCJAc3RkL2FzeW5jL2RlYm91bmNlXCJcbmV4cG9ydCB0eXBlIHsgTG9nZ2VyLCBQcm9taXNhYmxlIH1cblxuLyoqXG4gKiBIYW5kbGluZyBvZiBhIHN0ZGlvIGNoYW5uZWwuXG4gKiAtIGBcInBpcGVkXCJgOiB0aGUgY2hhbm5lbCBpcyBjYXB0dXJlZCBpbnRvIHRoZSB7QGxpbmsgUmVzdWx0fSBhbmQgbWlycm9yZWQgdG8gYSB7QGxpbmsgaHR0cHM6Ly9sb2d0YXBlLm9yZyB8IExvZ1RhcGV9IHN1Yi1sb2dnZXIuXG4gKiAtIGBcImluaGVyaXRcImA6IHRoZSBjaGFubmVsIGlzIGZvcndhcmRlZCB0byB0aGUgcGFyZW50IHByb2Nlc3MuXG4gKiAtIGBudWxsYDogdGhlIGNoYW5uZWwgaXMgZGlzY2FyZGVkLlxuICovXG5leHBvcnQgdHlwZSBDaGFubmVsID0gTnVsbGFibGU8XCJwaXBlZFwiIHwgXCJpbmhlcml0XCI+XG5cbi8qKiBSdW4gb3B0aW9ucy4gKi9cbmV4cG9ydCB0eXBlIE9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBMb2dnZXIgY2F0ZWdvcmllcyBmb3J3YXJkZWQgdG8ge0BsaW5rIGh0dHBzOi8vbG9ndGFwZS5vcmcgfCBMb2dUYXBlfSdzIGBnZXRMb2dnZXIoKWAuXG4gICAqIEVhY2ggY2hhbm5lbCBpcyBtaXJyb3JlZCB0aHJvdWdoIGEgc3ViLWNhdGVnb3J5IChgc3RkaW5gLCBgc3Rkb3V0YCwgYHN0ZGVycmApIHNvIHRoZSBob3N0IGFwcGxpY2F0aW9uIGNhbiByb3V0ZSBvciBmaWx0ZXIgdGhlbS5cbiAgICogRGVmYXVsdHMgdG8gYFtcInJ1blwiXWAuXG4gICAqL1xuICBsb2dnZXI/OiBzdHJpbmdbXVxuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzLiAqL1xuICBlbnY/OiBEZW5vLkNvbW1hbmRPcHRpb25zW1wiZW52XCJdXG4gIC8qKiBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAqL1xuICBjd2Q/OiBEZW5vLkNvbW1hbmRPcHRpb25zW1wiY3dkXCJdXG4gIC8qKiBSYXcgYXJndW1lbnRzIChXaW5kb3dzIG9ubHkpLiAqL1xuICByYXc/OiBib29sZWFuXG4gIC8qKiBIYW5kbGluZyBvZiBzdGRpbi4gKi9cbiAgc3RkaW4/OiBDaGFubmVsXG4gIC8qKiBIYW5kbGluZyBvZiBzdGRvdXQuICovXG4gIHN0ZG91dD86IENoYW5uZWxcbiAgLyoqIEhhbmRsaW5nIG9mIHN0ZGVyci4gKi9cbiAgc3RkZXJyPzogQ2hhbm5lbFxuICAvKipcbiAgICogU3RkaW4gaW50ZXJhY3Rpb24gY2FsbGJhY2suXG4gICAqIFBhc3NpbmcgdGhpcyBvcHRpb24gYXV0b21hdGljYWxseSBwaXBlcyBzdGRpbi5cbiAgICogU2VlIHtAbGluayBDYWxsYmFja30gZm9yIHRoZSBpbnRlcmFjdGlvbiBwcm90b2NvbC5cbiAgICovXG4gIGNhbGxiYWNrPzogQ2FsbGJhY2tcbiAgLyoqXG4gICAqIFN0ZGlvIGJ1ZmZlcmluZy5cbiAgICogVGhpcyBpcyB1c2VkIHRvIG1lcmdlIG1lc3NhZ2VzIHRoYXQgYXJlIHJlY2VpdmVkIHJlbGF0aXZlbHkgY2xvc2VseS5cbiAgICogQnVmZmVyaW5nIGlzIHNraXBwZWQgd2hlbiBhIGRpZmZlcmVudCBjaGFubmVsIGlzIHVzZWQgaW4tYmV0d2Vlbi5cbiAgICovXG4gIGJ1ZmZlcmluZz86IG51bWJlclxuICAvKiogQWJvcnQgc2lnbmFsLiAqL1xuICBzaWduYWw/OiBEZW5vLkNvbW1hbmRPcHRpb25zW1wic2lnbmFsXCJdXG4gIC8qKlxuICAgKiBFeGVjdXRlIHByb2Nlc3Mgc3luY2hyb25vdXNseS5cbiAgICogTm90ZSB0aGF0IHN0ZGluIGlzIG5vdCB1c2FibGUgaW4gc3luYyBtb2RlLlxuICAgKi9cbiAgc3luYz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFJ1biBwcm9jZXNzIGluIGJhY2tncm91bmQuXG4gICAqIFRoaXMgaW1wbGllcyBgc3luYzogZmFsc2VgLlxuICAgKi9cbiAgYmFja2dyb3VuZD86IGJvb2xlYW5cbiAgLyoqIFByb2Nlc3MgZXh0ZW5zaW9uIG9uIFdpbmRvd3MuICovXG4gIHdpbmV4dD86IHN0cmluZ1xuICAvKiogT3BlcmF0aW5nIHN5c3RlbS4gKi9cbiAgb3M/OiB0eXBlb2YgRGVuby5idWlsZC5vc1xuICAvKiogVGhyb3cgYW4gZXJyb3IgaWYgZXhpdCBjb2RlIGlzIG5vbi16ZXJvIHJhdGhlciB0aGFuIHJldHVybmluZyBhIHJlc3VsdC4gKi9cbiAgdGhyb3c/OiBib29sZWFuXG4gIC8qKlxuICAgKiBEbyBub3QgYWN0dWFsbHkgZXhlY3V0ZSB0aGUgY29tbWFuZC5cbiAgICogSW4gdGhpcyBjYXNlIHlvdSB3aWxsIGluc3RlYWQgcmVjZWl2ZSBhbiBlbXB0eSBzdWNjZXNzZnVsIHJlc3VsdCBvYmplY3QuXG4gICAqL1xuICBkcnlydW4/OiBib29sZWFuXG59XG5cbi8qKiBSdW4gcmVzdWx0LiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0ID0ge1xuICAvKiogV2hldGhlciB0aGUgcHJvY2VzcyBleGl0ZWQgd2l0aCBhIHplcm8tY29kZS4gKi9cbiAgc3VjY2VzczogRGVuby5Db21tYW5kU3RhdHVzW1wic3VjY2Vzc1wiXVxuICAvKiogUHJvY2VzcyBleGl0IGNvZGUuICovXG4gIGNvZGU6IERlbm8uQ29tbWFuZFN0YXR1c1tcImNvZGVcIl1cbiAgLyoqXG4gICAqIFByb2Nlc3Mgc3RkaW8gY29udGVudC5cbiAgICogRmlyc3QgZWxlbWVudCBpcyB0aGUgZGVsdGEgdGltZXN0YW1wIHNpbmNlIHByb2Nlc3Mgc3RhcnQsIHNlY29uZCBlbGVtZW50IGlzIHRoZSBjaGFubmVsICgwOnN0ZGluLCAxOnN0ZG91dCwgMjpzdGRlcnIpLCB0aGlyZCBlbGVtZW50IGlzIHRoZSBjb250ZW50LlxuICAgKi9cbiAgc3RkaW86IEFycmF5PFtudW1iZXIsIDAgfCAxIHwgMiwgc3RyaW5nXT5cbiAgLyoqIFByb2Nlc3Mgc3RkaW4gY29udGVudC4gKi9cbiAgc3RkaW46IHN0cmluZ1xuICAvKiogUHJvY2VzcyBzdGRvdXQgY29udGVudC4gKi9cbiAgc3Rkb3V0OiBzdHJpbmdcbiAgLyoqIFByb2Nlc3Mgc3RkZXJyIGNvbnRlbnQuICovXG4gIHN0ZGVycjogc3RyaW5nXG59XG5cbi8qKiBIYW5kbGUgdG8gYSBwcm9jZXNzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZC4gKi9cbmV4cG9ydCB0eXBlIEJhY2tncm91bmQgPSB7XG4gIC8qKiBTZW5kIGEgc2lnbmFsIHRvIHRoZSBwcm9jZXNzIChkZWZhdWx0cyB0byBgXCJTSUdURVJNXCJgKS4gKi9cbiAga2lsbDogKHNpZ25hbD86IERlbm8uU2lnbmFsKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBQcmV2ZW50IHRoZSBwcm9jZXNzIGZyb20ga2VlcGluZyB0aGUgcGFyZW50IHByb2Nlc3MgYWxpdmUuICovXG4gIHVucmVmOiAoKSA9PiB2b2lkXG4gIC8qKiBQcm9jZXNzIGlkZW50aWZpZXIuICovXG4gIHBpZDogbnVtYmVyXG4gIC8qKiBQcm9jZXNzIHJlc3VsdCAocmVzb2x2ZXMgb25jZSB0aGUgcHJvY2VzcyBleGl0cykuICovXG4gIHJlc3VsdDogUHJvbWlzZTxSZXN1bHQ+XG4gIC8qKiBLaWxsIHRoZSBwcm9jZXNzIGFuZCB3YWl0IGZvciBpdCB0byBmdWxseSB0ZXJtaW5hdGUuICovXG4gIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogKCkgPT4gUHJvbWlzZTx2b2lkPlxufVxuXG4vKiogU25hcHNob3Qgb2YgdGhlIGFjY3VtdWxhdGVkIHByb2Nlc3Mgc3RkaW8gY29udGVudC4gKi9cbmV4cG9ydCB0eXBlIFNuYXBzaG90ID0gUGljazxSZXN1bHQsIFwic3RkaW5cIiB8IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiPlxuXG4vKipcbiAqIFN0ZGluIGludGVyYWN0aW9uIGNhbGxiYWNrLlxuICpcbiAqIEl0IGlzIGFuIGFzeW5jIGdlbmVyYXRvciB0aGF0IGxldHMgeW91IGRyaXZlIGFuIGludGVyYWN0aXZlIHByb2Nlc3Mgd2l0aCBwbGFpbiBsYW5ndWFnZSBjb25zdHJ1Y3RzOlxuICogYGBgdHMgaWdub3JlXG4gKiAvLyBJdGVyYXRlIG92ZXIgcHJvY2VzcyBvdXRwdXQgdG8gcmVhY3QgdG8gbmV3IGRhdGEuXG4gKiAvLyAob25lIGl0ZXJhdGlvbiBwZXIgYnVmZmVyZWQgZXZlbnQpXG4gKiBmb3IgYXdhaXQgKGNvbnN0IHsgc3Rkb3V0IH0gb2Ygc3RkaW8pIHtcbiAqICAgLy8gVXNlIGF3YWl0IHRvIHBhdXNlIG9yIHBvbGwgZm9yIGEgY29uZGl0aW9uXG4gKiAgIGF3YWl0IGRlbGF5KDEwMDApXG4gKiAgIC8vIFVzZSB5aWVsZCB0byB3cml0ZSB0byBzdGRpbiAodmVyYmF0aW0pXG4gKiAgIHlpZWxkIFwiY29udGVudFxcblwiXG4gKiAgIC8vIFVzZSByZXR1cm4gdG8gY2xvc2Ugc3RkaW4gYW5kIGVuZCB0aGUgaW50ZXJhY3Rpb25cbiAqICAgcmV0dXJuXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJZiB0aGUgZ2VuZXJhdG9yIHRocm93cywgc3RkaW4gaXMgY2xvc2VkLCB0aGUgcHJvY2VzcyBpcyBraWxsZWQgYW5kIHRoZSByZXR1cm5lZCB7QGxpbmsgUmVzdWx0fSByZWplY3RzIHdpdGggdGhlIHRocm93biBlcnJvci5cbiAqIFdoZW4gdGhlIHByb2Nlc3MgZXhpdHMgb24gaXRzIG93biwgdGhlIGBzdGRpb2AgaXRlcmF0b3IgZW5kcywgc28gYSBnZW5lcmF0b3IgcGFya2VkIG9uIGBmb3IgYXdhaXRgIGNvbXBsZXRlcyBuYXR1cmFsbHkuXG4gKi9cbmV4cG9ydCB0eXBlIENhbGxiYWNrID0gKG9wdGlvbnM6IHsgc3RkaW86IEFzeW5jSXRlcmFibGU8U25hcHNob3Q+IH0pID0+IEFzeW5jR2VuZXJhdG9yPHN0cmluZywgdm9pZCwgdW5rbm93bj5cblxuLyoqIFRleHQgZW5jb2RlciAqL1xuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbi8qKiBUZXh0IGRlY29kZXIgKi9cbmNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuXG4vKiogRGVmYXVsdCBpbnRlcmFjdGlvbjogYW4gZW1wdHkgZ2VuZXJhdG9yIHRoYXQgY2xvc2VzIHN0ZGluIGltbWVkaWF0ZWx5LiAqL1xuY29uc3Qgbm9vcDogQ2FsbGJhY2sgPSBhc3luYyBmdW5jdGlvbiogKCkge31cblxuLyoqXG4gKiBBc3luY2hyb25vdXMgdmVyc2lvbiBvZiB7QGxpbmsgY29tbWFuZH0gcnVubmluZyBpbiBiYWNrZ3JvdW5kLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC50c1wiXG4gKiBjb25zdCBwcm9jZXNzID0gY29tbWFuZChcImRlbm9cIiwgW1wiZXZhbFwiLCBcIkRlbm8uZXhpdCgwKVwiXSwgeyBiYWNrZ3JvdW5kOiB0cnVlIH0pXG4gKiBhd2FpdCBwcm9jZXNzLmtpbGwoKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kKGJpbjogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9ucz86IE9wdGlvbnMgJiB7IHN5bmM/OiBmYWxzZTsgYmFja2dyb3VuZDogdHJ1ZSB9KTogQmFja2dyb3VuZFxuLyoqXG4gKiBBc3luY2hyb25vdXMgdmVyc2lvbiBvZiB7QGxpbmsgY29tbWFuZH0uXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kLnRzXCJcbiAqIHRyeSB7XG4gKiAgIGF3YWl0IGNvbW1hbmQoXCJkZW5vXCIsIFtcImV2YWxcIiwgXCJEZW5vLmV4aXQoMSlcIl0sIHsgdGhyb3c6IHRydWUgfSlcbiAqIH1cbiAqIGNhdGNoIChlcnJvcikge1xuICogICBjb25zb2xlLmxvZyhlcnJvcilcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZChiaW46IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBPcHRpb25zICYgeyBzeW5jPzogZmFsc2U7IGJhY2tncm91bmQ/OiBmYWxzZSB9KTogUHJvbWlzZTxSZXN1bHQ+XG4vKipcbiAqIFN5bmNocm9ub3VzIHZlcnNpb24gb2Yge0BsaW5rIGNvbW1hbmR9LlxuICpcbiAqIE5vdGUgdGhhdCBzdGRpbiBpcyBub3QgdXNhYmxlIGluIHN5bmMgbW9kZSBhbmQgd2lsbCBhbHdheXMgYmUgZW1wdHkuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kLnRzXCJcbiAqIGNvbW1hbmQoXCJkZW5vXCIsIFtcIi0tdmVyc2lvblwiXSwgeyBzeW5jOiB0cnVlIH0pXG4gKiBgYGBcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC50c1wiXG4gKiB0cnkge1xuICogICBjb21tYW5kKFwiZGVub1wiLCBbXCJldmFsXCIsIFwiRGVuby5leGl0KDEpXCJdLCB7IHN5bmM6IHRydWUsIHRocm93OiB0cnVlIH0pXG4gKiB9XG4gKiBjYXRjaCAoZXJyb3IpIHtcbiAqICAgY29uc29sZS5sb2coZXJyb3IpXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmQoYmluOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zPzogT3B0aW9ucyAmIHsgc3luYzogdHJ1ZSB9KTogUmVzdWx0XG4vKipcbiAqIFJ1biBhIGNvbW1hbmQuXG4gKlxuICogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vYXBpL2Rlbm8vfi9EZW5vLkNvbW1hbmQgfCBEZW5vLkNvbW1hbmR9IHRoYXQgcHJvdmlkZXMgYSBiZXR0ZXIgaGFuZGxpbmcgb2Ygc3RkaW8gZm9yIGludGVyYWN0aXZlIHByb2Nlc3Nlcy5cbiAqXG4gKiBMaWtlIGBEZW5vLkNvbW1hbmRgLCB0aGUgYGVudmAsIGBjd2RgLCBhbmQgYHJhd2AgKGFsaWFzIGZvciBgd2luZG93c1Jhd0FyZ3VtZW50c2ApIG9wdGlvbnMgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBUaGUgYHN0ZGluYCwgYHN0ZG91dGAgYW5kIGBzdGRlcnJgIG9wdGlvbnMgYWNjZXB0IGBcInBpcGVkXCJgIChjYXB0dXJlZCBpbnRvIHRoZSByZXN1bHQgYW5kIG1pcnJvcmVkIHRvIGEge0BsaW5rIGh0dHBzOi8vbG9ndGFwZS5vcmcgfCBMb2dUYXBlfSBzdWItbG9nZ2VyKSwgYFwiaW5oZXJpdFwiYCAoZm9yd2FyZGVkIHRvIHRoZSBwYXJlbnQgcHJvY2Vzcykgb3IgYG51bGxgIChkaXNjYXJkZWQpLlxuICpcbiAqIExvZ2dpbmcgaXMgcGVyZm9ybWVkIHRocm91Z2gge0BsaW5rIGh0dHBzOi8vbG9ndGFwZS5vcmcgfCBMb2dUYXBlfS5cbiAqIFRoZSBgbG9nZ2VyYCBvcHRpb24gaXMgYSBjYXRlZ29yeSBmb3J3YXJkZWQgdG8gYGdldExvZ2dlcigpYCAoZGVmYXVsdGluZyB0byBgW1wicnVuXCJdYCksIGFuZCBlYWNoIGNoYW5uZWwgaXMgbWlycm9yZWQgdGhyb3VnaCBpdHMgb3duIHN1Yi1jYXRlZ29yeSDigJQgYHN0ZGluYCBhdCBgZGVidWdgLCBgc3Rkb3V0YCBhdCBgaW5mb2AsIGBzdGRlcnJgIGF0IGBlcnJvcmAuXG4gKiBBcyByZWNvbW1lbmRlZCBmb3IgbGlicmFyaWVzLCBgY29tbWFuZCgpYCBuZXZlciBjb25maWd1cmVzIExvZ1RhcGUgaXRzZWxmOiB0aGUgaG9zdCBhcHBsaWNhdGlvbiBpcyBpbiBjaGFyZ2Ugb2YgdGhlIGFjdHVhbCBvdXRwdXQgKHRocm91Z2gge0BsaW5rIGh0dHBzOi8vbG9ndGFwZS5vcmcvbWFudWFsL2NvbmZpZyB8IExvZ1RhcGUgY29uZmlndXJhdGlvbn0pLlxuICpcbiAqIFNldCBgd2luZXh0YCBvcHRpb24gdG8gYXV0b21hdGljYWxseSBhcHBlbmQgYW4gZXh0ZW5zaW9uIHRvIHRoZSBiaW5hcnkgcGF0aCBvbiBXaW5kb3dzIChsaWtlIGAuY21kYCBvciBgLmV4ZWApLlxuICogVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgYmluYXJ5IHBhdGggaXNuJ3QgYXV0b21hdGljYWxseSByZXNvbHZlZCBvbiBXaW5kb3dzLlxuICpcbiAqIFBhc3MgYSBgY2FsbGJhY2tgIG9wdGlvbiAoYW4gYXN5bmMgZ2VuZXJhdG9yKSB0byBpbnRlcmFjdCB3aXRoIHRoZSBwcm9jZXNzIHN0ZGluLlxuICogU2VlIHtAbGluayBDYWxsYmFja30gZm9yIHRoZSBpbnRlcmFjdGlvbiBwcm90b2NvbDogYGZvciBhd2FpdGAgb3ZlciBgc3RkaW9gIHRvIHJlYWQgb3V0cHV0LCBgeWllbGRgIHRvIHdyaXRlIHRvIHN0ZGluLCBgcmV0dXJuYCB0byBjbG9zZSBpdC5cbiAqXG4gKiBUaGUgYGJ1ZmZlcmluZ2Agb3B0aW9uIGlzIHVzZWQgdG8gbWVyZ2UgbWVzc2FnZXMgdGhhdCBhcmUgcmVjZWl2ZWQgcmVsYXRpdmVseSBjbG9zZWx5LlxuICogU2V0dGluZyB0aGlzIG9wdGlvbiB0byBhIGxvdyB2YWx1ZSB3aWxsIGFsc28gaW5jcmVhc2UgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIGludGVyYWN0aW9uIGdlbmVyYXRvciBpcyByZXN1bWVkLlxuICpcbiAqIFJlc3VsdGluZyBvYmplY3QgY29udGFpbnMgdGhlIHNhbWUgcHJvcGVydGllcyBhcyB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRlbm8uY29tL2FwaS9kZW5vL34vRGVuby5Db21tYW5kU3RhdHVzIHwgRGVuby5Db21tYW5kU3RhdHVzfVxuICogd2l0aCBhbiBhZGRpdGlvbmFsIGBzdGRpb2AgcHJvcGVydHkgdGhhdCBjb250YWlucyBhbiBhcnJheSBvZiBvcmRlcmVkIHR1cGxlcyB3aXRoIHRoZSBkZWx0YSB0aW1lc3RhbXAgc2luY2UgcHJvY2VzcyBzdGFydCwgdGhlIGNoYW5uZWwgaWRlbmZpdGllciAoMDpzdGRpbiwgMTpzdGRvdXQsIDI6c3RkZXJyKSBhbmQgdGhlIGNvbnRlbnQuXG4gKiBUaGlzIG9mZmVycyBhIHByb3BlciBoaXN0b3J5IG9mIGV4Y2hhbmdlZCBjb250ZW50LlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC50c1wiXG4gKiBhd2FpdCBjb21tYW5kKFwiZGVub1wiLCBbXCItLXZlcnNpb25cIl0sIHsgZW52OiB7IE5PX0NPTE9SOiBcInRydWVcIiB9LCBjd2Q6IFwiL3RtcFwiLCByYXc6IHRydWUgfSlcbiAqIGF3YWl0IGNvbW1hbmQoXCJkZW5vXCIsIFtcIi0tdmVyc2lvblwiXSwgeyBzdGRvdXQ6IFwicGlwZWRcIiB9KVxuICogYXdhaXQgY29tbWFuZChcImRlbm9cIiwgW1wiLS12ZXJzaW9uXCJdLCB7IGxvZ2dlcjogW1wibXktYXBwXCIsIFwicnVuXCJdLCBzdGRvdXQ6IFwicGlwZWRcIiB9KVxuICogYXdhaXQgY29tbWFuZChcImRlbm9cIiwgW1wiLS12ZXJzaW9uXCJdLCB7IHdpbmV4dDogXCIuZXhlXCIgfSlcbiAqIGBgYFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC50c1wiXG4gKlxuICogY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGNvbW1hbmQoXCJkZW5vXCIsIFtcInJlcGxcIl0sIHtcbiAqICAgZW52OiB7IE5PX0NPTE9SOiBcInRydWVcIiB9LFxuICogICAvLyBQYXNzaW5nIGEgY2FsbGJhY2sgYXV0b21hdGljYWxseSBwaXBlcyBzdGRpbi5cbiAqICAgLy8gSXRlcmF0ZSBgc3RkaW9gIHRvIHJlYWN0IHRvIG91dHB1dCwgYHlpZWxkYCB0byB3cml0ZSB0byBzdGRpbiAodmVyYmF0aW0pLCBgcmV0dXJuYCB0byBjbG9zZSBpdC5cbiAqICAgY2FsbGJhY2s6IGFzeW5jIGZ1bmN0aW9uKiAoeyBzdGRpbyB9KSB7XG4gKiAgICAgZm9yIGF3YWl0IChjb25zdCB7IHN0ZG91dCB9IG9mIHN0ZGlvKSB7XG4gKiAgICAgICBpZiAoIXN0ZG91dC5pbmNsdWRlcyhcImV4aXQgdXNpbmdcIikpIHtcbiAqICAgICAgICAgY29udGludWVcbiAqICAgICAgIH1cbiAqICAgICAgIHlpZWxkIFwiY29uc29sZS5sb2coJ2hlbGxvJylcXG5cIlxuICogICAgICAgcmV0dXJuXG4gKiAgICAgfVxuICogICB9LFxuICogfSlcbiAqIGNvbnNvbGUuYXNzZXJ0KHN0ZG91dC5pbmNsdWRlcyhcImhlbGxvXCIpKVxuICogYGBgXG4gKlxuICogQGF1dGhvciBTaW1vbiBMZWNvcSAobG93bGlnaHRlcilcbiAqIEBsaWNlbnNlIE1JVFxuICogQG1vZHVsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZChcbiAgYmluOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICB7IGxvZ2dlcjogY2F0ZWdvcnkgPSBbXCJydW5cIl0sIHN0ZGluID0gbnVsbCwgc3Rkb3V0ID0gXCJwaXBlZFwiLCBzdGRlcnIgPSBcInBpcGVkXCIsIGVudiwgY3dkLCByYXcsIGNhbGxiYWNrLCBidWZmZXJpbmcsIHNpZ25hbCwgc3luYywgYmFja2dyb3VuZCwgdGhyb3c6IF90aHJvdywgZHJ5cnVuLCB3aW5leHQgPSBcIlwiLCBvcyA9IERlbm8uYnVpbGQub3MgfSA9IHt9IGFzIE9wdGlvbnMsXG4pOiBQcm9taXNhYmxlPFJlc3VsdD4gfCBCYWNrZ3JvdW5kIHtcbiAgaWYgKG9zID09PSBcIndpbmRvd3NcIilcbiAgICBiaW4gPSBgJHtiaW59JHt3aW5leHR9YFxuICBjb25zdCBsb2cgPSBnZXRMb2dnZXIoY2F0ZWdvcnkpLndpdGgoeyBiaW4gfSlcbiAgaWYgKGNhbGxiYWNrICYmIChoYW5kbGUoc3RkaW4pICE9PSBcInBpcGVkXCIpKVxuICAgIHN0ZGluID0gXCJwaXBlZFwiXG4gIGNvbnN0IGNvbW1hbmQgPSBuZXcgRGVuby5Db21tYW5kKGJpbiwgeyBhcmdzLCBzdGRpbjogIXN5bmMgPyBoYW5kbGUoc3RkaW4pIDogXCJudWxsXCIsIHN0ZG91dDogaGFuZGxlKHN0ZG91dCksIHN0ZGVycjogaGFuZGxlKHN0ZGVyciksIGNsZWFyRW52OiB0cnVlLCBlbnYsIGN3ZCwgd2luZG93c1Jhd0FyZ3VtZW50czogcmF3LCBzaWduYWwsIGRldGFjaGVkOiBiYWNrZ3JvdW5kIH0pXG4gIGlmIChkcnlydW4pIHtcbiAgICBsb2cud2FybihcImRyeXJ1bjoge2Jpbn0gbm90IGV4ZWN1dGVkXCIsIHsgYmluIH0pXG4gICAgY29uc3QgcmVzdWx0ID0geyBzdWNjZXNzOiB0cnVlLCBjb2RlOiAwLCBzdGRpbzogW10sIHN0ZGluOiBcIlwiLCBzdGRvdXQ6IFwiXCIsIHN0ZGVycjogXCJcIiB9XG4gICAgcmV0dXJuIHN5bmMgPyByZXN1bHQgOiBQcm9taXNlLnJlc29sdmUocmVzdWx0KVxuICB9XG4gIGlmIChzeW5jKVxuICAgIHJldHVybiBleGVjKGNvbW1hbmQsIHsgYmluLCBsb2csIHRocm93OiBfdGhyb3csIHN0ZG91dCwgc3RkZXJyIH0pXG4gIHJldHVybiBzcGF3bihjb21tYW5kLCB7IGJpbiwgbG9nLCBjYWxsYmFjaywgYnVmZmVyaW5nLCB0aHJvdzogX3Rocm93LCBiYWNrZ3JvdW5kLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIgfSlcbn1cblxuLyoqIFJldHVybnMgdGhlIGhhbmRsZSB0eXBlIGZvciBhIGdpdmVuIG1vZGUuICovXG5mdW5jdGlvbiBoYW5kbGUobW9kZTogQ2hhbm5lbCkge1xuICByZXR1cm4gW1wiaW5oZXJpdFwiLCBcIm51bGxcIl0uaW5jbHVkZXMoYCR7bW9kZX1gKSA/IGAke21vZGV9YCBhcyBcImluaGVyaXRcIiB8IFwibnVsbFwiIDogXCJwaXBlZFwiXG59XG5cbi8qKiBFeGVjdXRlIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LiAqL1xuZnVuY3Rpb24gZXhlYyhjb21tYW5kOiBEZW5vLkNvbW1hbmQsIHsgYmluLCBsb2csIHRocm93OiBfdGhyb3csIHN0ZG91dCwgc3RkZXJyIH06IHsgYmluOiBzdHJpbmc7IGxvZzogTG9nZ2VyOyB0aHJvdz86IGJvb2xlYW47IHN0ZG91dDogQ2hhbm5lbDsgc3RkZXJyOiBDaGFubmVsIH0pIHtcbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IG91dHB1dCA9IGNvbW1hbmQub3V0cHV0U3luYygpXG4gIGNvbnN0IHsgc3VjY2VzcywgY29kZSB9ID0gb3V0cHV0IC8vIERvIG5vdCBhY2Nlc3Mgc3Rkb3V0IG9yIHN0ZGVyciBiZWZvcmUgXCJwaXBlZFwiIHN0YXR1cyBjaGVja1xuICBjb25zdCB0ID0gRGF0ZS5ub3coKSAtIHN0YXJ0XG4gIGNvbnN0IHN0ZGlvID0ge1xuICAgIGdldCBzdGRpbygpIHtcbiAgICAgIHJldHVybiBbW3QsIDEsIHRoaXMuc3Rkb3V0XSwgW3QsIDIsIHRoaXMuc3RkZXJyXV1cbiAgICB9LFxuICAgIHN0ZGluOiBcIlwiLFxuICAgIHN0ZG91dDogaGFuZGxlKHN0ZG91dCkgPT09IFwicGlwZWRcIiA/IGRlY29kZXIuZGVjb2RlKG91dHB1dC5zdGRvdXQpIDogXCJcIixcbiAgICBzdGRlcnI6IGhhbmRsZShzdGRlcnIpID09PSBcInBpcGVkXCIgPyBkZWNvZGVyLmRlY29kZShvdXRwdXQuc3RkZXJyKSA6IFwiXCIsXG4gIH0gYXMgU25hcHNob3QgJiBQaWNrPFJlc3VsdCwgXCJzdGRpb1wiPlxuICBmb3IgKGNvbnN0IHsgY2hhbm5lbCwgbW9kZSB9IG9mIFt7IGNoYW5uZWw6IFwic3Rkb3V0XCIsIG1vZGU6IHN0ZG91dCB9LCB7IGNoYW5uZWw6IFwic3RkZXJyXCIsIG1vZGU6IHN0ZGVyciB9XSBhcyBjb25zdCkge1xuICAgIGlmICgoaGFuZGxlKG1vZGUpID09PSBcInBpcGVkXCIpICYmIChzdGRpb1tjaGFubmVsXSkpXG4gICAgICBsb2dnZWQobG9nLCBjaGFubmVsLCB0LCBzdGRpb1tjaGFubmVsXSlcbiAgfVxuICBpZiAoKCFzdWNjZXNzKSAmJiBfdGhyb3cpXG4gICAgdGhyb3cgbmV3IEV2YWxFcnJvcihgJHtiaW59IGV4aXRlZCB3aXRoIG5vbi16ZXJvIGNvZGUgJHtjb2RlfTpcXG4ke3N0ZGlvLnN0ZG91dH1cXG4ke3N0ZGlvLnN0ZGVycn1gKVxuICByZXR1cm4geyBzdWNjZXNzLCBjb2RlLCAuLi5zdGRpbyB9XG59XG5cbi8qKiBTcGF3biBhIGNvbW1hbmQgYXN5bmNocm9ub3VzbHkgaW4gYmFja2dyb3VuZC4gKi9cbmZ1bmN0aW9uIHNwYXduKFxuICBjb21tYW5kOiBEZW5vLkNvbW1hbmQsXG4gIG9wdGlvbnM6IHsgYmluOiBzdHJpbmc7IGxvZzogTG9nZ2VyOyBjYWxsYmFjaz86IENhbGxiYWNrOyBidWZmZXJpbmc/OiBudW1iZXI7IHRocm93PzogYm9vbGVhbjsgYmFja2dyb3VuZDogdHJ1ZTsgc3RkaW46IENoYW5uZWw7IHN0ZG91dDogQ2hhbm5lbDsgc3RkZXJyOiBDaGFubmVsIH0sXG4pOiBCYWNrZ3JvdW5kXG4vKiogU3Bhd24gYSBjb21tYW5kIGFzeW5jaHJvbm91c2x5LiAqL1xuZnVuY3Rpb24gc3Bhd24oY29tbWFuZDogRGVuby5Db21tYW5kLCBvcHRpb25zOiB7IGJpbjogc3RyaW5nOyBsb2c6IExvZ2dlcjsgY2FsbGJhY2s/OiBDYWxsYmFjazsgYnVmZmVyaW5nPzogbnVtYmVyOyB0aHJvdz86IGJvb2xlYW47IGJhY2tncm91bmQ/OiBib29sZWFuOyBzdGRpbjogQ2hhbm5lbDsgc3Rkb3V0OiBDaGFubmVsOyBzdGRlcnI6IENoYW5uZWwgfSk6IFByb21pc2U8UmVzdWx0PlxuLyoqIFNwYXduIGEgY29tbWFuZC4gKi9cbmZ1bmN0aW9uIHNwYXduKFxuICBjb21tYW5kOiBEZW5vLkNvbW1hbmQsXG4gIHsgYmluLCBsb2csIGNhbGxiYWNrID0gbm9vcCwgYnVmZmVyaW5nID0gMjUwLCB0aHJvdzogX3Rocm93LCBiYWNrZ3JvdW5kLCAuLi5jaGFubmVscyB9OiB7XG4gICAgYmluOiBzdHJpbmdcbiAgICBsb2c6IExvZ2dlclxuICAgIGNhbGxiYWNrPzogQ2FsbGJhY2tcbiAgICBidWZmZXJpbmc/OiBudW1iZXJcbiAgICB0aHJvdz86IGJvb2xlYW5cbiAgICBiYWNrZ3JvdW5kPzogYm9vbGVhblxuICAgIHN0ZGluOiBDaGFubmVsXG4gICAgc3Rkb3V0OiBDaGFubmVsXG4gICAgc3RkZXJyOiBDaGFubmVsXG4gIH0sXG4pIHtcbiAgY29uc3QgcHJvY2VzcyA9IGNvbW1hbmQuc3Bhd24oKVxuICBjb25zdCBzdGFydCA9IERhdGUubm93KClcbiAgY29uc3Qgc3RkaW8gPSB7XG4gICAgc3RkaW86IFtdLFxuICAgIGdldCBzdGRpbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZGlvLmZpbHRlcigoW18sIGldKSA9PiBpID09PSAwKS5tYXAoKFtfLCBfXywgY29udGVudF0pID0+IGNvbnRlbnQpLmpvaW4oXCJcIilcbiAgICB9LFxuICAgIGdldCBzdGRvdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGRpby5maWx0ZXIoKFtfLCBpXSkgPT4gaSA9PT0gMSkubWFwKChbXywgX18sIGNvbnRlbnRdKSA9PiBjb250ZW50KS5qb2luKFwiXFxuXCIpXG4gICAgfSxcbiAgICBnZXQgc3RkZXJyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RkaW8uZmlsdGVyKChbXywgaV0pID0+IGkgPT09IDIpLm1hcCgoW18sIF9fLCBjb250ZW50XSkgPT4gY29udGVudCkuam9pbihcIlxcblwiKVxuICAgIH0sXG4gIH0gYXMgU25hcHNob3QgJiBQaWNrPFJlc3VsdCwgXCJzdGRpb1wiPlxuICBsZXQgbGFzdCA9IFwiXCJcblxuICAvLyBEcml2ZSB0aGUgaW50ZXJhY3Rpb24gZ2VuZXJhdG9yIHdoZW4gc3RkaW4gaXMgcGlwZWRcbiAgbGV0IHJlbGVhc2UgPSAoKSA9PiB7fVxuICBsZXQgbm90aWZ5ID0gbnVsbCBhcyBOdWxsYWJsZTwoKSA9PiB2b2lkPlxuICBsZXQgcGVuZGluZyA9IHRydWVcbiAgbGV0IGVuZGVkID0gZmFsc2VcbiAgbGV0IGludGVyYWN0aW9uID0gUHJvbWlzZS5yZXNvbHZlKClcbiAgaWYgKGhhbmRsZShjaGFubmVscy5zdGRpbikgPT09IFwicGlwZWRcIikge1xuICAgIGNvbnN0IHdyaXRlciA9IHByb2Nlc3Muc3RkaW4uZ2V0V3JpdGVyKClcbiAgICBjb25zdCBjbG9zZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpXG4gICAgICAgIGxvZy53aXRoKHsgdDogRGF0ZS5ub3coKSAtIHN0YXJ0IH0pLnRyYWNlKFwiY2xvc2VkIHN0ZGluXCIpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIChzdGRpbiBtYXkgYWxyZWFkeSBiZSBjbG9zZWQgaWYgdGhlIHByb2Nlc3MgZXhpdGVkKVxuICAgICAgfVxuICAgIH1cbiAgICByZWxlYXNlID0gKCkgPT4ge1xuICAgICAgZW5kZWQgPSB0cnVlXG4gICAgICBub3RpZnk/LigpXG4gICAgICBub3RpZnkgPSBudWxsXG4gICAgfVxuICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgYXN5bmMgKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgeWllbGQgc3RkaW8gYXMgU25hcHNob3RcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbmRlZClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBub3RpZnkgPSByZXNvbHZlKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH1cbiAgICBpbnRlcmFjdGlvbiA9IChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBnZW5lcmF0b3IgPSBjYWxsYmFjayh7IHN0ZGlvOiBpbnB1dCB9KVxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBjb250ZW50IG9mIGdlbmVyYXRvcikge1xuICAgICAgICAgIGNvbnN0IHQgPSBEYXRlLm5vdygpIC0gc3RhcnRcbiAgICAgICAgICBsb2dnZWQobG9nLCBcInN0ZGluXCIsIHQsIGAke2NvbnRlbnR9YClcbiAgICAgICAgICBzdGRpby5zdGRpby5wdXNoKFt0LCAwLCBgJHtjb250ZW50fWBdKVxuICAgICAgICAgIGF3YWl0IHdyaXRlci53cml0ZShlbmNvZGVyLmVuY29kZShgJHtjb250ZW50fWApKVxuICAgICAgICAgIGxhc3QgPSBcInN0ZGluXCJcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjbG9zZSgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBhd2FpdCBjbG9zZSgpXG4gICAgICAgIGFib3J0KHByb2Nlc3MpXG4gICAgICAgIGF3YWl0IHByb2Nlc3Muc3RhdHVzXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfSkoKVxuICB9XG5cbiAgLy8gQnVmZmVyIG91dHB1dCBhbmQgcmVzdW1lIHRoZSBpbnRlcmFjdGlvbiBnZW5lcmF0b3JcbiAgY29uc3QgZGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgIGxhc3QgPSBcIlwiXG4gICAgcGVuZGluZyA9IHRydWVcbiAgICBub3RpZnk/LigpXG4gICAgbm90aWZ5ID0gbnVsbFxuICB9LCBidWZmZXJpbmcpXG4gIGNvbnN0IG91dHB1dHMgPSBQcm9taXNlLmFsbChcbiAgICAoW1wic3Rkb3V0XCIsIFwic3RkZXJyXCJdIGFzIGNvbnN0KS5maWx0ZXIoKGNoYW5uZWwpID0+IGhhbmRsZShjaGFubmVsc1tjaGFubmVsXSkgPT09IFwicGlwZWRcIikubWFwKGFzeW5jIChjaGFubmVsKSA9PiB7XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGxpbmUgb2YgcHJvY2Vzc1tjaGFubmVsXS5waXBlVGhyb3VnaChuZXcgVGV4dERlY29kZXJTdHJlYW0oKSkucGlwZVRocm91Z2gobmV3IFRleHRMaW5lU3RyZWFtKCkpKSB7XG4gICAgICAgIGNvbnN0IHQgPSBEYXRlLm5vdygpIC0gc3RhcnRcbiAgICAgICAgY29uc3Qgc3RkaSA9IHsgc3Rkb3V0OiAxLCBzdGRlcnI6IDIgfVtjaGFubmVsXSBhcyAxIHwgMlxuICAgICAgICBsb2dnZWQobG9nLCBjaGFubmVsLCB0LCBsaW5lKVxuICAgICAgICBpZiAoKHN0ZGlvLnN0ZGlvLmxlbmd0aCkgJiYgKGxhc3QgPT09IGNoYW5uZWwpKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBzdGRpby5zdGRpby5hdCgtMSkhXG4gICAgICAgICAgaWYgKHByZXZpb3VzWzFdID09PSBzdGRpKVxuICAgICAgICAgICAgcHJldmlvdXNbMl0gKz0gYFxcbiR7bGluZX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RkaW8uc3RkaW8ucHVzaChbdCwgc3RkaSwgbGluZV0pXG4gICAgICAgIH1cbiAgICAgICAgbGFzdCA9IGNoYW5uZWxcbiAgICAgICAgZGVib3VuY2VkKClcbiAgICAgIH1cbiAgICB9KSxcbiAgKVxuICB2b2lkIG91dHB1dHMudGhlbihyZWxlYXNlLCByZWxlYXNlKVxuXG4gIC8vIENvbXB1dGUgcmVzdWx0XG4gIGNvbnN0IHJlc3VsdCA9IChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW291dHB1dCwgaW50ZXJhY3RlZF0gPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW291dHB1dHMsIGludGVyYWN0aW9uXSlcbiAgICBkZWJvdW5jZWQuY2xlYXIoKVxuICAgIGNvbnN0IHsgc3VjY2VzcywgY29kZSB9ID0gYXdhaXQgcHJvY2Vzcy5zdGF0dXNcbiAgICBpZiAoKG91dHB1dC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIikgfHwgKGludGVyYWN0ZWQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpKVxuICAgICAgdGhyb3cgKChvdXRwdXQgYXMgeyByZWFzb24/OiB1bmtub3duIH0pLnJlYXNvbiA/PyAoaW50ZXJhY3RlZCBhcyB7IHJlYXNvbj86IHVua25vd24gfSkucmVhc29uKVxuICAgIGlmICgoIXN1Y2Nlc3MpICYmIF90aHJvdylcbiAgICAgIHRocm93IG5ldyBFdmFsRXJyb3IoYCR7YmlufSBleGl0ZWQgd2l0aCBub24temVybyBjb2RlICR7Y29kZX06XFxuJHtzdGRpby5zdGRvdXR9XFxuJHtzdGRpby5zdGRlcnJ9YClcbiAgICByZXR1cm4geyBzdWNjZXNzLCBjb2RlLCAuLi5zdGRpbyB9XG4gIH0pKClcbiAgY29uc3QgdGVybWluYXRlID0gYXN5bmMgKHNpZ25hbDogRGVuby5TaWduYWwgPSBcIlNJR1RFUk1cIikgPT4ge1xuICAgIGFib3J0KHByb2Nlc3MsIHNpZ25hbClcbiAgICBhd2FpdCByZXN1bHQuY2F0Y2goKCkgPT4ge30pXG4gIH1cbiAgcmV0dXJuIGJhY2tncm91bmRcbiAgICA/IHtcbiAgICAgIGtpbGw6IHRlcm1pbmF0ZSxcbiAgICAgIHVucmVmOiAoKSA9PiBwcm9jZXNzLnVucmVmKCksXG4gICAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgICAgcmVzdWx0LFxuICAgICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiAoKSA9PiB0ZXJtaW5hdGUoKSxcbiAgICB9XG4gICAgOiByZXN1bHRcbn1cblxuLyoqIFNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzLCBpZ25vcmluZyB0aGUgZXJyb3IgcmFpc2VkIHdoZW4gaXQgaGFzIGFscmVhZHkgdGVybWluYXRlZC4gKi9cbmZ1bmN0aW9uIGFib3J0KHByb2Nlc3M6IERlbm8uQ2hpbGRQcm9jZXNzLCBzaWduYWw6IERlbm8uU2lnbmFsID0gXCJTSUdURVJNXCIpIHtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmtpbGwoc2lnbmFsKVxuICB9IGNhdGNoIHtcbiAgICAvLyBBbHJlYWR5IHRlcm1pbmF0ZWRcbiAgfVxufVxuXG4vKiogTWlycm9yIGEgc3RkaW8gbGluZSB0aHJvdWdoIHRoZSBjaGFubmVsJ3Mgc3ViLWxvZ2dlci4gKi9cbmZ1bmN0aW9uIGxvZ2dlZChsb2c6IExvZ2dlciwgY2hhbm5lbDogXCJzdGRpblwiIHwgXCJzdGRvdXRcIiB8IFwic3RkZXJyXCIsIHQ6IG51bWJlciwgY29udGVudDogc3RyaW5nKSB7XG4gIGNvbnN0IGxvZ2dlciA9IGxvZy5nZXRDaGlsZChjaGFubmVsKS53aXRoKHsgdCB9KVxuICBzd2l0Y2ggKGNoYW5uZWwpIHtcbiAgICBjYXNlIFwic3RkaW5cIjpcbiAgICAgIHJldHVybiB2b2lkIGxvZ2dlci5kZWJ1ZyhcIntjb250ZW50fVwiLCB7IGNvbnRlbnQgfSlcbiAgICBjYXNlIFwic3Rkb3V0XCI6XG4gICAgICByZXR1cm4gdm9pZCBsb2dnZXIuaW5mbyhcIntjb250ZW50fVwiLCB7IGNvbnRlbnQgfSlcbiAgICBjYXNlIFwic3RkZXJyXCI6XG4gICAgICByZXR1cm4gdm9pZCBsb2dnZXIuZXJyb3IoXCJ7Y29udGVudH1cIiwgeyBjb250ZW50IH0pXG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBRVYsU0FBUyxTQUFTLFFBQXFCLG1CQUFrQjtBQUN6RCxTQUFTLGNBQWMsUUFBUSxlQUFjO0FBQzdDLFNBQVMsUUFBUSxRQUFRLHNCQUFxQjtBQThIOUMsaUJBQWlCLEdBQ2pCLE1BQU0sVUFBVSxJQUFJO0FBRXBCLGlCQUFpQixHQUNqQixNQUFNLFVBQVUsSUFBSTtBQUVwQiwyRUFBMkUsR0FDM0UsTUFBTSxPQUFpQixtQkFBb0I7QUE4QzNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5REMsR0FDRCxPQUFPLFNBQVMsUUFDZCxHQUFXLEVBQ1gsSUFBYyxFQUNkLEVBQUUsUUFBUSxXQUFXO0VBQUM7Q0FBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLFNBQVMsT0FBTyxFQUFFLFNB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
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9saWJzL2xpYnMvQGxpYnMvcnVuL2NvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IHR5cGUgeyBOdWxsYWJsZSwgUHJvbWlzYWJsZSB9IGZyb20gXCJAbGlicy90eXBpbmdcIlxuaW1wb3J0IHsgZ2V0TG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCJcbmltcG9ydCB7IFRleHRMaW5lU3RyZWFtIH0gZnJvbSBcIkBzdGQvc3RyZWFtc1wiXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gXCJAc3RkL2FzeW5jL2RlYm91bmNlXCJcbmV4cG9ydCB0eXBlIHsgTG9nZ2VyLCBQcm9taXNhYmxlIH1cblxuLyoqXG4gKiBIYW5kbGluZyBvZiBhIHN0ZGlvIGNoYW5uZWwuXG4gKiAtIGBcInBpcGVkXCJgOiB0aGUgY2hhbm5lbCBpcyBjYXB0dXJlZCBpbnRvIHRoZSB7QGxpbmsgUmVzdWx0fSBhbmQgbWlycm9yZWQgdG8gYSB7QGxpbmsgaHR0cHM6Ly9sb2d0YXBlLm9yZyB8IExvZ1RhcGV9IHN1Yi1sb2dnZXIuXG4gKiAtIGBcImluaGVyaXRcImA6IHRoZSBjaGFubmVsIGlzIGZvcndhcmRlZCB0byB0aGUgcGFyZW50IHByb2Nlc3MuXG4gKiAtIGBudWxsYDogdGhlIGNoYW5uZWwgaXMgZGlzY2FyZGVkLlxuICovXG5leHBvcnQgdHlwZSBDaGFubmVsID0gTnVsbGFibGU8XCJwaXBlZFwiIHwgXCJpbmhlcml0XCI+XG5cbi8qKiBSdW4gb3B0aW9ucy4gKi9cbmV4cG9ydCB0eXBlIE9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBMb2dnZXIgY2F0ZWdvcmllcyBmb3J3YXJkZWQgdG8ge0BsaW5rIGh0dHBzOi8vbG9ndGFwZS5vcmcgfCBMb2dUYXBlfSdzIGBnZXRMb2dnZXIoKWAuXG4gICAqIEVhY2ggY2hhbm5lbCBpcyBtaXJyb3JlZCB0aHJvdWdoIGEgc3ViLWNhdGVnb3J5IChgc3RkaW5gLCBgc3Rkb3V0YCwgYHN0ZGVycmApIHNvIHRoZSBob3N0IGFwcGxpY2F0aW9uIGNhbiByb3V0ZSBvciBmaWx0ZXIgdGhlbS5cbiAgICogRGVmYXVsdHMgdG8gYFtcInJ1blwiXWAuXG4gICAqL1xuICBsb2dnZXI/OiBzdHJpbmdbXVxuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzLiAqL1xuICBlbnY/OiBEZW5vLkNvbW1hbmRPcHRpb25zW1wiZW52XCJdXG4gIC8qKiBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAqL1xuICBjd2Q/OiBEZW5vLkNvbW1hbmRPcHRpb25zW1wiY3dkXCJdXG4gIC8qKiBSYXcgYXJndW1lbnRzIChXaW5kb3dzIG9ubHkpLiAqL1xuICByYXc/OiBib29sZWFuXG4gIC8qKiBIYW5kbGluZyBvZiBzdGRpbi4gKi9cbiAgc3RkaW4/OiBDaGFubmVsXG4gIC8qKiBIYW5kbGluZyBvZiBzdGRvdXQuICovXG4gIHN0ZG91dD86IENoYW5uZWxcbiAgLyoqIEhhbmRsaW5nIG9mIHN0ZGVyci4gKi9cbiAgc3RkZXJyPzogQ2hhbm5lbFxuICAvKipcbiAgICogU3RkaW4gaW50ZXJhY3Rpb24gY2FsbGJhY2suXG4gICAqIFBhc3NpbmcgdGhpcyBvcHRpb24gYXV0b21hdGljYWxseSBwaXBlcyBzdGRpbi5cbiAgICogU2VlIHtAbGluayBDYWxsYmFja30gZm9yIHRoZSBpbnRlcmFjdGlvbiBwcm90b2NvbC5cbiAgICovXG4gIGNhbGxiYWNrPzogQ2FsbGJhY2tcbiAgLyoqXG4gICAqIFN0ZGlvIGJ1ZmZlcmluZy5cbiAgICogVGhpcyBpcyB1c2VkIHRvIG1lcmdlIG1lc3NhZ2VzIHRoYXQgYXJlIHJlY2VpdmVkIHJlbGF0aXZlbHkgY2xvc2VseS5cbiAgICogQnVmZmVyaW5nIGlzIHNraXBwZWQgd2hlbiBhIGRpZmZlcmVudCBjaGFubmVsIGlzIHVzZWQgaW4tYmV0d2Vlbi5cbiAgICovXG4gIGJ1ZmZlcmluZz86IG51bWJlclxuICAvKiogQWJvcnQgc2lnbmFsLiAqL1xuICBzaWduYWw/OiBEZW5vLkNvbW1hbmRPcHRpb25zW1wic2lnbmFsXCJdXG4gIC8qKlxuICAgKiBFeGVjdXRlIHByb2Nlc3Mgc3luY2hyb25vdXNseS5cbiAgICogTm90ZSB0aGF0IHN0ZGluIGlzIG5vdCB1c2FibGUgaW4gc3luYyBtb2RlLlxuICAgKi9cbiAgc3luYz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFJ1biBwcm9jZXNzIGluIGJhY2tncm91bmQuXG4gICAqIFRoaXMgaW1wbGllcyBgc3luYzogZmFsc2VgLlxuICAgKi9cbiAgYmFja2dyb3VuZD86IGJvb2xlYW5cbiAgLyoqIFByb2Nlc3MgZXh0ZW5zaW9uIG9uIFdpbmRvd3MuICovXG4gIHdpbmV4dD86IHN0cmluZ1xuICAvKiogT3BlcmF0aW5nIHN5c3RlbS4gKi9cbiAgb3M/OiB0eXBlb2YgRGVuby5idWlsZC5vc1xuICAvKiogVGhyb3cgYW4gZXJyb3IgaWYgZXhpdCBjb2RlIGlzIG5vbi16ZXJvIHJhdGhlciB0aGFuIHJldHVybmluZyBhIHJlc3VsdC4gKi9cbiAgdGhyb3c/OiBib29sZWFuXG4gIC8qKlxuICAgKiBEbyBub3QgYWN0dWFsbHkgZXhlY3V0ZSB0aGUgY29tbWFuZC5cbiAgICogSW4gdGhpcyBjYXNlIHlvdSB3aWxsIGluc3RlYWQgcmVjZWl2ZSBhbiBlbXB0eSBzdWNjZXNzZnVsIHJlc3VsdCBvYmplY3QuXG4gICAqL1xuICBkcnlydW4/OiBib29sZWFuXG59XG5cbi8qKiBSdW4gcmVzdWx0LiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0ID0ge1xuICAvKiogV2hldGhlciB0aGUgcHJvY2VzcyBleGl0ZWQgd2l0aCBhIHplcm8tY29kZS4gKi9cbiAgc3VjY2VzczogRGVuby5Db21tYW5kU3RhdHVzW1wic3VjY2Vzc1wiXVxuICAvKiogUHJvY2VzcyBleGl0IGNvZGUuICovXG4gIGNvZGU6IERlbm8uQ29tbWFuZFN0YXR1c1tcImNvZGVcIl1cbiAgLyoqXG4gICAqIFByb2Nlc3Mgc3RkaW8gY29udGVudC5cbiAgICogRmlyc3QgZWxlbWVudCBpcyB0aGUgZGVsdGEgdGltZXN0YW1wIHNpbmNlIHByb2Nlc3Mgc3RhcnQsIHNlY29uZCBlbGVtZW50IGlzIHRoZSBjaGFubmVsICgwOnN0ZGluLCAxOnN0ZG91dCwgMjpzdGRlcnIpLCB0aGlyZCBlbGVtZW50IGlzIHRoZSBjb250ZW50LlxuICAgKi9cbiAgc3RkaW86IEFycmF5PFtudW1iZXIsIDAgfCAxIHwgMiwgc3RyaW5nXT5cbiAgLyoqIFByb2Nlc3Mgc3RkaW4gY29udGVudC4gKi9cbiAgc3RkaW46IHN0cmluZ1xuICAvKiogUHJvY2VzcyBzdGRvdXQgY29udGVudC4gKi9cbiAgc3Rkb3V0OiBzdHJpbmdcbiAgLyoqIFByb2Nlc3Mgc3RkZXJyIGNvbnRlbnQuICovXG4gIHN0ZGVycjogc3RyaW5nXG59XG5cbi8qKiBIYW5kbGUgdG8gYSBwcm9jZXNzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZC4gKi9cbmV4cG9ydCB0eXBlIEJhY2tncm91bmQgPSB7XG4gIC8qKiBTZW5kIGEgc2lnbmFsIHRvIHRoZSBwcm9jZXNzIChkZWZhdWx0cyB0byBgXCJTSUdURVJNXCJgKS4gKi9cbiAga2lsbDogKHNpZ25hbD86IERlbm8uU2lnbmFsKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBQcmV2ZW50IHRoZSBwcm9jZXNzIGZyb20ga2VlcGluZyB0aGUgcGFyZW50IHByb2Nlc3MgYWxpdmUuICovXG4gIHVucmVmOiAoKSA9PiB2b2lkXG4gIC8qKiBQcm9jZXNzIGlkZW50aWZpZXIuICovXG4gIHBpZDogbnVtYmVyXG4gIC8qKiBQcm9jZXNzIHJlc3VsdCAocmVzb2x2ZXMgb25jZSB0aGUgcHJvY2VzcyBleGl0cykuICovXG4gIHJlc3VsdDogUHJvbWlzZTxSZXN1bHQ+XG4gIC8qKiBLaWxsIHRoZSBwcm9jZXNzIGFuZCB3YWl0IGZvciBpdCB0byBmdWxseSB0ZXJtaW5hdGUuICovXG4gIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogKCkgPT4gUHJvbWlzZTx2b2lkPlxufVxuXG4vKiogU25hcHNob3Qgb2YgdGhlIGFjY3VtdWxhdGVkIHByb2Nlc3Mgc3RkaW8gY29udGVudC4gKi9cbmV4cG9ydCB0eXBlIFNuYXBzaG90ID0gUGljazxSZXN1bHQsIFwic3RkaW5cIiB8IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiPlxuXG4vKipcbiAqIFN0ZGluIGludGVyYWN0aW9uIGNhbGxiYWNrLlxuICpcbiAqIEl0IGlzIGFuIGFzeW5jIGdlbmVyYXRvciB0aGF0IGxldHMgeW91IGRyaXZlIGFuIGludGVyYWN0aXZlIHByb2Nlc3Mgd2l0aCBwbGFpbiBsYW5ndWFnZSBjb25zdHJ1Y3RzOlxuICogYGBgdHMgaWdub3JlXG4gKiAvLyBJdGVyYXRlIG92ZXIgcHJvY2VzcyBvdXRwdXQgdG8gcmVhY3QgdG8gbmV3IGRhdGEuXG4gKiAvLyAob25lIGl0ZXJhdGlvbiBwZXIgYnVmZmVyZWQgZXZlbnQpXG4gKiBmb3IgYXdhaXQgKGNvbnN0IHsgc3Rkb3V0IH0gb2Ygc3RkaW8pIHtcbiAqICAgLy8gVXNlIGF3YWl0IHRvIHBhdXNlIG9yIHBvbGwgZm9yIGEgY29uZGl0aW9uXG4gKiAgIGF3YWl0IGRlbGF5KDEwMDApXG4gKiAgIC8vIFVzZSB5aWVsZCB0byB3cml0ZSB0byBzdGRpbiAodmVyYmF0aW0pXG4gKiAgIHlpZWxkIFwiY29udGVudFxcblwiXG4gKiAgIC8vIFVzZSByZXR1cm4gdG8gY2xvc2Ugc3RkaW4gYW5kIGVuZCB0aGUgaW50ZXJhY3Rpb25cbiAqICAgcmV0dXJuXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJZiB0aGUgZ2VuZXJhdG9yIHRocm93cywgc3RkaW4gaXMgY2xvc2VkLCB0aGUgcHJvY2VzcyBpcyBraWxsZWQgYW5kIHRoZSByZXR1cm5lZCB7QGxpbmsgUmVzdWx0fSByZWplY3RzIHdpdGggdGhlIHRocm93biBlcnJvci5cbiAqIFdoZW4gdGhlIHByb2Nlc3MgZXhpdHMgb24gaXRzIG93biwgdGhlIGBzdGRpb2AgaXRlcmF0b3IgZW5kcywgc28gYSBnZW5lcmF0b3IgcGFya2VkIG9uIGBmb3IgYXdhaXRgIGNvbXBsZXRlcyBuYXR1cmFsbHkuXG4gKi9cbmV4cG9ydCB0eXBlIENhbGxiYWNrID0gKG9wdGlvbnM6IHsgc3RkaW86IEFzeW5jSXRlcmFibGU8U25hcHNob3Q+IH0pID0+IEFzeW5jR2VuZXJhdG9yPHN0cmluZywgdm9pZCwgdW5rbm93bj5cblxuLyoqIFRleHQgZW5jb2RlciAqL1xuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbi8qKiBUZXh0IGRlY29kZXIgKi9cbmNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuXG4vKiogRGVmYXVsdCBpbnRlcmFjdGlvbjogYW4gZW1wdHkgZ2VuZXJhdG9yIHRoYXQgY2xvc2VzIHN0ZGluIGltbWVkaWF0ZWx5LiAqL1xuY29uc3Qgbm9vcDogQ2FsbGJhY2sgPSBhc3luYyBmdW5jdGlvbiogKCkge31cblxuLyoqXG4gKiBBc3luY2hyb25vdXMgdmVyc2lvbiBvZiB7QGxpbmsgY29tbWFuZH0gcnVubmluZyBpbiBiYWNrZ3JvdW5kLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC50c1wiXG4gKiBjb25zdCBwcm9jZXNzID0gY29tbWFuZChcImRlbm9cIiwgW1wiZXZhbFwiLCBcIkRlbm8uZXhpdCgwKVwiXSwgeyBiYWNrZ3JvdW5kOiB0cnVlIH0pXG4gKiBhd2FpdCBwcm9jZXNzLmtpbGwoKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kKGJpbjogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9ucz86IE9wdGlvbnMgJiB7IHN5bmM/OiBmYWxzZTsgYmFja2dyb3VuZDogdHJ1ZSB9KTogQmFja2dyb3VuZFxuLyoqXG4gKiBBc3luY2hyb25vdXMgdmVyc2lvbiBvZiB7QGxpbmsgY29tbWFuZH0uXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kLnRzXCJcbiAqIHRyeSB7XG4gKiAgIGF3YWl0IGNvbW1hbmQoXCJkZW5vXCIsIFtcImV2YWxcIiwgXCJEZW5vLmV4aXQoMSlcIl0sIHsgdGhyb3c6IHRydWUgfSlcbiAqIH1cbiAqIGNhdGNoIChlcnJvcikge1xuICogICBjb25zb2xlLmxvZyhlcnJvcilcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZChiaW46IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBPcHRpb25zICYgeyBzeW5jPzogZmFsc2U7IGJhY2tncm91bmQ/OiBmYWxzZSB9KTogUHJvbWlzZTxSZXN1bHQ+XG4vKipcbiAqIFN5bmNocm9ub3VzIHZlcnNpb24gb2Yge0BsaW5rIGNvbW1hbmR9LlxuICpcbiAqIE5vdGUgdGhhdCBzdGRpbiBpcyBub3QgdXNhYmxlIGluIHN5bmMgbW9kZSBhbmQgd2lsbCBhbHdheXMgYmUgZW1wdHkuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kLnRzXCJcbiAqIGNvbW1hbmQoXCJkZW5vXCIsIFtcIi0tdmVyc2lvblwiXSwgeyBzeW5jOiB0cnVlIH0pXG4gKiBgYGBcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC50c1wiXG4gKiB0cnkge1xuICogICBjb21tYW5kKFwiZGVub1wiLCBbXCJldmFsXCIsIFwiRGVuby5leGl0KDEpXCJdLCB7IHN5bmM6IHRydWUsIHRocm93OiB0cnVlIH0pXG4gKiB9XG4gKiBjYXRjaCAoZXJyb3IpIHtcbiAqICAgY29uc29sZS5sb2coZXJyb3IpXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmQoYmluOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zPzogT3B0aW9ucyAmIHsgc3luYzogdHJ1ZSB9KTogUmVzdWx0XG4vKipcbiAqIFJ1biBhIGNvbW1hbmQuXG4gKlxuICogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHtAbGluayBodHRwczovL2RvY3MuZGVuby5jb20vYXBpL2Rlbm8vfi9EZW5vLkNvbW1hbmQgfCBEZW5vLkNvbW1hbmR9IHRoYXQgcHJvdmlkZXMgYSBiZXR0ZXIgaGFuZGxpbmcgb2Ygc3RkaW8gZm9yIGludGVyYWN0aXZlIHByb2Nlc3Nlcy5cbiAqXG4gKiBMaWtlIGBEZW5vLkNvbW1hbmRgLCB0aGUgYGVudmAsIGBjd2RgLCBhbmQgYHJhd2AgKGFsaWFzIGZvciBgd2luZG93c1Jhd0FyZ3VtZW50c2ApIG9wdGlvbnMgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBUaGUgYHN0ZGluYCwgYHN0ZG91dGAgYW5kIGBzdGRlcnJgIG9wdGlvbnMgYWNjZXB0IGBcInBpcGVkXCJgIChjYXB0dXJlZCBpbnRvIHRoZSByZXN1bHQgYW5kIG1pcnJvcmVkIHRvIGEge0BsaW5rIGh0dHBzOi8vbG9ndGFwZS5vcmcgfCBMb2dUYXBlfSBzdWItbG9nZ2VyKSwgYFwiaW5oZXJpdFwiYCAoZm9yd2FyZGVkIHRvIHRoZSBwYXJlbnQgcHJvY2Vzcykgb3IgYG51bGxgIChkaXNjYXJkZWQpLlxuICpcbiAqIExvZ2dpbmcgaXMgcGVyZm9ybWVkIHRocm91Z2gge0BsaW5rIGh0dHBzOi8vbG9ndGFwZS5vcmcgfCBMb2dUYXBlfS5cbiAqIFRoZSBgbG9nZ2VyYCBvcHRpb24gaXMgYSBjYXRlZ29yeSBmb3J3YXJkZWQgdG8gYGdldExvZ2dlcigpYCAoZGVmYXVsdGluZyB0byBgW1wicnVuXCJdYCksIGFuZCBlYWNoIGNoYW5uZWwgaXMgbWlycm9yZWQgdGhyb3VnaCBpdHMgb3duIHN1Yi1jYXRlZ29yeSDigJQgYHN0ZGluYCBhdCBgZGVidWdgLCBgc3Rkb3V0YCBhdCBgaW5mb2AsIGBzdGRlcnJgIGF0IGBlcnJvcmAuXG4gKiBBcyByZWNvbW1lbmRlZCBmb3IgbGlicmFyaWVzLCBgY29tbWFuZCgpYCBuZXZlciBjb25maWd1cmVzIExvZ1RhcGUgaXRzZWxmOiB0aGUgaG9zdCBhcHBsaWNhdGlvbiBpcyBpbiBjaGFyZ2Ugb2YgdGhlIGFjdHVhbCBvdXRwdXQgKHRocm91Z2gge0BsaW5rIGh0dHBzOi8vbG9ndGFwZS5vcmcvbWFudWFsL2NvbmZpZyB8IExvZ1RhcGUgY29uZmlndXJhdGlvbn0pLlxuICpcbiAqIFNldCBgd2luZXh0YCBvcHRpb24gdG8gYXV0b21hdGljYWxseSBhcHBlbmQgYW4gZXh0ZW5zaW9uIHRvIHRoZSBiaW5hcnkgcGF0aCBvbiBXaW5kb3dzIChsaWtlIGAuY21kYCBvciBgLmV4ZWApLlxuICogVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgYmluYXJ5IHBhdGggaXNuJ3QgYXV0b21hdGljYWxseSByZXNvbHZlZCBvbiBXaW5kb3dzLlxuICpcbiAqIFBhc3MgYSBgY2FsbGJhY2tgIG9wdGlvbiAoYW4gYXN5bmMgZ2VuZXJhdG9yKSB0byBpbnRlcmFjdCB3aXRoIHRoZSBwcm9jZXNzIHN0ZGluLlxuICogU2VlIHtAbGluayBDYWxsYmFja30gZm9yIHRoZSBpbnRlcmFjdGlvbiBwcm90b2NvbDogYGZvciBhd2FpdGAgb3ZlciBgc3RkaW9gIHRvIHJlYWQgb3V0cHV0LCBgeWllbGRgIHRvIHdyaXRlIHRvIHN0ZGluLCBgcmV0dXJuYCB0byBjbG9zZSBpdC5cbiAqXG4gKiBUaGUgYGJ1ZmZlcmluZ2Agb3B0aW9uIGlzIHVzZWQgdG8gbWVyZ2UgbWVzc2FnZXMgdGhhdCBhcmUgcmVjZWl2ZWQgcmVsYXRpdmVseSBjbG9zZWx5LlxuICogU2V0dGluZyB0aGlzIG9wdGlvbiB0byBhIGxvdyB2YWx1ZSB3aWxsIGFsc28gaW5jcmVhc2UgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIGludGVyYWN0aW9uIGdlbmVyYXRvciBpcyByZXN1bWVkLlxuICpcbiAqIFJlc3VsdGluZyBvYmplY3QgY29udGFpbnMgdGhlIHNhbWUgcHJvcGVydGllcyBhcyB7QGxpbmsgaHR0cHM6Ly9kb2NzLmRlbm8uY29tL2FwaS9kZW5vL34vRGVuby5Db21tYW5kU3RhdHVzIHwgRGVuby5Db21tYW5kU3RhdHVzfVxuICogd2l0aCBhbiBhZGRpdGlvbmFsIGBzdGRpb2AgcHJvcGVydHkgdGhhdCBjb250YWlucyBhbiBhcnJheSBvZiBvcmRlcmVkIHR1cGxlcyB3aXRoIHRoZSBkZWx0YSB0aW1lc3RhbXAgc2luY2UgcHJvY2VzcyBzdGFydCwgdGhlIGNoYW5uZWwgaWRlbmZpdGllciAoMDpzdGRpbiwgMTpzdGRvdXQsIDI6c3RkZXJyKSBhbmQgdGhlIGNvbnRlbnQuXG4gKiBUaGlzIG9mZmVycyBhIHByb3BlciBoaXN0b3J5IG9mIGV4Y2hhbmdlZCBjb250ZW50LlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC50c1wiXG4gKiBhd2FpdCBjb21tYW5kKFwiZGVub1wiLCBbXCItLXZlcnNpb25cIl0sIHsgZW52OiB7IE5PX0NPTE9SOiBcInRydWVcIiB9LCBjd2Q6IFwiL3RtcFwiLCByYXc6IHRydWUgfSlcbiAqIGF3YWl0IGNvbW1hbmQoXCJkZW5vXCIsIFtcIi0tdmVyc2lvblwiXSwgeyBzdGRvdXQ6IFwicGlwZWRcIiB9KVxuICogYXdhaXQgY29tbWFuZChcImRlbm9cIiwgW1wiLS12ZXJzaW9uXCJdLCB7IGxvZ2dlcjogW1wibXktYXBwXCIsIFwicnVuXCJdLCBzdGRvdXQ6IFwicGlwZWRcIiB9KVxuICogYXdhaXQgY29tbWFuZChcImRlbm9cIiwgW1wiLS12ZXJzaW9uXCJdLCB7IHdpbmV4dDogXCIuZXhlXCIgfSlcbiAqIGBgYFxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC50c1wiXG4gKlxuICogY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGNvbW1hbmQoXCJkZW5vXCIsIFtcInJlcGxcIl0sIHtcbiAqICAgZW52OiB7IE5PX0NPTE9SOiBcInRydWVcIiB9LFxuICogICAvLyBQYXNzaW5nIGEgY2FsbGJhY2sgYXV0b21hdGljYWxseSBwaXBlcyBzdGRpbi5cbiAqICAgLy8gSXRlcmF0ZSBgc3RkaW9gIHRvIHJlYWN0IHRvIG91dHB1dCwgYHlpZWxkYCB0byB3cml0ZSB0byBzdGRpbiAodmVyYmF0aW0pLCBgcmV0dXJuYCB0byBjbG9zZSBpdC5cbiAqICAgY2FsbGJhY2s6IGFzeW5jIGZ1bmN0aW9uKiAoeyBzdGRpbyB9KSB7XG4gKiAgICAgZm9yIGF3YWl0IChjb25zdCB7IHN0ZG91dCB9IG9mIHN0ZGlvKSB7XG4gKiAgICAgICBpZiAoIXN0ZG91dC5pbmNsdWRlcyhcImV4aXQgdXNpbmdcIikpIHtcbiAqICAgICAgICAgY29udGludWVcbiAqICAgICAgIH1cbiAqICAgICAgIHlpZWxkIFwiY29uc29sZS5sb2coJ2hlbGxvJylcXG5cIlxuICogICAgICAgcmV0dXJuXG4gKiAgICAgfVxuICogICB9LFxuICogfSlcbiAqIGNvbnNvbGUuYXNzZXJ0KHN0ZG91dC5pbmNsdWRlcyhcImhlbGxvXCIpKVxuICogYGBgXG4gKlxuICogQGF1dGhvciBTaW1vbiBMZWNvcSAobG93bGlnaHRlcilcbiAqIEBsaWNlbnNlIE1JVFxuICogQG1vZHVsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZChcbiAgYmluOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICB7IGxvZ2dlcjogY2F0ZWdvcnkgPSBbXCJydW5cIl0sIHN0ZGluID0gbnVsbCwgc3Rkb3V0ID0gXCJwaXBlZFwiLCBzdGRlcnIgPSBcInBpcGVkXCIsIGVudiwgY3dkLCByYXcsIGNhbGxiYWNrLCBidWZmZXJpbmcsIHNpZ25hbCwgc3luYywgYmFja2dyb3VuZCwgdGhyb3c6IF90aHJvdywgZHJ5cnVuLCB3aW5leHQgPSBcIlwiLCBvcyA9IERlbm8uYnVpbGQub3MgfSA9IHt9IGFzIE9wdGlvbnMsXG4pOiBQcm9taXNhYmxlPFJlc3VsdD4gfCBCYWNrZ3JvdW5kIHtcbiAgaWYgKG9zID09PSBcIndpbmRvd3NcIilcbiAgICBiaW4gPSBgJHtiaW59JHt3aW5leHR9YFxuICBjb25zdCBsb2cgPSBnZXRMb2dnZXIoY2F0ZWdvcnkpLndpdGgoeyBiaW4gfSlcbiAgaWYgKGNhbGxiYWNrICYmIChoYW5kbGUoc3RkaW4pICE9PSBcInBpcGVkXCIpKVxuICAgIHN0ZGluID0gXCJwaXBlZFwiXG4gIGNvbnN0IGNvbW1hbmQgPSBuZXcgRGVuby5Db21tYW5kKGJpbiwgeyBhcmdzLCBzdGRpbjogIXN5bmMgPyBoYW5kbGUoc3RkaW4pIDogXCJudWxsXCIsIHN0ZG91dDogaGFuZGxlKHN0ZG91dCksIHN0ZGVycjogaGFuZGxlKHN0ZGVyciksIGNsZWFyRW52OiB0cnVlLCBlbnYsIGN3ZCwgd2luZG93c1Jhd0FyZ3VtZW50czogcmF3LCBzaWduYWwsIGRldGFjaGVkOiBiYWNrZ3JvdW5kIH0pXG4gIGlmIChkcnlydW4pIHtcbiAgICBsb2cud2FybihcImRyeXJ1bjoge2Jpbn0gbm90IGV4ZWN1dGVkXCIsIHsgYmluIH0pXG4gICAgY29uc3QgcmVzdWx0ID0geyBzdWNjZXNzOiB0cnVlLCBjb2RlOiAwLCBzdGRpbzogW10sIHN0ZGluOiBcIlwiLCBzdGRvdXQ6IFwiXCIsIHN0ZGVycjogXCJcIiB9XG4gICAgcmV0dXJuIHN5bmMgPyByZXN1bHQgOiBQcm9taXNlLnJlc29sdmUocmVzdWx0KVxuICB9XG4gIGlmIChzeW5jKVxuICAgIHJldHVybiBleGVjKGNvbW1hbmQsIHsgYmluLCBsb2csIHRocm93OiBfdGhyb3csIHN0ZG91dCwgc3RkZXJyIH0pXG4gIHJldHVybiBzcGF3bihjb21tYW5kLCB7IGJpbiwgbG9nLCBjYWxsYmFjaywgYnVmZmVyaW5nLCB0aHJvdzogX3Rocm93LCBiYWNrZ3JvdW5kLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIgfSlcbn1cblxuLyoqIFJldHVybnMgdGhlIGhhbmRsZSB0eXBlIGZvciBhIGdpdmVuIG1vZGUuICovXG5mdW5jdGlvbiBoYW5kbGUobW9kZTogQ2hhbm5lbCkge1xuICByZXR1cm4gW1wiaW5oZXJpdFwiLCBcIm51bGxcIl0uaW5jbHVkZXMoYCR7bW9kZX1gKSA/IGAke21vZGV9YCBhcyBcImluaGVyaXRcIiB8IFwibnVsbFwiIDogXCJwaXBlZFwiXG59XG5cbi8qKiBFeGVjdXRlIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LiAqL1xuZnVuY3Rpb24gZXhlYyhjb21tYW5kOiBEZW5vLkNvbW1hbmQsIHsgYmluLCBsb2csIHRocm93OiBfdGhyb3csIHN0ZG91dCwgc3RkZXJyIH06IHsgYmluOiBzdHJpbmc7IGxvZzogTG9nZ2VyOyB0aHJvdz86IGJvb2xlYW47IHN0ZG91dDogQ2hhbm5lbDsgc3RkZXJyOiBDaGFubmVsIH0pIHtcbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IG91dHB1dCA9IGNvbW1hbmQub3V0cHV0U3luYygpXG4gIGNvbnN0IHsgc3VjY2VzcywgY29kZSB9ID0gb3V0cHV0IC8vIERvIG5vdCBhY2Nlc3Mgc3Rkb3V0IG9yIHN0ZGVyciBiZWZvcmUgXCJwaXBlZFwiIHN0YXR1cyBjaGVja1xuICBjb25zdCB0ID0gRGF0ZS5ub3coKSAtIHN0YXJ0XG4gIGNvbnN0IHN0ZGlvID0ge1xuICAgIGdldCBzdGRpbygpIHtcbiAgICAgIHJldHVybiBbW3QsIDEsIHRoaXMuc3Rkb3V0XSwgW3QsIDIsIHRoaXMuc3RkZXJyXV1cbiAgICB9LFxuICAgIHN0ZGluOiBcIlwiLFxuICAgIHN0ZG91dDogaGFuZGxlKHN0ZG91dCkgPT09IFwicGlwZWRcIiA/IGRlY29kZXIuZGVjb2RlKG91dHB1dC5zdGRvdXQpIDogXCJcIixcbiAgICBzdGRlcnI6IGhhbmRsZShzdGRlcnIpID09PSBcInBpcGVkXCIgPyBkZWNvZGVyLmRlY29kZShvdXRwdXQuc3RkZXJyKSA6IFwiXCIsXG4gIH0gYXMgU25hcHNob3QgJiBQaWNrPFJlc3VsdCwgXCJzdGRpb1wiPlxuICBmb3IgKGNvbnN0IHsgY2hhbm5lbCwgbW9kZSB9IG9mIFt7IGNoYW5uZWw6IFwic3Rkb3V0XCIsIG1vZGU6IHN0ZG91dCB9LCB7IGNoYW5uZWw6IFwic3RkZXJyXCIsIG1vZGU6IHN0ZGVyciB9XSBhcyBjb25zdCkge1xuICAgIGlmICgoaGFuZGxlKG1vZGUpID09PSBcInBpcGVkXCIpICYmIChzdGRpb1tjaGFubmVsXSkpXG4gICAgICBsb2dnZWQobG9nLCBjaGFubmVsLCB0LCBzdGRpb1tjaGFubmVsXSlcbiAgfVxuICBpZiAoKCFzdWNjZXNzKSAmJiBfdGhyb3cpXG4gICAgdGhyb3cgbmV3IEV2YWxFcnJvcihgJHtiaW59IGV4aXRlZCB3aXRoIG5vbi16ZXJvIGNvZGUgJHtjb2RlfTpcXG4ke3N0ZGlvLnN0ZG91dH1cXG4ke3N0ZGlvLnN0ZGVycn1gKVxuICByZXR1cm4geyBzdWNjZXNzLCBjb2RlLCAuLi5zdGRpbyB9XG59XG5cbi8qKiBTcGF3biBhIGNvbW1hbmQgYXN5bmNocm9ub3VzbHkgaW4gYmFja2dyb3VuZC4gKi9cbmZ1bmN0aW9uIHNwYXduKFxuICBjb21tYW5kOiBEZW5vLkNvbW1hbmQsXG4gIG9wdGlvbnM6IHsgYmluOiBzdHJpbmc7IGxvZzogTG9nZ2VyOyBjYWxsYmFjaz86IENhbGxiYWNrOyBidWZmZXJpbmc/OiBudW1iZXI7IHRocm93PzogYm9vbGVhbjsgYmFja2dyb3VuZDogdHJ1ZTsgc3RkaW46IENoYW5uZWw7IHN0ZG91dDogQ2hhbm5lbDsgc3RkZXJyOiBDaGFubmVsIH0sXG4pOiBCYWNrZ3JvdW5kXG4vKiogU3Bhd24gYSBjb21tYW5kIGFzeW5jaHJvbm91c2x5LiAqL1xuZnVuY3Rpb24gc3Bhd24oY29tbWFuZDogRGVuby5Db21tYW5kLCBvcHRpb25zOiB7IGJpbjogc3RyaW5nOyBsb2c6IExvZ2dlcjsgY2FsbGJhY2s/OiBDYWxsYmFjazsgYnVmZmVyaW5nPzogbnVtYmVyOyB0aHJvdz86IGJvb2xlYW47IGJhY2tncm91bmQ/OiBib29sZWFuOyBzdGRpbjogQ2hhbm5lbDsgc3Rkb3V0OiBDaGFubmVsOyBzdGRlcnI6IENoYW5uZWwgfSk6IFByb21pc2U8UmVzdWx0PlxuLyoqIFNwYXduIGEgY29tbWFuZC4gKi9cbmZ1bmN0aW9uIHNwYXduKFxuICBjb21tYW5kOiBEZW5vLkNvbW1hbmQsXG4gIHsgYmluLCBsb2csIGNhbGxiYWNrID0gbm9vcCwgYnVmZmVyaW5nID0gMjUwLCB0aHJvdzogX3Rocm93LCBiYWNrZ3JvdW5kLCAuLi5jaGFubmVscyB9OiB7XG4gICAgYmluOiBzdHJpbmdcbiAgICBsb2c6IExvZ2dlclxuICAgIGNhbGxiYWNrPzogQ2FsbGJhY2tcbiAgICBidWZmZXJpbmc/OiBudW1iZXJcbiAgICB0aHJvdz86IGJvb2xlYW5cbiAgICBiYWNrZ3JvdW5kPzogYm9vbGVhblxuICAgIHN0ZGluOiBDaGFubmVsXG4gICAgc3Rkb3V0OiBDaGFubmVsXG4gICAgc3RkZXJyOiBDaGFubmVsXG4gIH0sXG4pIHtcbiAgY29uc3QgcHJvY2VzcyA9IGNvbW1hbmQuc3Bhd24oKVxuICBjb25zdCBzdGF0dXMgPSBwcm9jZXNzLnN0YXR1c1xuICBjb25zdCBzdGFydCA9IERhdGUubm93KClcbiAgY29uc3Qgc3RkaW8gPSB7XG4gICAgc3RkaW86IFtdLFxuICAgIGdldCBzdGRpbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZGlvLmZpbHRlcigoW18sIGldKSA9PiBpID09PSAwKS5tYXAoKFtfLCBfXywgY29udGVudF0pID0+IGNvbnRlbnQpLmpvaW4oXCJcIilcbiAgICB9LFxuICAgIGdldCBzdGRvdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGRpby5maWx0ZXIoKFtfLCBpXSkgPT4gaSA9PT0gMSkubWFwKChbXywgX18sIGNvbnRlbnRdKSA9PiBjb250ZW50KS5qb2luKFwiXFxuXCIpXG4gICAgfSxcbiAgICBnZXQgc3RkZXJyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RkaW8uZmlsdGVyKChbXywgaV0pID0+IGkgPT09IDIpLm1hcCgoW18sIF9fLCBjb250ZW50XSkgPT4gY29udGVudCkuam9pbihcIlxcblwiKVxuICAgIH0sXG4gIH0gYXMgU25hcHNob3QgJiBQaWNrPFJlc3VsdCwgXCJzdGRpb1wiPlxuICBsZXQgbGFzdCA9IFwiXCJcblxuICAvLyBEcml2ZSB0aGUgaW50ZXJhY3Rpb24gZ2VuZXJhdG9yIHdoZW4gc3RkaW4gaXMgcGlwZWRcbiAgbGV0IHJlbGVhc2UgPSAoKSA9PiB7fVxuICBsZXQgbm90aWZ5ID0gbnVsbCBhcyBOdWxsYWJsZTwoKSA9PiB2b2lkPlxuICBsZXQgcGVuZGluZyA9IHRydWVcbiAgbGV0IGVuZGVkID0gZmFsc2VcbiAgbGV0IGV4aXRlZCA9IGZhbHNlXG4gIGxldCBpbnRlcmFjdGlvbiA9IFByb21pc2UucmVzb2x2ZSgpXG4gIGlmIChoYW5kbGUoY2hhbm5lbHMuc3RkaW4pID09PSBcInBpcGVkXCIpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBwcm9jZXNzLnN0ZGluLmdldFdyaXRlcigpXG4gICAgY29uc3QgY2xvc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3cml0ZXIuY2xvc2UoKVxuICAgICAgICBsb2cud2l0aCh7IHQ6IERhdGUubm93KCkgLSBzdGFydCB9KS50cmFjZShcImNsb3NlZCBzdGRpblwiKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSAoc3RkaW4gbWF5IGFscmVhZHkgYmUgY2xvc2VkIGlmIHRoZSBwcm9jZXNzIGV4aXRlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmVsZWFzZSA9ICgpID0+IHtcbiAgICAgIGVuZGVkID0gdHJ1ZVxuICAgICAgbm90aWZ5Py4oKVxuICAgICAgbm90aWZ5ID0gbnVsbFxuICAgIH1cbiAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICAgICAgICBwZW5kaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHlpZWxkIHN0ZGlvIGFzIFNuYXBzaG90XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZW5kZWQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gbm90aWZ5ID0gcmVzb2x2ZSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9XG4gICAgaW50ZXJhY3Rpb24gPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZ2VuZXJhdG9yID0gY2FsbGJhY2soeyBzdGRpbzogaW5wdXQgfSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgY29udGVudCBvZiBnZW5lcmF0b3IpIHtcbiAgICAgICAgICBpZiAoZXhpdGVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV2YWxFcnJvcihcIkNhbm5vdCB3cml0ZSB0byBzdGRpbjogcHJvY2VzcyBhbHJlYWR5IGV4aXRlZFwiKVxuICAgICAgICAgIGNvbnN0IHQgPSBEYXRlLm5vdygpIC0gc3RhcnRcbiAgICAgICAgICBsb2dnZWQobG9nLCBcInN0ZGluXCIsIHQsIGAke2NvbnRlbnR9YClcbiAgICAgICAgICBzdGRpby5zdGRpby5wdXNoKFt0LCAwLCBgJHtjb250ZW50fWBdKVxuICAgICAgICAgIGF3YWl0IHdyaXRlci53cml0ZShlbmNvZGVyLmVuY29kZShgJHtjb250ZW50fWApKVxuICAgICAgICAgIGxhc3QgPSBcInN0ZGluXCJcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjbG9zZSgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBhd2FpdCBjbG9zZSgpXG4gICAgICAgIGFib3J0KHByb2Nlc3MpXG4gICAgICAgIGF3YWl0IHN0YXR1c1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIC8vIEJ1ZmZlciBvdXRwdXQgYW5kIHJlc3VtZSB0aGUgaW50ZXJhY3Rpb24gZ2VuZXJhdG9yXG4gIGNvbnN0IGRlYm91bmNlZCA9IGRlYm91bmNlKCgpID0+IHtcbiAgICBsYXN0ID0gXCJcIlxuICAgIHBlbmRpbmcgPSB0cnVlXG4gICAgbm90aWZ5Py4oKVxuICAgIG5vdGlmeSA9IG51bGxcbiAgfSwgYnVmZmVyaW5nKVxuICBjb25zdCBvdXRwdXRzID0gUHJvbWlzZS5hbGwoXG4gICAgKFtcInN0ZG91dFwiLCBcInN0ZGVyclwiXSBhcyBjb25zdCkuZmlsdGVyKChjaGFubmVsKSA9PiBoYW5kbGUoY2hhbm5lbHNbY2hhbm5lbF0pID09PSBcInBpcGVkXCIpLm1hcChhc3luYyAoY2hhbm5lbCkgPT4ge1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBsaW5lIG9mIHByb2Nlc3NbY2hhbm5lbF0ucGlwZVRocm91Z2gobmV3IFRleHREZWNvZGVyU3RyZWFtKCkpLnBpcGVUaHJvdWdoKG5ldyBUZXh0TGluZVN0cmVhbSgpKSkge1xuICAgICAgICBjb25zdCB0ID0gRGF0ZS5ub3coKSAtIHN0YXJ0XG4gICAgICAgIGNvbnN0IHN0ZGkgPSB7IHN0ZG91dDogMSwgc3RkZXJyOiAyIH1bY2hhbm5lbF0gYXMgMSB8IDJcbiAgICAgICAgbG9nZ2VkKGxvZywgY2hhbm5lbCwgdCwgbGluZSlcbiAgICAgICAgaWYgKChzdGRpby5zdGRpby5sZW5ndGgpICYmIChsYXN0ID09PSBjaGFubmVsKSkge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gc3RkaW8uc3RkaW8uYXQoLTEpIVxuICAgICAgICAgIGlmIChwcmV2aW91c1sxXSA9PT0gc3RkaSlcbiAgICAgICAgICAgIHByZXZpb3VzWzJdICs9IGBcXG4ke2xpbmV9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ZGlvLnN0ZGlvLnB1c2goW3QsIHN0ZGksIGxpbmVdKVxuICAgICAgICB9XG4gICAgICAgIGxhc3QgPSBjaGFubmVsXG4gICAgICAgIGRlYm91bmNlZCgpXG4gICAgICB9XG4gICAgfSksXG4gIClcbiAgY29uc3Qgc2V0dGxlID0gKCkgPT4ge1xuICAgIGV4aXRlZCA9IHRydWVcbiAgICByZWxlYXNlKClcbiAgfVxuICB2b2lkIHN0YXR1cy50aGVuKHNldHRsZSwgc2V0dGxlKVxuXG4gIC8vIENvbXB1dGUgcmVzdWx0XG4gIGNvbnN0IHJlc3VsdCA9IChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW291dHB1dCwgaW50ZXJhY3RlZF0gPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW291dHB1dHMsIGludGVyYWN0aW9uXSlcbiAgICBkZWJvdW5jZWQuY2xlYXIoKVxuICAgIGNvbnN0IHsgc3VjY2VzcywgY29kZSB9ID0gYXdhaXQgc3RhdHVzXG4gICAgaWYgKChvdXRwdXQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpIHx8IChpbnRlcmFjdGVkLnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSlcbiAgICAgIHRocm93ICgob3V0cHV0IGFzIHsgcmVhc29uPzogdW5rbm93biB9KS5yZWFzb24gPz8gKGludGVyYWN0ZWQgYXMgeyByZWFzb24/OiB1bmtub3duIH0pLnJlYXNvbilcbiAgICBpZiAoKCFzdWNjZXNzKSAmJiBfdGhyb3cpXG4gICAgICB0aHJvdyBuZXcgRXZhbEVycm9yKGAke2Jpbn0gZXhpdGVkIHdpdGggbm9uLXplcm8gY29kZSAke2NvZGV9OlxcbiR7c3RkaW8uc3Rkb3V0fVxcbiR7c3RkaW8uc3RkZXJyfWApXG4gICAgcmV0dXJuIHsgc3VjY2VzcywgY29kZSwgLi4uc3RkaW8gfVxuICB9KSgpXG4gIGNvbnN0IHRlcm1pbmF0ZSA9IGFzeW5jIChzaWduYWw6IERlbm8uU2lnbmFsID0gXCJTSUdURVJNXCIpID0+IHtcbiAgICBhYm9ydChwcm9jZXNzLCBzaWduYWwpXG4gICAgYXdhaXQgcmVzdWx0LmNhdGNoKCgpID0+IHt9KVxuICB9XG4gIHJldHVybiBiYWNrZ3JvdW5kXG4gICAgPyB7XG4gICAgICBraWxsOiB0ZXJtaW5hdGUsXG4gICAgICB1bnJlZjogKCkgPT4gcHJvY2Vzcy51bnJlZigpLFxuICAgICAgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogKCkgPT4gdGVybWluYXRlKCksXG4gICAgfVxuICAgIDogcmVzdWx0XG59XG5cbi8qKiBTZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcywgaWdub3JpbmcgdGhlIGVycm9yIHJhaXNlZCB3aGVuIGl0IGhhcyBhbHJlYWR5IHRlcm1pbmF0ZWQuICovXG5mdW5jdGlvbiBhYm9ydChwcm9jZXNzOiBEZW5vLkNoaWxkUHJvY2Vzcywgc2lnbmFsOiBEZW5vLlNpZ25hbCA9IFwiU0lHVEVSTVwiKSB7XG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5raWxsKHNpZ25hbClcbiAgfSBjYXRjaCB7XG4gICAgLy8gQWxyZWFkeSB0ZXJtaW5hdGVkXG4gIH1cbn1cblxuLyoqIE1pcnJvciBhIHN0ZGlvIGxpbmUgdGhyb3VnaCB0aGUgY2hhbm5lbCdzIHN1Yi1sb2dnZXIuICovXG5mdW5jdGlvbiBsb2dnZWQobG9nOiBMb2dnZXIsIGNoYW5uZWw6IFwic3RkaW5cIiB8IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiLCB0OiBudW1iZXIsIGNvbnRlbnQ6IHN0cmluZykge1xuICBjb25zdCBsb2dnZXIgPSBsb2cuZ2V0Q2hpbGQoY2hhbm5lbCkud2l0aCh7IHQgfSlcbiAgc3dpdGNoIChjaGFubmVsKSB7XG4gICAgY2FzZSBcInN0ZGluXCI6XG4gICAgICByZXR1cm4gdm9pZCBsb2dnZXIuZGVidWcoXCJ7Y29udGVudH1cIiwgeyBjb250ZW50IH0pXG4gICAgY2FzZSBcInN0ZG91dFwiOlxuICAgICAgcmV0dXJuIHZvaWQgbG9nZ2VyLmluZm8oXCJ7Y29udGVudH1cIiwgeyBjb250ZW50IH0pXG4gICAgY2FzZSBcInN0ZGVyclwiOlxuICAgICAgcmV0dXJuIHZvaWQgbG9nZ2VyLmVycm9yKFwie2NvbnRlbnR9XCIsIHsgY29udGVudCB9KVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUVWLFNBQVMsU0FBUyxRQUFxQixtQkFBa0I7QUFDekQsU0FBUyxjQUFjLFFBQVEsZUFBYztBQUM3QyxTQUFTLFFBQVEsUUFBUSxzQkFBcUI7QUE4SDlDLGlCQUFpQixHQUNqQixNQUFNLFVBQVUsSUFBSTtBQUVwQixpQkFBaUIsR0FDakIsTUFBTSxVQUFVLElBQUk7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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lowlighter/run",
3
- "version": "3.4.0",
3
+ "version": "3.4.1",
4
4
  "type": "module",
5
5
  "main": "./mod.js",
6
6
  "types": "./mod.d.ts",
@@ -17,9 +17,9 @@
17
17
  }
18
18
  },
19
19
  "dependencies": {
20
- "@jsr/logtape__logtape": "^2.2.0",
21
- "@jsr/std__async": "^1.2.0",
22
- "@jsr/std__streams": "^1.0.17",
20
+ "@logtape/logtape": "npm:@jsr/logtape__logtape@^2.2.0",
21
+ "@std/async": "npm:@jsr/std__async@^1.2.0",
22
+ "@std/streams": "npm:@jsr/std__streams@^1.0.17",
23
23
  "@lowlighter/typing": "^4.1.0"
24
24
  }
25
25
  }