@pipeline-builder/pipeline-manager 3.4.81 → 3.4.83

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.
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/agent/health.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAIhG;AAeD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GACrF,OAAO,CAAC,YAAY,CAAC,CAkBvB"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/agent/health.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAIhG;AAeD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GACrF,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
@@ -38,18 +38,28 @@ export async function waitHealthy(url, opts = {}) {
38
38
  const timeoutMs = opts.timeoutMs ?? 300_000; // 5 min — services come up async
39
39
  const intervalMs = opts.intervalMs ?? 10_000;
40
40
  const deadline = Date.now() + timeoutMs;
41
+ // Wait for BOTH /health AND /ready. /health flips first (the process is up),
42
+ // but the platform only accepts API calls once /ready passes (DB connections,
43
+ // dependencies warmed up). Returning on /health alone let post-install steps
44
+ // (register) hit a not-yet-ready platform and get a 502.
45
+ let healthSeen = false;
41
46
  while (Date.now() < deadline) {
42
47
  if (await probe(`${url}/health`)) {
43
- const ready = await probe(`${url}/ready`);
44
- return {
45
- url,
46
- healthy: true,
47
- detail: ready ? 'health + ready OK' : 'health OK (ready not yet — dependencies still warming up)',
48
- };
48
+ healthSeen = true;
49
+ if (await probe(`${url}/ready`)) {
50
+ return { url, healthy: true, detail: 'health + ready OK' };
51
+ }
52
+ opts.onTick?.(`health OK waiting for ${url}/ready (dependencies warming up) …`);
53
+ }
54
+ else {
55
+ opts.onTick?.(`waiting for ${url}/health …`);
49
56
  }
50
- opts.onTick?.(`waiting for ${url}/health …`);
51
57
  await delay(intervalMs);
52
58
  }
53
- return { url, healthy: false, detail: `not reachable within ${Math.round(timeoutMs / 1000)}s check the stack / DNS / health logs` };
59
+ // Timed out. If /health came up but /ready never did, the platform is up but
60
+ // not fully ready — proceed (non-fatal) but flag that post-steps may need a retry.
61
+ return healthSeen
62
+ ? { url, healthy: true, detail: `health OK but /ready not reached within ${Math.round(timeoutMs / 1000)}s — the platform is still warming up; post-install steps (register) may need a re-run` }
63
+ : { url, healthy: false, detail: `not reachable within ${Math.round(timeoutMs / 1000)}s — check the stack / DNS / health logs` };
54
64
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FnZW50L2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7OztHQUtHO0FBRUgsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVMxQjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFnQixFQUFFLE1BQStCO0lBQy9FLElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUssVUFBVTtRQUFFLE9BQU8sd0JBQXdCLENBQUM7SUFDakYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztBQUU5RixLQUFLLFVBQVUsS0FBSyxDQUFDLEdBQVc7SUFDOUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRyxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQy9DLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFMUU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLEdBQVcsRUFDWCxPQUFvRixFQUFFO0lBRXRGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLENBQUMsaUNBQWlDO0lBQzlFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDO0lBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7SUFFeEMsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDMUMsT0FBTztnQkFDTCxHQUFHO2dCQUNILE9BQU8sRUFBRSxJQUFJO2dCQUNiLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQywyREFBMkQ7YUFDbEcsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMseUNBQXlDLEVBQUUsQ0FBQztBQUN4SSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUG9zdC1kZXBsb3kgaGVhbHRoIHZlcmlmaWNhdGlvbi4gQSBDbG91ZEZvcm1hdGlvbiBDUkVBVEVfQ09NUExFVEUgKG9yIGFcbiAqIGZpbmlzaGVkIHNldHVwLnNoKSBkb2VzIE5PVCBtZWFuIHRoZSBhcHAgaXMgc2VydmluZyDigJQgdGhlIEFMQiB0YXJnZXRzIHN0YXlcbiAqIHVuaGVhbHRoeSB1bnRpbCB0YXNrcy9wb2RzIGNvbWUgdXAuIFRoZSByZWFsIGRvbmUtc2lnbmFsIGlzIHRoZSBwbGF0Zm9ybSdzXG4gKiBgL2hlYWx0aGAgKyBgL3JlYWR5YCBlbmRwb2ludHMsIHNvIHRoZSBleGVjdXRvciBwb2xscyB0aGVtIHdpdGggYmFja29mZi5cbiAqL1xuXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB0eXBlIHsgVGFyZ2V0SWQgfSBmcm9tICcuL3RhcmdldHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWx0aFJlc3VsdCB7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICByZWFkb25seSBoZWFsdGh5OiBib29sZWFuO1xuICByZWFkb25seSBkZXRhaWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXJpdmUgdGhlIFVSTCB0aGUgcGxhdGZvcm0gc2hvdWxkIGJlIHJlYWNoYWJsZSBhdC4gTG9jYWwvbWluaWt1YmUgZnJvbnQgdGhlXG4gKiBzdGFjayBvbiBsb2NhbGhvc3Q6ODQ0MzsgRUMyL0ZhcmdhdGUgdXNlIHRoZSBkZXBsb3kgZG9tYWluLiBSZXR1cm5zIG51bGwgd2hlblxuICogaXQgY2FuJ3QgYmUgZGV0ZXJtaW5lZCAoY2FsbGVyIHN1cmZhY2VzIGEgXCJ2ZXJpZnkgbWFudWFsbHlcIiBub3RlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUhlYWx0aFVybCh0YXJnZXQ6IFRhcmdldElkLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh0YXJnZXQgPT09ICdsb2NhbCcgfHwgdGFyZ2V0ID09PSAnbWluaWt1YmUnKSByZXR1cm4gJ2h0dHBzOi8vbG9jYWxob3N0Ojg0NDMnO1xuICBjb25zdCBkb21haW4gPSBwYXJhbXMuZG9tYWluO1xuICByZXR1cm4gdHlwZW9mIGRvbWFpbiA9PT0gJ3N0cmluZycgJiYgZG9tYWluID8gYGh0dHBzOi8vJHtkb21haW59YCA6IG51bGw7XG59XG5cbmNvbnN0IGFnZW50ID0gbmV3IGh0dHBzLkFnZW50KHsgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSB9KTsgLy8gbG9jYWwgdXNlcyBhIHNlbGYtc2lnbmVkIGNlcnRcblxuYXN5bmMgZnVuY3Rpb24gcHJvYmUodXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodXJsLCB7IHRpbWVvdXQ6IDUwMDAsIGh0dHBzQWdlbnQ6IGFnZW50LCB2YWxpZGF0ZVN0YXR1czogKCkgPT4gdHJ1ZSB9KTtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyA+PSAyMDAgJiYgcmVzLnN0YXR1cyA8IDMwMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmNvbnN0IGRlbGF5ID0gKG1zOiBudW1iZXIpID0+IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG5cbi8qKlxuICogUG9sbCBgPHVybD4vaGVhbHRoYCB0aGVuIGA8dXJsPi9yZWFkeWAgdW50aWwgYm90aCBwYXNzIG9yIHRoZSB0aW1lb3V0IGVsYXBzZXMuXG4gKiBOb24tZmF0YWwgYnkgZGVzaWduOiBhIHRpbWVvdXQgcmV0dXJucyBgaGVhbHRoeTogZmFsc2VgIHdpdGggZ3VpZGFuY2UsIG5ldmVyIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRIZWFsdGh5KFxuICB1cmw6IHN0cmluZyxcbiAgb3B0czogeyB0aW1lb3V0TXM/OiBudW1iZXI7IGludGVydmFsTXM/OiBudW1iZXI7IG9uVGljaz86IChtc2c6IHN0cmluZykgPT4gdm9pZCB9ID0ge30sXG4pOiBQcm9taXNlPEhlYWx0aFJlc3VsdD4ge1xuICBjb25zdCB0aW1lb3V0TXMgPSBvcHRzLnRpbWVvdXRNcyA/PyAzMDBfMDAwOyAvLyA1IG1pbiDigJQgc2VydmljZXMgY29tZSB1cCBhc3luY1xuICBjb25zdCBpbnRlcnZhbE1zID0gb3B0cy5pbnRlcnZhbE1zID8/IDEwXzAwMDtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGltZW91dE1zO1xuXG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICBpZiAoYXdhaXQgcHJvYmUoYCR7dXJsfS9oZWFsdGhgKSkge1xuICAgICAgY29uc3QgcmVhZHkgPSBhd2FpdCBwcm9iZShgJHt1cmx9L3JlYWR5YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmwsXG4gICAgICAgIGhlYWx0aHk6IHRydWUsXG4gICAgICAgIGRldGFpbDogcmVhZHkgPyAnaGVhbHRoICsgcmVhZHkgT0snIDogJ2hlYWx0aCBPSyAocmVhZHkgbm90IHlldCDigJQgZGVwZW5kZW5jaWVzIHN0aWxsIHdhcm1pbmcgdXApJyxcbiAgICAgIH07XG4gICAgfVxuICAgIG9wdHMub25UaWNrPy4oYHdhaXRpbmcgZm9yICR7dXJsfS9oZWFsdGgg4oCmYCk7XG4gICAgYXdhaXQgZGVsYXkoaW50ZXJ2YWxNcyk7XG4gIH1cbiAgcmV0dXJuIHsgdXJsLCBoZWFsdGh5OiBmYWxzZSwgZGV0YWlsOiBgbm90IHJlYWNoYWJsZSB3aXRoaW4gJHtNYXRoLnJvdW5kKHRpbWVvdXRNcyAvIDEwMDApfXMg4oCUIGNoZWNrIHRoZSBzdGFjayAvIEROUyAvIGhlYWx0aCBsb2dzYCB9O1xufVxuIl19
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FnZW50L2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7OztHQUtHO0FBRUgsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVMxQjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFnQixFQUFFLE1BQStCO0lBQy9FLElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUssVUFBVTtRQUFFLE9BQU8sd0JBQXdCLENBQUM7SUFDakYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztBQUU5RixLQUFLLFVBQVUsS0FBSyxDQUFDLEdBQVc7SUFDOUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRyxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQy9DLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFMUU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLEdBQVcsRUFDWCxPQUFvRixFQUFFO0lBRXRGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLENBQUMsaUNBQWlDO0lBQzlFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDO0lBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7SUFFeEMsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UseURBQXlEO0lBQ3pELElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztJQUN2QixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2pDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDO1lBQzdELENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsMkJBQTJCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQztRQUNwRixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELE1BQU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCw2RUFBNkU7SUFDN0UsbUZBQW1GO0lBQ25GLE9BQU8sVUFBVTtRQUNmLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSwyQ0FBMkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHVGQUF1RixFQUFFO1FBQ2hNLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLENBQUM7QUFDckksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBvc3QtZGVwbG95IGhlYWx0aCB2ZXJpZmljYXRpb24uIEEgQ2xvdWRGb3JtYXRpb24gQ1JFQVRFX0NPTVBMRVRFIChvciBhXG4gKiBmaW5pc2hlZCBzZXR1cC5zaCkgZG9lcyBOT1QgbWVhbiB0aGUgYXBwIGlzIHNlcnZpbmcg4oCUIHRoZSBBTEIgdGFyZ2V0cyBzdGF5XG4gKiB1bmhlYWx0aHkgdW50aWwgdGFza3MvcG9kcyBjb21lIHVwLiBUaGUgcmVhbCBkb25lLXNpZ25hbCBpcyB0aGUgcGxhdGZvcm0nc1xuICogYC9oZWFsdGhgICsgYC9yZWFkeWAgZW5kcG9pbnRzLCBzbyB0aGUgZXhlY3V0b3IgcG9sbHMgdGhlbSB3aXRoIGJhY2tvZmYuXG4gKi9cblxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgdHlwZSB7IFRhcmdldElkIH0gZnJvbSAnLi90YXJnZXRzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBIZWFsdGhSZXN1bHQge1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgcmVhZG9ubHkgaGVhbHRoeTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGV0YWlsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVyaXZlIHRoZSBVUkwgdGhlIHBsYXRmb3JtIHNob3VsZCBiZSByZWFjaGFibGUgYXQuIExvY2FsL21pbmlrdWJlIGZyb250IHRoZVxuICogc3RhY2sgb24gbG9jYWxob3N0Ojg0NDM7IEVDMi9GYXJnYXRlIHVzZSB0aGUgZGVwbG95IGRvbWFpbi4gUmV0dXJucyBudWxsIHdoZW5cbiAqIGl0IGNhbid0IGJlIGRldGVybWluZWQgKGNhbGxlciBzdXJmYWNlcyBhIFwidmVyaWZ5IG1hbnVhbGx5XCIgbm90ZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0OiBUYXJnZXRJZCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBpZiAodGFyZ2V0ID09PSAnbG9jYWwnIHx8IHRhcmdldCA9PT0gJ21pbmlrdWJlJykgcmV0dXJuICdodHRwczovL2xvY2FsaG9zdDo4NDQzJztcbiAgY29uc3QgZG9tYWluID0gcGFyYW1zLmRvbWFpbjtcbiAgcmV0dXJuIHR5cGVvZiBkb21haW4gPT09ICdzdHJpbmcnICYmIGRvbWFpbiA/IGBodHRwczovLyR7ZG9tYWlufWAgOiBudWxsO1xufVxuXG5jb25zdCBhZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7IHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UgfSk7IC8vIGxvY2FsIHVzZXMgYSBzZWxmLXNpZ25lZCBjZXJ0XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2JlKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHVybCwgeyB0aW1lb3V0OiA1MDAwLCBodHRwc0FnZW50OiBhZ2VudCwgdmFsaWRhdGVTdGF0dXM6ICgpID0+IHRydWUgfSk7XG4gICAgcmV0dXJuIHJlcy5zdGF0dXMgPj0gMjAwICYmIHJlcy5zdGF0dXMgPCAzMDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jb25zdCBkZWxheSA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuXG4vKipcbiAqIFBvbGwgYDx1cmw+L2hlYWx0aGAgdGhlbiBgPHVybD4vcmVhZHlgIHVudGlsIGJvdGggcGFzcyBvciB0aGUgdGltZW91dCBlbGFwc2VzLlxuICogTm9uLWZhdGFsIGJ5IGRlc2lnbjogYSB0aW1lb3V0IHJldHVybnMgYGhlYWx0aHk6IGZhbHNlYCB3aXRoIGd1aWRhbmNlLCBuZXZlciB0aHJvd3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0SGVhbHRoeShcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdHM6IHsgdGltZW91dE1zPzogbnVtYmVyOyBpbnRlcnZhbE1zPzogbnVtYmVyOyBvblRpY2s/OiAobXNnOiBzdHJpbmcpID0+IHZvaWQgfSA9IHt9LFxuKTogUHJvbWlzZTxIZWFsdGhSZXN1bHQ+IHtcbiAgY29uc3QgdGltZW91dE1zID0gb3B0cy50aW1lb3V0TXMgPz8gMzAwXzAwMDsgLy8gNSBtaW4g4oCUIHNlcnZpY2VzIGNvbWUgdXAgYXN5bmNcbiAgY29uc3QgaW50ZXJ2YWxNcyA9IG9wdHMuaW50ZXJ2YWxNcyA/PyAxMF8wMDA7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIHRpbWVvdXRNcztcblxuICAvLyBXYWl0IGZvciBCT1RIIC9oZWFsdGggQU5EIC9yZWFkeS4gL2hlYWx0aCBmbGlwcyBmaXJzdCAodGhlIHByb2Nlc3MgaXMgdXApLFxuICAvLyBidXQgdGhlIHBsYXRmb3JtIG9ubHkgYWNjZXB0cyBBUEkgY2FsbHMgb25jZSAvcmVhZHkgcGFzc2VzIChEQiBjb25uZWN0aW9ucyxcbiAgLy8gZGVwZW5kZW5jaWVzIHdhcm1lZCB1cCkuIFJldHVybmluZyBvbiAvaGVhbHRoIGFsb25lIGxldCBwb3N0LWluc3RhbGwgc3RlcHNcbiAgLy8gKHJlZ2lzdGVyKSBoaXQgYSBub3QteWV0LXJlYWR5IHBsYXRmb3JtIGFuZCBnZXQgYSA1MDIuXG4gIGxldCBoZWFsdGhTZWVuID0gZmFsc2U7XG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICBpZiAoYXdhaXQgcHJvYmUoYCR7dXJsfS9oZWFsdGhgKSkge1xuICAgICAgaGVhbHRoU2VlbiA9IHRydWU7XG4gICAgICBpZiAoYXdhaXQgcHJvYmUoYCR7dXJsfS9yZWFkeWApKSB7XG4gICAgICAgIHJldHVybiB7IHVybCwgaGVhbHRoeTogdHJ1ZSwgZGV0YWlsOiAnaGVhbHRoICsgcmVhZHkgT0snIH07XG4gICAgICB9XG4gICAgICBvcHRzLm9uVGljaz8uKGBoZWFsdGggT0sg4oCUIHdhaXRpbmcgZm9yICR7dXJsfS9yZWFkeSAoZGVwZW5kZW5jaWVzIHdhcm1pbmcgdXApIOKApmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzLm9uVGljaz8uKGB3YWl0aW5nIGZvciAke3VybH0vaGVhbHRoIOKApmApO1xuICAgIH1cbiAgICBhd2FpdCBkZWxheShpbnRlcnZhbE1zKTtcbiAgfVxuICAvLyBUaW1lZCBvdXQuIElmIC9oZWFsdGggY2FtZSB1cCBidXQgL3JlYWR5IG5ldmVyIGRpZCwgdGhlIHBsYXRmb3JtIGlzIHVwIGJ1dFxuICAvLyBub3QgZnVsbHkgcmVhZHkg4oCUIHByb2NlZWQgKG5vbi1mYXRhbCkgYnV0IGZsYWcgdGhhdCBwb3N0LXN0ZXBzIG1heSBuZWVkIGEgcmV0cnkuXG4gIHJldHVybiBoZWFsdGhTZWVuXG4gICAgPyB7IHVybCwgaGVhbHRoeTogdHJ1ZSwgZGV0YWlsOiBgaGVhbHRoIE9LIGJ1dCAvcmVhZHkgbm90IHJlYWNoZWQgd2l0aGluICR7TWF0aC5yb3VuZCh0aW1lb3V0TXMgLyAxMDAwKX1zIOKAlCB0aGUgcGxhdGZvcm0gaXMgc3RpbGwgd2FybWluZyB1cDsgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlcikgbWF5IG5lZWQgYSByZS1ydW5gIH1cbiAgICA6IHsgdXJsLCBoZWFsdGh5OiBmYWxzZSwgZGV0YWlsOiBgbm90IHJlYWNoYWJsZSB3aXRoaW4gJHtNYXRoLnJvdW5kKHRpbWVvdXRNcyAvIDEwMDApfXMg4oCUIGNoZWNrIHRoZSBzdGFjayAvIEROUyAvIGhlYWx0aCBsb2dzYCB9O1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/commands/provision.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqEpC;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAudhD"}
1
+ {"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/commands/provision.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqEpC;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyehD"}
@@ -142,7 +142,26 @@ export function provision(program) {
142
142
  // Bootstrap (sparse clone) + post-install selections.
143
143
  const wantBootstrap = options.repo !== undefined && options.repo !== false;
144
144
  const withAll = options.withAll === true;
145
- const enabledLoadIds = LOAD_STEPS.filter((s) => withAll || options[s.flag] === true).map((s) => s.id);
145
+ const anyLoadFlag = withAll || LOAD_STEPS.some((s) => options[s.flag] === true);
146
+ let enabledLoadIds = LOAD_STEPS.filter((s) => withAll || options[s.flag] === true).map((s) => s.id);
147
+ // Interactive: with no --with-* flags given, offer each opt-in load so a
148
+ // plain `provision --execute` can still load plugins/samples/compliance.
149
+ // Explicit flags, --yes, --json, or non-interactive shells skip the prompts
150
+ // (advisor mode never executes loads, so it doesn't ask either).
151
+ if (options.execute && !options.yes && !options.json && Boolean(process.stdin.isTTY) && !anyLoadFlag) {
152
+ const prompts = {
153
+ plugins: 'Load plugins? (builds the plugin images locally — the slow one)',
154
+ samples: 'Load sample pipelines?',
155
+ compliance: 'Load compliance rules?',
156
+ };
157
+ printSection('Optional post-install loads');
158
+ const chosen = [];
159
+ for (const s of LOAD_STEPS) {
160
+ if (await confirm(prompts[s.id] ?? `Load ${s.id}?`, false))
161
+ chosen.push(s.id);
162
+ }
163
+ enabledLoadIds = chosen;
164
+ }
146
165
  const postStepFlags = {
147
166
  init: options.init !== false,
148
167
  buildBootstrap: options.buildBootstrap === true || enabledLoadIds.includes('plugins'),
@@ -544,4 +563,4 @@ export function provision(program) {
544
563
  }
545
564
  });
546
565
  }
547
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJBQXFCLENB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QUFDO1lBQ2YsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUN0QyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFO2FBQy9DLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSAnbm9kZTpyZWFkbGluZS9wcm9taXNlcyc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGRpYWdub3NlRmFpbHVyZSwgaXNBaUNvbmZpZ3VyZWQsIHBhcnNlR29hbCB9IGZyb20gJy4uL2FnZW50L2FpLmpzJztcbmltcG9ydCB7IGJvb3RzdHJhcENvbW1hbmQsIHJlc29sdmVCb290c3RyYXAgfSBmcm9tICcuLi9hZ2VudC9ib290c3RyYXAuanMnO1xuaW1wb3J0IHsgZW50cnlwb2ludEV4aXN0cywgZXhlY3V0aW9uQmxvY2tlZCwgcnVuU2NyaXB0IH0gZnJvbSAnLi4vYWdlbnQvZXhlY3V0b3IuanMnO1xuaW1wb3J0IHsgZGVyaXZlSGVhbHRoVXJsLCB3YWl0SGVhbHRoeSB9IGZyb20gJy4uL2FnZW50L2hlYWx0aC5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUG9zdFN0ZXBzIH0gZnJvbSAnLi4vYWdlbnQvcG9zdC1zdGVwcy5qcyc7XG5pbXBvcnQgeyBjaGVja1ByZXJlcXMsIGdpdEF2YWlsYWJsZSwgZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCwgcHJlcmVxc1NhdGlzZmllZCB9IGZyb20gJy4uL2FnZW50L3ByZXJlcXMuanMnO1xuaW1wb3J0IHsgVE9PTFNfRElSLCBmZXRjaFRvb2wsIGlzRmV0Y2hhYmxlLCB3aXRoVG9vbHNPblBhdGggfSBmcm9tICcuLi9hZ2VudC90b29scy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbnZGaWxlLCBlbnZGaWxlTWlzc2luZyB9IGZyb20gJy4uL2FnZW50L2Vudi1maWxlLmpzJztcbmltcG9ydCB7XG4gIGFzc2VtYmxlQ29tbWFuZCxcbiAgaXNUYXJnZXRJZCxcbiAgTE9BRF9TVEVQUyxcbiAgc3BhcnNlUGF0aHNGb3IsXG4gIFRBUkdFVFMsXG4gIFRBUkdFVF9JRFMsXG4gIHRlYXJkb3duQ29tbWFuZCxcbiAgdHlwZSBUYXJnZXRJZCxcbiAgdHlwZSBUYXJnZXRTcGVjLFxufSBmcm9tICcuLi9hZ2VudC90YXJnZXRzLmpzJztcbmltcG9ydCB7IG1hdGNoSXNzdWVzLCBzZXNQb3N0RGVwbG95R3VpZGFuY2UgfSBmcm9tICcuLi9hZ2VudC90cm91Ymxlc2hvb3QuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50U2VjdGlvbiwgcHJpbnRLZXlWYWx1ZSwgcHJpbnRJbmZvLCBwcmludFdhcm5pbmcsIHByaW50RXJyb3IsIHByaW50U3VjY2VzcyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbi8qKlxuICogUmVhZCBvbmUgbGluZSBvZiB0cmltbWVkIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsLCBvd25pbmcgdGhlIHJlYWRsaW5lXG4gKiBsaWZlY3ljbGUuIFVzZWQgZGlyZWN0bHkgZm9yIHRoZSBkZXN0cnVjdGl2ZSB0ZWFyZG93biBnYXRlIChhIHkvTiBpcyB0b28gZWFzeVxuICogdG8gZmF0LWZpbmdlciwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG8gVFlQRSB0aGUgdGFyZ2V0IGlkIGJhY2spLCBhbmQgYXNcbiAqIHRoZSBiYXNpcyBmb3IgYGNvbmZpcm1gLiBEZWxpYmVyYXRlbHkgaGFzIG5vIGF1dG8tYWNjZXB0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhc2socXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBybC5xdWVzdGlvbihxdWVzdGlvbikpLnRyaW0oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSB5L04gY29uZmlybWF0aW9uOyBhdXRvLXRydWUgd2hlbiBgYXV0b1llc2AgKHRoZSBgLS15ZXNgIGZsYWcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogUmVkYWN0IHNlY3JldCBwYXJhbSB2YWx1ZXMgKGUuZy4gdGhlIGdoY3IgdG9rZW4pIGZyb20gY2FwdHVyZWQgZGVwbG95IG91dHB1dFxuICogYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIExMTSBmb3IgZGlhZ25vc2lzLiBUaGUgZGVwbG95IHJ1bnMgd2l0aCBzZWNyZXRzXG4gKiB1bm1hc2tlZCwgc28gYWx0aG91Z2ggdGhlIGN1cnJlbnQgc2NyaXB0cyBkb24ndCBlY2hvIHRoZW0sIHRoaXMga2VlcHMgYSBmdXR1cmVcbiAqIHNjcmlwdCdzIHN0cmF5IGVjaG8gKG9yIGEgdmVyYm9zZSBzdWItdG9vbCkgZnJvbSBjcm9zc2luZyB0aGUgdGhpcmQtcGFydHktTExNXG4gKiBib3VuZGFyeS5cbiAqL1xuZnVuY3Rpb24gcmVkYWN0U2VjcmV0cyh0ZXh0OiBzdHJpbmcsIHNwZWM6IFRhcmdldFNwZWMsIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICBsZXQgb3V0ID0gdGV4dDtcbiAgZm9yIChjb25zdCBpbnB1dCBvZiBbLi4uc3BlYy5yZXF1aXJlZCwgLi4uc3BlYy5vcHRpb25hbF0pIHtcbiAgICBpZiAoIWlucHV0LnNlY3JldCkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbXNbaW5wdXQua2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPj0gNCkgb3V0ID0gb3V0LnNwbGl0KHZhbHVlKS5qb2luKCcqKionKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYHByb3Zpc2lvbmAgY29tbWFuZCDigJQgYW4gQUktYXNzaXN0ZWQgaW5zdGFsbGVyIGZvciB0aGUgUGlwZWxpbmVcbiAqIEJ1aWxkZXIgUExBVEZPUk0gKGxvY2FsL21pbmlrdWJlL0VDMi9GYXJnYXRlKS4gUGhhc2UgMSBpcyBSRUFELU9OTFkgKHByZXJlcVxuICogY2hlY2tzLCBOTC1nb2FsIHBhcnNpbmcsIGNvbW1hbmQgYXNzZW1ibHksIGZhaWx1cmUgZGlhZ25vc2lzKTsgYC0tZXhlY3V0ZWBcbiAqIGdhdGVzIGEgcmVhbCBkZXBsb3kuIFdpdGggYC0tcmVwb2AgaXQgY2FuIGJvb3RzdHJhcCBhIGZyZXNoIG1hY2hpbmUgYnkgc3BhcnNlbHlcbiAqIGNsb25pbmcgb25seSB0aGUgZGVwbG95IGZvbGRlcnMgdGhlIHNlbGVjdGVkIHRhcmdldCArIG9wdGlvbnMgbmVlZCwgdGhlbiBydW5zXG4gKiBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIGFkbWluLCBvcHQtaW4gbG9hZHMsIHNtb2tlIHRlc3QsIGN1c3RvbSBjb21tYW5kcykuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb24ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3Byb3Zpc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBwbGF0Zm9ybSAobG9jYWwvbWluaWt1YmUvRUMyL0ZhcmdhdGUpOiBhZHZpc2UsIC0tZXhlY3V0ZSB0byBkZXBsb3ksIG9yIC0tdGVhcmRvd24gdG8gcmVtb3ZlJylcbiAgICAub3B0aW9uKCctdCwgLS10YXJnZXQgPHRhcmdldD4nLCBgRGVwbG95IHRhcmdldDogJHtUQVJHRVRfSURTLmpvaW4oJyB8ICcpfWApXG4gICAgLm9wdGlvbignLXAsIC0tcHJvbXB0IDx0ZXh0PicsICdOYXR1cmFsLWxhbmd1YWdlIGdvYWwgKHBhcnNlZCBpbnRvIHBhcmFtcyB3aGVuIGFuIEFJIGtleSBpcyBzZXQpJylcbiAgICAub3B0aW9uKCctLXJlZ2lvbiA8cmVnaW9uPicsICdBV1MgcmVnaW9uIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0tZG9tYWluIDxkb21haW4+JywgJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWhvc3RlZC16b25lLWlkIDxpZD4nLCAnUHVibGljIFJvdXRlIDUzIGhvc3RlZCB6b25lIElEIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0tZGVwbG95LW1vZGUgPG1vZGU+JywgJ3B1YmxpYyB8IHByaXZhdGUgKEVDMi9GYXJnYXRlKScpXG4gICAgLm9wdGlvbignLS1rZXktcGFpciA8bmFtZT4nLCAnRUMyIGtleSBwYWlyIChFQzIpJylcbiAgICAub3B0aW9uKCctLWluc3RhbmNlLXR5cGUgPHR5cGU+JywgJ0VDMiBpbnN0YW5jZSB0eXBlIChFQzIpJylcbiAgICAub3B0aW9uKCctLWdoY3ItdG9rZW4gPHRva2VuPicsICdHaXRIdWIgUEFUIChyZWFkOnBhY2thZ2VzKSDigJQgbWFza2VkIGluIG91dHB1dCcpXG4gICAgLm9wdGlvbignLS1lbWFpbCcsICdFbmFibGUgU0VTIHRyYW5zYWN0aW9uYWwgZW1haWwgKG9uIGJ5IGRlZmF1bHQgZm9yIEFXUyknKVxuICAgIC5vcHRpb24oJy0tbm8tZW1haWwnLCAnU2tpcCBTRVMgKHRyYW5zYWN0aW9uYWwgZW1haWwgaXMgcHJvdmlzaW9uZWQgYnkgZGVmYXVsdCBvbiBBV1MpJylcbiAgICAub3B0aW9uKCctLWVtYWlsLWZyb20gPGFkZHI+JywgJ1NFUyBGcm9tIGFkZHJlc3MnKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbS1uYW1lIDxuYW1lPicsICdTRVMgRnJvbSBkaXNwbGF5IG5hbWUnKVxuICAgIC5vcHRpb24oJy0tYWxlcnQtZW1haWwgPGFkZHI+JywgJ1N1YnNjcmliZSBhbiBhZGRyZXNzIHRvIHRoZSBib3VuY2UvY29tcGxhaW50IFNOUyB0b3BpYycpXG4gICAgLm9wdGlvbignLS1za2lwLXNlcy1pZGVudGl0eScsICdTa2lwIFNFUyBpZGVudGl0eSBjcmVhdGlvbiAoZG9tYWluIGFscmVhZHkgdmVyaWZpZWQpJylcbiAgICAub3B0aW9uKCctLWFpLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQUkgcHJvdmlkZXIgKGFudGhyb3BpY3xvcGVuYWl8Z29vZ2xlfHhhaXxiZWRyb2NrKScpXG4gICAgLm9wdGlvbignLS1tb2RlbCA8bW9kZWw+JywgJ0FJIG1vZGVsIGlkJylcbiAgICAub3B0aW9uKCctLWRpYWdub3NlIDxmaWxlPicsICdEaWFnbm9zZSBhIENsb3VkRm9ybWF0aW9uL2RlcGxveSBmYWlsdXJlIGZyb20gYSBmaWxlIChuZWVkcyBhbiBBSSBrZXkpJylcbiAgICAub3B0aW9uKCcteSwgLS15ZXMnLCAnQXV0by1hY2NlcHQgdGhlIGV4ZWN1dGlvbiBhcHByb3ZhbCBwcm9tcHQgKGZvciBDSSAvIG5vbi1pbnRlcmFjdGl2ZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWV4ZWN1dGUnLCAnUnVuIHRoZSBkZXBsb3kgKGdhdGVkOiBuZWVkcyBhcHByb3ZhbCwgcmVmdXNlcyBvbiBmYWlsZWQgcHJlcmVxcyAvIG1pc3NpbmcgaW5wdXRzKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tcmV0cmllcyA8bj4nLCAnQXV0by1maXggKyByZXRyeSBhdHRlbXB0cyBhZnRlciBhIGZhaWx1cmUgKGRlcGxveSBzY3JpcHRzIGFyZSBpZGVtcG90ZW50KScsICcxJylcbiAgICAub3B0aW9uKCctLXRlYXJkb3duJywgJ1RlYXIgZG93biBhbiBleGlzdGluZyBkZXBsb3ltZW50IGluc3RlYWQgb2YgY3JlYXRpbmcgb25lIChnYXRlZDsgQVdTIHRhcmdldHMgcmVxdWlyZSBhIHR5cGVkIGNvbmZpcm1hdGlvbiknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXN0YWNrLW5hbWUgPG5hbWU+JywgJ1N0YWNrIG5hbWUgKEVDMikgLyBzdGFjayBwcmVmaXggKEZhcmdhdGUpIHRvIHRlYXIgZG93biDigJQgZGVmYXVsdHMgdG8gdGhlIGRlcGxveSBkZWZhdWx0JylcbiAgICAub3B0aW9uKCctLWZvcmNlJywgJ1NraXAgdGhlIHRlYXJkb3duIHR5cGVkLWNvbmZpcm1hdGlvbiAoREFOR0VST1VTIOKAlCBmb3IgQ0kvYXV0b21hdGlvbiBvbmx5KScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tbm8taW5pdCcsICdTa2lwIHRoZSBwb3N0LWRlcGxveSByZWdpc3Rlci9pbml0LXBsYXRmb3JtIHN0ZXAnKVxuICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSDigJQgcHJvdmlzaW9uIGEgZnJlc2ggbWFjaGluZSBpbiBvbmUgY29tbWFuZC5cbiAgICAub3B0aW9uKCctLXJlcG8gW3VybF0nLCAnQm9vdHN0cmFwOiBnaXQtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gZmlyc3QgKHNwYXJzZSDigJQgb25seSB0aGUgbmVlZGVkIGRlcGxveSBmb2xkZXJzKSwgdGhlbiBydW4gZnJvbSBpdCAobm8gdmFsdWUgPSB0aGUgdXBzdHJlYW0gZGVmYXVsdCknKVxuICAgIC5vcHRpb24oJy0tcmVmIDxyZWY+JywgJ0dpdCBicmFuY2gvdGFnIHRvIGNoZWNrIG91dCB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IG1haW4pJylcbiAgICAub3B0aW9uKCctLXdvcmtkaXIgPGRpcj4nLCAnRGlyZWN0b3J5IHRvIGNsb25lIGludG8gLyBydW4gZnJvbSB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IHBpcGVsaW5lLWJ1aWxkZXIpJylcbiAgICAvLyBQb3N0LWluc3RhbGwgbG9hZHMg4oCUIGVhY2ggb3B0LWluIHN0ZXAgYWxzbyBhZGRzIGl0cyBkZXBsb3kgZm9sZGVyIHRvIHRoZSBzcGFyc2UgY2xvbmUuXG4gICAgLm9wdGlvbignLS13aXRoLXBsdWdpbnMnLCAnUG9zdC1pbnN0YWxsOiBidWlsZCArIGxvYWQgcGx1Z2lucyAoYWRkcyBkZXBsb3kvcGx1Z2lucywgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtY29tcGxpYW5jZScsICdQb3N0LWluc3RhbGw6IGxvYWQgc2FtcGxlIGNvbXBsaWFuY2UgcnVsZXMvcG9saWNpZXMgKGFkZHMgZGVwbG95L2NvbXBsaWFuY2UpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNhbXBsZXMnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBwaXBlbGluZXMgKGFkZHMgZGVwbG95L3NhbXBsZXMpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWFsbCcsICdQb3N0LWluc3RhbGw6IHBsdWdpbnMgKyBjb21wbGlhbmNlICsgc2FtcGxlcycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tYnVpbGQtYm9vdHN0cmFwJywgJ0J1aWxkICsgcHVibGlzaCB0aGUgQ29kZUJ1aWxkIGJvb3RzdHJhcCBpbWFnZSBkdXJpbmcgcmVnaXN0ZXIgKGFkZHMgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtc21va2UtdGVzdCcsICdQb3N0LWluc3RhbGw6IHJlYWQtb25seSBBUEkgcmVhY2hhYmlsaXR5IGNoZWNrJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWV2ZW50cycsICdQb3N0LWluc3RhbGwgKEFXUyk6IGV2ZW50IGluZ2VzdGlvbiBidW5kbGUg4oCUIHN0b3JlLXRva2VuIChKV1Qg4oaSIFNlY3JldHMgTWFuYWdlcikgdGhlbiBzZXR1cC1ldmVudHMgKEV2ZW50QnJpZGdlL0xhbWJkYSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXBvc3Qtc3RlcCA8Y21kPicsICdSdW4gYW4gZXh0cmEgY29tbWFuZCBhZnRlciB0aGUgbG9hZHMgKHJlcGVhdGFibGUsIGluIG9yZGVyKScsIGNvbGxlY3RTdGVwLCBbXSlcbiAgICAub3B0aW9uKCctLWFkbWluLWVtYWlsIDxhZGRyPicsICdBZG1pbiBlbWFpbCBmb3Igbm9uLWludGVyYWN0aXZlIHJlZ2lzdGVyIChzZXRzIFBMQVRGT1JNX0lERU5USUZJRVIpJylcbiAgICAub3B0aW9uKCctLWFkbWluLXBhc3N3b3JkIDxwdz4nLCAnQWRtaW4gcGFzc3dvcmQgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9QQVNTV09SRCknKVxuICAgIC5vcHRpb24oJy0tanNvbicsICdPdXRwdXQgdGhlIHBsYW4gYXMgSlNPTiAobmV2ZXIgZXhlY3V0ZXMpJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1Byb3Zpc2lvbiAoYWR2aXNvciknKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gMS4gQXNzZW1ibGUgcGFyYW1zIGZyb20gZXhwbGljaXQgZmxhZ3MgKGZsYWdzIGFsd2F5cyB3aW4gb3ZlciBOTCBwYXJzZSkuXG4gICAgICAgIGNvbnN0IHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICBkb21haW46IG9wdGlvbnMuZG9tYWluLFxuICAgICAgICAgIGhvc3RlZFpvbmVJZDogb3B0aW9ucy5ob3N0ZWRab25lSWQsXG4gICAgICAgICAgZGVwbG95TW9kZTogb3B0aW9ucy5kZXBsb3lNb2RlLFxuICAgICAgICAgIGtleVBhaXI6IG9wdGlvbnMua2V5UGFpcixcbiAgICAgICAgICBpbnN0YW5jZVR5cGU6IG9wdGlvbnMuaW5zdGFuY2VUeXBlLFxuICAgICAgICAgIGdoY3JUb2tlbjogb3B0aW9ucy5naGNyVG9rZW4sXG4gICAgICAgICAgLy8gQ29tbWFuZGVyIHRyaS1zdGF0ZXMgYGVtYWlsYDogdW5kZWZpbmVkIChuZWl0aGVyKSwgdHJ1ZSAoLS1lbWFpbCksXG4gICAgICAgICAgLy8gZmFsc2UgKC0tbm8tZW1haWwpLiBTRVMgaXMgb24gYnkgZGVmYXVsdCwgc28gb25seSAtLW5vLWVtYWlsIGlzXG4gICAgICAgICAgLy8gbG9hZC1iZWFyaW5nIChpdCBlbWl0cyBgLS1uby1lbWFpbGAgaW50byB0aGUgZGVwbG95IGNvbW1hbmQpLlxuICAgICAgICAgIGVtYWlsOiBvcHRpb25zLmVtYWlsID09PSB0cnVlLFxuICAgICAgICAgIG5vRW1haWw6IG9wdGlvbnMuZW1haWwgPT09IGZhbHNlLFxuICAgICAgICAgIGVtYWlsRnJvbTogb3B0aW9ucy5lbWFpbEZyb20sXG4gICAgICAgICAgZW1haWxGcm9tTmFtZTogb3B0aW9ucy5lbWFpbEZyb21OYW1lLFxuICAgICAgICAgIGFsZXJ0RW1haWw6IG9wdGlvbnMuYWxlcnRFbWFpbCxcbiAgICAgICAgICBub0NyZWF0ZVNlc0lkZW50aXR5OiBvcHRpb25zLnNraXBTZXNJZGVudGl0eSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWlPcHRzID0geyBwcm92aWRlcjogb3B0aW9ucy5haVByb3ZpZGVyLCBtb2RlbDogb3B0aW9ucy5tb2RlbCB9O1xuXG4gICAgICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSArIHBvc3QtaW5zdGFsbCBzZWxlY3Rpb25zLlxuICAgICAgICBjb25zdCB3YW50Qm9vdHN0cmFwID0gb3B0aW9ucy5yZXBvICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5yZXBvICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2l0aEFsbCA9IG9wdGlvbnMud2l0aEFsbCA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZW5hYmxlZExvYWRJZHMgPSBMT0FEX1NURVBTLmZpbHRlcigocykgPT4gd2l0aEFsbCB8fCBvcHRpb25zW3MuZmxhZ10gPT09IHRydWUpLm1hcCgocykgPT4gcy5pZCk7XG4gICAgICAgIGNvbnN0IHBvc3RTdGVwRmxhZ3MgPSB7XG4gICAgICAgICAgaW5pdDogb3B0aW9ucy5pbml0ICE9PSBmYWxzZSxcbiAgICAgICAgICBidWlsZEJvb3RzdHJhcDogb3B0aW9ucy5idWlsZEJvb3RzdHJhcCA9PT0gdHJ1ZSB8fCBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpLFxuICAgICAgICAgIHNtb2tlVGVzdDogb3B0aW9ucy53aXRoU21va2VUZXN0ID09PSB0cnVlLFxuICAgICAgICAgIGV2ZW50czogb3B0aW9ucy53aXRoRXZlbnRzID09PSB0cnVlLFxuICAgICAgICAgIHN0ZXBzOiAob3B0aW9ucy5wb3N0U3RlcCA/PyBbXSkgYXMgc3RyaW5nW10sXG4gICAgICAgIH07XG4gICAgICAgIC8vIEFkbWluIGNyZWRlbnRpYWxzIGZvcndhcmRlZCBhcyBlbnYgc28gcmVnaXN0ZXIgcnVucyBub24taW50ZXJhY3RpdmVseS5cbiAgICAgICAgY29uc3QgYWRtaW5FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluRW1haWwgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9JREVOVElGSUVSID0gb3B0aW9ucy5hZG1pbkVtYWlsO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYWRtaW5QYXNzd29yZCA9PT0gJ3N0cmluZycpIGFkbWluRW52LlBMQVRGT1JNX1BBU1NXT1JEID0gb3B0aW9ucy5hZG1pblBhc3N3b3JkO1xuXG4gICAgICAgIC8vIDIuIE9wdGlvbmFsbHkgcGFyc2UgYSBuYXR1cmFsLWxhbmd1YWdlIGdvYWwgdG8gZmlsbCBhbnkgR0FQUyAoYmVzdC1lZmZvcnQpLlxuICAgICAgICBsZXQgdGFyZ2V0OiBUYXJnZXRJZCB8IHVuZGVmaW5lZCA9IGlzVGFyZ2V0SWQob3B0aW9ucy50YXJnZXQpID8gb3B0aW9ucy50YXJnZXQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChvcHRpb25zLnByb21wdCkge1xuICAgICAgICAgIGlmIChpc0FpQ29uZmlndXJlZChhaU9wdHMpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBwYXJzZUdvYWwob3B0aW9ucy5wcm9tcHQsIGFpT3B0cyk7XG4gICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgIGlmICghdGFyZ2V0ICYmIGlzVGFyZ2V0SWQocGFyc2VkLnRhcmdldCkpIHRhcmdldCA9IHBhcnNlZC50YXJnZXQ7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoayAhPT0gJ3RhcmdldCcgJiYgcGFyYW1zW2tdID09PSB1bmRlZmluZWQgJiYgdiAhPT0gdW5kZWZpbmVkKSBwYXJhbXNba10gPSB2O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQSAtLXByb21wdCB3YXMgZ2l2ZW4gYnV0IG5vIEFJIGtleSBpcyBzZXQg4oCUIGlnbm9yaW5nIGl0IGFuZCB1c2luZyBmbGFncyBvbmx5LiBTZXQgQU5USFJPUElDX0FQSV9LRVkgKG9yIC0tYWktcHJvdmlkZXIgKyBpdHMga2V5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBPcHRpb25hbCBmYWlsdXJlIGRpYWdub3NpcyAoaW5kZXBlbmRlbnQgb2YgYSBkZXBsb3kgcGxhbikuXG4gICAgICAgIGlmIChvcHRpb25zLmRpYWdub3NlKSB7XG4gICAgICAgICAgbGV0IGZhaWx1cmVUZXh0OiBzdHJpbmc7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZhaWx1cmVUZXh0ID0gcmVhZEZpbGVTeW5jKG9wdGlvbnMuZGlhZ25vc2UsICd1dGYtOCcpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcHJpbnRFcnJvcihgQ2Fubm90IHJlYWQgLS1kaWFnbm9zZSBmaWxlOiAke29wdGlvbnMuZGlhZ25vc2V9YCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZGlhZ25vc2lzID0gaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSA/IGF3YWl0IGRpYWdub3NlRmFpbHVyZShmYWlsdXJlVGV4dCwgYWlPcHRzKSA6IG51bGw7XG4gICAgICAgICAgLy8gV2l0aCAtLWpzb24sIHRoZSBkaWFnbm9zaXMgSVMgdGhlIG1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IOKAlCBlbWl0IGl0XG4gICAgICAgICAgLy8gYWxvbmUgKGRvbid0IGFsc28gcHJpbnQgdGV4dCwgd2hpY2ggd291bGQgY29ycnVwdCB0aGUgSlNPTiBzdHJlYW0pLlxuICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZXhlY3V0aW9uSWQsIGRpYWdub3NpcyB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkaWFnbm9zaXMpIHtcbiAgICAgICAgICAgIHByaW50U2VjdGlvbignRmFpbHVyZSBkaWFnbm9zaXMnKTtcbiAgICAgICAgICAgIHByaW50SW5mbyhkaWFnbm9zaXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0RpYWdub3NpcyB1bmF2YWlsYWJsZSAobm8gQUkga2V5IGNvbmZpZ3VyZWQgb3IgdGhlIG1vZGVsIGNvdWxkIG5vdCBiZSByZWFjaGVkKS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0YXJnZXQpIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuIE5lZWQgYSB0YXJnZXQgdG8gYXNzZW1ibGUgYSBwbGFuLlxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYE5vIHRhcmdldCBzcGVjaWZpZWQuIFBhc3MgLS10YXJnZXQgPCR7VEFSR0VUX0lEUy5qb2luKCd8Jyl9PiBvciBkZXNjcmliZSB0aGUgZ29hbCB3aXRoIC0tcHJvbXB0LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWMgPSBUQVJHRVRTW3RhcmdldF07XG4gICAgICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgICAgIC8vIDRiLiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcuIEdhdGVkIGhhcmRlclxuICAgICAgICAvLyB0aGFuIGRlcGxveTogQVdTIHRhcmdldHMgYXJlIGlycmV2ZXJzaWJsZSwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG9cbiAgICAgICAgLy8gVFlQRSB0aGUgdGFyZ2V0IGlkICgtLWZvcmNlIGJ5cGFzc2VzIGZvciBDSTsgLS15ZXMgYWxvbmUgZG9lcyBOT1QpLlxuICAgICAgICBpZiAob3B0aW9ucy50ZWFyZG93bikge1xuICAgICAgICAgIGNvbnN0IHsgY29tbWFuZDogZG93bkNvbW1hbmQsIGRlc3RydWN0aXZlIH0gPSB0ZWFyZG93bkNvbW1hbmQodGFyZ2V0LCB7XG4gICAgICAgICAgICBzdGFja05hbWU6IG9wdGlvbnMuc3RhY2tOYW1lLFxuICAgICAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICAgIC8vIE91ciB0eXBlZCBnYXRlIElTIHRoZSBjb25maXJtYXRpb24g4oCUIGZvcndhcmQgLS15ZXMgc28gdGhlIG5hdGl2ZVxuICAgICAgICAgICAgLy8gc2NyaXB0IChGYXJnYXRlKSBkb2Vzbid0IGFsc28gYmxvY2sgb24gc3RkaW4gd2UncmUgaW5oZXJpdGluZy5cbiAgICAgICAgICAgIGFzc3VtZVllczogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZXhlY3V0aW9uSWQsIHRhcmdldCwgdGVhcmRvd246IHRydWUsIGRlc3RydWN0aXZlLCBkZXN0cm95czogc3BlYy5kZXN0cm95cywgY29tbWFuZDogZG93bkNvbW1hbmQgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByaW50U2VjdGlvbihgVGVhcmRvd24gcGxhbiDigJQgJHtzcGVjLmxhYmVsfWApO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnRGVzdHJveXMnOiBzcGVjLmRlc3Ryb3lzLCAnU3RvcHMgY29zdCc6IHNwZWMuY29zdCB9KTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGRvd25Db21tYW5kKTtcblxuICAgICAgICAgIGlmICghb3B0aW9ucy5leGVjdXRlKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ1xcbkFkdmlzb3IgbW9kZSDigJQgbm90aGluZyB3YXMgZXhlY3V0ZWQuIFJlLXJ1biB3aXRoIC0tZXhlY3V0ZSB0byB0ZWFyIGRvd24uJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlc3RydWN0aXZlICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGFzayhgXFxuVGhpcyBpcyBJUlJFVkVSU0lCTEUuIFR5cGUgXCIke3RhcmdldH1cIiB0byBjb25maXJtIHRlYXJkb3duOiBgKTtcbiAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgIHByaW50V2FybmluZygnVGhhdCBkaWRuXFwndCBtYXRjaCwgc28gbm90aGluZyB3YXMgZGVzdHJveWVkIOKAlCB5b3UgaGF2ZSB0byB0eXBlIHRoZSBleGFjdCB0YXJnZXQgaWQgdG8gY29uZmlybS4nKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIWRlc3RydWN0aXZlICYmICFvcHRpb25zLmZvcmNlICYmICEoYXdhaXQgY29uZmlybSgnXFxuUHJvY2VlZCB3aXRoIHRlYXJkb3duIChzdG9wcyB0aGUgc3RhY2s7IG9uLWRpc2sgZGF0YSBwZXJzaXN0cyk/Jywgb3B0aW9ucy55ZXMpKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByaW50U2VjdGlvbignVGVhcmluZyBkb3duJyk7XG4gICAgICAgICAgY29uc3QgeyBjb2RlOiBkb3duQ29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGRvd25Db21tYW5kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICAgICAgaWYgKGRvd25Db2RlICE9PSAwKSB7XG4gICAgICAgICAgICBwcmludEVycm9yKGBcXG5UZWFyZG93biBmYWlsZWQgKGV4aXQgJHtkb3duQ29kZX0pLiBJbnNwZWN0IHRoZSBzdGFjay9jb250YWluZXJzIGFuZCByZXRyeS5gKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1RlYXJkb3duIGNvbXBsZXRlLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2UgcHJldmlvdXNseS1mZXRjaGVkIHNpbmdsZS1iaW5hcnkgdG9vbHMgKGUuZy4geXEpIHZpc2libGUgdG8gdGhlXG4gICAgICAgIC8vIHByZXJlcSBjaGVja3MgKyB0aGUgZGVwbG95IOKAlCB0aGV5IGxpdmUgaW4gdGhlIHRvb2xzIGNhY2hlLCBub3Qgb24gdGhlXG4gICAgICAgIC8vIHN5c3RlbSBQQVRILiAoQm90aCBgaGFzKClgIGFuZCB0aGUgZGVwbG95J3MgYGJhc2ggLWxjYCBpbmhlcml0IHRoaXMuKVxuICAgICAgICB3aXRoVG9vbHNPblBhdGgoKTtcbiAgICAgICAgbGV0IHByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgIGNvbnN0IHsgY29tbWFuZCwgbWlzc2luZyB9ID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHVybCA9IGRlcml2ZUhlYWx0aFVybCh0YXJnZXQsIHBhcmFtcyk7XG5cbiAgICAgICAgLy8gU3BhcnNlIGJvb3RzdHJhcCBjbG9uZSBjb21tYW5kIChjb21tb24gYmFzZSArIHRhcmdldCArIHNlbGVjdGVkIGxvYWRzKS5cbiAgICAgICAgY29uc3Qgc3BhcnNlUGF0aHMgPSBzcGFyc2VQYXRoc0Zvcih0YXJnZXQsIGVuYWJsZWRMb2FkSWRzKTtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwID0gcmVzb2x2ZUJvb3RzdHJhcChcbiAgICAgICAgICB7IHJlcG86IHR5cGVvZiBvcHRpb25zLnJlcG8gPT09ICdzdHJpbmcnID8gb3B0aW9ucy5yZXBvIDogdW5kZWZpbmVkLCByZWY6IG9wdGlvbnMucmVmLCB3b3JrZGlyOiBvcHRpb25zLndvcmtkaXIsIGZ1bGw6ICFnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0KCkgfSxcbiAgICAgICAgICBzcGFyc2VQYXRocyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwQ21kID0gd2FudEJvb3RzdHJhcCA/IGJvb3RzdHJhcENvbW1hbmQoYm9vdHN0cmFwKSA6IG51bGw7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIOKGkiBzbW9rZSDihpIgZXZlbnRzIOKGkiBjdXN0b20pLlxuICAgICAgICBjb25zdCB7IHN0ZXBzOiBwb3N0U3RlcHMsIHNraXBwZWQ6IHNraXBwZWRTdGVwcyB9ID0gcmVzb2x2ZVBvc3RTdGVwcyh7XG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZWdpb246IHR5cGVvZiBwYXJhbXMucmVnaW9uID09PSAnc3RyaW5nJyA/IHBhcmFtcy5yZWdpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMsXG4gICAgICAgICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHByZXJlcXMsXG4gICAgICAgICAgICBwcmVyZXFzU2F0aXNmaWVkOiBwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpLFxuICAgICAgICAgICAgbWlzc2luZ0lucHV0czogbWlzc2luZy5tYXAoKG0pID0+ICh7IGZsYWc6IG0uZmxhZywgZGVzY3JpcHRpb246IG0uZGVzY3JpcHRpb24gfSkpLFxuICAgICAgICAgICAgYm9vdHN0cmFwOiBib290c3RyYXBDbWQsXG4gICAgICAgICAgICBzcGFyc2VQYXRoczogd2FudEJvb3RzdHJhcCA/IHNwYXJzZVBhdGhzIDogbnVsbCxcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBwb3N0U3RlcHM6IHBvc3RTdGVwcy5tYXAoKHMpID0+ICh7IGlkOiBzLmlkLCBsYWJlbDogcy5sYWJlbCwgY29tbWFuZDogcy5jb21tYW5kIH0pKSxcbiAgICAgICAgICAgIHNraXBwZWRQb3N0U3RlcHM6IHNraXBwZWRTdGVwcyxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gUHJpbnQgdGhlIHBsYW4gKHNoYXJlZCBieSBhZHZpc29yICsgZXhlY3V0ZSkuXG4gICAgICAgIHByaW50U2VjdGlvbihgUHJvdmlzaW9uIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdCZXN0IGZvcic6IHNwZWMuYmVzdEZvciwgJ0Nvc3QnOiBzcGVjLmNvc3QgfSk7XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdQcmVyZXF1aXNpdGVzJyk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBwcmVyZXFzKSBwcmludEluZm8oYCR7Yy5vayA/ICfinJMnIDogJ+Kclyd9ICR7Yy5uYW1lfSDigJQgJHtjLmRldGFpbH1gKTtcbiAgICAgICAgaWYgKCFwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpKSBwcmludFdhcm5pbmcoJ1Jlc29sdmUgdGhlIGZhaWxpbmcgcHJlcmVxdWlzaXRlcyBhYm92ZSBiZWZvcmUgZGVwbG95aW5nLicpO1xuXG4gICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ01pc3NpbmcgcmVxdWlyZWQgaW5wdXRzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1pc3NpbmcpIHByaW50SW5mbyhgICAtLSR7bS5mbGFnfSAgKCR7bS5kZXNjcmlwdGlvbn0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAgKHNwYXJzZSBnaXQgY2xvbmUsIHJ1bnMgZmlyc3QpJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGBDbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0g4oaSICR7Ym9vdHN0cmFwLndvcmtkaXJ9OyBmb2xkZXJzOiAke3NwYXJzZVBhdGhzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgICAgcHJpbnRJbmZvKGJvb3RzdHJhcENtZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gICAgICAgIHByaW50SW5mbyhjb21tYW5kKTtcblxuICAgICAgICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA+IDAgfHwgc2tpcHBlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1Bvc3QtaW5zdGFsbCBzdGVwcycpO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBwb3N0U3RlcHMpIHByaW50SW5mbyhg4oCiICR7cy5sYWJlbH1cXG4gICAgJHtzLmNvbW1hbmR9YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHNraXBwZWRTdGVwcykgcHJpbnRXYXJuaW5nKGBza2lwcGVkICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBBZHZpc29yIG1vZGUgKGRlZmF1bHQpIOKAlCBzdG9wIGhlcmUsIG5vdGhpbmcgZXhlY3V0ZWQuXG4gICAgICAgIGlmICghb3B0aW9ucy5leGVjdXRlKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdcXG5BZHZpc29yIG1vZGUg4oCUIG5vdGhpbmcgd2FzIGV4ZWN1dGVkLiBSZS1ydW4gd2l0aCAtLWV4ZWN1dGUgdG8gZGVwbG95IChnYXRlZCBieSBhcHByb3ZhbCkuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNy4gQW55IG1pc3NpbmcgcmVxdWlyZWQgcHJlcmVxIHRoYXQncyBhIHNpbmdsZSBzdGF0aWMgYmluYXJ5IChlLmcuIHlxKVxuICAgICAgICAvLyBjYW4gYmUgZmV0Y2hlZCBpbnRvIHRoZSB0b29scyBjYWNoZSBpbnN0ZWFkIG9mIGEgc3lzdGVtIGluc3RhbGwg4oCUIG5vXG4gICAgICAgIC8vIGJyZXcvYXB0LiBPZmZlciBpdCwgdGhlbiByZS1jaGVjayAodGhlIGNhY2hlIGRpciBpcyBhbHJlYWR5IG9uIFBBVEgpLlxuICAgICAgICBjb25zdCBmZXRjaGFibGUgPSBwcmVyZXFzLmZpbHRlcigoYykgPT4gIWMub2sgJiYgYy5yZXF1aXJlZCAmJiBpc0ZldGNoYWJsZShjLm5hbWUpKTtcbiAgICAgICAgaWYgKGZldGNoYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbmFtZXMgPSBmZXRjaGFibGUubWFwKChjKSA9PiBjLm5hbWUpLmpvaW4oJywgJyk7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7bmFtZXN9IG5vdCBpbnN0YWxsZWQg4oCUIGZldGNoIHRoZSBvZmZpY2lhbCBzdGF0aWMgYmluYXJ5IGludG8gJHtUT09MU19ESVJ9IChubyBzeXN0ZW0gaW5zdGFsbCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgZmV0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgIHByaW50SW5mbyhgRmV0Y2hpbmcgJHtjLm5hbWV94oCmYCk7XG4gICAgICAgICAgICAgIGlmICghZmV0Y2hUb29sKGMubmFtZSkpIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHtjLm5hbWV9IOKAlCBpbnN0YWxsIGl0IG1hbnVhbGx5IGFuZCByZS1ydW4uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdiLiBHYXRlZCBleGVjdXRpb24uIENoZWNrIHByZXJlcXMgLyByZXF1aXJlZCBpbnB1dHMgZmlyc3Qg4oCUIHRoaXMgYWxzb1xuICAgICAgICAvLyBjYXRjaGVzIGEgbWlzc2luZyBgZ2l0YCB3aGVuIGJvb3RzdHJhcHBpbmcuXG4gICAgICAgIGNvbnN0IGJsb2NrZWQgPSBleGVjdXRpb25CbG9ja2VkKHByZXJlcXMsIG1pc3NpbmcpO1xuICAgICAgICBpZiAoYmxvY2tlZCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYENhbid0IHN0YXJ0IGp1c3QgeWV0IOKAlCAke2Jsb2NrZWR9LiBSZXNvbHZlIHRoYXQgYW5kIHJlLXJ1bi5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3YS4gU3BhcnNlLWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvLCByZXBvaW50IGN3ZCwgYW5kIHZlcmlmeSB0aGUgdHJlZS5cbiAgICAgICAgLy8gU2hhcmVkIGJ5IGAtLXJlcG9gIChiZWxvdykgYW5kIHRoZSBpbnRlcmFjdGl2ZSBvZmZlciBpbiA3Yi4gUmV0dXJuc1xuICAgICAgICAvLyBmYWxzZSAoYW5kIHNldHMgZXhpdENvZGUpIG9uIGZhaWx1cmUg4oCUIHdpdGggYSBmcmllbmRseSBtZXNzYWdlLlxuICAgICAgICBjb25zdCBib290c3RyYXBDbG9uZSA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgICAgICBjb25zdCBjbWQgPSBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCk7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAnKTtcbiAgICAgICAgICBwcmludEluZm8oY21kKTtcbiAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChjbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIGNsb25lIGRpZG4ndCBmaW5pc2ggKGV4aXQgJHtjb2RlfSkuIERvdWJsZS1jaGVjayB0aGUgcmVwbyBVUkwgLyByZWYgKG9yIHlvdXIgbmV0d29yaykgYW5kIGdpdmUgaXQgYW5vdGhlciBnby5gKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjd2QgPSBwYXRoLnJlc29sdmUoY3dkLCBib290c3RyYXAud29ya2Rpcik7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKGBSZXBvIGlzIHJlYWR5IOKAlCBjb250aW51aW5nIGZyb20gJHtjd2R9YCk7XG4gICAgICAgICAgY29uc3QgYWJzZW50ID0gc3BhcnNlUGF0aHMuZmlsdGVyKChwKSA9PiAhZXhpc3RzU3luYyhwYXRoLmpvaW4oY3dkLCBwKSkpO1xuICAgICAgICAgIGlmIChhYnNlbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIHNwYXJzZSBjbG9uZSBpcyBtaXNzaW5nICR7YWJzZW50LmpvaW4oJywgJyl9IOKAlCB0aGF0IHJlZiBtYXkgbm90IGhhdmUgdGhvc2UgZm9sZGVycy4gVHJ5IGEgZGlmZmVyZW50IC0tcmVmLmApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGAtLXJlcG9gOiBjbG9uZSB1cCBmcm9udCAobXVzdCBwcmVjZWRlIHRoZSBlbnRyeXBvaW50IGNoZWNrKS5cbiAgICAgICAgaWYgKGJvb3RzdHJhcENtZCkge1xuICAgICAgICAgIHByaW50SW5mbyhgXFxuQm9vdHN0cmFwIOKGkiBjbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0gaW50byAke2Jvb3RzdHJhcC53b3JrZGlyfSAoc3BhcnNlKS5gKTtcbiAgICAgICAgICBpZiAoIShhd2FpdCBjb25maXJtKCdHbyBhaGVhZCB3aXRoIHRoZSBjbG9uZT8nLCBvcHRpb25zLnllcykpKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuIFJlLXJ1biB3aGVuZXZlciB5b3VcXCdyZSByZWFkeS4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEoYXdhaXQgYm9vdHN0cmFwQ2xvbmUoKSkpIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdiLiBUaGUgZGVwbG95IGVudHJ5cG9pbnQgbXVzdCBleGlzdCByZWxhdGl2ZSB0byBjd2QuIElmIGl0IGRvZXNuJ3QgYW5kXG4gICAgICAgIC8vIHdlIGhhdmVuJ3QgYm9vdHN0cmFwcGVkLCBncmFjZWZ1bGx5IE9GRkVSIHRvIGNsb25lIChpbnRlcmFjdGl2ZSBvbmx5KSxcbiAgICAgICAgLy8gc28gYSBmcmVzaCBtYWNoaW5lIGNhbiBwcm9jZWVkIHdpdGhvdXQgcmUtcnVubmluZyB3aXRoIC0tcmVwby5cbiAgICAgICAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZSA9IEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIW9wdGlvbnMueWVzO1xuICAgICAgICAgIGlmICghYm9vdHN0cmFwQ21kICYmIGludGVyYWN0aXZlICYmIGdpdEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICBwcmludEluZm8oYFxcbkxvb2tzIGxpa2UgeW91J3JlIG5vdCBpbnNpZGUgYSBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0LCBzbyB0aGUgJHtzcGVjLmxhYmVsfSBkZXBsb3kgc2NyaXB0cyBhcmVuJ3QgaGVyZSB5ZXQuYCk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgY29uZmlybShgV2FudCBtZSB0byBzcGFyc2UtY2xvbmUgdGhlbSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IGFuZCBrZWVwIGdvaW5nP2AsIGZhbHNlKSkge1xuICAgICAgICAgICAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGBcXG5JIGNvdWxkbid0IGZpbmQgJHtzcGVjLmRpcn0vJHtzcGVjLmVudHJ5cG9pbnR9IGZyb20gJHtjd2R9LmApO1xuICAgICAgICAgICAgcHJpbnRJbmZvKCdUd28gZWFzeSB3YXlzIGZvcndhcmQ6Jyk7XG4gICAgICAgICAgICBwcmludEluZm8oJyAg4oCiIGNkIGludG8geW91ciBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0IGFuZCByZS1ydW4sIG9yJyk7XG4gICAgICAgICAgICBwcmludEluZm8oYCAg4oCiIGFkZCAtLXJlcG8gYW5kIEknbGwgYm9vdHN0cmFwIGEgZnJlc2ggc3BhcnNlIGNsb25lIGZvciB5b3Uke2dpdEF2YWlsYWJsZSgpID8gJy4nIDogJyAob25jZSBnaXQgaXMgaW5zdGFsbGVkKS4nfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGxvY2FsL21pbmlrdWJlJ3Mgc2V0dXAuc2ggUkVRVUlSRVMgYSBgLmVudmAgYW5kIGFib3J0cyB3aXRob3V0IGl0IOKAlCBjcmVhdGVcbiAgICAgICAgLy8gaXQgZnJvbSAuZW52LmV4YW1wbGUgd2l0aCBnZW5lcmF0ZWQgc2VjcmV0cyBzbyB0aGUgZGVwbG95IGlzIG5vbi1pbnRlcmFjdGl2ZS5cbiAgICAgICAgLy8gZWMyL2ZhcmdhdGUgYWxzbyBzaGlwIGEgYC5lbnYuZXhhbXBsZWAsIGJ1dCB0aGVpciBzZXR1cC5zaCBuZXZlciByZWFkcyBhXG4gICAgICAgIC8vIGxvY2FsIGAuZW52YCAodGhlIGluc3RhbmNlIGhhbmRsZXMgaXRzIG93bjsgRmFyZ2F0ZSB1c2VzIFNlY3JldHMgTWFuYWdlciB2aWFcbiAgICAgICAgLy8gaW5pdC1zZWNyZXRzLnNoKSwgc28gd2UgbXVzdCBOT1QgZ2VuZXJhdGUgb25lIGZvciB0aGVtLlxuICAgICAgICBpZiAoKHRhcmdldCA9PT0gJ2xvY2FsJyB8fCB0YXJnZXQgPT09ICdtaW5pa3ViZScpICYmIGVudkZpbGVNaXNzaW5nKGN3ZCwgc3BlYy5kaXIpKSB7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7c3BlYy5kaXJ9Ly5lbnYgbm90IGZvdW5kIOKAlCBjcmVhdGUgaXQgZnJvbSAuZW52LmV4YW1wbGUgKGdlbmVyYXRlcyBzZWNyZXRzOyBlZGl0IGxhdGVyIGZvciBvcHRpb25hbCBpbnRlZ3JhdGlvbnMgbGlrZSBPQXV0aCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gY3JlYXRlRW52RmlsZShjd2QsIHNwZWMuZGlyKTtcbiAgICAgICAgICAgIHByaW50U3VjY2VzcyhgQ3JlYXRlZCAke3NwZWMuZGlyfS8uZW52IOKAlCAke259IHNlY3JldChzKSBnZW5lcmF0ZWQuYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQ29udGludWluZyB3aXRob3V0IC5lbnYg4oCUIHNldHVwLnNoIHdpbGwgYWJvcnQgaWYgaXQgc3RheXMgbWlzc2luZy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybSgnXFxuUHJvY2VlZCB3aXRoIHRoaXMgZGVwbG95PycsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2MuIFJ1biB0aGUgZGVwbG95IG91dC1vZi1sb29wIChyZWFsIGNvbW1hbmQsIHNlY3JldHMgdW5tYXNrZWQsIHN0cmVhbWVkICtcbiAgICAgICAgLy8gY2FwdHVyZWQpLCB3aXRoIGEgYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3Ag4oCUIHRoZSBkZXBsb3kgc2NyaXB0cyBhcmVcbiAgICAgICAgLy8gaWRlbXBvdGVudCwgc28gYSBmaXhlZCByZS1ydW4gcmVzdW1lcyByYXRoZXIgdGhhbiBzdGFydGluZyBvdmVyLlxuICAgICAgICBjb25zdCBtYXhBdHRlbXB0cyA9IDEgKyBNYXRoLm1heCgwLCBwYXJzZUludChvcHRpb25zLnJldHJpZXMsIDEwKSB8fCAwKTtcbiAgICAgICAgbGV0IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBwYXJhbXM7XG4gICAgICAgIGxldCBzdWNjZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgICAgICAgIGNvbnN0IHJlYWxDb21tYW5kID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHJ1blBhcmFtcywgeyBtYXNrOiBmYWxzZSB9KS5jb21tYW5kO1xuICAgICAgICAgIHByaW50U2VjdGlvbihhdHRlbXB0ID09PSAxID8gJ0RlcGxveWluZycgOiBgRGVwbG95aW5nIOKAlCByZXRyeSAke2F0dGVtcHQgLSAxfWApO1xuICAgICAgICAgIGlmIChhdHRlbXB0ID09PSAxKSB7XG4gICAgICAgICAgICBwcmludEluZm8oYERlcGxveWluZyAke3NwZWMubGFiZWx9IOKGkiAke3VybH1gKTtcbiAgICAgICAgICAgIHByaW50SW5mbyhzcGVjLmRlcGxveXMpO1xuICAgICAgICAgICAgcHJpbnRJbmZvKCdTdHJlYW1pbmcgdGhlIGRlcGxveSBiZWxvdyDigJQgZmlyc3QgcnVuIGlzIHRoZSBzbG93IG9uZSAoaW1hZ2UgcHVsbHMgKyBjZXJ0IGdlbmVyYXRpb24pLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChyZWFsQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDApIHsgc3VjY2VlZGVkID0gdHJ1ZTsgYnJlYWs7IH1cblxuICAgICAgICAgIHByaW50RXJyb3IoYFxcbkRlcGxveSBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuYCk7XG4gICAgICAgICAgY29uc3QgaXNzdWVzID0gbWF0Y2hJc3N1ZXModGFpbCk7XG4gICAgICAgICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0xpa2VseSBjYXVzZScpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGlzc3VlcykgcHJpbnRJbmZvKGDigKIgJHtpLmNhdXNlfVxcbiAg4oaSICR7aS5zdWdnZXN0aW9ufWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgZGlhZ25vc2lzID0gYXdhaXQgZGlhZ25vc2VGYWlsdXJlKHJlZGFjdFNlY3JldHModGFpbCwgc3BlYywgcnVuUGFyYW1zKSwgYWlPcHRzKTtcbiAgICAgICAgICAgIGlmIChkaWFnbm9zaXMpIHsgcHJpbnRTZWN0aW9uKCdEaWFnbm9zaXMnKTsgcHJpbnRJbmZvKGRpYWdub3Npcyk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIGJyZWFrO1xuXG4gICAgICAgICAgLy8gQXV0by1maXg6IGEgcmV0cnlhYmxlIGlzc3VlIHdpdGggYSBwYXJhbSB3ZSBoYXZlbid0IGFscmVhZHkgYXBwbGllZC5cbiAgICAgICAgICBjb25zdCBmaXggPSBpc3N1ZXMuZmluZCgoaSkgPT4gaS5yZXRyeWFibGUgJiYgaS5wYXJhbUZpeCAmJiBydW5QYXJhbXNbaS5wYXJhbUZpeC5rZXldICE9PSBpLnBhcmFtRml4LnZhbHVlKTtcbiAgICAgICAgICBpZiAoZml4Py5wYXJhbUZpeCAmJiBhd2FpdCBjb25maXJtKGBcXG5BcHBseSBmaXggYW5kIHJldHJ5IOKAlCAke2ZpeC5zdWdnZXN0aW9ufWAsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgcnVuUGFyYW1zID0geyAuLi5ydW5QYXJhbXMsIFtmaXgucGFyYW1GaXgua2V5XTogZml4LnBhcmFtRml4LnZhbHVlIH07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmV0cnlhYmxlIGJ1dCBubyBwYXJhbSBjaGFuZ2UgKGUuZy4gQUNNIEROUyBwcm9wYWdhdGlvbikg4oCUIG9mZmVyIGEgcGxhaW4gcmUtcnVuLlxuICAgICAgICAgIGlmICghZml4ICYmIGlzc3Vlcy5zb21lKChpKSA9PiBpLnJldHJ5YWJsZSkgJiYgYXdhaXQgY29uZmlybSgnXFxuUmV0cnkgdGhlIGRlcGxveSAoaXQgaXMgaWRlbXBvdGVudCBhbmQgd2lsbCByZXN1bWUpPycsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3VjY2VlZGVkKSB7IHByb2Nlc3MuZXhpdENvZGUgPSAxOyByZXR1cm47IH1cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdEZXBsb3kgY29tbWFuZCBjb21wbGV0ZWQuJyk7XG5cbiAgICAgICAgLy8gN2QuIFNFUyBwb3N0LWRlcGxveSBndWlkYW5jZSAoYXN5bmMgREtJTSArIHNhbmRib3ggKyBib3VuY2UgdG9waWMpLlxuICAgICAgICAvLyBTRVMgaXMgcHJvdmlzaW9uZWQgQlkgREVGQVVMVCBvbiBBV1MgZGVwbG95cywgc28gc3VyZmFjZSB0aGUgZ3VpZGFuY2VcbiAgICAgICAgLy8gZm9yIGVjMi9mYXJnYXRlIHVubGVzcyB0aGUgb3BlcmF0b3Igb3B0ZWQgb3V0IHdpdGggLS1uby1lbWFpbC5cbiAgICAgICAgY29uc3Qgc2VzUHJvdmlzaW9uZWQgPSAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdmYXJnYXRlJykgJiYgcnVuUGFyYW1zLm5vRW1haWwgIT09IHRydWU7XG4gICAgICAgIGlmIChzZXNQcm92aXNpb25lZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignU0VTIOKAlCBuZXh0IHN0ZXBzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHNlc1Bvc3REZXBsb3lHdWlkYW5jZSgpKSBwcmludEluZm8oYOKAoiAke2xpbmV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3ZS4gVmVyaWZ5IGhlYWx0aCAoQ1JFQVRFX0NPTVBMRVRFICE9IHNlcnZpbmcpLlxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdWZXJpZnlpbmcgaGVhbHRoJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGBQb2xsaW5nICR7dXJsfS9oZWFsdGgg4oCmYCk7XG4gICAgICAgICAgY29uc3QgaGVhbHRoID0gYXdhaXQgd2FpdEhlYWx0aHkodXJsLCB7IG9uVGljazogKG0pID0+IHByaW50SW5mbyhtKSB9KTtcbiAgICAgICAgICAoaGVhbHRoLmhlYWx0aHkgPyBwcmludFN1Y2Nlc3MgOiBwcmludFdhcm5pbmcpKGAke2hlYWx0aC51cmx9IOKAlCAke2hlYWx0aC5kZXRhaWx9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Zi4gUG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciArIG9wdC1pbiBsb2Fkcywgc21va2UgdGVzdCwgZXZlbnRzLCBjdXN0b20pLlxuICAgICAgICAvLyByZWdpc3RlciBydW5zIGluaXQtcGxhdGZvcm07IGZvciBFQzIvRmFyZ2F0ZSBpdCBtdXN0IHJ1biBmcm9tIGluc2lkZSB0aGVcbiAgICAgICAgLy8gVlBDLCBzbyB3ZSBzdXJmYWNlIHRoZSBjb21tYW5kIHRoZXJlIGluc3RlYWQgb2YgZXhlY3V0aW5nIGl0IGxvY2FsbHkuXG4gICAgICAgIGlmIChwb3N0U3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCBwb3N0LXN0ZXAgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgICAgICAgICBjb25zdCBpc1JlbW90ZVJlZ2lzdGVyID0gKGlkOiBzdHJpbmcpOiBib29sZWFuID0+IGlkID09PSAncmVnaXN0ZXInICYmICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2ZhcmdhdGUnKTtcbiAgICAgICAgICBjb25zdCBydW5uYWJsZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+ICFpc1JlbW90ZVJlZ2lzdGVyKHMuaWQpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcG9zdFN0ZXBzKSB7XG4gICAgICAgICAgICBpZiAoaXNSZW1vdGVSZWdpc3RlcihzLmlkKSkge1xuICAgICAgICAgICAgICBwcmludEluZm8oJ1xcbk5leHQgKHJ1biBmcm9tIGluc2lkZSB0aGUgVlBDKTogcmVnaXN0ZXIgYWRtaW4gKyBsb2FkIHBsdWdpbnMg4oCUJyk7XG4gICAgICAgICAgICAgIHByaW50SW5mbyhgICAke3MuY29tbWFuZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJ1bm5hYmxlLmxlbmd0aCA+IDAgJiYgYXdhaXQgY29uZmlybShgXFxuUnVuICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSBub3c/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcnVubmFibGUpIHtcbiAgICAgICAgICAgICAgcHJpbnRTZWN0aW9uKGBQb3N0LXN0ZXA6ICR7cy5sYWJlbH1gKTtcbiAgICAgICAgICAgICAgLy8gU3RlcHMgdGhhdCBsb2cgaW50byB0aGUgcGxhdGZvcm0gKHJlZ2lzdGVyICsgc3RvcmUtdG9rZW4pIG5lZWQgdGhlXG4gICAgICAgICAgICAgIC8vIGFkbWluIGNyZWRzIChQTEFURk9STV9JREVOVElGSUVSIC8gUExBVEZPUk1fUEFTU1dPUkQpIG9uIHRvcCBvZiB0aGVpclxuICAgICAgICAgICAgICAvLyBvd24gc3RlcCBlbnYuIHNldHVwLWV2ZW50cyBkb2VzIE5PVCBsb2cgaW4g4oCUIGl0IHJlYWRzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FLFxuICAgICAgICAgICAgICAvLyBBV1MgY3JlZHMsIGFuZCB0aGUgcmVnaW9uIGZyb20gdGhlIEFXUyBlbnZpcm9ubWVudCDigJQgc28gaXQncyBleGNsdWRlZC5cbiAgICAgICAgICAgICAgY29uc3QgbmVlZHNDcmVkcyA9IHMuaWQgPT09ICdyZWdpc3RlcicgfHwgcy5pZCA9PT0gJ3N0b3JlLXRva2VuJztcbiAgICAgICAgICAgICAgY29uc3QgZW52ID0gbmVlZHNDcmVkcyA/IHsgLi4ucy5lbnYsIC4uLmFkbWluRW52IH0gOiBzLmVudjtcbiAgICAgICAgICAgICAgLy8gVGhlc2Ugc3RlcHMgKHBsdWdpbi9zYW1wbGUvY29tcGxpYW5jZSBsb2Fkcywgc21va2UsIGV2ZW50cykgYXJlIG5vaXN5XG4gICAgICAgICAgICAgIC8vIGFuZCBub24taW50ZXJhY3RpdmUsIHNvIHJ1biB0aGVtIFFVSUVUTFkg4oCUIGNhcHR1cmUgdGhlIG91dHB1dCBhbmQgb25seVxuICAgICAgICAgICAgICAvLyBzdXJmYWNlIGl0IG9uIGZhaWx1cmUuIFRoZSBleGNlcHRpb24gaXMgYSByZWdpc3RlciB3aXRoIG5vIGFkbWluIGNyZWRzOlxuICAgICAgICAgICAgICAvLyBpbml0LXBsYXRmb3JtLnNoIHByb21wdHMgZm9yIHRoZW0sIHNvIGl0IG11c3Qgc3RyZWFtIHRvIHRoZSB0ZXJtaW5hbC5cbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVSZWdpc3RlciA9IHMuaWQgPT09ICdyZWdpc3RlcicgJiYgIWFkbWluRW52LlBMQVRGT1JNX0lERU5USUZJRVI7XG4gICAgICAgICAgICAgIGNvbnN0IHF1aWV0ID0gIWludGVyYWN0aXZlUmVnaXN0ZXI7XG4gICAgICAgICAgICAgIGlmIChxdWlldCkgcHJpbnRJbmZvKGAke3MuY29tbWFuZH1cXG4gIOKApnJ1bm5pbmcgKG91dHB1dCBzaG93biBvbmx5IGlmIGl0IGZhaWxzKWApO1xuICAgICAgICAgICAgICBlbHNlIHByaW50SW5mbyhzLmNvbW1hbmQpO1xuICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChzLmNvbW1hbmQsIGN3ZCwgeyBxdWlldCwgY2FwdHVyZTogZmFsc2UsIGVudiB9KTtcbiAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocXVpZXQgJiYgdGFpbCkgeyBwcmludEVycm9yKCdcXG4tLS0gbGFzdCBvdXRwdXQgLS0tJyk7IHByaW50SW5mbyh0YWlsKTsgfVxuICAgICAgICAgICAgICAgIHByaW50RXJyb3IoYFxcblBvc3Qtc3RlcCAnJHtzLmlkfScgZmFpbGVkIChleGl0ICR7Y29kZX0pLiBUaGUgcGxhdGZvcm0gaXMgZGVwbG95ZWQ7IGZpeCBhbmQgcmUtcnVuIHRoZSBzdGVwIG1hbnVhbGx5LmApO1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByaW50U3VjY2VzcyhgJHtzLmlkfSDinJNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHJ1bm5hYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByaW50SW5mbygnXFxuU2tpcHBlZCBwb3N0LWluc3RhbGwgc3RlcHMuIFJ1biB0aGUgY29tbWFuZHMgYWJvdmUgbWFudWFsbHkgd2hlbiByZWFkeS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncHJvdmlzaW9uJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
566
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJBQXFCLENB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QUFXLEVBQUU7YUFDL0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tICdub2RlOnJlYWRsaW5lL3Byb21pc2VzJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgZGlhZ25vc2VGYWlsdXJlLCBpc0FpQ29uZmlndXJlZCwgcGFyc2VHb2FsIH0gZnJvbSAnLi4vYWdlbnQvYWkuanMnO1xuaW1wb3J0IHsgYm9vdHN0cmFwQ29tbWFuZCwgcmVzb2x2ZUJvb3RzdHJhcCB9IGZyb20gJy4uL2FnZW50L2Jvb3RzdHJhcC5qcyc7XG5pbXBvcnQgeyBlbnRyeXBvaW50RXhpc3RzLCBleGVjdXRpb25CbG9ja2VkLCBydW5TY3JpcHQgfSBmcm9tICcuLi9hZ2VudC9leGVjdXRvci5qcyc7XG5pbXBvcnQgeyBkZXJpdmVIZWFsdGhVcmwsIHdhaXRIZWFsdGh5IH0gZnJvbSAnLi4vYWdlbnQvaGVhbHRoLmpzJztcbmltcG9ydCB7IHJlc29sdmVQb3N0U3RlcHMgfSBmcm9tICcuLi9hZ2VudC9wb3N0LXN0ZXBzLmpzJztcbmltcG9ydCB7IGNoZWNrUHJlcmVxcywgZ2l0QXZhaWxhYmxlLCBnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0LCBwcmVyZXFzU2F0aXNmaWVkIH0gZnJvbSAnLi4vYWdlbnQvcHJlcmVxcy5qcyc7XG5pbXBvcnQgeyBUT09MU19ESVIsIGZldGNoVG9vbCwgaXNGZXRjaGFibGUsIHdpdGhUb29sc09uUGF0aCB9IGZyb20gJy4uL2FnZW50L3Rvb2xzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUVudkZpbGUsIGVudkZpbGVNaXNzaW5nIH0gZnJvbSAnLi4vYWdlbnQvZW52LWZpbGUuanMnO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVDb21tYW5kLFxuICBpc1RhcmdldElkLFxuICBMT0FEX1NURVBTLFxuICBzcGFyc2VQYXRoc0ZvcixcbiAgVEFSR0VUUyxcbiAgVEFSR0VUX0lEUyxcbiAgdGVhcmRvd25Db21tYW5kLFxuICB0eXBlIFRhcmdldElkLFxuICB0eXBlIFRhcmdldFNwZWMsXG59IGZyb20gJy4uL2FnZW50L3RhcmdldHMuanMnO1xuaW1wb3J0IHsgbWF0Y2hJc3N1ZXMsIHNlc1Bvc3REZXBsb3lHdWlkYW5jZSB9IGZyb20gJy4uL2FnZW50L3Ryb3VibGVzaG9vdC5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRTZWN0aW9uLCBwcmludEtleVZhbHVlLCBwcmludEluZm8sIHByaW50V2FybmluZywgcHJpbnRFcnJvciwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuLyoqXG4gKiBSZWFkIG9uZSBsaW5lIG9mIHRyaW1tZWQgaW5wdXQgZnJvbSB0aGUgdGVybWluYWwsIG93bmluZyB0aGUgcmVhZGxpbmVcbiAqIGxpZmVjeWNsZS4gVXNlZCBkaXJlY3RseSBmb3IgdGhlIGRlc3RydWN0aXZlIHRlYXJkb3duIGdhdGUgKGEgeS9OIGlzIHRvbyBlYXN5XG4gKiB0byBmYXQtZmluZ2VyLCBzbyB3ZSByZXF1aXJlIHRoZSBvcGVyYXRvciB0byBUWVBFIHRoZSB0YXJnZXQgaWQgYmFjayksIGFuZCBhc1xuICogdGhlIGJhc2lzIGZvciBgY29uZmlybWAuIERlbGliZXJhdGVseSBoYXMgbm8gYXV0by1hY2NlcHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzayhxdWVzdGlvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2UoeyBpbnB1dDogcHJvY2Vzcy5zdGRpbiwgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCB9KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHJsLnF1ZXN0aW9uKHF1ZXN0aW9uKSkudHJpbSgpO1xuICB9IGZpbmFsbHkge1xuICAgIHJsLmNsb3NlKCk7XG4gIH1cbn1cblxuLyoqIEludGVyYWN0aXZlIHkvTiBjb25maXJtYXRpb247IGF1dG8tdHJ1ZSB3aGVuIGBhdXRvWWVzYCAodGhlIGAtLXllc2AgZmxhZykuICovXG5hc3luYyBmdW5jdGlvbiBjb25maXJtKHF1ZXN0aW9uOiBzdHJpbmcsIGF1dG9ZZXM6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGF1dG9ZZXMpIHJldHVybiB0cnVlO1xuICBjb25zdCBhbnN3ZXIgPSAoYXdhaXQgYXNrKGAke3F1ZXN0aW9ufSBbeS9OXSBgKSkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGFuc3dlciA9PT0gJ3knIHx8IGFuc3dlciA9PT0gJ3llcyc7XG59XG5cbi8qKiBDb21tYW5kZXIgY29sbGVjdG9yOiBhY2N1bXVsYXRlIHJlcGVhdGVkIGAtLXBvc3Qtc3RlcGAgdmFsdWVzIGluIG9yZGVyLiAqL1xuZnVuY3Rpb24gY29sbGVjdFN0ZXAodmFsdWU6IHN0cmluZywgYWNjOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5hY2MsIHZhbHVlXTtcbn1cblxuLyoqXG4gKiBSZWRhY3Qgc2VjcmV0IHBhcmFtIHZhbHVlcyAoZS5nLiB0aGUgZ2hjciB0b2tlbikgZnJvbSBjYXB0dXJlZCBkZXBsb3kgb3V0cHV0XG4gKiBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgTExNIGZvciBkaWFnbm9zaXMuIFRoZSBkZXBsb3kgcnVucyB3aXRoIHNlY3JldHNcbiAqIHVubWFza2VkLCBzbyBhbHRob3VnaCB0aGUgY3VycmVudCBzY3JpcHRzIGRvbid0IGVjaG8gdGhlbSwgdGhpcyBrZWVwcyBhIGZ1dHVyZVxuICogc2NyaXB0J3Mgc3RyYXkgZWNobyAob3IgYSB2ZXJib3NlIHN1Yi10b29sKSBmcm9tIGNyb3NzaW5nIHRoZSB0aGlyZC1wYXJ0eS1MTE1cbiAqIGJvdW5kYXJ5LlxuICovXG5mdW5jdGlvbiByZWRhY3RTZWNyZXRzKHRleHQ6IHN0cmluZywgc3BlYzogVGFyZ2V0U3BlYywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gIGxldCBvdXQgPSB0ZXh0O1xuICBmb3IgKGNvbnN0IGlucHV0IG9mIFsuLi5zcGVjLnJlcXVpcmVkLCAuLi5zcGVjLm9wdGlvbmFsXSkge1xuICAgIGlmICghaW5wdXQuc2VjcmV0KSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc1tpbnB1dC5rZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+PSA0KSBvdXQgPSBvdXQuc3BsaXQodmFsdWUpLmpvaW4oJyoqKicpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgcHJvdmlzaW9uYCBjb21tYW5kIOKAlCBhbiBBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBQaXBlbGluZVxuICogQnVpbGRlciBQTEFURk9STSAobG9jYWwvbWluaWt1YmUvRUMyL0ZhcmdhdGUpLiBQaGFzZSAxIGlzIFJFQUQtT05MWSAocHJlcmVxXG4gKiBjaGVja3MsIE5MLWdvYWwgcGFyc2luZywgY29tbWFuZCBhc3NlbWJseSwgZmFpbHVyZSBkaWFnbm9zaXMpOyBgLS1leGVjdXRlYFxuICogZ2F0ZXMgYSByZWFsIGRlcGxveS4gV2l0aCBgLS1yZXBvYCBpdCBjYW4gYm9vdHN0cmFwIGEgZnJlc2ggbWFjaGluZSBieSBzcGFyc2VseVxuICogY2xvbmluZyBvbmx5IHRoZSBkZXBsb3kgZm9sZGVycyB0aGUgc2VsZWN0ZWQgdGFyZ2V0ICsgb3B0aW9ucyBuZWVkLCB0aGVuIHJ1bnNcbiAqIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIgYWRtaW4sIG9wdC1pbiBsb2Fkcywgc21va2UgdGVzdCwgY3VzdG9tIGNvbW1hbmRzKS5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgncHJvdmlzaW9uJylcbiAgICAuZGVzY3JpcHRpb24oJ0FJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIHBsYXRmb3JtIChsb2NhbC9taW5pa3ViZS9FQzIvRmFyZ2F0ZSk6IGFkdmlzZSwgLS1leGVjdXRlIHRvIGRlcGxveSwgb3IgLS10ZWFyZG93biB0byByZW1vdmUnKVxuICAgIC5vcHRpb24oJy10LCAtLXRhcmdldCA8dGFyZ2V0PicsIGBEZXBsb3kgdGFyZ2V0OiAke1RBUkdFVF9JRFMuam9pbignIHwgJyl9YClcbiAgICAub3B0aW9uKCctcCwgLS1wcm9tcHQgPHRleHQ+JywgJ05hdHVyYWwtbGFuZ3VhZ2UgZ29hbCAocGFyc2VkIGludG8gcGFyYW1zIHdoZW4gYW4gQUkga2V5IGlzIHNldCknKVxuICAgIC5vcHRpb24oJy0tcmVnaW9uIDxyZWdpb24+JywgJ0FXUyByZWdpb24gKEVDMi9GYXJnYXRlKScpXG4gICAgLm9wdGlvbignLS1kb21haW4gPGRvbWFpbj4nLCAnRnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0taG9zdGVkLXpvbmUtaWQgPGlkPicsICdQdWJsaWMgUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQgKEVDMi9GYXJnYXRlKScpXG4gICAgLm9wdGlvbignLS1kZXBsb3ktbW9kZSA8bW9kZT4nLCAncHVibGljIHwgcHJpdmF0ZSAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWtleS1wYWlyIDxuYW1lPicsICdFQzIga2V5IHBhaXIgKEVDMiknKVxuICAgIC5vcHRpb24oJy0taW5zdGFuY2UtdHlwZSA8dHlwZT4nLCAnRUMyIGluc3RhbmNlIHR5cGUgKEVDMiknKVxuICAgIC5vcHRpb24oJy0tZ2hjci10b2tlbiA8dG9rZW4+JywgJ0dpdEh1YiBQQVQgKHJlYWQ6cGFja2FnZXMpIOKAlCBtYXNrZWQgaW4gb3V0cHV0JylcbiAgICAub3B0aW9uKCctLWVtYWlsJywgJ0VuYWJsZSBTRVMgdHJhbnNhY3Rpb25hbCBlbWFpbCAob24gYnkgZGVmYXVsdCBmb3IgQVdTKScpXG4gICAgLm9wdGlvbignLS1uby1lbWFpbCcsICdTa2lwIFNFUyAodHJhbnNhY3Rpb25hbCBlbWFpbCBpcyBwcm92aXNpb25lZCBieSBkZWZhdWx0IG9uIEFXUyknKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbSA8YWRkcj4nLCAnU0VTIEZyb20gYWRkcmVzcycpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tLW5hbWUgPG5hbWU+JywgJ1NFUyBGcm9tIGRpc3BsYXkgbmFtZScpXG4gICAgLm9wdGlvbignLS1hbGVydC1lbWFpbCA8YWRkcj4nLCAnU3Vic2NyaWJlIGFuIGFkZHJlc3MgdG8gdGhlIGJvdW5jZS9jb21wbGFpbnQgU05TIHRvcGljJylcbiAgICAub3B0aW9uKCctLXNraXAtc2VzLWlkZW50aXR5JywgJ1NraXAgU0VTIGlkZW50aXR5IGNyZWF0aW9uIChkb21haW4gYWxyZWFkeSB2ZXJpZmllZCknKVxuICAgIC5vcHRpb24oJy0tYWktcHJvdmlkZXIgPHByb3ZpZGVyPicsICdBSSBwcm92aWRlciAoYW50aHJvcGljfG9wZW5haXxnb29nbGV8eGFpfGJlZHJvY2spJylcbiAgICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgaWQnKVxuICAgIC5vcHRpb24oJy0tZGlhZ25vc2UgPGZpbGU+JywgJ0RpYWdub3NlIGEgQ2xvdWRGb3JtYXRpb24vZGVwbG95IGZhaWx1cmUgZnJvbSBhIGZpbGUgKG5lZWRzIGFuIEFJIGtleSknKVxuICAgIC5vcHRpb24oJy15LCAtLXllcycsICdBdXRvLWFjY2VwdCB0aGUgZXhlY3V0aW9uIGFwcHJvdmFsIHByb21wdCAoZm9yIENJIC8gbm9uLWludGVyYWN0aXZlKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tZXhlY3V0ZScsICdSdW4gdGhlIGRlcGxveSAoZ2F0ZWQ6IG5lZWRzIGFwcHJvdmFsLCByZWZ1c2VzIG9uIGZhaWxlZCBwcmVyZXFzIC8gbWlzc2luZyBpbnB1dHMpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1yZXRyaWVzIDxuPicsICdBdXRvLWZpeCArIHJldHJ5IGF0dGVtcHRzIGFmdGVyIGEgZmFpbHVyZSAoZGVwbG95IHNjcmlwdHMgYXJlIGlkZW1wb3RlbnQpJywgJzEnKVxuICAgIC5vcHRpb24oJy0tdGVhcmRvd24nLCAnVGVhciBkb3duIGFuIGV4aXN0aW5nIGRlcGxveW1lbnQgaW5zdGVhZCBvZiBjcmVhdGluZyBvbmUgKGdhdGVkOyBBV1MgdGFyZ2V0cyByZXF1aXJlIGEgdHlwZWQgY29uZmlybWF0aW9uKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tc3RhY2stbmFtZSA8bmFtZT4nLCAnU3RhY2sgbmFtZSAoRUMyKSAvIHN0YWNrIHByZWZpeCAoRmFyZ2F0ZSkgdG8gdGVhciBkb3duIOKAlCBkZWZhdWx0cyB0byB0aGUgZGVwbG95IGRlZmF1bHQnKVxuICAgIC5vcHRpb24oJy0tZm9yY2UnLCAnU2tpcCB0aGUgdGVhcmRvd24gdHlwZWQtY29uZmlybWF0aW9uIChEQU5HRVJPVVMg4oCUIGZvciBDSS9hdXRvbWF0aW9uIG9ubHkpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1uby1pbml0JywgJ1NraXAgdGhlIHBvc3QtZGVwbG95IHJlZ2lzdGVyL2luaXQtcGxhdGZvcm0gc3RlcCcpXG4gICAgLy8gQm9vdHN0cmFwIChzcGFyc2UgY2xvbmUpIOKAlCBwcm92aXNpb24gYSBmcmVzaCBtYWNoaW5lIGluIG9uZSBjb21tYW5kLlxuICAgIC5vcHRpb24oJy0tcmVwbyBbdXJsXScsICdCb290c3RyYXA6IGdpdC1jbG9uZSB0aGUgcGxhdGZvcm0gcmVwbyBmaXJzdCAoc3BhcnNlIOKAlCBvbmx5IHRoZSBuZWVkZWQgZGVwbG95IGZvbGRlcnMpLCB0aGVuIHJ1biBmcm9tIGl0IChubyB2YWx1ZSA9IHRoZSB1cHN0cmVhbSBkZWZhdWx0KScpXG4gICAgLm9wdGlvbignLS1yZWYgPHJlZj4nLCAnR2l0IGJyYW5jaC90YWcgdG8gY2hlY2sgb3V0IHdoZW4gYm9vdHN0cmFwcGluZyAoZGVmYXVsdDogbWFpbiknKVxuICAgIC5vcHRpb24oJy0td29ya2RpciA8ZGlyPicsICdEaXJlY3RvcnkgdG8gY2xvbmUgaW50byAvIHJ1biBmcm9tIHdoZW4gYm9vdHN0cmFwcGluZyAoZGVmYXVsdDogcGlwZWxpbmUtYnVpbGRlciknKVxuICAgIC8vIFBvc3QtaW5zdGFsbCBsb2FkcyDigJQgZWFjaCBvcHQtaW4gc3RlcCBhbHNvIGFkZHMgaXRzIGRlcGxveSBmb2xkZXIgdG8gdGhlIHNwYXJzZSBjbG9uZS5cbiAgICAub3B0aW9uKCctLXdpdGgtcGx1Z2lucycsICdQb3N0LWluc3RhbGw6IGJ1aWxkICsgbG9hZCBwbHVnaW5zIChhZGRzIGRlcGxveS9wbHVnaW5zLCBkZXBsb3kvY29kZWJ1aWxkKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1jb21wbGlhbmNlJywgJ1Bvc3QtaW5zdGFsbDogbG9hZCBzYW1wbGUgY29tcGxpYW5jZSBydWxlcy9wb2xpY2llcyAoYWRkcyBkZXBsb3kvY29tcGxpYW5jZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtc2FtcGxlcycsICdQb3N0LWluc3RhbGw6IGxvYWQgc2FtcGxlIHBpcGVsaW5lcyAoYWRkcyBkZXBsb3kvc2FtcGxlcyknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtYWxsJywgJ1Bvc3QtaW5zdGFsbDogcGx1Z2lucyArIGNvbXBsaWFuY2UgKyBzYW1wbGVzJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1idWlsZC1ib290c3RyYXAnLCAnQnVpbGQgKyBwdWJsaXNoIHRoZSBDb2RlQnVpbGQgYm9vdHN0cmFwIGltYWdlIGR1cmluZyByZWdpc3RlciAoYWRkcyBkZXBsb3kvY29kZWJ1aWxkKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1zbW9rZS10ZXN0JywgJ1Bvc3QtaW5zdGFsbDogcmVhZC1vbmx5IEFQSSByZWFjaGFiaWxpdHkgY2hlY2snLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtZXZlbnRzJywgJ1Bvc3QtaW5zdGFsbCAoQVdTKTogZXZlbnQgaW5nZXN0aW9uIGJ1bmRsZSDigJQgc3RvcmUtdG9rZW4gKEpXVCDihpIgU2VjcmV0cyBNYW5hZ2VyKSB0aGVuIHNldHVwLWV2ZW50cyAoRXZlbnRCcmlkZ2UvTGFtYmRhKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tcG9zdC1zdGVwIDxjbWQ+JywgJ1J1biBhbiBleHRyYSBjb21tYW5kIGFmdGVyIHRoZSBsb2FkcyAocmVwZWF0YWJsZSwgaW4gb3JkZXIpJywgY29sbGVjdFN0ZXAsIFtdKVxuICAgIC5vcHRpb24oJy0tYWRtaW4tZW1haWwgPGFkZHI+JywgJ0FkbWluIGVtYWlsIGZvciBub24taW50ZXJhY3RpdmUgcmVnaXN0ZXIgKHNldHMgUExBVEZPUk1fSURFTlRJRklFUiknKVxuICAgIC5vcHRpb24oJy0tYWRtaW4tcGFzc3dvcmQgPHB3PicsICdBZG1pbiBwYXNzd29yZCBmb3Igbm9uLWludGVyYWN0aXZlIHJlZ2lzdGVyIChzZXRzIFBMQVRGT1JNX1BBU1NXT1JEKScpXG4gICAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCB0aGUgcGxhbiBhcyBKU09OIChuZXZlciBleGVjdXRlcyknLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUHJvdmlzaW9uIChhZHZpc29yKScpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyAxLiBBc3NlbWJsZSBwYXJhbXMgZnJvbSBleHBsaWNpdCBmbGFncyAoZmxhZ3MgYWx3YXlzIHdpbiBvdmVyIE5MIHBhcnNlKS5cbiAgICAgICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIGRvbWFpbjogb3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgaG9zdGVkWm9uZUlkOiBvcHRpb25zLmhvc3RlZFpvbmVJZCxcbiAgICAgICAgICBkZXBsb3lNb2RlOiBvcHRpb25zLmRlcGxveU1vZGUsXG4gICAgICAgICAga2V5UGFpcjogb3B0aW9ucy5rZXlQYWlyLFxuICAgICAgICAgIGluc3RhbmNlVHlwZTogb3B0aW9ucy5pbnN0YW5jZVR5cGUsXG4gICAgICAgICAgZ2hjclRva2VuOiBvcHRpb25zLmdoY3JUb2tlbixcbiAgICAgICAgICAvLyBDb21tYW5kZXIgdHJpLXN0YXRlcyBgZW1haWxgOiB1bmRlZmluZWQgKG5laXRoZXIpLCB0cnVlICgtLWVtYWlsKSxcbiAgICAgICAgICAvLyBmYWxzZSAoLS1uby1lbWFpbCkuIFNFUyBpcyBvbiBieSBkZWZhdWx0LCBzbyBvbmx5IC0tbm8tZW1haWwgaXNcbiAgICAgICAgICAvLyBsb2FkLWJlYXJpbmcgKGl0IGVtaXRzIGAtLW5vLWVtYWlsYCBpbnRvIHRoZSBkZXBsb3kgY29tbWFuZCkuXG4gICAgICAgICAgZW1haWw6IG9wdGlvbnMuZW1haWwgPT09IHRydWUsXG4gICAgICAgICAgbm9FbWFpbDogb3B0aW9ucy5lbWFpbCA9PT0gZmFsc2UsXG4gICAgICAgICAgZW1haWxGcm9tOiBvcHRpb25zLmVtYWlsRnJvbSxcbiAgICAgICAgICBlbWFpbEZyb21OYW1lOiBvcHRpb25zLmVtYWlsRnJvbU5hbWUsXG4gICAgICAgICAgYWxlcnRFbWFpbDogb3B0aW9ucy5hbGVydEVtYWlsLFxuICAgICAgICAgIG5vQ3JlYXRlU2VzSWRlbnRpdHk6IG9wdGlvbnMuc2tpcFNlc0lkZW50aXR5LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhaU9wdHMgPSB7IHByb3ZpZGVyOiBvcHRpb25zLmFpUHJvdmlkZXIsIG1vZGVsOiBvcHRpb25zLm1vZGVsIH07XG5cbiAgICAgICAgLy8gQm9vdHN0cmFwIChzcGFyc2UgY2xvbmUpICsgcG9zdC1pbnN0YWxsIHNlbGVjdGlvbnMuXG4gICAgICAgIGNvbnN0IHdhbnRCb290c3RyYXAgPSBvcHRpb25zLnJlcG8gIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlcG8gIT09IGZhbHNlO1xuICAgICAgICBjb25zdCB3aXRoQWxsID0gb3B0aW9ucy53aXRoQWxsID09PSB0cnVlO1xuICAgICAgICBjb25zdCBhbnlMb2FkRmxhZyA9IHdpdGhBbGwgfHwgTE9BRF9TVEVQUy5zb21lKChzKSA9PiBvcHRpb25zW3MuZmxhZ10gPT09IHRydWUpO1xuICAgICAgICBsZXQgZW5hYmxlZExvYWRJZHMgPSBMT0FEX1NURVBTLmZpbHRlcigocykgPT4gd2l0aEFsbCB8fCBvcHRpb25zW3MuZmxhZ10gPT09IHRydWUpLm1hcCgocykgPT4gcy5pZCk7XG4gICAgICAgIC8vIEludGVyYWN0aXZlOiB3aXRoIG5vIC0td2l0aC0qIGZsYWdzIGdpdmVuLCBvZmZlciBlYWNoIG9wdC1pbiBsb2FkIHNvIGFcbiAgICAgICAgLy8gcGxhaW4gYHByb3Zpc2lvbiAtLWV4ZWN1dGVgIGNhbiBzdGlsbCBsb2FkIHBsdWdpbnMvc2FtcGxlcy9jb21wbGlhbmNlLlxuICAgICAgICAvLyBFeHBsaWNpdCBmbGFncywgLS15ZXMsIC0tanNvbiwgb3Igbm9uLWludGVyYWN0aXZlIHNoZWxscyBza2lwIHRoZSBwcm9tcHRzXG4gICAgICAgIC8vIChhZHZpc29yIG1vZGUgbmV2ZXIgZXhlY3V0ZXMgbG9hZHMsIHNvIGl0IGRvZXNuJ3QgYXNrIGVpdGhlcikuXG4gICAgICAgIGlmIChvcHRpb25zLmV4ZWN1dGUgJiYgIW9wdGlvbnMueWVzICYmICFvcHRpb25zLmpzb24gJiYgQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhYW55TG9hZEZsYWcpIHtcbiAgICAgICAgICBjb25zdCBwcm9tcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgcGx1Z2luczogJ0xvYWQgcGx1Z2lucz8gKGJ1aWxkcyB0aGUgcGx1Z2luIGltYWdlcyBsb2NhbGx5IOKAlCB0aGUgc2xvdyBvbmUpJyxcbiAgICAgICAgICAgIHNhbXBsZXM6ICdMb2FkIHNhbXBsZSBwaXBlbGluZXM/JyxcbiAgICAgICAgICAgIGNvbXBsaWFuY2U6ICdMb2FkIGNvbXBsaWFuY2UgcnVsZXM/JyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHByaW50U2VjdGlvbignT3B0aW9uYWwgcG9zdC1pbnN0YWxsIGxvYWRzJyk7XG4gICAgICAgICAgY29uc3QgY2hvc2VuOiB0eXBlb2YgZW5hYmxlZExvYWRJZHMgPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgTE9BRF9TVEVQUykge1xuICAgICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0ocHJvbXB0c1tzLmlkXSA/PyBgTG9hZCAke3MuaWR9P2AsIGZhbHNlKSkgY2hvc2VuLnB1c2gocy5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gY2hvc2VuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc3RTdGVwRmxhZ3MgPSB7XG4gICAgICAgICAgaW5pdDogb3B0aW9ucy5pbml0ICE9PSBmYWxzZSxcbiAgICAgICAgICBidWlsZEJvb3RzdHJhcDogb3B0aW9ucy5idWlsZEJvb3RzdHJhcCA9PT0gdHJ1ZSB8fCBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpLFxuICAgICAgICAgIHNtb2tlVGVzdDogb3B0aW9ucy53aXRoU21va2VUZXN0ID09PSB0cnVlLFxuICAgICAgICAgIGV2ZW50czogb3B0aW9ucy53aXRoRXZlbnRzID09PSB0cnVlLFxuICAgICAgICAgIHN0ZXBzOiAob3B0aW9ucy5wb3N0U3RlcCA/PyBbXSkgYXMgc3RyaW5nW10sXG4gICAgICAgIH07XG4gICAgICAgIC8vIEFkbWluIGNyZWRlbnRpYWxzIGZvcndhcmRlZCBhcyBlbnYgc28gcmVnaXN0ZXIgcnVucyBub24taW50ZXJhY3RpdmVseS5cbiAgICAgICAgY29uc3QgYWRtaW5FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluRW1haWwgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9JREVOVElGSUVSID0gb3B0aW9ucy5hZG1pbkVtYWlsO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYWRtaW5QYXNzd29yZCA9PT0gJ3N0cmluZycpIGFkbWluRW52LlBMQVRGT1JNX1BBU1NXT1JEID0gb3B0aW9ucy5hZG1pblBhc3N3b3JkO1xuXG4gICAgICAgIC8vIDIuIE9wdGlvbmFsbHkgcGFyc2UgYSBuYXR1cmFsLWxhbmd1YWdlIGdvYWwgdG8gZmlsbCBhbnkgR0FQUyAoYmVzdC1lZmZvcnQpLlxuICAgICAgICBsZXQgdGFyZ2V0OiBUYXJnZXRJZCB8IHVuZGVmaW5lZCA9IGlzVGFyZ2V0SWQob3B0aW9ucy50YXJnZXQpID8gb3B0aW9ucy50YXJnZXQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChvcHRpb25zLnByb21wdCkge1xuICAgICAgICAgIGlmIChpc0FpQ29uZmlndXJlZChhaU9wdHMpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBwYXJzZUdvYWwob3B0aW9ucy5wcm9tcHQsIGFpT3B0cyk7XG4gICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgIGlmICghdGFyZ2V0ICYmIGlzVGFyZ2V0SWQocGFyc2VkLnRhcmdldCkpIHRhcmdldCA9IHBhcnNlZC50YXJnZXQ7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoayAhPT0gJ3RhcmdldCcgJiYgcGFyYW1zW2tdID09PSB1bmRlZmluZWQgJiYgdiAhPT0gdW5kZWZpbmVkKSBwYXJhbXNba10gPSB2O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQSAtLXByb21wdCB3YXMgZ2l2ZW4gYnV0IG5vIEFJIGtleSBpcyBzZXQg4oCUIGlnbm9yaW5nIGl0IGFuZCB1c2luZyBmbGFncyBvbmx5LiBTZXQgQU5USFJPUElDX0FQSV9LRVkgKG9yIC0tYWktcHJvdmlkZXIgKyBpdHMga2V5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBPcHRpb25hbCBmYWlsdXJlIGRpYWdub3NpcyAoaW5kZXBlbmRlbnQgb2YgYSBkZXBsb3kgcGxhbikuXG4gICAgICAgIGlmIChvcHRpb25zLmRpYWdub3NlKSB7XG4gICAgICAgICAgbGV0IGZhaWx1cmVUZXh0OiBzdHJpbmc7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZhaWx1cmVUZXh0ID0gcmVhZEZpbGVTeW5jKG9wdGlvbnMuZGlhZ25vc2UsICd1dGYtOCcpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcHJpbnRFcnJvcihgQ2Fubm90IHJlYWQgLS1kaWFnbm9zZSBmaWxlOiAke29wdGlvbnMuZGlhZ25vc2V9YCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZGlhZ25vc2lzID0gaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSA/IGF3YWl0IGRpYWdub3NlRmFpbHVyZShmYWlsdXJlVGV4dCwgYWlPcHRzKSA6IG51bGw7XG4gICAgICAgICAgLy8gV2l0aCAtLWpzb24sIHRoZSBkaWFnbm9zaXMgSVMgdGhlIG1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IOKAlCBlbWl0IGl0XG4gICAgICAgICAgLy8gYWxvbmUgKGRvbid0IGFsc28gcHJpbnQgdGV4dCwgd2hpY2ggd291bGQgY29ycnVwdCB0aGUgSlNPTiBzdHJlYW0pLlxuICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZXhlY3V0aW9uSWQsIGRpYWdub3NpcyB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkaWFnbm9zaXMpIHtcbiAgICAgICAgICAgIHByaW50U2VjdGlvbignRmFpbHVyZSBkaWFnbm9zaXMnKTtcbiAgICAgICAgICAgIHByaW50SW5mbyhkaWFnbm9zaXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0RpYWdub3NpcyB1bmF2YWlsYWJsZSAobm8gQUkga2V5IGNvbmZpZ3VyZWQgb3IgdGhlIG1vZGVsIGNvdWxkIG5vdCBiZSByZWFjaGVkKS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0YXJnZXQpIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuIE5lZWQgYSB0YXJnZXQgdG8gYXNzZW1ibGUgYSBwbGFuLlxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYE5vIHRhcmdldCBzcGVjaWZpZWQuIFBhc3MgLS10YXJnZXQgPCR7VEFSR0VUX0lEUy5qb2luKCd8Jyl9PiBvciBkZXNjcmliZSB0aGUgZ29hbCB3aXRoIC0tcHJvbXB0LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWMgPSBUQVJHRVRTW3RhcmdldF07XG4gICAgICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgICAgIC8vIDRiLiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcuIEdhdGVkIGhhcmRlclxuICAgICAgICAvLyB0aGFuIGRlcGxveTogQVdTIHRhcmdldHMgYXJlIGlycmV2ZXJzaWJsZSwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG9cbiAgICAgICAgLy8gVFlQRSB0aGUgdGFyZ2V0IGlkICgtLWZvcmNlIGJ5cGFzc2VzIGZvciBDSTsgLS15ZXMgYWxvbmUgZG9lcyBOT1QpLlxuICAgICAgICBpZiAob3B0aW9ucy50ZWFyZG93bikge1xuICAgICAgICAgIGNvbnN0IHsgY29tbWFuZDogZG93bkNvbW1hbmQsIGRlc3RydWN0aXZlIH0gPSB0ZWFyZG93bkNvbW1hbmQodGFyZ2V0LCB7XG4gICAgICAgICAgICBzdGFja05hbWU6IG9wdGlvbnMuc3RhY2tOYW1lLFxuICAgICAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICAgIC8vIE91ciB0eXBlZCBnYXRlIElTIHRoZSBjb25maXJtYXRpb24g4oCUIGZvcndhcmQgLS15ZXMgc28gdGhlIG5hdGl2ZVxuICAgICAgICAgICAgLy8gc2NyaXB0IChGYXJnYXRlKSBkb2Vzbid0IGFsc28gYmxvY2sgb24gc3RkaW4gd2UncmUgaW5oZXJpdGluZy5cbiAgICAgICAgICAgIGFzc3VtZVllczogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZXhlY3V0aW9uSWQsIHRhcmdldCwgdGVhcmRvd246IHRydWUsIGRlc3RydWN0aXZlLCBkZXN0cm95czogc3BlYy5kZXN0cm95cywgY29tbWFuZDogZG93bkNvbW1hbmQgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByaW50U2VjdGlvbihgVGVhcmRvd24gcGxhbiDigJQgJHtzcGVjLmxhYmVsfWApO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnRGVzdHJveXMnOiBzcGVjLmRlc3Ryb3lzLCAnU3RvcHMgY29zdCc6IHNwZWMuY29zdCB9KTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGRvd25Db21tYW5kKTtcblxuICAgICAgICAgIGlmICghb3B0aW9ucy5leGVjdXRlKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ1xcbkFkdmlzb3IgbW9kZSDigJQgbm90aGluZyB3YXMgZXhlY3V0ZWQuIFJlLXJ1biB3aXRoIC0tZXhlY3V0ZSB0byB0ZWFyIGRvd24uJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlc3RydWN0aXZlICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGFzayhgXFxuVGhpcyBpcyBJUlJFVkVSU0lCTEUuIFR5cGUgXCIke3RhcmdldH1cIiB0byBjb25maXJtIHRlYXJkb3duOiBgKTtcbiAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgIHByaW50V2FybmluZygnVGhhdCBkaWRuXFwndCBtYXRjaCwgc28gbm90aGluZyB3YXMgZGVzdHJveWVkIOKAlCB5b3UgaGF2ZSB0byB0eXBlIHRoZSBleGFjdCB0YXJnZXQgaWQgdG8gY29uZmlybS4nKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIWRlc3RydWN0aXZlICYmICFvcHRpb25zLmZvcmNlICYmICEoYXdhaXQgY29uZmlybSgnXFxuUHJvY2VlZCB3aXRoIHRlYXJkb3duIChzdG9wcyB0aGUgc3RhY2s7IG9uLWRpc2sgZGF0YSBwZXJzaXN0cyk/Jywgb3B0aW9ucy55ZXMpKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByaW50U2VjdGlvbignVGVhcmluZyBkb3duJyk7XG4gICAgICAgICAgY29uc3QgeyBjb2RlOiBkb3duQ29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGRvd25Db21tYW5kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICAgICAgaWYgKGRvd25Db2RlICE9PSAwKSB7XG4gICAgICAgICAgICBwcmludEVycm9yKGBcXG5UZWFyZG93biBmYWlsZWQgKGV4aXQgJHtkb3duQ29kZX0pLiBJbnNwZWN0IHRoZSBzdGFjay9jb250YWluZXJzIGFuZCByZXRyeS5gKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1RlYXJkb3duIGNvbXBsZXRlLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2UgcHJldmlvdXNseS1mZXRjaGVkIHNpbmdsZS1iaW5hcnkgdG9vbHMgKGUuZy4geXEpIHZpc2libGUgdG8gdGhlXG4gICAgICAgIC8vIHByZXJlcSBjaGVja3MgKyB0aGUgZGVwbG95IOKAlCB0aGV5IGxpdmUgaW4gdGhlIHRvb2xzIGNhY2hlLCBub3Qgb24gdGhlXG4gICAgICAgIC8vIHN5c3RlbSBQQVRILiAoQm90aCBgaGFzKClgIGFuZCB0aGUgZGVwbG95J3MgYGJhc2ggLWxjYCBpbmhlcml0IHRoaXMuKVxuICAgICAgICB3aXRoVG9vbHNPblBhdGgoKTtcbiAgICAgICAgbGV0IHByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgIGNvbnN0IHsgY29tbWFuZCwgbWlzc2luZyB9ID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHVybCA9IGRlcml2ZUhlYWx0aFVybCh0YXJnZXQsIHBhcmFtcyk7XG5cbiAgICAgICAgLy8gU3BhcnNlIGJvb3RzdHJhcCBjbG9uZSBjb21tYW5kIChjb21tb24gYmFzZSArIHRhcmdldCArIHNlbGVjdGVkIGxvYWRzKS5cbiAgICAgICAgY29uc3Qgc3BhcnNlUGF0aHMgPSBzcGFyc2VQYXRoc0Zvcih0YXJnZXQsIGVuYWJsZWRMb2FkSWRzKTtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwID0gcmVzb2x2ZUJvb3RzdHJhcChcbiAgICAgICAgICB7IHJlcG86IHR5cGVvZiBvcHRpb25zLnJlcG8gPT09ICdzdHJpbmcnID8gb3B0aW9ucy5yZXBvIDogdW5kZWZpbmVkLCByZWY6IG9wdGlvbnMucmVmLCB3b3JrZGlyOiBvcHRpb25zLndvcmtkaXIsIGZ1bGw6ICFnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0KCkgfSxcbiAgICAgICAgICBzcGFyc2VQYXRocyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwQ21kID0gd2FudEJvb3RzdHJhcCA/IGJvb3RzdHJhcENvbW1hbmQoYm9vdHN0cmFwKSA6IG51bGw7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIOKGkiBzbW9rZSDihpIgZXZlbnRzIOKGkiBjdXN0b20pLlxuICAgICAgICBjb25zdCB7IHN0ZXBzOiBwb3N0U3RlcHMsIHNraXBwZWQ6IHNraXBwZWRTdGVwcyB9ID0gcmVzb2x2ZVBvc3RTdGVwcyh7XG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZWdpb246IHR5cGVvZiBwYXJhbXMucmVnaW9uID09PSAnc3RyaW5nJyA/IHBhcmFtcy5yZWdpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMsXG4gICAgICAgICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHByZXJlcXMsXG4gICAgICAgICAgICBwcmVyZXFzU2F0aXNmaWVkOiBwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpLFxuICAgICAgICAgICAgbWlzc2luZ0lucHV0czogbWlzc2luZy5tYXAoKG0pID0+ICh7IGZsYWc6IG0uZmxhZywgZGVzY3JpcHRpb246IG0uZGVzY3JpcHRpb24gfSkpLFxuICAgICAgICAgICAgYm9vdHN0cmFwOiBib290c3RyYXBDbWQsXG4gICAgICAgICAgICBzcGFyc2VQYXRoczogd2FudEJvb3RzdHJhcCA/IHNwYXJzZVBhdGhzIDogbnVsbCxcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBwb3N0U3RlcHM6IHBvc3RTdGVwcy5tYXAoKHMpID0+ICh7IGlkOiBzLmlkLCBsYWJlbDogcy5sYWJlbCwgY29tbWFuZDogcy5jb21tYW5kIH0pKSxcbiAgICAgICAgICAgIHNraXBwZWRQb3N0U3RlcHM6IHNraXBwZWRTdGVwcyxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gUHJpbnQgdGhlIHBsYW4gKHNoYXJlZCBieSBhZHZpc29yICsgZXhlY3V0ZSkuXG4gICAgICAgIHByaW50U2VjdGlvbihgUHJvdmlzaW9uIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdCZXN0IGZvcic6IHNwZWMuYmVzdEZvciwgJ0Nvc3QnOiBzcGVjLmNvc3QgfSk7XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdQcmVyZXF1aXNpdGVzJyk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBwcmVyZXFzKSBwcmludEluZm8oYCR7Yy5vayA/ICfinJMnIDogJ+Kclyd9ICR7Yy5uYW1lfSDigJQgJHtjLmRldGFpbH1gKTtcbiAgICAgICAgaWYgKCFwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpKSBwcmludFdhcm5pbmcoJ1Jlc29sdmUgdGhlIGZhaWxpbmcgcHJlcmVxdWlzaXRlcyBhYm92ZSBiZWZvcmUgZGVwbG95aW5nLicpO1xuXG4gICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ01pc3NpbmcgcmVxdWlyZWQgaW5wdXRzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1pc3NpbmcpIHByaW50SW5mbyhgICAtLSR7bS5mbGFnfSAgKCR7bS5kZXNjcmlwdGlvbn0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAgKHNwYXJzZSBnaXQgY2xvbmUsIHJ1bnMgZmlyc3QpJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGBDbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0g4oaSICR7Ym9vdHN0cmFwLndvcmtkaXJ9OyBmb2xkZXJzOiAke3NwYXJzZVBhdGhzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgICAgcHJpbnRJbmZvKGJvb3RzdHJhcENtZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gICAgICAgIHByaW50SW5mbyhjb21tYW5kKTtcblxuICAgICAgICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA+IDAgfHwgc2tpcHBlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1Bvc3QtaW5zdGFsbCBzdGVwcycpO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBwb3N0U3RlcHMpIHByaW50SW5mbyhg4oCiICR7cy5sYWJlbH1cXG4gICAgJHtzLmNvbW1hbmR9YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHNraXBwZWRTdGVwcykgcHJpbnRXYXJuaW5nKGBza2lwcGVkICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBBZHZpc29yIG1vZGUgKGRlZmF1bHQpIOKAlCBzdG9wIGhlcmUsIG5vdGhpbmcgZXhlY3V0ZWQuXG4gICAgICAgIGlmICghb3B0aW9ucy5leGVjdXRlKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdcXG5BZHZpc29yIG1vZGUg4oCUIG5vdGhpbmcgd2FzIGV4ZWN1dGVkLiBSZS1ydW4gd2l0aCAtLWV4ZWN1dGUgdG8gZGVwbG95IChnYXRlZCBieSBhcHByb3ZhbCkuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNy4gQW55IG1pc3NpbmcgcmVxdWlyZWQgcHJlcmVxIHRoYXQncyBhIHNpbmdsZSBzdGF0aWMgYmluYXJ5IChlLmcuIHlxKVxuICAgICAgICAvLyBjYW4gYmUgZmV0Y2hlZCBpbnRvIHRoZSB0b29scyBjYWNoZSBpbnN0ZWFkIG9mIGEgc3lzdGVtIGluc3RhbGwg4oCUIG5vXG4gICAgICAgIC8vIGJyZXcvYXB0LiBPZmZlciBpdCwgdGhlbiByZS1jaGVjayAodGhlIGNhY2hlIGRpciBpcyBhbHJlYWR5IG9uIFBBVEgpLlxuICAgICAgICBjb25zdCBmZXRjaGFibGUgPSBwcmVyZXFzLmZpbHRlcigoYykgPT4gIWMub2sgJiYgYy5yZXF1aXJlZCAmJiBpc0ZldGNoYWJsZShjLm5hbWUpKTtcbiAgICAgICAgaWYgKGZldGNoYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbmFtZXMgPSBmZXRjaGFibGUubWFwKChjKSA9PiBjLm5hbWUpLmpvaW4oJywgJyk7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7bmFtZXN9IG5vdCBpbnN0YWxsZWQg4oCUIGZldGNoIHRoZSBvZmZpY2lhbCBzdGF0aWMgYmluYXJ5IGludG8gJHtUT09MU19ESVJ9IChubyBzeXN0ZW0gaW5zdGFsbCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgZmV0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgIHByaW50SW5mbyhgRmV0Y2hpbmcgJHtjLm5hbWV94oCmYCk7XG4gICAgICAgICAgICAgIGlmICghZmV0Y2hUb29sKGMubmFtZSkpIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHtjLm5hbWV9IOKAlCBpbnN0YWxsIGl0IG1hbnVhbGx5IGFuZCByZS1ydW4uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdiLiBHYXRlZCBleGVjdXRpb24uIENoZWNrIHByZXJlcXMgLyByZXF1aXJlZCBpbnB1dHMgZmlyc3Qg4oCUIHRoaXMgYWxzb1xuICAgICAgICAvLyBjYXRjaGVzIGEgbWlzc2luZyBgZ2l0YCB3aGVuIGJvb3RzdHJhcHBpbmcuXG4gICAgICAgIGNvbnN0IGJsb2NrZWQgPSBleGVjdXRpb25CbG9ja2VkKHByZXJlcXMsIG1pc3NpbmcpO1xuICAgICAgICBpZiAoYmxvY2tlZCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYENhbid0IHN0YXJ0IGp1c3QgeWV0IOKAlCAke2Jsb2NrZWR9LiBSZXNvbHZlIHRoYXQgYW5kIHJlLXJ1bi5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3YS4gU3BhcnNlLWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvLCByZXBvaW50IGN3ZCwgYW5kIHZlcmlmeSB0aGUgdHJlZS5cbiAgICAgICAgLy8gU2hhcmVkIGJ5IGAtLXJlcG9gIChiZWxvdykgYW5kIHRoZSBpbnRlcmFjdGl2ZSBvZmZlciBpbiA3Yi4gUmV0dXJuc1xuICAgICAgICAvLyBmYWxzZSAoYW5kIHNldHMgZXhpdENvZGUpIG9uIGZhaWx1cmUg4oCUIHdpdGggYSBmcmllbmRseSBtZXNzYWdlLlxuICAgICAgICBjb25zdCBib290c3RyYXBDbG9uZSA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgICAgICBjb25zdCBjbWQgPSBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCk7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAnKTtcbiAgICAgICAgICBwcmludEluZm8oY21kKTtcbiAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChjbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIGNsb25lIGRpZG4ndCBmaW5pc2ggKGV4aXQgJHtjb2RlfSkuIERvdWJsZS1jaGVjayB0aGUgcmVwbyBVUkwgLyByZWYgKG9yIHlvdXIgbmV0d29yaykgYW5kIGdpdmUgaXQgYW5vdGhlciBnby5gKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjd2QgPSBwYXRoLnJlc29sdmUoY3dkLCBib290c3RyYXAud29ya2Rpcik7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKGBSZXBvIGlzIHJlYWR5IOKAlCBjb250aW51aW5nIGZyb20gJHtjd2R9YCk7XG4gICAgICAgICAgY29uc3QgYWJzZW50ID0gc3BhcnNlUGF0aHMuZmlsdGVyKChwKSA9PiAhZXhpc3RzU3luYyhwYXRoLmpvaW4oY3dkLCBwKSkpO1xuICAgICAgICAgIGlmIChhYnNlbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIHNwYXJzZSBjbG9uZSBpcyBtaXNzaW5nICR7YWJzZW50LmpvaW4oJywgJyl9IOKAlCB0aGF0IHJlZiBtYXkgbm90IGhhdmUgdGhvc2UgZm9sZGVycy4gVHJ5IGEgZGlmZmVyZW50IC0tcmVmLmApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGAtLXJlcG9gOiBjbG9uZSB1cCBmcm9udCAobXVzdCBwcmVjZWRlIHRoZSBlbnRyeXBvaW50IGNoZWNrKS5cbiAgICAgICAgaWYgKGJvb3RzdHJhcENtZCkge1xuICAgICAgICAgIHByaW50SW5mbyhgXFxuQm9vdHN0cmFwIOKGkiBjbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0gaW50byAke2Jvb3RzdHJhcC53b3JrZGlyfSAoc3BhcnNlKS5gKTtcbiAgICAgICAgICBpZiAoIShhd2FpdCBjb25maXJtKCdHbyBhaGVhZCB3aXRoIHRoZSBjbG9uZT8nLCBvcHRpb25zLnllcykpKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuIFJlLXJ1biB3aGVuZXZlciB5b3VcXCdyZSByZWFkeS4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEoYXdhaXQgYm9vdHN0cmFwQ2xvbmUoKSkpIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdiLiBUaGUgZGVwbG95IGVudHJ5cG9pbnQgbXVzdCBleGlzdCByZWxhdGl2ZSB0byBjd2QuIElmIGl0IGRvZXNuJ3QgYW5kXG4gICAgICAgIC8vIHdlIGhhdmVuJ3QgYm9vdHN0cmFwcGVkLCBncmFjZWZ1bGx5IE9GRkVSIHRvIGNsb25lIChpbnRlcmFjdGl2ZSBvbmx5KSxcbiAgICAgICAgLy8gc28gYSBmcmVzaCBtYWNoaW5lIGNhbiBwcm9jZWVkIHdpdGhvdXQgcmUtcnVubmluZyB3aXRoIC0tcmVwby5cbiAgICAgICAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZSA9IEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIW9wdGlvbnMueWVzO1xuICAgICAgICAgIGlmICghYm9vdHN0cmFwQ21kICYmIGludGVyYWN0aXZlICYmIGdpdEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICBwcmludEluZm8oYFxcbkxvb2tzIGxpa2UgeW91J3JlIG5vdCBpbnNpZGUgYSBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0LCBzbyB0aGUgJHtzcGVjLmxhYmVsfSBkZXBsb3kgc2NyaXB0cyBhcmVuJ3QgaGVyZSB5ZXQuYCk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgY29uZmlybShgV2FudCBtZSB0byBzcGFyc2UtY2xvbmUgdGhlbSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IGFuZCBrZWVwIGdvaW5nP2AsIGZhbHNlKSkge1xuICAgICAgICAgICAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGBcXG5JIGNvdWxkbid0IGZpbmQgJHtzcGVjLmRpcn0vJHtzcGVjLmVudHJ5cG9pbnR9IGZyb20gJHtjd2R9LmApO1xuICAgICAgICAgICAgcHJpbnRJbmZvKCdUd28gZWFzeSB3YXlzIGZvcndhcmQ6Jyk7XG4gICAgICAgICAgICBwcmludEluZm8oJyAg4oCiIGNkIGludG8geW91ciBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0IGFuZCByZS1ydW4sIG9yJyk7XG4gICAgICAgICAgICBwcmludEluZm8oYCAg4oCiIGFkZCAtLXJlcG8gYW5kIEknbGwgYm9vdHN0cmFwIGEgZnJlc2ggc3BhcnNlIGNsb25lIGZvciB5b3Uke2dpdEF2YWlsYWJsZSgpID8gJy4nIDogJyAob25jZSBnaXQgaXMgaW5zdGFsbGVkKS4nfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGxvY2FsL21pbmlrdWJlJ3Mgc2V0dXAuc2ggUkVRVUlSRVMgYSBgLmVudmAgYW5kIGFib3J0cyB3aXRob3V0IGl0IOKAlCBjcmVhdGVcbiAgICAgICAgLy8gaXQgZnJvbSAuZW52LmV4YW1wbGUgd2l0aCBnZW5lcmF0ZWQgc2VjcmV0cyBzbyB0aGUgZGVwbG95IGlzIG5vbi1pbnRlcmFjdGl2ZS5cbiAgICAgICAgLy8gZWMyL2ZhcmdhdGUgYWxzbyBzaGlwIGEgYC5lbnYuZXhhbXBsZWAsIGJ1dCB0aGVpciBzZXR1cC5zaCBuZXZlciByZWFkcyBhXG4gICAgICAgIC8vIGxvY2FsIGAuZW52YCAodGhlIGluc3RhbmNlIGhhbmRsZXMgaXRzIG93bjsgRmFyZ2F0ZSB1c2VzIFNlY3JldHMgTWFuYWdlciB2aWFcbiAgICAgICAgLy8gaW5pdC1zZWNyZXRzLnNoKSwgc28gd2UgbXVzdCBOT1QgZ2VuZXJhdGUgb25lIGZvciB0aGVtLlxuICAgICAgICBpZiAoKHRhcmdldCA9PT0gJ2xvY2FsJyB8fCB0YXJnZXQgPT09ICdtaW5pa3ViZScpICYmIGVudkZpbGVNaXNzaW5nKGN3ZCwgc3BlYy5kaXIpKSB7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7c3BlYy5kaXJ9Ly5lbnYgbm90IGZvdW5kIOKAlCBjcmVhdGUgaXQgZnJvbSAuZW52LmV4YW1wbGUgKGdlbmVyYXRlcyBzZWNyZXRzOyBlZGl0IGxhdGVyIGZvciBvcHRpb25hbCBpbnRlZ3JhdGlvbnMgbGlrZSBPQXV0aCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gY3JlYXRlRW52RmlsZShjd2QsIHNwZWMuZGlyKTtcbiAgICAgICAgICAgIHByaW50U3VjY2VzcyhgQ3JlYXRlZCAke3NwZWMuZGlyfS8uZW52IOKAlCAke259IHNlY3JldChzKSBnZW5lcmF0ZWQuYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQ29udGludWluZyB3aXRob3V0IC5lbnYg4oCUIHNldHVwLnNoIHdpbGwgYWJvcnQgaWYgaXQgc3RheXMgbWlzc2luZy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybSgnXFxuUHJvY2VlZCB3aXRoIHRoaXMgZGVwbG95PycsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2MuIFJ1biB0aGUgZGVwbG95IG91dC1vZi1sb29wIChyZWFsIGNvbW1hbmQsIHNlY3JldHMgdW5tYXNrZWQsIHN0cmVhbWVkICtcbiAgICAgICAgLy8gY2FwdHVyZWQpLCB3aXRoIGEgYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3Ag4oCUIHRoZSBkZXBsb3kgc2NyaXB0cyBhcmVcbiAgICAgICAgLy8gaWRlbXBvdGVudCwgc28gYSBmaXhlZCByZS1ydW4gcmVzdW1lcyByYXRoZXIgdGhhbiBzdGFydGluZyBvdmVyLlxuICAgICAgICBjb25zdCBtYXhBdHRlbXB0cyA9IDEgKyBNYXRoLm1heCgwLCBwYXJzZUludChvcHRpb25zLnJldHJpZXMsIDEwKSB8fCAwKTtcbiAgICAgICAgbGV0IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBwYXJhbXM7XG4gICAgICAgIGxldCBzdWNjZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgICAgICAgIGNvbnN0IHJlYWxDb21tYW5kID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHJ1blBhcmFtcywgeyBtYXNrOiBmYWxzZSB9KS5jb21tYW5kO1xuICAgICAgICAgIHByaW50U2VjdGlvbihhdHRlbXB0ID09PSAxID8gJ0RlcGxveWluZycgOiBgRGVwbG95aW5nIOKAlCByZXRyeSAke2F0dGVtcHQgLSAxfWApO1xuICAgICAgICAgIGlmIChhdHRlbXB0ID09PSAxKSB7XG4gICAgICAgICAgICBwcmludEluZm8oYERlcGxveWluZyAke3NwZWMubGFiZWx9IOKGkiAke3VybH1gKTtcbiAgICAgICAgICAgIHByaW50SW5mbyhzcGVjLmRlcGxveXMpO1xuICAgICAgICAgICAgcHJpbnRJbmZvKCdTdHJlYW1pbmcgdGhlIGRlcGxveSBiZWxvdyDigJQgZmlyc3QgcnVuIGlzIHRoZSBzbG93IG9uZSAoaW1hZ2UgcHVsbHMgKyBjZXJ0IGdlbmVyYXRpb24pLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChyZWFsQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDApIHsgc3VjY2VlZGVkID0gdHJ1ZTsgYnJlYWs7IH1cblxuICAgICAgICAgIHByaW50RXJyb3IoYFxcbkRlcGxveSBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuYCk7XG4gICAgICAgICAgY29uc3QgaXNzdWVzID0gbWF0Y2hJc3N1ZXModGFpbCk7XG4gICAgICAgICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0xpa2VseSBjYXVzZScpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGlzc3VlcykgcHJpbnRJbmZvKGDigKIgJHtpLmNhdXNlfVxcbiAg4oaSICR7aS5zdWdnZXN0aW9ufWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgZGlhZ25vc2lzID0gYXdhaXQgZGlhZ25vc2VGYWlsdXJlKHJlZGFjdFNlY3JldHModGFpbCwgc3BlYywgcnVuUGFyYW1zKSwgYWlPcHRzKTtcbiAgICAgICAgICAgIGlmIChkaWFnbm9zaXMpIHsgcHJpbnRTZWN0aW9uKCdEaWFnbm9zaXMnKTsgcHJpbnRJbmZvKGRpYWdub3Npcyk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIGJyZWFrO1xuXG4gICAgICAgICAgLy8gQXV0by1maXg6IGEgcmV0cnlhYmxlIGlzc3VlIHdpdGggYSBwYXJhbSB3ZSBoYXZlbid0IGFscmVhZHkgYXBwbGllZC5cbiAgICAgICAgICBjb25zdCBmaXggPSBpc3N1ZXMuZmluZCgoaSkgPT4gaS5yZXRyeWFibGUgJiYgaS5wYXJhbUZpeCAmJiBydW5QYXJhbXNbaS5wYXJhbUZpeC5rZXldICE9PSBpLnBhcmFtRml4LnZhbHVlKTtcbiAgICAgICAgICBpZiAoZml4Py5wYXJhbUZpeCAmJiBhd2FpdCBjb25maXJtKGBcXG5BcHBseSBmaXggYW5kIHJldHJ5IOKAlCAke2ZpeC5zdWdnZXN0aW9ufWAsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgcnVuUGFyYW1zID0geyAuLi5ydW5QYXJhbXMsIFtmaXgucGFyYW1GaXgua2V5XTogZml4LnBhcmFtRml4LnZhbHVlIH07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmV0cnlhYmxlIGJ1dCBubyBwYXJhbSBjaGFuZ2UgKGUuZy4gQUNNIEROUyBwcm9wYWdhdGlvbikg4oCUIG9mZmVyIGEgcGxhaW4gcmUtcnVuLlxuICAgICAgICAgIGlmICghZml4ICYmIGlzc3Vlcy5zb21lKChpKSA9PiBpLnJldHJ5YWJsZSkgJiYgYXdhaXQgY29uZmlybSgnXFxuUmV0cnkgdGhlIGRlcGxveSAoaXQgaXMgaWRlbXBvdGVudCBhbmQgd2lsbCByZXN1bWUpPycsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3VjY2VlZGVkKSB7IHByb2Nlc3MuZXhpdENvZGUgPSAxOyByZXR1cm47IH1cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdEZXBsb3kgY29tbWFuZCBjb21wbGV0ZWQuJyk7XG5cbiAgICAgICAgLy8gN2QuIFNFUyBwb3N0LWRlcGxveSBndWlkYW5jZSAoYXN5bmMgREtJTSArIHNhbmRib3ggKyBib3VuY2UgdG9waWMpLlxuICAgICAgICAvLyBTRVMgaXMgcHJvdmlzaW9uZWQgQlkgREVGQVVMVCBvbiBBV1MgZGVwbG95cywgc28gc3VyZmFjZSB0aGUgZ3VpZGFuY2VcbiAgICAgICAgLy8gZm9yIGVjMi9mYXJnYXRlIHVubGVzcyB0aGUgb3BlcmF0b3Igb3B0ZWQgb3V0IHdpdGggLS1uby1lbWFpbC5cbiAgICAgICAgY29uc3Qgc2VzUHJvdmlzaW9uZWQgPSAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdmYXJnYXRlJykgJiYgcnVuUGFyYW1zLm5vRW1haWwgIT09IHRydWU7XG4gICAgICAgIGlmIChzZXNQcm92aXNpb25lZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignU0VTIOKAlCBuZXh0IHN0ZXBzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHNlc1Bvc3REZXBsb3lHdWlkYW5jZSgpKSBwcmludEluZm8oYOKAoiAke2xpbmV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3ZS4gVmVyaWZ5IGhlYWx0aCAoQ1JFQVRFX0NPTVBMRVRFICE9IHNlcnZpbmcpLlxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdWZXJpZnlpbmcgaGVhbHRoJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGBQb2xsaW5nICR7dXJsfS9oZWFsdGgg4oCmYCk7XG4gICAgICAgICAgY29uc3QgaGVhbHRoID0gYXdhaXQgd2FpdEhlYWx0aHkodXJsLCB7IG9uVGljazogKG0pID0+IHByaW50SW5mbyhtKSB9KTtcbiAgICAgICAgICAoaGVhbHRoLmhlYWx0aHkgPyBwcmludFN1Y2Nlc3MgOiBwcmludFdhcm5pbmcpKGAke2hlYWx0aC51cmx9IOKAlCAke2hlYWx0aC5kZXRhaWx9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Zi4gUG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciArIG9wdC1pbiBsb2Fkcywgc21va2UgdGVzdCwgZXZlbnRzLCBjdXN0b20pLlxuICAgICAgICAvLyByZWdpc3RlciBydW5zIGluaXQtcGxhdGZvcm07IGZvciBFQzIvRmFyZ2F0ZSBpdCBtdXN0IHJ1biBmcm9tIGluc2lkZSB0aGVcbiAgICAgICAgLy8gVlBDLCBzbyB3ZSBzdXJmYWNlIHRoZSBjb21tYW5kIHRoZXJlIGluc3RlYWQgb2YgZXhlY3V0aW5nIGl0IGxvY2FsbHkuXG4gICAgICAgIGlmIChwb3N0U3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCBwb3N0LXN0ZXAgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgICAgICAgICBjb25zdCBpc1JlbW90ZVJlZ2lzdGVyID0gKGlkOiBzdHJpbmcpOiBib29sZWFuID0+IGlkID09PSAncmVnaXN0ZXInICYmICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2ZhcmdhdGUnKTtcbiAgICAgICAgICBjb25zdCBydW5uYWJsZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+ICFpc1JlbW90ZVJlZ2lzdGVyKHMuaWQpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcG9zdFN0ZXBzKSB7XG4gICAgICAgICAgICBpZiAoaXNSZW1vdGVSZWdpc3RlcihzLmlkKSkge1xuICAgICAgICAgICAgICBwcmludEluZm8oJ1xcbk5leHQgKHJ1biBmcm9tIGluc2lkZSB0aGUgVlBDKTogcmVnaXN0ZXIgYWRtaW4gKyBsb2FkIHBsdWdpbnMg4oCUJyk7XG4gICAgICAgICAgICAgIHByaW50SW5mbyhgICAke3MuY29tbWFuZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJ1bm5hYmxlLmxlbmd0aCA+IDAgJiYgYXdhaXQgY29uZmlybShgXFxuUnVuICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSBub3c/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcnVubmFibGUpIHtcbiAgICAgICAgICAgICAgcHJpbnRTZWN0aW9uKGBQb3N0LXN0ZXA6ICR7cy5sYWJlbH1gKTtcbiAgICAgICAgICAgICAgLy8gU3RlcHMgdGhhdCBsb2cgaW50byB0aGUgcGxhdGZvcm0gKHJlZ2lzdGVyICsgc3RvcmUtdG9rZW4pIG5lZWQgdGhlXG4gICAgICAgICAgICAgIC8vIGFkbWluIGNyZWRzIChQTEFURk9STV9JREVOVElGSUVSIC8gUExBVEZPUk1fUEFTU1dPUkQpIG9uIHRvcCBvZiB0aGVpclxuICAgICAgICAgICAgICAvLyBvd24gc3RlcCBlbnYuIHNldHVwLWV2ZW50cyBkb2VzIE5PVCBsb2cgaW4g4oCUIGl0IHJlYWRzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FLFxuICAgICAgICAgICAgICAvLyBBV1MgY3JlZHMsIGFuZCB0aGUgcmVnaW9uIGZyb20gdGhlIEFXUyBlbnZpcm9ubWVudCDigJQgc28gaXQncyBleGNsdWRlZC5cbiAgICAgICAgICAgICAgY29uc3QgbmVlZHNDcmVkcyA9IHMuaWQgPT09ICdyZWdpc3RlcicgfHwgcy5pZCA9PT0gJ3N0b3JlLXRva2VuJztcbiAgICAgICAgICAgICAgY29uc3QgZW52ID0gbmVlZHNDcmVkcyA/IHsgLi4ucy5lbnYsIC4uLmFkbWluRW52IH0gOiBzLmVudjtcbiAgICAgICAgICAgICAgLy8gVGhlc2Ugc3RlcHMgKHBsdWdpbi9zYW1wbGUvY29tcGxpYW5jZSBsb2Fkcywgc21va2UsIGV2ZW50cykgYXJlIG5vaXN5XG4gICAgICAgICAgICAgIC8vIGFuZCBub24taW50ZXJhY3RpdmUsIHNvIHJ1biB0aGVtIFFVSUVUTFkg4oCUIGNhcHR1cmUgdGhlIG91dHB1dCBhbmQgb25seVxuICAgICAgICAgICAgICAvLyBzdXJmYWNlIGl0IG9uIGZhaWx1cmUuIFRoZSBleGNlcHRpb24gaXMgYSByZWdpc3RlciB3aXRoIG5vIGFkbWluIGNyZWRzOlxuICAgICAgICAgICAgICAvLyBpbml0LXBsYXRmb3JtLnNoIHByb21wdHMgZm9yIHRoZW0sIHNvIGl0IG11c3Qgc3RyZWFtIHRvIHRoZSB0ZXJtaW5hbC5cbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVSZWdpc3RlciA9IHMuaWQgPT09ICdyZWdpc3RlcicgJiYgIWFkbWluRW52LlBMQVRGT1JNX0lERU5USUZJRVI7XG4gICAgICAgICAgICAgIGNvbnN0IHF1aWV0ID0gIWludGVyYWN0aXZlUmVnaXN0ZXI7XG4gICAgICAgICAgICAgIGlmIChxdWlldCkgcHJpbnRJbmZvKGAke3MuY29tbWFuZH1cXG4gIOKApnJ1bm5pbmcgKG91dHB1dCBzaG93biBvbmx5IGlmIGl0IGZhaWxzKWApO1xuICAgICAgICAgICAgICBlbHNlIHByaW50SW5mbyhzLmNvbW1hbmQpO1xuICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChzLmNvbW1hbmQsIGN3ZCwgeyBxdWlldCwgY2FwdHVyZTogZmFsc2UsIGVudiB9KTtcbiAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocXVpZXQgJiYgdGFpbCkgeyBwcmludEVycm9yKCdcXG4tLS0gbGFzdCBvdXRwdXQgLS0tJyk7IHByaW50SW5mbyh0YWlsKTsgfVxuICAgICAgICAgICAgICAgIHByaW50RXJyb3IoYFxcblBvc3Qtc3RlcCAnJHtzLmlkfScgZmFpbGVkIChleGl0ICR7Y29kZX0pLiBUaGUgcGxhdGZvcm0gaXMgZGVwbG95ZWQ7IGZpeCBhbmQgcmUtcnVuIHRoZSBzdGVwIG1hbnVhbGx5LmApO1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByaW50U3VjY2VzcyhgJHtzLmlkfSDinJNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHJ1bm5hYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByaW50SW5mbygnXFxuU2tpcHBlZCBwb3N0LWluc3RhbGwgc3RlcHMuIFJ1biB0aGUgY29tbWFuZHMgYWJvdmUgbWFudWFsbHkgd2hlbiByZWFkeS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncHJvdmlzaW9uJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
package/package.json CHANGED
@@ -41,8 +41,8 @@
41
41
  "typescript": "6.0.3",
42
42
  "yaml": "2.9.0",
43
43
  "zod": "4.4.3",
44
- "@pipeline-builder/ai-core": "3.4.69",
45
- "@pipeline-builder/pipeline-core": "3.4.75"
44
+ "@pipeline-builder/ai-core": "3.4.70",
45
+ "@pipeline-builder/pipeline-core": "3.4.76"
46
46
  },
47
47
  "keywords": [
48
48
  "aws",
@@ -85,7 +85,7 @@
85
85
  "access": "public",
86
86
  "registry": "https://registry.npmjs.org/"
87
87
  },
88
- "version": "3.4.81",
88
+ "version": "3.4.83",
89
89
  "bugs": {
90
90
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
91
91
  },