@dbx-tools/appkit-mastra 0.6.218 → 0.6.220

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +72 -25
  2. package/index.ts +4 -7
  3. package/lib/index.d.ts +4 -7
  4. package/lib/index.js +4 -5
  5. package/lib/src/agents.d.ts +15 -6
  6. package/lib/src/agents.js +30 -12
  7. package/lib/src/chat.d.ts +7 -0
  8. package/lib/src/chat.js +19 -0
  9. package/lib/src/config.d.ts +2 -2
  10. package/lib/src/config.js +1 -1
  11. package/lib/src/genie.js +5 -4
  12. package/lib/src/memory.d.ts +2 -2
  13. package/lib/src/memory.js +2 -2
  14. package/lib/src/model.d.ts +2 -0
  15. package/lib/src/model.js +7 -1
  16. package/lib/src/plugin.d.ts +1 -1
  17. package/lib/src/plugin.js +3 -31
  18. package/lib/src/processors.d.ts +4 -28
  19. package/lib/src/processors.js +4 -61
  20. package/lib/src/server.d.ts +10 -21
  21. package/lib/src/server.js +52 -28
  22. package/lib/src/serving-sanitize.d.ts +8 -5
  23. package/lib/src/serving-sanitize.js +16 -11
  24. package/lib/src/trace-io.js +7 -3
  25. package/lib/src/writer.d.ts +7 -7
  26. package/lib/src/writer.js +12 -9
  27. package/lib/tsconfig.tsbuildinfo +1 -1
  28. package/package.json +23 -22
  29. package/src/agents.ts +92 -27
  30. package/src/chat.ts +20 -0
  31. package/src/config.ts +5 -2
  32. package/src/genie.ts +7 -11
  33. package/src/memory.ts +8 -8
  34. package/src/model.ts +7 -0
  35. package/src/plugin.ts +2 -30
  36. package/src/processors.ts +4 -66
  37. package/src/server.ts +49 -27
  38. package/src/serving-sanitize.ts +14 -10
  39. package/src/trace-io.ts +7 -2
  40. package/src/writer.ts +15 -11
  41. package/lib/src/history.d.ts +0 -93
  42. package/lib/src/history.js +0 -231
  43. package/lib/src/threads.d.ts +0 -104
  44. package/lib/src/threads.js +0 -264
  45. package/src/history.ts +0 -270
  46. package/src/threads.ts +0 -309
package/lib/src/memory.js CHANGED
@@ -329,7 +329,7 @@ function collectAgentDefinitions(config) {
329
329
  return [];
330
330
  if (Array.isArray(agents))
331
331
  return agents;
332
- if (typeof agents.instructions === "string") {
332
+ if ("instructions" in agents) {
333
333
  return [agents];
334
334
  }
335
335
  return Object.values(agents);
@@ -338,4 +338,4 @@ function collectAgentDefinitions(config) {
338
338
  function withId(value, fallback) {
339
339
  return value.id ? value : { ...value, id: fallback };
340
340
  }
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sSUFBSSxDQUFDO0FBSTNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTNDLGtGQUFrRjtBQUNsRixNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFFaEQsMERBQTBEO0FBQzFELFNBQVMsY0FBYztJQUNyQixPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELHlGQUF5RjtBQUN6RixTQUFTLHlCQUF5QixDQUFDLEdBQVk7SUFDN0MsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMs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O1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3pDLElBQUksT0FBUSxNQUFnQyxDQUFDLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN2RSxPQUFPLENBQUMsTUFBK0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBK0MsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxnRUFBZ0U7QUFDaEUsU0FBUyxNQUFNLENBQTRCLEtBQVEsRUFBRSxRQUFnQjtJQUNuRSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGFrZWJhc2UtYmFja2VkIE1hc3RyYSBtZW1vcnkgd2lyaW5nLlxuICpcbiAqIFByb3ZpZGVzIGEge0BsaW5rIE1lbW9yeUJ1aWxkZXJ9IHRoYXQgbWludHMgb25lIGBNZW1vcnlgIHBlciBhZ2VudFxuICogd2l0aCB0d28gaW5kZXBlbmRlbnQga25vYnM6XG4gKlxuICogLSAqKlN0b3JhZ2UqKiAodGhyZWFkcyAvIG1lc3NhZ2VzIHZpYSBgUG9zdGdyZXNTdG9yZWApOiBkZWZhdWx0cyB0b1xuICogICAqKnBlci1hZ2VudCoqIG5hbWVzcGFjaW5nIHZpYSB7QGxpbmsgYWdlbnRTdG9yYWdlU2NoZW1hTmFtZX0gc29cbiAqICAgY29udmVyc2F0aW9uIGhpc3Rvcnkgc3RheXMgaXNvbGF0ZWQgYmV0d2VlbiBhZ2VudHMgaW4gdGhlIHNhbWVcbiAqICAgZGF0YWJhc2UuIGBQb3N0Z3Jlc1N0b3JlYCBhdXRvLWNyZWF0ZXMgdGhlIHNjaGVtYSB3aXRoXG4gKiAgIGBDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFNgIG9uIGluaXQuIEEgZmFpbGVkIG1pZ3JhdGlvbiAoY29tbW9uIG9uXG4gKiAgIExha2ViYXNlIHdoZW4gdGhlIGNvbm5lY3Rpbmcgcm9sZSBpcyBub3QgdGhlIHRhYmxlIG93bmVyKSBpcyBsb2dnZWRcbiAqICAgYW5kIHNraXBwZWQgdmlhIHtAbGluayB3aXRoU29mdFN0b3JhZ2VJbml0fSBzbyBleGlzdGluZyB0YWJsZXMga2VlcFxuICogICBzZXJ2aW5nIGluc3RlYWQgb2YgcmV0cnlpbmcgRERMIG9uIGV2ZXJ5IHJlcXVlc3QuXG4gKiAtICoqTWVtb3J5KiogKHNlbWFudGljIHJlY2FsbCB2aWEgYFBnVmVjdG9yYCk6IGRlZmF1bHRzIHRvIGEgc2luZ2xlXG4gKiAgICoqc2hhcmVkKiogaW5zdGFuY2UgYWNyb3NzIGV2ZXJ5IGFnZW50LiBDcm9zcy1hZ2VudCByZWNhbGwgb24gb25lXG4gKiAgIGluZGV4IGlzIGFsbW9zdCBhbHdheXMgd2hhdCB1c2VycyB3YW50OyBvcHQgaW50byBwZXItYWdlbnQgcmVjYWxsXG4gKiAgIGJ5IHBhc3NpbmcgYSB7QGxpbmsgTWFzdHJhTWVtb3J5Q29uZmlnT3ZlcnJpZGV9IG9uIHRoZSBhZ2VudC5cbiAqXG4gKiBBZGRpdGlvbmFsbHksIHtAbGluayBNZW1vcnlCdWlsZGVyLmluc3RhbmNlU3RvcmFnZX0gcmV0dXJucyBhXG4gKiAqKk1hc3RyYS1pbnN0YW5jZS1sZXZlbCoqIGBQb3N0Z3Jlc1N0b3JlYCAoc2NoZW1hIGBtYXN0cmFfaW5zdGFuY2VgKVxuICogdXNlZCBmb3Igd29ya2Zsb3cgc25hcHNob3RzIC0gdGhlIHBlcnNpc3RlbmNlIGxheWVyXG4gKiBgYWdlbnQucmVzdW1lU3RyZWFtKClgIHJlYWRzIGZyb20gd2hlbiB3YWtpbmcgYSBzdXNwZW5kZWRcbiAqIGByZXF1aXJlQXBwcm92YWxgIHRvb2wgY2FsbC4gUGVyLWFnZW50IHN0b3JlcyBhcmUgbm90IGVub3VnaCBmb3JcbiAqIHRoaXM6IHdvcmtmbG93IHJ1bnMgYXJlIHNjb3BlZCB0byB0aGUgTWFzdHJhIGluc3RhbmNlLCBub3QgYW5cbiAqIGluZGl2aWR1YWwgYWdlbnQncyBgTWVtb3J5YC5cbiAqXG4gKiBQbHVnaW4tbGV2ZWwgYGNvbmZpZy5zdG9yYWdlYCAvIGBjb25maWcubWVtb3J5YCBhY3QgYXMgdGhlIGJhc2VsaW5lXG4gKiAoYXV0by1kZWZhdWx0ZWQgdG8gYHRydWVgIGluIGBwbHVnaW4udHNgIHdoZW4gdGhlIGBsYWtlYmFzZWAgcGx1Z2luXG4gKiBpcyByZWdpc3RlcmVkKTsgcGVyLWFnZW50IHNldHRpbmdzIGNhc2NhZGUgb24gdG9wIG9mIHRoYXQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdldFVzZXJuYW1lV2l0aEFwaUxvb2t1cCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGVycm9yLCBoYXNoLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZmFzdGVtYmVkIH0gZnJvbSBcIkBtYXN0cmEvZmFzdGVtYmVkXCI7XG5pbXBvcnQgeyBNZW1vcnkgfSBmcm9tIFwiQG1hc3RyYS9tZW1vcnlcIjtcbmltcG9ydCB7IFBnVmVjdG9yLCBQb3N0Z3Jlc1N0b3JlIH0gZnJvbSBcIkBtYXN0cmEvcGdcIjtcbmltcG9ydCB7IFBvb2wsIHR5cGUgUG9vbENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgdHlwZSB7IE1hc3RyYUFnZW50RGVmaW5pdGlvbiwgTWFzdHJhTWVtb3J5Q29uZmlnT3ZlcnJpZGUgfSBmcm9tIFwiLi9hZ2VudHMudHNcIjtcbmltcG9ydCB0eXBlIHsgTWFzdHJhUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBhZ2VudFN0b3JhZ2VTY2hlbWFOYW1lIH0gZnJvbSBcIi4vc3RvcmFnZS1zY2hlbWEudHNcIjtcbmltcG9ydCB7IHN1bW1hcnlNb2RlbCwgVElUTEVfSU5TVFJVQ1RJT05TIH0gZnJvbSBcIi4vc3VtbWFyaXplLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvbWVtb3J5XCIpO1xuXG4vKiogUHJvY2Vzcy13aWRlIGRlZHVwZSBzbyBpbnN0YW5jZSArIHBlci1hZ2VudCBzdG9yZXMgc2hhcmUgb25lIG93bmVyc2hpcCBsb2cuICovXG5jb25zdCBsb2dnZWRNaWdyYXRpb25FcnJvcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuLyoqIFdoZXRoZXIgYExPR19MRVZFTGAgaXMgY3VycmVudGx5IGF0IG9yIGJlbG93IGRlYnVnLiAqL1xuZnVuY3Rpb24gaXNEZWJ1Z0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBsb2cuaXNMZXZlbEVuYWJsZWQoXCJkZWJ1Z1wiKTtcbn1cblxuLyoqIFdoZXRoZXIgYSBtaWdyYXRpb24gZmFpbGVkIG9ubHkgYmVjYXVzZSB0aGlzIHJvbGUgZG9lcyBub3Qgb3duIGFuIGV4aXN0aW5nIG9iamVjdC4gKi9cbmZ1bmN0aW9uIGlzT3duZXJzaGlwTWlncmF0aW9uRXJyb3IoZXJyOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBlcnJvci5lcnJvckNvbnRleHQoZXJyKS5oYXNNZXNzYWdlKFwibXVzdCBiZSBvd25lclwiKTtcbn1cblxuLyoqXG4gKiBTb2Z0ZW4ge0BsaW5rIFBvc3RncmVzU3RvcmUuaW5pdH0gc28gYSBmYWlsZWQgbWlncmF0aW9uIChlLmcuIExha2ViYXNlXG4gKiBgbXVzdCBiZSBvd25lciBvZiB0YWJsZSDigKZgIG9uIGBBTFRFUmApIGlzIGxvZ2dlZCBvbmNlIGluc3RlYWQgb2YgcmV0aHJvd25cbiAqIG9uIGV2ZXJ5IHN0b3JhZ2UgY2FsbC5cbiAqXG4gKiBNYXN0cmEncyBgYXVnbWVudFdpdGhJbml0YCByZXRyaWVzIGluaXQgZm9yZXZlciB3aGVuIGl0IHRocm93cywgc28gdGhlXG4gKiBvbmx5IHdheSB0byBrZWVwIHNlcnZpbmcgYWdhaW5zdCBhbiBhbHJlYWR5LXVzYWJsZSBzY2hlbWEgaXMgdG8gdHJlYXRcbiAqIG1pZ3JhdGlvbiBmYWlsdXJlIGFzIHN1Y2Nlc3MgYW5kIG1hcmsgdGhlIHN0b3JlIGluaXRpYWxpemVkLlxuICpcbiAqIENvbmN1cnJlbnQgZmlyc3QgY2FsbGVycyBzaGFyZSBvbmUgc29mdCBhdHRlbXB0LiBOb24tb3duZXJzaGlwIGZhaWx1cmVzIHN0YXlcbiAqIGZhdGFsIHNvIG1pc3Npbmcgc2NoZW1hcy90YWJsZXMgYXJlIHJldHJpZWQgb3Igc3VyZmFjZWQgaW5zdGVhZCBvZiBoaWRkZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU29mdFN0b3JhZ2VJbml0KHN0b3JlOiBQb3N0Z3Jlc1N0b3JlKTogUG9zdGdyZXNTdG9yZSB7XG4gIGNvbnN0IHNvZnQgPSBzdG9yZSBhcyB1bmtub3duIGFzIHtcbiAgICBpbml0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2NoZW1hPzogc3RyaW5nO1xuICAgIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIH07XG4gIGNvbnN0IG9yaWdpbmFsSW5pdCA9IHNvZnQuaW5pdC5iaW5kKHNvZnQpO1xuICBsZXQgc29mdEluaXRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIHNvZnQuaW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc29mdC5pc0luaXRpYWxpemVkKSByZXR1cm47XG4gICAgc29mdEluaXRQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb3JpZ2luYWxJbml0KCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFpc093bmVyc2hpcE1pZ3JhdGlvbkVycm9yKGVycikpIHRocm93IGVycjtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICBpZiAoIWxvZ2dlZE1pZ3JhdGlvbkVycm9ycy5oYXMobWVzc2FnZSkpIHtcbiAgICAgICAgICBsb2dnZWRNaWdyYXRpb25FcnJvcnMuYWRkKG1lc3NhZ2UpO1xuICAgICAgICAgIGlmIChpc0RlYnVnRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJtYXN0cmEgc3RvcmFnZSBtaWdyYXRpb24gZmFpbGVkXCIsIGVycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKFwibWFzdHJhIHN0b3JhZ2UgbWlncmF0aW9uIGZhaWxlZFwiLCB7XG4gICAgICAgICAgICAgIGVycm9yOiBtZXNzYWdlLFxuICAgICAgICAgICAgICBzdG9yZUlkOiBzb2Z0LmlkLFxuICAgICAgICAgICAgICBzY2hlbWE6IHNvZnQuc2NoZW1hLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc29mdEluaXRQcm9taXNlO1xuICAgICAgc29mdC5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNvZnRJbml0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH07XG4gIHJldHVybiBzdG9yZTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGRlZGljYXRlZCAqKnNlcnZpY2UtcHJpbmNpcGFsKiogTGFrZWJhc2UgcG9vbCBmb3IgTWFzdHJhXG4gKiBtZW1vcnkgZnJvbSB0aGUgbGFrZWJhc2UgcGx1Z2luJ3MgcmVzb2x2ZWQgU1AgcGcgY29uZmlnLlxuICpcbiAqIFRoZSBwbHVnaW4ncyBgZXhwb3J0cygpLnBvb2xgIGlzIGEgYFJvdXRpbmdQb29sYCB0aGF0IHN3aXRjaGVzIHRvXG4gKiB0aGUgcGVyLXVzZXIgKE9CTykgcG9vbCB3aGVuZXZlciBhIHF1ZXJ5IHJ1bnMgaW5zaWRlIGFuIGBhc1VzZXJgXG4gKiBzY29wZSAtIGV4YWN0bHkgdGhlIGNvbnRleHQgdGhlIG1hc3RyYSBwbHVnaW4gZXN0YWJsaXNoZXMgYXJvdW5kXG4gKiBldmVyeSBjaGF0IHR1cm4uIE1lbW9yeSAodGhyZWFkcyAvIG1lc3NhZ2VzICsgc2VtYW50aWMgcmVjYWxsKSBtdXN0XG4gKiBpbnN0ZWFkIGFsd2F5cyBhY3QgYXMgdGhlIGFwcCBzZXJ2aWNlIHByaW5jaXBhbDogaXQgb3ducyB0aGVcbiAqIGF1dG8tY3JlYXRlZCBgbWFzdHJhXypgIHNjaGVtYXMgKGEgcGVyLXVzZXIgcm9sZSB1c3VhbGx5IGNhbid0XG4gKiBgQ1JFQVRFIFNDSEVNQWApIGFuZCBpcyBzaGFyZWQgYWNyb3NzIHVzZXJzLCBzbyBpdCBjYW5ub3QgaW5oZXJpdCBhXG4gKiByZXF1ZXN0J3MgT0JPIGlkZW50aXR5LlxuICpcbiAqIGBwZ0NvbmZpZ2AgbXVzdCBiZSB0aGUgcGx1Z2luJ3MgYGV4cG9ydHMoKS5nZXRQZ0NvbmZpZygpYCBldmFsdWF0ZWRcbiAqICoqb3V0c2lkZSoqIGFueSBgYXNVc2VyYCBzY29wZSAoaS5lLiBkdXJpbmcgc2V0dXApLCBzbyBpdCBjYXJyaWVzXG4gKiB0aGUgU1AgY29ubmVjdGlvbiB0YXJnZXQsIE9BdXRoIHRva2VuLXJlZnJlc2ggYHBhc3N3b3JkYCBjYWxsYmFjayxcbiAqIGFuZCBhbnkgYGxha2ViYXNlKHsgcG9vbCB9KWAgdHVuaW5nIG92ZXJyaWRlcyAtIGFsbCBvZiB3aGljaCB0aGlzXG4gKiBwb29sIGluaGVyaXRzLiBTZWUgdGhlIGNhbGwgc2l0ZSBpbiBgcGx1Z2luLnRzYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VQcmluY2lwYWxQb29sKHBnQ29uZmlnOiBQb29sQ29uZmlnKTogUHJvbWlzZTxQb29sPiB7XG4gIC8vIGBnZXRQZ0NvbmZpZygpYCByZXNvbHZlcyB0aGUgU1AgdXNlcm5hbWUgc3luY2hyb25vdXNseSBmcm9tXG4gIC8vIGBQR1VTRVJgIC8gYERBVEFCUklDS1NfQ0xJRU5UX0lEYDsgZmFsbCBiYWNrIHRvIHRoZSBhc3luYyBBUElcbiAgLy8gbG9va3VwIChlLmcuIGxvY2FsIGRldiBhdXRoZW50aWNhdGluZyB2aWEgUEFUKSBzbyB0aGUgcG9vbCBhbHdheXNcbiAgLy8gaGFzIGFuIGlkZW50aXR5IHRvIGNvbm5lY3Qgd2l0aC5cbiAgY29uc3QgdXNlciA9IHBnQ29uZmlnLnVzZXIgPz8gKGF3YWl0IGdldFVzZXJuYW1lV2l0aEFwaUxvb2t1cCgpKTtcbiAgcmV0dXJuIG5ldyBQb29sKHsgLi4ucGdDb25maWcsIHVzZXIgfSk7XG59XG5cbi8qKiBFZmZlY3RpdmUgcGVyLWtub2Igc2V0dGluZyBhZnRlciB0aGUgcGx1Z2luL2FnZW50IGNhc2NhZGUuICovXG50eXBlIFN0b3JhZ2VTZXR0aW5nID0gTWFzdHJhQWdlbnREZWZpbml0aW9uW1wic3RvcmFnZVwiXTtcbnR5cGUgTWVtb3J5U2V0dGluZyA9IE1hc3RyYUFnZW50RGVmaW5pdGlvbltcIm1lbW9yeVwiXTtcblxuLyoqXG4gKiBUcnVlIHdoZW4gYW55IHBsdWdpbi1sZXZlbCBvciBwZXItYWdlbnQgc2V0dGluZyBjb3VsZCBuZWVkIHRoZVxuICogTGFrZWJhc2UgcG9vbC4gVXNlZCBieSBgcGx1Z2luLnRzYCB0byBnYXRlIGNyZWF0aW9uIG9mIHRoZVxuICogc2VydmljZS1wcmluY2lwYWwgcG9vbCBhbmQgdGhlIHtAbGluayBNZW1vcnlCdWlsZGVyfSB0aGF0IGNvbnN1bWVzXG4gKiBpdDsgd2hlbiBmYWxzZSBuZWl0aGVyIGlzIGJ1aWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmVlZHNMYWtlYmFzZShjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyk6IGJvb2xlYW4ge1xuICBpZiAoc2V0dGluZ05lZWRzU2hhcmVkUG9vbChjb25maWcuc3RvcmFnZSkpIHJldHVybiB0cnVlO1xuICBpZiAoc2V0dGluZ05lZWRzU2hhcmVkUG9vbChjb25maWcubWVtb3J5KSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGRlZnMgPSBjb2xsZWN0QWdlbnREZWZpbml0aW9ucyhjb25maWcpO1xuICByZXR1cm4gZGVmcy5zb21lKChkKSA9PiBzZXR0aW5nTmVlZHNTaGFyZWRQb29sKGQuc3RvcmFnZSkgfHwgc2V0dGluZ05lZWRzU2hhcmVkUG9vbChkLm1lbW9yeSkpO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIHBlci1hZ2VudCB7QGxpbmsgTWVtb3J5fSBmYWN0b3J5IGJvdW5kIHRvIHRoZSBzdXBwbGllZFxuICogc2VydmljZS1wcmluY2lwYWwgcG9vbCAoc2VlIHtAbGluayBjcmVhdGVTZXJ2aWNlUHJpbmNpcGFsUG9vbH0pLlxuICogQ2FjaGVzIHRoZSBzaGFyZWQgYFBnVmVjdG9yYCBzaW5nbGV0b24gKGJ1aWx0IG9uIGZpcnN0IG5lZWQpIHNvIGVhY2hcbiAqIGFnZW50IGJ1aWxkIGlzIE8oMSkgYWZ0ZXIgdGhlIGZpcnN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVtb3J5QnVpbGRlcihcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gIHNlcnZpY2VQcmluY2lwYWxQb29sOiBQb29sLFxuKTogTWVtb3J5QnVpbGRlciB7XG4gIHJldHVybiBuZXcgTWVtb3J5QnVpbGRlcihjb25maWcsIHNlcnZpY2VQcmluY2lwYWxQb29sKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgb25lIGBNZW1vcnlgIHBlciBhZ2VudCBhZ2FpbnN0IGEgc2hhcmVkIHNlcnZpY2UtcHJpbmNpcGFsXG4gKiBMYWtlYmFzZSBwb29sLiBQZXItaW5zdGFuY2Ugc3RhdGUga2VlcHMgdGhlIHNoYXJlZCBgUGdWZWN0b3JgIGFsaXZlXG4gKiBhY3Jvc3MgY2FsbHMgc28gcmVnaXN0ZXJpbmcgTiBhZ2VudHMgc3RheXMgY2hlYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlCdWlsZGVyIHtcbiAgcHJpdmF0ZSBzaGFyZWRWZWN0b3I6IFBnVmVjdG9yIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlUHJpbmNpcGFsUG9vbDogUG9vbCxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgTWFzdHJhLWluc3RhbmNlLWxldmVsIHN0b3JhZ2UgdXNlZCBmb3Igd29ya2Zsb3dcbiAgICogc25hcHNob3RzLiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gcGx1Z2luLWxldmVsIGBzdG9yYWdlYCBpc1xuICAgKiBkaXNhYmxlZCwgaW4gd2hpY2ggY2FzZSBgYWdlbnQucmVzdW1lU3RyZWFtKClgIChhbmQgdGhlcmVmb3JlXG4gICAqIHRoZSBgcmVxdWlyZUFwcHJvdmFsYCBmbG93KSB3aWxsIG5vdCBiZSBhdmFpbGFibGUuXG4gICAqXG4gICAqIFRoZSBzdG9yZSBsaXZlcyBpbiBhIGRlZGljYXRlZCBgbWFzdHJhX2luc3RhbmNlYCBzY2hlbWEgc28gaXRcbiAgICogbmV2ZXIgY29sbGlkZXMgd2l0aCBwZXItYWdlbnQge0BsaW5rIGFnZW50U3RvcmFnZVNjaGVtYU5hbWV9IG5hbWVzcGFjZXMuXG4gICAqIFdvcmtmbG93IHNuYXBzaG90cyBhcmUgbm90IHBlci1hZ2VudCBzdGF0ZTsgdGhleSBiZWxvbmcgdG8gdGhlXG4gICAqIGBNYXN0cmFgIGluc3RhbmNlIHRoYXQgb3ducyB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uLlxuICAgKi9cbiAgaW5zdGFuY2VTdG9yYWdlKCk6IFBvc3RncmVzU3RvcmUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLmNvbmZpZy5zdG9yYWdlO1xuICAgIGlmICghc2V0dGluZykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIHNldHRpbmcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgICBuZXcgUG9zdGdyZXNTdG9yZShcbiAgICAgICAgICB3aXRoSWQoc2V0dGluZywgXCJtYXN0cmEtc3RvcmVfX2luc3RhbmNlXCIpIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczxcbiAgICAgICAgICAgIHR5cGVvZiBQb3N0Z3Jlc1N0b3JlXG4gICAgICAgICAgPlswXSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgbmV3IFBvc3RncmVzU3RvcmUoe1xuICAgICAgICBpZDogXCJtYXN0cmEtc3RvcmVfX2luc3RhbmNlXCIsXG4gICAgICAgIHNjaGVtYU5hbWU6IFwibWFzdHJhX2luc3RhbmNlXCIsXG4gICAgICAgIHBvb2w6IHRoaXMuc2VydmljZVByaW5jaXBhbFBvb2wsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgYE1lbW9yeWAgZm9yIGBhZ2VudElkYCBhZnRlciB0aGUgcGx1Z2luL2FnZW50IGNhc2NhZGUuXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0aGUgYWdlbnQgaGFzIG5laXRoZXIgc3RvcmFnZSBub3IgYVxuICAgKiB2ZWN0b3Igc3RvcmUgZW5hYmxlZCAtIE1hc3RyYSBhY2NlcHRzIGEgbWlzc2luZyBgbWVtb3J5YCBmaWVsZFxuICAgKiBhbmQgdHJlYXRzIHRoZSBhZ2VudCBhcyBzdGF0ZWxlc3MuXG4gICAqL1xuICBmb3JBZ2VudChhZ2VudElkOiBzdHJpbmcsIGRlZjogTWFzdHJhQWdlbnREZWZpbml0aW9uKTogTWVtb3J5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdG9yYWdlU2V0dGluZyA9IGRlZi5zdG9yYWdlID8/IHRoaXMuY29uZmlnLnN0b3JhZ2U7XG4gICAgY29uc3QgbWVtb3J5U2V0dGluZyA9IGRlZi5tZW1vcnkgPz8gdGhpcy5jb25maWcubWVtb3J5O1xuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYnVpbGRTdG9yYWdlKGFnZW50SWQsIHN0b3JhZ2VTZXR0aW5nKTtcbiAgICBjb25zdCB2ZWN0b3IgPSB0aGlzLmJ1aWxkVmVjdG9yKG1lbW9yeVNldHRpbmcpO1xuICAgIGlmICghc3RvcmFnZSAmJiAhdmVjdG9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJhZ2VudDpzdGF0ZWxlc3NcIiwgeyBhZ2VudElkIH0pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXCJhZ2VudDpjb25maWd1cmVkXCIsIHtcbiAgICAgIGFnZW50SWQsXG4gICAgICBzdG9yYWdlOiBzdG9yYWdlICE9PSB1bmRlZmluZWQsXG4gICAgICB2ZWN0b3I6IHZlY3RvciAhPT0gdW5kZWZpbmVkLFxuICAgICAgdmVjdG9yTW9kZTpcbiAgICAgICAgdmVjdG9yID09PSB1bmRlZmluZWQgPyBcIm9mZlwiIDogdHlwZW9mIG1lbW9yeVNldHRpbmcgPT09IFwib2JqZWN0XCIgPyBcImRlZGljYXRlZFwiIDogXCJzaGFyZWRcIixcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgTWVtb3J5KHtcbiAgICAgIC4uLihzdG9yYWdlID8geyBzdG9yYWdlIH0gOiB7fSksXG4gICAgICAuLi4odmVjdG9yID8geyB2ZWN0b3IsIGVtYmVkZGVyOiBmYXN0ZW1iZWQgfSA6IHt9KSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbGFzdE1lc3NhZ2VzOiAxMCxcbiAgICAgICAgLi4uKHZlY3RvciA/IHsgc2VtYW50aWNSZWNhbGw6IHsgdG9wSzogMywgbWVzc2FnZVJhbmdlOiAyIH0gfSA6IHt9KSxcbiAgICAgICAgLy8gQXV0by1uYW1lIGVhY2ggdGhyZWFkIGZyb20gaXRzIG9wZW5pbmcgdHVybiBzbyB0aGVcbiAgICAgICAgLy8gY29udmVyc2F0aW9uIGxpc3QgdGhlIFVJIHJlbmRlcnMgc2hvd3MgbWVhbmluZ2Z1bCB0aXRsZXNcbiAgICAgICAgLy8gaW5zdGVhZCBvZiByYXcgaWRzLiBUaXRsaW5nIHJ1bnMgb24gdGhlIHNtYWxsIC8gZmFzdCBjaGF0XG4gICAgICAgIC8vIHRpZXIgKHNlZSBgc3VtbWFyaXplLnRzYCkgcmF0aGVyIHRoYW4gdGhlIGFnZW50J3MgcHJpbWFyeVxuICAgICAgICAvLyBtb2RlbCwgc28gbmFtaW5nIGEgdGhyZWFkIG5ldmVyIHNwZW5kcyB0aGUgaGVhdnl3ZWlnaHQgbW9kZWwuXG4gICAgICAgIC8vIE9ubHkgbWVhbmluZ2Z1bCB3aGVuIHN0b3JhZ2UgaXMgb247IGhhcm1sZXNzIG90aGVyd2lzZS5cbiAgICAgICAgLi4uKHN0b3JhZ2VcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZ2VuZXJhdGVUaXRsZToge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBzdW1tYXJ5TW9kZWwodGhpcy5jb25maWcpLFxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uczogVElUTEVfSU5TVFJVQ1RJT05TLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTdG9yYWdlKGFnZW50SWQ6IHN0cmluZywgc2V0dGluZzogU3RvcmFnZVNldHRpbmcpOiBQb3N0Z3Jlc1N0b3JlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXNldHRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBzZXR0aW5nID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIHdpdGhTb2Z0U3RvcmFnZUluaXQoXG4gICAgICAgIG5ldyBQb3N0Z3Jlc1N0b3JlKHtcbiAgICAgICAgICBpZDogYG1hc3RyYS1zdG9yZV9fJHthZ2VudElkfWAsXG4gICAgICAgICAgc2NoZW1hTmFtZTogYWdlbnRTdG9yYWdlU2NoZW1hTmFtZShhZ2VudElkKSxcbiAgICAgICAgICBwb29sOiB0aGlzLnNlcnZpY2VQcmluY2lwYWxQb29sLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIENhc3Q6IGB3aXRoSWRgIGd1YXJhbnRlZXMgYGlkYCBpcyBzZXQsIGJ1dCB0aGUgZGlzdHJpYnV0aXZlXG4gICAgLy8gT21pdCArIGBpZD86IHN0cmluZ2Agc2hhcGUgZG9lc24ndCBzdHJ1Y3R1cmFsbHkgbmFycm93IHRvIHRoZVxuICAgIC8vIGRpc2NyaW1pbmF0ZWQgdW5pb24gbWVtYmVycy4gUnVudGltZSBzaGFwZSBpcyBpZGVudGljYWwuXG4gICAgcmV0dXJuIHdpdGhTb2Z0U3RvcmFnZUluaXQoXG4gICAgICBuZXcgUG9zdGdyZXNTdG9yZShcbiAgICAgICAgd2l0aElkKHNldHRpbmcsIGBtYXN0cmEtc3RvcmVfXyR7YWdlbnRJZH1gKSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8XG4gICAgICAgICAgdHlwZW9mIFBvc3RncmVzU3RvcmVcbiAgICAgICAgPlswXSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBhZ2VudCdzIHZlY3RvciBzdG9yZS4gQ2FzY2FkZTpcbiAgICpcbiAgICogLSBmYWxzeTogbm8gdmVjdG9yLlxuICAgKiAtIGBib29sZWFuYCAvIGB1bmRlZmluZWQtaW5oZXJpdGluZy10cnVlYDogcmV0dXJuIHRoZSBzaGFyZWRcbiAgICogICBzaW5nbGV0b24gKGJ1aWx0IGxhemlseSBvbiBmaXJzdCBjYWxsKS4gQWxsIGFnZW50cyB0aGF0XG4gICAqICAgZGVmYXVsdC1lbmFibGUgbWVtb3J5IHdyaXRlIGludG8gYW5kIHJlY2FsbCBmcm9tIG9uZSBpbmRleC5cbiAgICogLSBvYmplY3Q6IGJ1aWxkIGEgZGVkaWNhdGVkIGBQZ1ZlY3RvcmAgZm9yIHRoaXMgYWdlbnQuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVmVjdG9yKHNldHRpbmc6IE1lbW9yeVNldHRpbmcpOiBQZ1ZlY3RvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzZXR0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2Ygc2V0dGluZyA9PT0gXCJib29sZWFuXCIpIHJldHVybiB0aGlzLmdldFNoYXJlZFZlY3RvcigpO1xuICAgIHJldHVybiBidWlsZFBnVmVjdG9yKHNldHRpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaGFyZWRWZWN0b3IoKTogUGdWZWN0b3Ige1xuICAgIGlmICghdGhpcy5zaGFyZWRWZWN0b3IpIHtcbiAgICAgIHRoaXMuc2hhcmVkVmVjdG9yID0gYnVpbGRTaGFyZWRQZ1ZlY3Rvcih0aGlzLnNlcnZpY2VQcmluY2lwYWxQb29sKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hhcmVkVmVjdG9yO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIHNoYXJlZCBgUGdWZWN0b3JgIHRoYXQgYmFja3MgdGhlIGRlZmF1bHRcbiAqIGBkZWYubWVtb3J5ID09PSB0cnVlYCBjYXNlIGFjcm9zcyBldmVyeSBhZ2VudC5cbiAqXG4gKiBgUGdWZWN0b3JgJ3MgY29uc3RydWN0b3IgYWNjZXB0cyBvbmx5IGNvbm5lY3Rpb24tc3R5bGUgY29uZmlnc1xuICogKGBIb3N0Q29uZmlnYCAvIGBDb25uZWN0aW9uU3RyaW5nQ29uZmlnYCAvIGBDbGllbnRDb25maWdgKTsgdGhlcmUgaXNcbiAqIG5vIGB7IHBvb2wgfWAgc2hvcnRoYW5kIHRoZSB3YXkgYFBvc3RncmVzU3RvcmVgIGhhcyBvbmUuIFdvcnNlLCB0aGVcbiAqIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkga2lja3Mgb2ZmIGEgYGNhY2hlV2FybXVwUHJvbWlzZWAgSUlGRSB0aGF0XG4gKiBjYWxscyBgdGhpcy5wb29sLmNvbm5lY3QoKWAgYmVmb3JlIHJldHVybmluZywgc28gd2UgY2FuJ3QgY2xlYW5seVxuICogaGFuZCBpdCBhbiBpbmVydCBjb25maWcgYW5kIHBhdGNoIHRoZSBwb29sIGFmdGVyd2FyZHMuXG4gKlxuICogVGhlIHRyaWNrOiBwYXNzIGlsbGVnYWwtYnV0LXZhbGlkYXRpb24tcGFzc2luZyBwbGFjZWhvbGRlcnMgc28gdGhlXG4gKiB3YXJtdXAncyBgbmV0LmNvbm5lY3QoKWAgcmVqZWN0cyBzeW5jaHJvbm91c2x5IHdpdGggYFJhbmdlRXJyb3JgXG4gKiAoTm9kZSB2YWxpZGF0ZXMgYDAgPD0gcG9ydCA8IDY1NTM2YCkuIFRoZSBJSUZFJ3MgYGNhdGNoIHt9YCBzd2FsbG93c1xuICogaXQsIG5vIEROUyBsb29rdXAgb3IgVENQIGF0dGVtcHQgaGFwcGVucywgYW5kIHdlIHRoZW4gc3dhcFxuICogYHBnVmVjdG9yLnBvb2xgIHRvIHRoZSBsYWtlYmFzZSBwb29sLiBFdmVyeSBzdWJzZXF1ZW50IGBQZ1ZlY3RvcmBcbiAqIG1ldGhvZCByZWFkcyBgdGhpcy5wb29sYCBhdCBjYWxsIHRpbWUsIHNvIGFsbCByZWFsIEkvTyBnb2VzIHRocm91Z2hcbiAqIHRoZSBsYWtlYmFzZSBwb29sIGZyb20gdGhlbiBvbi4gVGhlIHBsYWNlaG9sZGVyIHBvb2wgaXMgYC5lbmQoKWAnZFxuICogc28gaXRzIHNvY2tldCBib29rLWtlZXBpbmcgaXMgcmVsZWFzZWQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2hhcmVkUGdWZWN0b3IocG9vbDogUG9vbCk6IFBnVmVjdG9yIHtcbiAgY29uc3QgdmVjdG9yID0gbmV3IFBnVmVjdG9yKHtcbiAgICBpZDogYHBnJHtoYXNoLmlkKCl9YCxcbiAgICAvLyBLZWVwIHRoZSByZWNhbGwgaW5kZXggb3V0IG9mIGBwdWJsaWNgOiBvbiBhIExha2ViYXNlIGRhdGFiYXNlIHRoZSBhcHBcbiAgICAvLyBzZXJ2aWNlIHByaW5jaXBhbCBoYXMgbm8gQ1JFQVRFIG9uIGBwdWJsaWNgIChQRzE1KyBsb2NrcyBpdCBkb3duKSwgc28gYVxuICAgIC8vIGRlZmF1bHQtc2NoZW1hIFBnVmVjdG9yIGZhaWxzIG9uIENSRUFURSBJTkRFWCB3aXRoIFwicGVybWlzc2lvbiBkZW5pZWQgZm9yXG4gICAgLy8gc2NoZW1hIHB1YmxpY1wiLiBQZ1ZlY3RvciBydW5zIENSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBmb3IgYSBuYW1lZFxuICAgIC8vIHNjaGVtYSwgc28gdGhlIFNQIGNyZWF0ZXMgYW5kIG93bnMgYG1hc3RyYV9pbnN0YW5jZWAgKHRoZSBzYW1lXG4gICAgLy8gaW5zdGFuY2UtbGV2ZWwgc2NoZW1hIHRoZSB3b3JrZmxvdy1zbmFwc2hvdCBzdG9yZSB1c2VzKSBhbmQgdGhlIGluZGV4XG4gICAgLy8gbGFuZHMgdGhlcmUuIFRhYmxlIG5hbWVzIGRvbid0IGNvbGxpZGUgd2l0aCB0aGUgc3RvcmFnZSB0YWJsZXMuXG4gICAgc2NoZW1hTmFtZTogXCJtYXN0cmFfaW5zdGFuY2VcIixcbiAgICBob3N0OiBcIi0xXCIsXG4gICAgcG9ydDogLTEsXG4gICAgZGF0YWJhc2U6IFwiX1wiLFxuICAgIHVzZXI6IFwiX1wiLFxuICAgIHBhc3N3b3JkOiBcIl9cIixcbiAgfSk7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gdmVjdG9yLnBvb2w7XG4gIHZlY3Rvci5wb29sID0gcG9vbDtcbiAgdm9pZCBwbGFjZWhvbGRlci5lbmQoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICByZXR1cm4gdmVjdG9yO1xufVxuXG4vKiogUGVyLWFnZW50IGRlZGljYXRlZCBgUGdWZWN0b3JgIChyYXJlOyBvcHQtaW4gdmlhIG9iamVjdCBvdmVycmlkZSkuICovXG5mdW5jdGlvbiBidWlsZFBnVmVjdG9yKHNldHRpbmc6IE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlKTogUGdWZWN0b3Ige1xuICByZXR1cm4gbmV3IFBnVmVjdG9yKFxuICAgIHdpdGhJZChzZXR0aW5nLCBgcGctdmVjdG9yX18ke2hhc2guaWQoKX1gKSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFBnVmVjdG9yPlswXSxcbiAgKTtcbn1cblxuLyoqIFRydWUgd2hlbiB0aGlzIHNldHRpbmcgcmVxdWlyZXMgdGhlIHNoYXJlZCBMYWtlYmFzZSBwb29sLiAqL1xuZnVuY3Rpb24gc2V0dGluZ05lZWRzU2hhcmVkUG9vbChzZXR0aW5nOiBTdG9yYWdlU2V0dGluZyB8IE1lbW9yeVNldHRpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNldHRpbmcgPT09IHRydWU7XG59XG5cbi8qKiBXYWxrIHRoZSB0aHJlZSBzaGFwZXMgb2YgYGNvbmZpZy5hZ2VudHNgIGludG8gYSBmbGF0IGxpc3QuICovXG5mdW5jdGlvbiBjb2xsZWN0QWdlbnREZWZpbml0aW9ucyhjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyk6IE1hc3RyYUFnZW50RGVmaW5pdGlvbltdIHtcbiAgY29uc3QgYWdlbnRzID0gY29uZmlnLmFnZW50cztcbiAgaWYgKCFhZ2VudHMpIHJldHVybiBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYWdlbnRzKSkgcmV0dXJuIGFnZW50cztcbiAgaWYgKHR5cGVvZiAoYWdlbnRzIGFzIE1hc3RyYUFnZW50RGVmaW5pdGlvbikuaW5zdHJ1Y3Rpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIFthZ2VudHMgYXMgTWFzdHJhQWdlbnREZWZpbml0aW9uXTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhhZ2VudHMgYXMgUmVjb3JkPHN0cmluZywgTWFzdHJhQWdlbnREZWZpbml0aW9uPik7XG59XG5cbi8qKiBGaWxsIGluIGEgZGVmYXVsdCBgaWRgIHdoZW4gdGhlIGNhbGxlciBkaWRuJ3Qgc3VwcGx5IG9uZS4gKi9cbmZ1bmN0aW9uIHdpdGhJZDxUIGV4dGVuZHMgeyBpZD86IHN0cmluZyB9Pih2YWx1ZTogVCwgZmFsbGJhY2s6IHN0cmluZyk6IFQge1xuICByZXR1cm4gdmFsdWUuaWQgPyB2YWx1ZSA6IHsgLi4udmFsdWUsIGlkOiBmYWxsYmFjayB9O1xufVxuIl19
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sSUFBSSxDQUFDO0FBSTNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTNDLGtGQUFrRjtBQUNsRixNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFFaEQsMERBQTBEO0FBQzFELFNBQVMsY0FBYztJQUNyQixPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELHlGQUF5RjtBQUN6RixTQUFTLHlCQUF5QixDQUFDLEdBQVk7SUFDN0MsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMs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O1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3pDLElBQUksY0FBYyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxNQUFrQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsZ0VBQWdFO0FBQ2hFLFNBQVMsTUFBTSxDQUE0QixLQUFRLEVBQUUsUUFBZ0I7SUFDbkUsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExha2ViYXNlLWJhY2tlZCBNYXN0cmEgbWVtb3J5IHdpcmluZy5cbiAqXG4gKiBQcm92aWRlcyBhIHtAbGluayBNZW1vcnlCdWlsZGVyfSB0aGF0IG1pbnRzIG9uZSBgTWVtb3J5YCBwZXIgYWdlbnRcbiAqIHdpdGggdHdvIGluZGVwZW5kZW50IGtub2JzOlxuICpcbiAqIC0gKipTdG9yYWdlKiogKHRocmVhZHMgLyBtZXNzYWdlcyB2aWEgYFBvc3RncmVzU3RvcmVgKTogZGVmYXVsdHMgdG9cbiAqICAgKipwZXItYWdlbnQqKiBuYW1lc3BhY2luZyB2aWEge0BsaW5rIGFnZW50U3RvcmFnZVNjaGVtYU5hbWV9IHNvXG4gKiAgIGNvbnZlcnNhdGlvbiBoaXN0b3J5IHN0YXlzIGlzb2xhdGVkIGJldHdlZW4gYWdlbnRzIGluIHRoZSBzYW1lXG4gKiAgIGRhdGFiYXNlLiBgUG9zdGdyZXNTdG9yZWAgYXV0by1jcmVhdGVzIHRoZSBzY2hlbWEgd2l0aFxuICogICBgQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTYCBvbiBpbml0LiBBIGZhaWxlZCBtaWdyYXRpb24gKGNvbW1vbiBvblxuICogICBMYWtlYmFzZSB3aGVuIHRoZSBjb25uZWN0aW5nIHJvbGUgaXMgbm90IHRoZSB0YWJsZSBvd25lcikgaXMgbG9nZ2VkXG4gKiAgIGFuZCBza2lwcGVkIHZpYSB7QGxpbmsgd2l0aFNvZnRTdG9yYWdlSW5pdH0gc28gZXhpc3RpbmcgdGFibGVzIGtlZXBcbiAqICAgc2VydmluZyBpbnN0ZWFkIG9mIHJldHJ5aW5nIERETCBvbiBldmVyeSByZXF1ZXN0LlxuICogLSAqKk1lbW9yeSoqIChzZW1hbnRpYyByZWNhbGwgdmlhIGBQZ1ZlY3RvcmApOiBkZWZhdWx0cyB0byBhIHNpbmdsZVxuICogICAqKnNoYXJlZCoqIGluc3RhbmNlIGFjcm9zcyBldmVyeSBhZ2VudC4gQ3Jvc3MtYWdlbnQgcmVjYWxsIG9uIG9uZVxuICogICBpbmRleCBpcyBhbG1vc3QgYWx3YXlzIHdoYXQgdXNlcnMgd2FudDsgb3B0IGludG8gcGVyLWFnZW50IHJlY2FsbFxuICogICBieSBwYXNzaW5nIGEge0BsaW5rIE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlfSBvbiB0aGUgYWdlbnQuXG4gKlxuICogQWRkaXRpb25hbGx5LCB7QGxpbmsgTWVtb3J5QnVpbGRlci5pbnN0YW5jZVN0b3JhZ2V9IHJldHVybnMgYVxuICogKipNYXN0cmEtaW5zdGFuY2UtbGV2ZWwqKiBgUG9zdGdyZXNTdG9yZWAgKHNjaGVtYSBgbWFzdHJhX2luc3RhbmNlYClcbiAqIHVzZWQgZm9yIHdvcmtmbG93IHNuYXBzaG90cyAtIHRoZSBwZXJzaXN0ZW5jZSBsYXllclxuICogYGFnZW50LnJlc3VtZVN0cmVhbSgpYCByZWFkcyBmcm9tIHdoZW4gd2FraW5nIGEgc3VzcGVuZGVkXG4gKiBgcmVxdWlyZUFwcHJvdmFsYCB0b29sIGNhbGwuIFBlci1hZ2VudCBzdG9yZXMgYXJlIG5vdCBlbm91Z2ggZm9yXG4gKiB0aGlzOiB3b3JrZmxvdyBydW5zIGFyZSBzY29wZWQgdG8gdGhlIE1hc3RyYSBpbnN0YW5jZSwgbm90IGFuXG4gKiBpbmRpdmlkdWFsIGFnZW50J3MgYE1lbW9yeWAuXG4gKlxuICogUGx1Z2luLWxldmVsIGBjb25maWcuc3RvcmFnZWAgLyBgY29uZmlnLm1lbW9yeWAgYWN0IGFzIHRoZSBiYXNlbGluZVxuICogKGF1dG8tZGVmYXVsdGVkIHRvIGB0cnVlYCBpbiBgcGx1Z2luLnRzYCB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpblxuICogaXMgcmVnaXN0ZXJlZCk7IHBlci1hZ2VudCBzZXR0aW5ncyBjYXNjYWRlIG9uIHRvcCBvZiB0aGF0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRVc2VybmFtZVdpdGhBcGlMb29rdXAgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvciwgaGFzaCwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGZhc3RlbWJlZCB9IGZyb20gXCJAbWFzdHJhL2Zhc3RlbWJlZFwiO1xuaW1wb3J0IHsgTWVtb3J5IH0gZnJvbSBcIkBtYXN0cmEvbWVtb3J5XCI7XG5pbXBvcnQgeyBQZ1ZlY3RvciwgUG9zdGdyZXNTdG9yZSB9IGZyb20gXCJAbWFzdHJhL3BnXCI7XG5pbXBvcnQgeyBQb29sLCB0eXBlIFBvb2xDb25maWcgfSBmcm9tIFwicGdcIjtcblxuaW1wb3J0IHR5cGUgeyBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlIH0gZnJvbSBcIi4vYWdlbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IE1hc3RyYVBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgYWdlbnRTdG9yYWdlU2NoZW1hTmFtZSB9IGZyb20gXCIuL3N0b3JhZ2Utc2NoZW1hLnRzXCI7XG5pbXBvcnQgeyBzdW1tYXJ5TW9kZWwsIFRJVExFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3N1bW1hcml6ZS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL21lbW9yeVwiKTtcblxuLyoqIFByb2Nlc3Mtd2lkZSBkZWR1cGUgc28gaW5zdGFuY2UgKyBwZXItYWdlbnQgc3RvcmVzIHNoYXJlIG9uZSBvd25lcnNoaXAgbG9nLiAqL1xuY29uc3QgbG9nZ2VkTWlncmF0aW9uRXJyb3JzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbi8qKiBXaGV0aGVyIGBMT0dfTEVWRUxgIGlzIGN1cnJlbnRseSBhdCBvciBiZWxvdyBkZWJ1Zy4gKi9cbmZ1bmN0aW9uIGlzRGVidWdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbG9nLmlzTGV2ZWxFbmFibGVkKFwiZGVidWdcIik7XG59XG5cbi8qKiBXaGV0aGVyIGEgbWlncmF0aW9uIGZhaWxlZCBvbmx5IGJlY2F1c2UgdGhpcyByb2xlIGRvZXMgbm90IG93biBhbiBleGlzdGluZyBvYmplY3QuICovXG5mdW5jdGlvbiBpc093bmVyc2hpcE1pZ3JhdGlvbkVycm9yKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gZXJyb3IuZXJyb3JDb250ZXh0KGVycikuaGFzTWVzc2FnZShcIm11c3QgYmUgb3duZXJcIik7XG59XG5cbi8qKlxuICogU29mdGVuIHtAbGluayBQb3N0Z3Jlc1N0b3JlLmluaXR9IHNvIGEgZmFpbGVkIG1pZ3JhdGlvbiAoZS5nLiBMYWtlYmFzZVxuICogYG11c3QgYmUgb3duZXIgb2YgdGFibGUg4oCmYCBvbiBgQUxURVJgKSBpcyBsb2dnZWQgb25jZSBpbnN0ZWFkIG9mIHJldGhyb3duXG4gKiBvbiBldmVyeSBzdG9yYWdlIGNhbGwuXG4gKlxuICogTWFzdHJhJ3MgYGF1Z21lbnRXaXRoSW5pdGAgcmV0cmllcyBpbml0IGZvcmV2ZXIgd2hlbiBpdCB0aHJvd3MsIHNvIHRoZVxuICogb25seSB3YXkgdG8ga2VlcCBzZXJ2aW5nIGFnYWluc3QgYW4gYWxyZWFkeS11c2FibGUgc2NoZW1hIGlzIHRvIHRyZWF0XG4gKiBtaWdyYXRpb24gZmFpbHVyZSBhcyBzdWNjZXNzIGFuZCBtYXJrIHRoZSBzdG9yZSBpbml0aWFsaXplZC5cbiAqXG4gKiBDb25jdXJyZW50IGZpcnN0IGNhbGxlcnMgc2hhcmUgb25lIHNvZnQgYXR0ZW1wdC4gTm9uLW93bmVyc2hpcCBmYWlsdXJlcyBzdGF5XG4gKiBmYXRhbCBzbyBtaXNzaW5nIHNjaGVtYXMvdGFibGVzIGFyZSByZXRyaWVkIG9yIHN1cmZhY2VkIGluc3RlYWQgb2YgaGlkZGVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNvZnRTdG9yYWdlSW5pdChzdG9yZTogUG9zdGdyZXNTdG9yZSk6IFBvc3RncmVzU3RvcmUge1xuICBjb25zdCBzb2Z0ID0gc3RvcmUgYXMgdW5rbm93biBhcyB7XG4gICAgaW5pdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBpZDogc3RyaW5nO1xuICAgIHNjaGVtYT86IHN0cmluZztcbiAgICBpc0luaXRpYWxpemVkOiBib29sZWFuO1xuICB9O1xuICBjb25zdCBvcmlnaW5hbEluaXQgPSBzb2Z0LmluaXQuYmluZChzb2Z0KTtcbiAgbGV0IHNvZnRJbml0UHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcblxuICBzb2Z0LmluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHNvZnQuaXNJbml0aWFsaXplZCkgcmV0dXJuO1xuICAgIHNvZnRJbml0UHJvbWlzZSA/Pz0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9yaWdpbmFsSW5pdCgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghaXNPd25lcnNoaXBNaWdyYXRpb25FcnJvcihlcnIpKSB0aHJvdyBlcnI7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgICAgaWYgKCFsb2dnZWRNaWdyYXRpb25FcnJvcnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgbG9nZ2VkTWlncmF0aW9uRXJyb3JzLmFkZChtZXNzYWdlKTtcbiAgICAgICAgICBpZiAoaXNEZWJ1Z0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwibWFzdHJhIHN0b3JhZ2UgbWlncmF0aW9uIGZhaWxlZFwiLCBlcnIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihcIm1hc3RyYSBzdG9yYWdlIG1pZ3JhdGlvbiBmYWlsZWRcIiwge1xuICAgICAgICAgICAgICBlcnJvcjogbWVzc2FnZSxcbiAgICAgICAgICAgICAgc3RvcmVJZDogc29mdC5pZCxcbiAgICAgICAgICAgICAgc2NoZW1hOiBzb2Z0LnNjaGVtYSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNvZnRJbml0UHJvbWlzZTtcbiAgICAgIHNvZnQuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzb2Z0SW5pdFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9O1xuICByZXR1cm4gc3RvcmU7XG59XG5cbi8qKlxuICogQnVpbGQgYSBkZWRpY2F0ZWQgKipzZXJ2aWNlLXByaW5jaXBhbCoqIExha2ViYXNlIHBvb2wgZm9yIE1hc3RyYVxuICogbWVtb3J5IGZyb20gdGhlIGxha2ViYXNlIHBsdWdpbidzIHJlc29sdmVkIFNQIHBnIGNvbmZpZy5cbiAqXG4gKiBUaGUgcGx1Z2luJ3MgYGV4cG9ydHMoKS5wb29sYCBpcyBhIGBSb3V0aW5nUG9vbGAgdGhhdCBzd2l0Y2hlcyB0b1xuICogdGhlIHBlci11c2VyIChPQk8pIHBvb2wgd2hlbmV2ZXIgYSBxdWVyeSBydW5zIGluc2lkZSBhbiBgYXNVc2VyYFxuICogc2NvcGUgLSBleGFjdGx5IHRoZSBjb250ZXh0IHRoZSBtYXN0cmEgcGx1Z2luIGVzdGFibGlzaGVzIGFyb3VuZFxuICogZXZlcnkgY2hhdCB0dXJuLiBNZW1vcnkgKHRocmVhZHMgLyBtZXNzYWdlcyArIHNlbWFudGljIHJlY2FsbCkgbXVzdFxuICogaW5zdGVhZCBhbHdheXMgYWN0IGFzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWw6IGl0IG93bnMgdGhlXG4gKiBhdXRvLWNyZWF0ZWQgYG1hc3RyYV8qYCBzY2hlbWFzIChhIHBlci11c2VyIHJvbGUgdXN1YWxseSBjYW4ndFxuICogYENSRUFURSBTQ0hFTUFgKSBhbmQgaXMgc2hhcmVkIGFjcm9zcyB1c2Vycywgc28gaXQgY2Fubm90IGluaGVyaXQgYVxuICogcmVxdWVzdCdzIE9CTyBpZGVudGl0eS5cbiAqXG4gKiBgcGdDb25maWdgIG11c3QgYmUgdGhlIHBsdWdpbidzIGBleHBvcnRzKCkuZ2V0UGdDb25maWcoKWAgZXZhbHVhdGVkXG4gKiAqKm91dHNpZGUqKiBhbnkgYGFzVXNlcmAgc2NvcGUgKGkuZS4gZHVyaW5nIHNldHVwKSwgc28gaXQgY2Fycmllc1xuICogdGhlIFNQIGNvbm5lY3Rpb24gdGFyZ2V0LCBPQXV0aCB0b2tlbi1yZWZyZXNoIGBwYXNzd29yZGAgY2FsbGJhY2ssXG4gKiBhbmQgYW55IGBsYWtlYmFzZSh7IHBvb2wgfSlgIHR1bmluZyBvdmVycmlkZXMgLSBhbGwgb2Ygd2hpY2ggdGhpc1xuICogcG9vbCBpbmhlcml0cy4gU2VlIHRoZSBjYWxsIHNpdGUgaW4gYHBsdWdpbi50c2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTZXJ2aWNlUHJpbmNpcGFsUG9vbChwZ0NvbmZpZzogUG9vbENvbmZpZyk6IFByb21pc2U8UG9vbD4ge1xuICAvLyBgZ2V0UGdDb25maWcoKWAgcmVzb2x2ZXMgdGhlIFNQIHVzZXJuYW1lIHN5bmNocm9ub3VzbHkgZnJvbVxuICAvLyBgUEdVU0VSYCAvIGBEQVRBQlJJQ0tTX0NMSUVOVF9JRGA7IGZhbGwgYmFjayB0byB0aGUgYXN5bmMgQVBJXG4gIC8vIGxvb2t1cCAoZS5nLiBsb2NhbCBkZXYgYXV0aGVudGljYXRpbmcgdmlhIFBBVCkgc28gdGhlIHBvb2wgYWx3YXlzXG4gIC8vIGhhcyBhbiBpZGVudGl0eSB0byBjb25uZWN0IHdpdGguXG4gIGNvbnN0IHVzZXIgPSBwZ0NvbmZpZy51c2VyID8/IChhd2FpdCBnZXRVc2VybmFtZVdpdGhBcGlMb29rdXAoKSk7XG4gIHJldHVybiBuZXcgUG9vbCh7IC4uLnBnQ29uZmlnLCB1c2VyIH0pO1xufVxuXG4vKiogRWZmZWN0aXZlIHBlci1rbm9iIHNldHRpbmcgYWZ0ZXIgdGhlIHBsdWdpbi9hZ2VudCBjYXNjYWRlLiAqL1xudHlwZSBTdG9yYWdlU2V0dGluZyA9IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbltcInN0b3JhZ2VcIl07XG50eXBlIE1lbW9yeVNldHRpbmcgPSBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25bXCJtZW1vcnlcIl07XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGFueSBwbHVnaW4tbGV2ZWwgb3IgcGVyLWFnZW50IHNldHRpbmcgY291bGQgbmVlZCB0aGVcbiAqIExha2ViYXNlIHBvb2wuIFVzZWQgYnkgYHBsdWdpbi50c2AgdG8gZ2F0ZSBjcmVhdGlvbiBvZiB0aGVcbiAqIHNlcnZpY2UtcHJpbmNpcGFsIHBvb2wgYW5kIHRoZSB7QGxpbmsgTWVtb3J5QnVpbGRlcn0gdGhhdCBjb25zdW1lc1xuICogaXQ7IHdoZW4gZmFsc2UgbmVpdGhlciBpcyBidWlsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5lZWRzTGFrZWJhc2UoY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpOiBib29sZWFuIHtcbiAgaWYgKHNldHRpbmdOZWVkc1NoYXJlZFBvb2woY29uZmlnLnN0b3JhZ2UpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHNldHRpbmdOZWVkc1NoYXJlZFBvb2woY29uZmlnLm1lbW9yeSkpIHJldHVybiB0cnVlO1xuICBjb25zdCBkZWZzID0gY29sbGVjdEFnZW50RGVmaW5pdGlvbnMoY29uZmlnKTtcbiAgcmV0dXJuIGRlZnMuc29tZSgoZCkgPT4gc2V0dGluZ05lZWRzU2hhcmVkUG9vbChkLnN0b3JhZ2UpIHx8IHNldHRpbmdOZWVkc1NoYXJlZFBvb2woZC5tZW1vcnkpKTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBwZXItYWdlbnQge0BsaW5rIE1lbW9yeX0gZmFjdG9yeSBib3VuZCB0byB0aGUgc3VwcGxpZWRcbiAqIHNlcnZpY2UtcHJpbmNpcGFsIHBvb2wgKHNlZSB7QGxpbmsgY3JlYXRlU2VydmljZVByaW5jaXBhbFBvb2x9KS5cbiAqIENhY2hlcyB0aGUgc2hhcmVkIGBQZ1ZlY3RvcmAgc2luZ2xldG9uIChidWlsdCBvbiBmaXJzdCBuZWVkKSBzbyBlYWNoXG4gKiBhZ2VudCBidWlsZCBpcyBPKDEpIGFmdGVyIHRoZSBmaXJzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeUJ1aWxkZXIoXG4gIGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICBzZXJ2aWNlUHJpbmNpcGFsUG9vbDogUG9vbCxcbik6IE1lbW9yeUJ1aWxkZXIge1xuICByZXR1cm4gbmV3IE1lbW9yeUJ1aWxkZXIoY29uZmlnLCBzZXJ2aWNlUHJpbmNpcGFsUG9vbCk7XG59XG5cbi8qKlxuICogQnVpbGRzIG9uZSBgTWVtb3J5YCBwZXIgYWdlbnQgYWdhaW5zdCBhIHNoYXJlZCBzZXJ2aWNlLXByaW5jaXBhbFxuICogTGFrZWJhc2UgcG9vbC4gUGVyLWluc3RhbmNlIHN0YXRlIGtlZXBzIHRoZSBzaGFyZWQgYFBnVmVjdG9yYCBhbGl2ZVxuICogYWNyb3NzIGNhbGxzIHNvIHJlZ2lzdGVyaW5nIE4gYWdlbnRzIHN0YXlzIGNoZWFwLlxuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5QnVpbGRlciB7XG4gIHByaXZhdGUgc2hhcmVkVmVjdG9yOiBQZ1ZlY3RvciB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZVByaW5jaXBhbFBvb2w6IFBvb2wsXG4gICkge31cblxuICAvKipcbiAgICogQnVpbGQgdGhlIE1hc3RyYS1pbnN0YW5jZS1sZXZlbCBzdG9yYWdlIHVzZWQgZm9yIHdvcmtmbG93XG4gICAqIHNuYXBzaG90cy4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHBsdWdpbi1sZXZlbCBgc3RvcmFnZWAgaXNcbiAgICogZGlzYWJsZWQsIGluIHdoaWNoIGNhc2UgYGFnZW50LnJlc3VtZVN0cmVhbSgpYCAoYW5kIHRoZXJlZm9yZVxuICAgKiB0aGUgYHJlcXVpcmVBcHByb3ZhbGAgZmxvdykgd2lsbCBub3QgYmUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBUaGUgc3RvcmUgbGl2ZXMgaW4gYSBkZWRpY2F0ZWQgYG1hc3RyYV9pbnN0YW5jZWAgc2NoZW1hIHNvIGl0XG4gICAqIG5ldmVyIGNvbGxpZGVzIHdpdGggcGVyLWFnZW50IHtAbGluayBhZ2VudFN0b3JhZ2VTY2hlbWFOYW1lfSBuYW1lc3BhY2VzLlxuICAgKiBXb3JrZmxvdyBzbmFwc2hvdHMgYXJlIG5vdCBwZXItYWdlbnQgc3RhdGU7IHRoZXkgYmVsb25nIHRvIHRoZVxuICAgKiBgTWFzdHJhYCBpbnN0YW5jZSB0aGF0IG93bnMgdGhlIHdvcmtmbG93IGV4ZWN1dGlvbi5cbiAgICovXG4gIGluc3RhbmNlU3RvcmFnZSgpOiBQb3N0Z3Jlc1N0b3JlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzZXR0aW5nID0gdGhpcy5jb25maWcuc3RvcmFnZTtcbiAgICBpZiAoIXNldHRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBzZXR0aW5nID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gd2l0aFNvZnRTdG9yYWdlSW5pdChcbiAgICAgICAgbmV3IFBvc3RncmVzU3RvcmUoXG4gICAgICAgICAgd2l0aElkKHNldHRpbmcsIFwibWFzdHJhLXN0b3JlX19pbnN0YW5jZVwiKSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8XG4gICAgICAgICAgICB0eXBlb2YgUG9zdGdyZXNTdG9yZVxuICAgICAgICAgID5bMF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gd2l0aFNvZnRTdG9yYWdlSW5pdChcbiAgICAgIG5ldyBQb3N0Z3Jlc1N0b3JlKHtcbiAgICAgICAgaWQ6IFwibWFzdHJhLXN0b3JlX19pbnN0YW5jZVwiLFxuICAgICAgICBzY2hlbWFOYW1lOiBcIm1hc3RyYV9pbnN0YW5jZVwiLFxuICAgICAgICBwb29sOiB0aGlzLnNlcnZpY2VQcmluY2lwYWxQb29sLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGBNZW1vcnlgIGZvciBgYWdlbnRJZGAgYWZ0ZXIgdGhlIHBsdWdpbi9hZ2VudCBjYXNjYWRlLlxuICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIGFnZW50IGhhcyBuZWl0aGVyIHN0b3JhZ2Ugbm9yIGFcbiAgICogdmVjdG9yIHN0b3JlIGVuYWJsZWQgLSBNYXN0cmEgYWNjZXB0cyBhIG1pc3NpbmcgYG1lbW9yeWAgZmllbGRcbiAgICogYW5kIHRyZWF0cyB0aGUgYWdlbnQgYXMgc3RhdGVsZXNzLlxuICAgKi9cbiAgZm9yQWdlbnQoYWdlbnRJZDogc3RyaW5nLCBkZWY6IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbik6IE1lbW9yeSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RvcmFnZVNldHRpbmcgPSBkZWYuc3RvcmFnZSA/PyB0aGlzLmNvbmZpZy5zdG9yYWdlO1xuICAgIGNvbnN0IG1lbW9yeVNldHRpbmcgPSBkZWYubWVtb3J5ID8/IHRoaXMuY29uZmlnLm1lbW9yeTtcblxuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmJ1aWxkU3RvcmFnZShhZ2VudElkLCBzdG9yYWdlU2V0dGluZyk7XG4gICAgY29uc3QgdmVjdG9yID0gdGhpcy5idWlsZFZlY3RvcihtZW1vcnlTZXR0aW5nKTtcbiAgICBpZiAoIXN0b3JhZ2UgJiYgIXZlY3Rvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiYWdlbnQ6c3RhdGVsZXNzXCIsIHsgYWdlbnRJZCB9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFwiYWdlbnQ6Y29uZmlndXJlZFwiLCB7XG4gICAgICBhZ2VudElkLFxuICAgICAgc3RvcmFnZTogc3RvcmFnZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgdmVjdG9yOiB2ZWN0b3IgIT09IHVuZGVmaW5lZCxcbiAgICAgIHZlY3Rvck1vZGU6XG4gICAgICAgIHZlY3RvciA9PT0gdW5kZWZpbmVkID8gXCJvZmZcIiA6IHR5cGVvZiBtZW1vcnlTZXR0aW5nID09PSBcIm9iamVjdFwiID8gXCJkZWRpY2F0ZWRcIiA6IFwic2hhcmVkXCIsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IE1lbW9yeSh7XG4gICAgICAuLi4oc3RvcmFnZSA/IHsgc3RvcmFnZSB9IDoge30pLFxuICAgICAgLi4uKHZlY3RvciA/IHsgdmVjdG9yLCBlbWJlZGRlcjogZmFzdGVtYmVkIH0gOiB7fSksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGxhc3RNZXNzYWdlczogMTAsXG4gICAgICAgIC4uLih2ZWN0b3IgPyB7IHNlbWFudGljUmVjYWxsOiB7IHRvcEs6IDMsIG1lc3NhZ2VSYW5nZTogMiB9IH0gOiB7fSksXG4gICAgICAgIC8vIEF1dG8tbmFtZSBlYWNoIHRocmVhZCBmcm9tIGl0cyBvcGVuaW5nIHR1cm4gc28gdGhlXG4gICAgICAgIC8vIGNvbnZlcnNhdGlvbiBsaXN0IHRoZSBVSSByZW5kZXJzIHNob3dzIG1lYW5pbmdmdWwgdGl0bGVzXG4gICAgICAgIC8vIGluc3RlYWQgb2YgcmF3IGlkcy4gVGl0bGluZyBydW5zIG9uIHRoZSBzbWFsbCAvIGZhc3QgY2hhdFxuICAgICAgICAvLyB0aWVyIChzZWUgYHN1bW1hcml6ZS50c2ApIHJhdGhlciB0aGFuIHRoZSBhZ2VudCdzIHByaW1hcnlcbiAgICAgICAgLy8gbW9kZWwsIHNvIG5hbWluZyBhIHRocmVhZCBuZXZlciBzcGVuZHMgdGhlIGhlYXZ5d2VpZ2h0IG1vZGVsLlxuICAgICAgICAvLyBPbmx5IG1lYW5pbmdmdWwgd2hlbiBzdG9yYWdlIGlzIG9uOyBoYXJtbGVzcyBvdGhlcndpc2UuXG4gICAgICAgIC4uLihzdG9yYWdlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGdlbmVyYXRlVGl0bGU6IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogc3VtbWFyeU1vZGVsKHRoaXMuY29uZmlnKSxcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnM6IFRJVExFX0lOU1RSVUNUSU9OUyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3RvcmFnZShhZ2VudElkOiBzdHJpbmcsIHNldHRpbmc6IFN0b3JhZ2VTZXR0aW5nKTogUG9zdGdyZXNTdG9yZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzZXR0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2Ygc2V0dGluZyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgICBuZXcgUG9zdGdyZXNTdG9yZSh7XG4gICAgICAgICAgaWQ6IGBtYXN0cmEtc3RvcmVfXyR7YWdlbnRJZH1gLFxuICAgICAgICAgIHNjaGVtYU5hbWU6IGFnZW50U3RvcmFnZVNjaGVtYU5hbWUoYWdlbnRJZCksXG4gICAgICAgICAgcG9vbDogdGhpcy5zZXJ2aWNlUHJpbmNpcGFsUG9vbCxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBDYXN0OiBgd2l0aElkYCBndWFyYW50ZWVzIGBpZGAgaXMgc2V0LCBidXQgdGhlIGRpc3RyaWJ1dGl2ZVxuICAgIC8vIE9taXQgKyBgaWQ/OiBzdHJpbmdgIHNoYXBlIGRvZXNuJ3Qgc3RydWN0dXJhbGx5IG5hcnJvdyB0byB0aGVcbiAgICAvLyBkaXNjcmltaW5hdGVkIHVuaW9uIG1lbWJlcnMuIFJ1bnRpbWUgc2hhcGUgaXMgaWRlbnRpY2FsLlxuICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgbmV3IFBvc3RncmVzU3RvcmUoXG4gICAgICAgIHdpdGhJZChzZXR0aW5nLCBgbWFzdHJhLXN0b3JlX18ke2FnZW50SWR9YCkgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFxuICAgICAgICAgIHR5cGVvZiBQb3N0Z3Jlc1N0b3JlXG4gICAgICAgID5bMF0sXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYWdlbnQncyB2ZWN0b3Igc3RvcmUuIENhc2NhZGU6XG4gICAqXG4gICAqIC0gZmFsc3k6IG5vIHZlY3Rvci5cbiAgICogLSBgYm9vbGVhbmAgLyBgdW5kZWZpbmVkLWluaGVyaXRpbmctdHJ1ZWA6IHJldHVybiB0aGUgc2hhcmVkXG4gICAqICAgc2luZ2xldG9uIChidWlsdCBsYXppbHkgb24gZmlyc3QgY2FsbCkuIEFsbCBhZ2VudHMgdGhhdFxuICAgKiAgIGRlZmF1bHQtZW5hYmxlIG1lbW9yeSB3cml0ZSBpbnRvIGFuZCByZWNhbGwgZnJvbSBvbmUgaW5kZXguXG4gICAqIC0gb2JqZWN0OiBidWlsZCBhIGRlZGljYXRlZCBgUGdWZWN0b3JgIGZvciB0aGlzIGFnZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFZlY3RvcihzZXR0aW5nOiBNZW1vcnlTZXR0aW5nKTogUGdWZWN0b3IgfCB1bmRlZmluZWQge1xuICAgIGlmICghc2V0dGluZykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIHNldHRpbmcgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gdGhpcy5nZXRTaGFyZWRWZWN0b3IoKTtcbiAgICByZXR1cm4gYnVpbGRQZ1ZlY3RvcihzZXR0aW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2hhcmVkVmVjdG9yKCk6IFBnVmVjdG9yIHtcbiAgICBpZiAoIXRoaXMuc2hhcmVkVmVjdG9yKSB7XG4gICAgICB0aGlzLnNoYXJlZFZlY3RvciA9IGJ1aWxkU2hhcmVkUGdWZWN0b3IodGhpcy5zZXJ2aWNlUHJpbmNpcGFsUG9vbCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNoYXJlZFZlY3RvcjtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBzaGFyZWQgYFBnVmVjdG9yYCB0aGF0IGJhY2tzIHRoZSBkZWZhdWx0XG4gKiBgZGVmLm1lbW9yeSA9PT0gdHJ1ZWAgY2FzZSBhY3Jvc3MgZXZlcnkgYWdlbnQuXG4gKlxuICogYFBnVmVjdG9yYCdzIGNvbnN0cnVjdG9yIGFjY2VwdHMgb25seSBjb25uZWN0aW9uLXN0eWxlIGNvbmZpZ3NcbiAqIChgSG9zdENvbmZpZ2AgLyBgQ29ubmVjdGlvblN0cmluZ0NvbmZpZ2AgLyBgQ2xpZW50Q29uZmlnYCk7IHRoZXJlIGlzXG4gKiBubyBgeyBwb29sIH1gIHNob3J0aGFuZCB0aGUgd2F5IGBQb3N0Z3Jlc1N0b3JlYCBoYXMgb25lLiBXb3JzZSwgdGhlXG4gKiBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGtpY2tzIG9mZiBhIGBjYWNoZVdhcm11cFByb21pc2VgIElJRkUgdGhhdFxuICogY2FsbHMgYHRoaXMucG9vbC5jb25uZWN0KClgIGJlZm9yZSByZXR1cm5pbmcsIHNvIHdlIGNhbid0IGNsZWFubHlcbiAqIGhhbmQgaXQgYW4gaW5lcnQgY29uZmlnIGFuZCBwYXRjaCB0aGUgcG9vbCBhZnRlcndhcmRzLlxuICpcbiAqIFRoZSB0cmljazogcGFzcyBpbGxlZ2FsLWJ1dC12YWxpZGF0aW9uLXBhc3NpbmcgcGxhY2Vob2xkZXJzIHNvIHRoZVxuICogd2FybXVwJ3MgYG5ldC5jb25uZWN0KClgIHJlamVjdHMgc3luY2hyb25vdXNseSB3aXRoIGBSYW5nZUVycm9yYFxuICogKE5vZGUgdmFsaWRhdGVzIGAwIDw9IHBvcnQgPCA2NTUzNmApLiBUaGUgSUlGRSdzIGBjYXRjaCB7fWAgc3dhbGxvd3NcbiAqIGl0LCBubyBETlMgbG9va3VwIG9yIFRDUCBhdHRlbXB0IGhhcHBlbnMsIGFuZCB3ZSB0aGVuIHN3YXBcbiAqIGBwZ1ZlY3Rvci5wb29sYCB0byB0aGUgbGFrZWJhc2UgcG9vbC4gRXZlcnkgc3Vic2VxdWVudCBgUGdWZWN0b3JgXG4gKiBtZXRob2QgcmVhZHMgYHRoaXMucG9vbGAgYXQgY2FsbCB0aW1lLCBzbyBhbGwgcmVhbCBJL08gZ29lcyB0aHJvdWdoXG4gKiB0aGUgbGFrZWJhc2UgcG9vbCBmcm9tIHRoZW4gb24uIFRoZSBwbGFjZWhvbGRlciBwb29sIGlzIGAuZW5kKClgJ2RcbiAqIHNvIGl0cyBzb2NrZXQgYm9vay1rZWVwaW5nIGlzIHJlbGVhc2VkLlxuICovXG5mdW5jdGlvbiBidWlsZFNoYXJlZFBnVmVjdG9yKHBvb2w6IFBvb2wpOiBQZ1ZlY3RvciB7XG4gIGNvbnN0IHZlY3RvciA9IG5ldyBQZ1ZlY3Rvcih7XG4gICAgaWQ6IGBwZyR7aGFzaC5pZCgpfWAsXG4gICAgLy8gS2VlcCB0aGUgcmVjYWxsIGluZGV4IG91dCBvZiBgcHVibGljYDogb24gYSBMYWtlYmFzZSBkYXRhYmFzZSB0aGUgYXBwXG4gICAgLy8gc2VydmljZSBwcmluY2lwYWwgaGFzIG5vIENSRUFURSBvbiBgcHVibGljYCAoUEcxNSsgbG9ja3MgaXQgZG93biksIHNvIGFcbiAgICAvLyBkZWZhdWx0LXNjaGVtYSBQZ1ZlY3RvciBmYWlscyBvbiBDUkVBVEUgSU5ERVggd2l0aCBcInBlcm1pc3Npb24gZGVuaWVkIGZvclxuICAgIC8vIHNjaGVtYSBwdWJsaWNcIi4gUGdWZWN0b3IgcnVucyBDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgZm9yIGEgbmFtZWRcbiAgICAvLyBzY2hlbWEsIHNvIHRoZSBTUCBjcmVhdGVzIGFuZCBvd25zIGBtYXN0cmFfaW5zdGFuY2VgICh0aGUgc2FtZVxuICAgIC8vIGluc3RhbmNlLWxldmVsIHNjaGVtYSB0aGUgd29ya2Zsb3ctc25hcHNob3Qgc3RvcmUgdXNlcykgYW5kIHRoZSBpbmRleFxuICAgIC8vIGxhbmRzIHRoZXJlLiBUYWJsZSBuYW1lcyBkb24ndCBjb2xsaWRlIHdpdGggdGhlIHN0b3JhZ2UgdGFibGVzLlxuICAgIHNjaGVtYU5hbWU6IFwibWFzdHJhX2luc3RhbmNlXCIsXG4gICAgaG9zdDogXCItMVwiLFxuICAgIHBvcnQ6IC0xLFxuICAgIGRhdGFiYXNlOiBcIl9cIixcbiAgICB1c2VyOiBcIl9cIixcbiAgICBwYXNzd29yZDogXCJfXCIsXG4gIH0pO1xuICBjb25zdCBwbGFjZWhvbGRlciA9IHZlY3Rvci5wb29sO1xuICB2ZWN0b3IucG9vbCA9IHBvb2w7XG4gIHZvaWQgcGxhY2Vob2xkZXIuZW5kKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuLyoqIFBlci1hZ2VudCBkZWRpY2F0ZWQgYFBnVmVjdG9yYCAocmFyZTsgb3B0LWluIHZpYSBvYmplY3Qgb3ZlcnJpZGUpLiAqL1xuZnVuY3Rpb24gYnVpbGRQZ1ZlY3RvcihzZXR0aW5nOiBNYXN0cmFNZW1vcnlDb25maWdPdmVycmlkZSk6IFBnVmVjdG9yIHtcbiAgcmV0dXJuIG5ldyBQZ1ZlY3RvcihcbiAgICB3aXRoSWQoc2V0dGluZywgYHBnLXZlY3Rvcl9fJHtoYXNoLmlkKCl9YCkgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBQZ1ZlY3Rvcj5bMF0sXG4gICk7XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhpcyBzZXR0aW5nIHJlcXVpcmVzIHRoZSBzaGFyZWQgTGFrZWJhc2UgcG9vbC4gKi9cbmZ1bmN0aW9uIHNldHRpbmdOZWVkc1NoYXJlZFBvb2woc2V0dGluZzogU3RvcmFnZVNldHRpbmcgfCBNZW1vcnlTZXR0aW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBzZXR0aW5nID09PSB0cnVlO1xufVxuXG4vKiogV2FsayB0aGUgdGhyZWUgc2hhcGVzIG9mIGBjb25maWcuYWdlbnRzYCBpbnRvIGEgZmxhdCBsaXN0LiAqL1xuZnVuY3Rpb24gY29sbGVjdEFnZW50RGVmaW5pdGlvbnMoY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpOiBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25bXSB7XG4gIGNvbnN0IGFnZW50cyA9IGNvbmZpZy5hZ2VudHM7XG4gIGlmICghYWdlbnRzKSByZXR1cm4gW107XG4gIGlmIChBcnJheS5pc0FycmF5KGFnZW50cykpIHJldHVybiBhZ2VudHM7XG4gIGlmIChcImluc3RydWN0aW9uc1wiIGluIGFnZW50cykge1xuICAgIHJldHVybiBbYWdlbnRzIGFzIEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbl07XG4gIH1cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoYWdlbnRzKTtcbn1cblxuLyoqIEZpbGwgaW4gYSBkZWZhdWx0IGBpZGAgd2hlbiB0aGUgY2FsbGVyIGRpZG4ndCBzdXBwbHkgb25lLiAqL1xuZnVuY3Rpb24gd2l0aElkPFQgZXh0ZW5kcyB7IGlkPzogc3RyaW5nIH0+KHZhbHVlOiBULCBmYWxsYmFjazogc3RyaW5nKTogVCB7XG4gIHJldHVybiB2YWx1ZS5pZCA/IHZhbHVlIDogeyAuLi52YWx1ZSwgaWQ6IGZhbGxiYWNrIH07XG59XG4iXX0=
@@ -27,6 +27,8 @@ import type { MastraModelConfig } from "@mastra/core/llm";
27
27
  import type { RequestContext } from "@mastra/core/request-context";
28
28
  import { type MastraPluginConfig } from "./config.ts";
29
29
  type ModelClass = model.ModelClass;
30
+ /** Pick the native Databricks inference surface required by a resolved model. */
31
+ export declare function servingApi(modelId: string): "chat" | "responses";
30
32
  /** Optional overrides accepted by {@link buildModel}. */
31
33
  export interface BuildModelOverrides {
32
34
  /**
package/lib/src/model.js CHANGED
@@ -24,12 +24,17 @@
24
24
  */
25
25
  import { getExecutionContext } from "@databricks/appkit";
26
26
  import { classes, invoke, resolve } from "@dbx-tools/model";
27
+ import { ModelServingApi, modelServingApi } from "@dbx-tools/model-rs";
27
28
  import { functionModule, json, log, net } from "@dbx-tools/shared-core";
28
29
  import { MASTRA_USER_KEY } from "./config.js";
29
30
  import { rewriteServingRequest, rewriteServingResponseBody, rewriteServingResponseStream, } from "./serving-sanitize.js";
30
31
  import { MASTRA_MODEL_OVERRIDE_KEY, resolveServingConfig } from "./serving.js";
31
32
  const { parseModelClass } = classes;
32
33
  const { selectModel } = resolve;
34
+ /** Pick the native Databricks inference surface required by a resolved model. */
35
+ export function servingApi(modelId) {
36
+ return modelServingApi(modelId) === ModelServingApi.Responses ? "responses" : "chat";
37
+ }
33
38
  /**
34
39
  * Resolve a `MastraModelConfig` for the current agent step. Runs
35
40
  * while `agent.stream` is inside the `asUser(req)` scope so tokens
@@ -89,6 +94,7 @@ export async function buildModel(config, requestContext, overrides = {}) {
89
94
  modelId,
90
95
  url,
91
96
  headers: Object.fromEntries(headers.entries()),
97
+ api: servingApi(modelId),
92
98
  };
93
99
  }
94
100
  /** Chat Completions route whose provider-specific wire shapes are normalized here. */
@@ -168,4 +174,4 @@ function rebuildServingResponse(response, body) {
168
174
  headers,
169
175
  });
170
176
  }
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBS3hFLE9BQU8sRUFBRSxlQUFlLEVBQXNDLE1BQU0sYUFBYSxDQUFDO0FBQ2xGLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLDRCQUE0QixHQUM3QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUcvRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBQ3BDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7QUFxQmhDOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsVUFBVSxDQUM5QixNQUEwQixFQUMxQixjQUE4QixFQUM5QixZQUFpQyxFQUFFO0lBRW5DLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztJQUM3QixrRUFBa0U7SUFDbEUscUVBQXFFO0lBQ3JFLHFFQUFxRTtJQUNyRSxxRUFBcUU7SUFDckUsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQXFCLENBQUM7SUFDckUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEVBQUUsZ0JBQWdCLElBQUksbUJBQW1CLEVBQUUsQ0FBQztJQUN6RSxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENB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QixDQUFDLENBQUM7SUFDbkMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7UUFDeEIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1FBQ3ZCLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtRQUMvQixPQUFPO0tBQ1IsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGF0YWJyaWNrcyBNb2RlbCBTZXJ2aW5nIHJlc29sdmVyIGZvciBNYXN0cmEgYWdlbnRzLlxuICpcbiAqIEVhY2ggYWdlbnQgc3RlcCBjYWxscyB7QGxpbmsgYnVpbGRNb2RlbH0gd2l0aCB0aGUgYWN0aXZlXG4gKiBgUmVxdWVzdENvbnRleHRgLiBUaGUgdXNlciBzdGFtcGVkIGJ5IGBNYXN0cmFTZXJ2ZXJgIGNhcnJpZXMgYW5cbiAqIEFwcEtpdCBgV29ya3NwYWNlQ2xpZW50YDsgd2UgYXNrIGl0IGZvciB0aGUgd29ya3NwYWNlIGhvc3QgYW5kIGFcbiAqIGZyZXNoIGJlYXJlciBoZWFkZXIsIHRoZW4gcG9pbnQgTWFzdHJhJ3MgT3BlbkFJLWNvbXBhdGlibGUgcHJvdmlkZXJcbiAqIGF0IGAvc2VydmluZy1lbmRwb2ludHNgIG9uIHRoYXQgaG9zdC5cbiAqXG4gKiBUaGlzIG1vZHVsZSBvbmx5IGFkZHMgdGhlIE1hc3RyYS1zcGVjaWZpYyBnbHVlLiBUaGUgYWN0dWFsIG1vZGVsXG4gKiBzZWxlY3Rpb24gLSBsaXN0aW5nIHRoZSB3b3Jrc3BhY2UgY2F0YWxvZ3VlIGFuZCByZXNvbHZpbmcgYW5cbiAqIGV4cGxpY2l0IG5hbWUgLyBjbGFzcyAvIGZhbGxiYWNrIGNoYWluIHRvIGEgcmVhbCBlbmRwb2ludCBpZCAtIGxpdmVzXG4gKiBpbiBgQGRieC10b29scy9tb2RlbGAgKHtAbGluayBzZWxlY3RNb2RlbH0pIHNvIG5vbi1NYXN0cmEgY29uc3VtZXJzXG4gKiAoZS5nLiBhIGpvYiB0aGF0IGp1c3QgbmVlZHMgYSBtb2RlbCBuYW1lKSBjYW4gcmV1c2UgaXQuIEhlcmUgd2VcbiAqIGFzc2VtYmxlIHRoZSBleHBsaWNpdCBhc2sgZnJvbSBNYXN0cmEncyByZXF1ZXN0IGNvbnRleHQgKHRoZVxuICogcGVyLXJlcXVlc3Qgb3ZlcnJpZGUgdW5kZXIge0BsaW5rIE1BU1RSQV9NT0RFTF9PVkVSUklERV9LRVl9LCB0aGVcbiAqIGFnZW50IC8gcGx1Z2luIGBtb2RlbElkYCwgb3IgYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYCksXG4gKiBwYXNzIHRoZSBwbHVnaW4ncyBmdXp6eSAvIGNsYXNzIC8gZmFsbGJhY2sga25vYnMgdGhyb3VnaCwgYW5kIHdyYXBcbiAqIHRoZSByZXNvbHZlZCBpZCBpbiB0aGUgT3BlbkFJLWNvbXBhdGlibGUgcHJvdmlkZXIgY29uZmlnIE1hc3RyYVxuICogZXhwZWN0cy4gQ2F0YWxvZ3VlIGZldGNoZXMgZmFpbCBsb3VkOiBuZXR3b3JrIC8gYXV0aCBlcnJvcnNcbiAqIHByb3BhZ2F0ZSBzbyBjYWxsZXJzIHNlZSB0aGUgcmVhbCBTREsgbWVzc2FnZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGNsYXNzZXMsIGludm9rZSwgcmVzb2x2ZSB9IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5pbXBvcnQgeyBmdW5jdGlvbk1vZHVsZSwganNvbiwgbG9nLCBuZXQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgbW9kZWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTWFzdHJhTW9kZWxDb25maWcgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2xsbVwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5cbmltcG9ydCB7IE1BU1RSQV9VU0VSX0tFWSwgdHlwZSBNYXN0cmFQbHVnaW5Db25maWcsIHR5cGUgVXNlciB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHtcbiAgcmV3cml0ZVNlcnZpbmdSZXF1ZXN0LFxuICByZXdyaXRlU2VydmluZ1Jlc3BvbnNlQm9keSxcbiAgcmV3cml0ZVNlcnZpbmdSZXNwb25zZVN0cmVhbSxcbn0gZnJvbSBcIi4vc2VydmluZy1zYW5pdGl6ZS50c1wiO1xuaW1wb3J0IHsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWSwgcmVzb2x2ZVNlcnZpbmdDb25maWcgfSBmcm9tIFwiLi9zZXJ2aW5nLnRzXCI7XG5cbnR5cGUgTW9kZWxDbGFzcyA9IG1vZGVsLk1vZGVsQ2xhc3M7XG5jb25zdCB7IHBhcnNlTW9kZWxDbGFzcyB9ID0gY2xhc3NlcztcbmNvbnN0IHsgc2VsZWN0TW9kZWwgfSA9IHJlc29sdmU7XG5cbi8qKiBPcHRpb25hbCBvdmVycmlkZXMgYWNjZXB0ZWQgYnkge0BsaW5rIGJ1aWxkTW9kZWx9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZE1vZGVsT3ZlcnJpZGVzIHtcbiAgLyoqXG4gICAqIFN0YXRpYyBtb2RlbCBpZCBmcm9tIHRoZSBhZ2VudCAvIHBsdWdpbiBjb25maWcgKHN0cmluZyBzdWdhciBvblxuICAgKiBgZGVmLm1vZGVsYCBvciBgY29uZmlnLmRlZmF1bHRNb2RlbGApLiBMb3NlcyB0byB0aGUgcGVyLXJlcXVlc3RcbiAgICogb3ZlcnJpZGUgYnV0IHdpbnMgb3ZlciBlbnYgLyBjbGFzcyAvIGZhbGxiYWNrLlxuICAgKi9cbiAgbW9kZWxJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIENoYXQgY2FwYWJpbGl0eSBjbGFzcyB0byByZXNvbHZlIHdoZW4gbm8gZXhwbGljaXQgbW9kZWwgaWQgaXNcbiAgICogc3VwcGxpZWQuIFVzZWQgYnkgaW50ZXJuYWwgYWdlbnRzIChlLmcuIHRoZSBjaGFydCBwbGFubmVyIGFza3MgZm9yXG4gICAqIHtAbGluayBtb2RlbC5Nb2RlbENsYXNzLkNoYXRGYXN0fSkgdG8gZXhwcmVzcyBpbnRlbnQgd2l0aG91dCBwaW5uaW5nIGFuXG4gICAqIGVuZHBvaW50IG5hbWU7IHRoZSBsaXZlIGNhdGFsb2d1ZSBpcyBjbGFzc2lmaWVkIGFuZCB0aGUgdG9wXG4gICAqIGF2YWlsYWJsZSBtb2RlbCBpbiB0aGUgY2xhc3MgaXMgY2hvc2VuLCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4gICAqIGNsYXNzJ3Mgc3RhdGljIGxpc3Qgd2hlbiB0aGUgd29ya3NwYWNlIGhhcyBub25lLlxuICAgKi9cbiAgbW9kZWxDbGFzcz86IE1vZGVsQ2xhc3M7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGBNYXN0cmFNb2RlbENvbmZpZ2AgZm9yIHRoZSBjdXJyZW50IGFnZW50IHN0ZXAuIFJ1bnNcbiAqIHdoaWxlIGBhZ2VudC5zdHJlYW1gIGlzIGluc2lkZSB0aGUgYGFzVXNlcihyZXEpYCBzY29wZSBzbyB0b2tlbnNcbiAqIGFyZSB1c2VyLXNjb3BlZDsgb3V0c2lkZSBhbiBhY3RpdmUgdXNlciBjb250ZXh0IHRoZSB3b3Jrc3BhY2VcbiAqIGNsaWVudCBmYWxscyBiYWNrIHRvIHRoZSBzZXJ2aWNlIHByaW5jaXBhbC5cbiAqXG4gKiBFbmRwb2ludCBwcmVjZWRlbmNlOiB0aGUgcGVyLXJlcXVlc3Qgb3ZlcnJpZGVcbiAqICh7QGxpbmsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWX0sIG9ubHkgd2hlbiBgY29uZmlnLm1vZGVsT3ZlcnJpZGVgIGFsbG93c1xuICogaXQpLCB0aGVuIHtAbGluayBCdWlsZE1vZGVsT3ZlcnJpZGVzLm1vZGVsSWR9IGZyb20gdGhlIGFnZW50IC8gcGx1Z2luXG4gKiBjb25maWcsIHRoZW4gYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYC4gV2l0aCBub25lIG9mIHRob3NlIHNldCB0aGVcbiAqIGNhcGFiaWxpdHkgY2xhc3MgYW5kIGZhbGxiYWNrIGxhZGRlciBpbiBgQGRieC10b29scy9tb2RlbGAgY2hvb3NlIHRoZVxuICogZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZE1vZGVsKFxuICBjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyxcbiAgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0LFxuICBvdmVycmlkZXM6IEJ1aWxkTW9kZWxPdmVycmlkZXMgPSB7fSxcbik6IFByb21pc2U8TWFzdHJhTW9kZWxDb25maWc+IHtcbiAgdm9pZCBzZXR1cEZldGNoSW50ZXJjZXB0b3IoKTtcbiAgLy8gVGhlIGNoYXQgcGF0aCBzdGFtcHMgdGhlIEFwcEtpdCB1c2VyIG9uIHRoZSByZXF1ZXN0IGNvbnRleHQgdmlhXG4gIC8vIGBNYXN0cmFTZXJ2ZXJgLiBUaGUgTUNQIHRyYW5zcG9ydCByb3V0ZXMgZG9uJ3QgdGhyZWFkIHRoYXQgY29udGV4dFxuICAvLyBpbnRvIHRvb2wgZXhlY3V0aW9uLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGFtYmllbnQgZXhlY3V0aW9uIGNvbnRleHRcbiAgLy8gKHRoZSBhY3RpdmUgT0JPIHNjb3BlLCBvciB0aGUgc2VydmljZSBwcmluY2lwYWwpIHdoZW4gaXQncyBhYnNlbnQuXG4gIGNvbnN0IHVzZXIgPSByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfS0VZKSBhcyBVc2VyIHwgdW5kZWZpbmVkO1xuICBjb25zdCBleGVjdXRpb25Db250ZXh0ID0gdXNlcj8uZXhlY3V0aW9uQ29udGV4dCA/PyBnZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gIGNvbnN0IGNsaWVudENvbmZpZyA9IGV4ZWN1dGlvbkNvbnRleHQuY2xpZW50LmNvbmZpZztcbiAgY29uc3QgaG9zdCA9IChhd2FpdCBjbGllbnRDb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpO1xuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgYXdhaXQgY2xpZW50Q29uZmlnLmF1dGhlbnRpY2F0ZShoZWFkZXJzKTtcbiAgLy8gVGhlIE9wZW5BSSBOb2RlIFNESyBhcHBlbmRzIHBhdGhzIGxpa2UgYC9jaGF0L2NvbXBsZXRpb25zYCB0byB3aGF0ZXZlclxuICAvLyBVUkwgd2UgaGFuZCBpdC4gRHJvcCB0aGUgdHJhaWxpbmcgc2xhc2ggc28gdGhlIHJlc3VsdGluZyBVUkwgc3RheXNcbiAgLy8gd2VsbC1mb3JtZWQgKGAvc2VydmluZy1lbmRwb2ludHMvY2hhdC9jb21wbGV0aW9uc2ApLlxuICBjb25zdCB1cmwgPSBuZXcgVVJMKFwiL3NlcnZpbmctZW5kcG9pbnRzXCIsIGhvc3QpLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuXG4gIGNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoY29uZmlnKTtcbiAgY29uc3Qgc2VydmluZyA9IHJlc29sdmVTZXJ2aW5nQ29uZmlnKGNvbmZpZyk7XG4gIGNvbnN0IG92ZXJyaWRlID0gc2VydmluZy5hbGxvd092ZXJyaWRlXG4gICAgPyAocmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9NT0RFTF9PVkVSUklERV9LRVkpIGFzIHN0cmluZyB8IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcblxuICAvLyBUaGUgb3ZlcnJpZGUgLyBhZ2VudCBkZWZhdWx0IC8gZW52IHZhbHVlIGNhbiBiZSBlaXRoZXIgYSBjb25jcmV0ZVxuICAvLyBlbmRwb2ludCBuYW1lIG9yIGEgbW9kZWwgY2xhc3Mgc2x1ZyAoXCJjaGF0LXRoaW5raW5nXCIgL1xuICAvLyBcImNoYXQtYmFsYW5jZWRcIiAvIFwiY2hhdC1mYXN0XCIpLiBBIGNsYXNzIHNsdWcgYmVjb21lcyBhIGNsYXNzIGludGVudFxuICAvLyAobGV0IHRoZSBsaXZlIGNhdGFsb2d1ZSBwaWNrIHRoZSBiZXN0IG1vZGVsIGluIHRoYXQgYmFuZCk7IGFueXRoaW5nXG4gIC8vIGVsc2UgaXMgYW4gZXhwbGljaXQgbmFtZSBmdXp6eS1tYXRjaGVkIGFnYWluc3QgdGhlIGNhdGFsb2d1ZS4gQW5cbiAgLy8gaW50ZXJuYWwgYG92ZXJyaWRlcy5tb2RlbENsYXNzYCAoZS5nLiB0aGUgY2hhcnQgcGxhbm5lcikgaXMgdGhlXG4gIC8vIGZsb29yIHdoZW4gbm90aGluZyB3YXMgcmVxdWVzdGVkLlxuICBjb25zdCByZXF1ZXN0ZWQgPSBvdmVycmlkZSA/PyBvdmVycmlkZXMubW9kZWxJZCA/PyBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRTtcbiAgY29uc3QgcmVxdWVzdGVkQ2xhc3MgPSByZXF1ZXN0ZWQgIT09IHVuZGVmaW5lZCA/IHBhcnNlTW9kZWxDbGFzcyhyZXF1ZXN0ZWQpIDogbnVsbDtcbiAgY29uc3QgZXhwbGljaXQgPSByZXF1ZXN0ZWRDbGFzcyA9PT0gbnVsbCA/IHJlcXVlc3RlZCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbW9kZWxDbGFzcyA9IHJlcXVlc3RlZENsYXNzID8/IG92ZXJyaWRlcy5tb2RlbENsYXNzO1xuXG4gIGNvbnN0IHsgbW9kZWxJZCwgc291cmNlIH0gPSBhd2FpdCBzZWxlY3RNb2RlbChleGVjdXRpb25Db250ZXh0LmNsaWVudCwgaG9zdCwge1xuICAgIC4uLihleHBsaWNpdCAhPT0gdW5kZWZpbmVkID8geyBleHBsaWNpdCB9IDoge30pLFxuICAgIGZ1enp5OiBzZXJ2aW5nLmZ1enp5LFxuICAgIHRocmVzaG9sZDogc2VydmluZy50aHJlc2hvbGQsXG4gICAgLi4uKG1vZGVsQ2xhc3MgIT09IHVuZGVmaW5lZCA/IHsgbW9kZWxDbGFzcyB9IDoge30pLFxuICAgIGZhbGxiYWNrczogc2VydmluZy5mYWxsYmFja3MsXG4gICAgdHRsTXM6IHNlcnZpbmcudHRsTXMsXG4gIH0pO1xuICBsb2dnZXIuZGVidWcoXCJtb2RlbCBzZWxlY3RlZFwiLCB7IG1vZGVsSWQsIHNvdXJjZSwgcmVxdWVzdGVkIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcHJvdmlkZXJJZDogY29uZmlnLnByb3ZpZGVySWQgPz8gXCJkYXRhYnJpY2tzXCIsXG4gICAgbW9kZWxJZCxcbiAgICB1cmwsXG4gICAgaGVhZGVyczogT2JqZWN0LmZyb21FbnRyaWVzKGhlYWRlcnMuZW50cmllcygpKSxcbiAgfTtcbn1cblxuLyoqIENoYXQgQ29tcGxldGlvbnMgcm91dGUgd2hvc2UgcHJvdmlkZXItc3BlY2lmaWMgd2lyZSBzaGFwZXMgYXJlIG5vcm1hbGl6ZWQgaGVyZS4gKi9cbmNvbnN0IENIQVRfQ09NUExFVElPTlNfUEFUSCA9IGAvJHtpbnZva2UuQ0hBVF9DT01QTEVUSU9OU19QQVRIfWA7XG5cbi8qKlxuICogSW5zdGFsbCBhIHNpbmdsZSBzaGFyZWQgYGdsb2JhbFRoaXMuZmV0Y2hgIHdyYXBwZXIgZm9yIENoYXQgQ29tcGxldGlvbnNcbiAqIHJlcXVlc3RzLiBUaGUgd3JhcHBlciBkb2VzIHRocmVlIHRoaW5nczpcbiAqXG4gKiAgIDEuIFJld3JpdGVzIG91dGdvaW5nIEpTT04gZnJvbSBlaXRoZXIgYGluaXQuYm9keWAgb3IgYSBgUmVxdWVzdGAgdG8gcmVwYWlyXG4gKiAgICAgIHByb3ZpZGVyLXNwZWNpZmljIHJlcXVlc3QgY29uc3RyYWludHMgKHNlZSB7QGxpbmsgcmV3cml0ZVNlcnZpbmdSZXF1ZXN0fVxuICogICAgICBpbiBgLi9zZXJ2aW5nLXNhbml0aXplLmpzYCkuXG4gKiAgIDIuIEF0IGBMT0dfTEVWRUw9ZGVidWdgLCBkdW1wcyB0aGUgKHBvc3Qtc2FuaXRpemUpIEpTT04gYm9keSBzb1xuICogICAgICA0eHggZGVidWdnaW5nIGRvZXNuJ3QgaGF2ZSB0byBmaWdodCBBSSBTREsncyBgW0FycmF5XWBcbiAqICAgICAgZm9ybWF0dGVyLlxuICogICAzLiBSZXBhaXJzIGJ1ZmZlcmVkIGFuZCBzdHJlYW1pbmcgcmVzcG9uc2VzIHdoZXJlIGEgcHJvdmlkZXIgcmV0dXJuc1xuICogICAgICBgY2hvaWNlc1tdLm1lc3NhZ2UuY29udGVudGAgb3IgYGNob2ljZXNbXS5kZWx0YS5jb250ZW50YCBhcyBhIHBhcnRzXG4gKiAgICAgIGFycmF5IHRoYXQgdGhlIEFJIFNESydzIE9wZW5BSSBzY2hlbWEgcmVqZWN0cy5cbiAqXG4gKiBTYWZlIHRvIGNhbGwgZnJvbSBhbnkgaG90IHBhdGg6IHtAbGluayBmdW5jdGlvbk1vZHVsZS5tZW1vaXplfSBlbnN1cmVzXG4gKiB0aGUgd3JhcHBlciBpcyBpbnN0YWxsZWQgYXQgbW9zdCBvbmNlIHBlciBwcm9jZXNzLCBzbyBzdWJzZXF1ZW50XG4gKiBjYWxscyBhcmUgYSBuby1vcCBldmVuIHdoZW4ge0BsaW5rIGJ1aWxkTW9kZWx9IGZpcmVzIG9uIGV2ZXJ5IGFnZW50XG4gKiBzdGVwLlxuICovXG5jb25zdCBzZXR1cEZldGNoSW50ZXJjZXB0b3IgPSBmdW5jdGlvbk1vZHVsZS5tZW1vaXplKCgpOiB2b2lkID0+IHtcbiAgZ2xvYmFsVGhpcy5mZXRjaCA9IGNyZWF0ZVNlcnZpbmdGZXRjaEludGVyY2VwdG9yKGdsb2JhbFRoaXMuZmV0Y2guYmluZChnbG9iYWxUaGlzKSk7XG59KTtcblxuLyoqIEJ1aWxkIHRoZSBzZXJ2aW5nIGZldGNoIHdyYXBwZXI7IGV4cG9ydGVkIGZvciB0cmFuc3BvcnQtbGV2ZWwgcmVncmVzc2lvbiB0ZXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXJ2aW5nRmV0Y2hJbnRlcmNlcHRvcihvcmlnaW5hbDogdHlwZW9mIGZldGNoKTogdHlwZW9mIGZldGNoIHtcbiAgY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9sbG1cIik7XG4gIHJldHVybiAoYXN5bmMgKGlucHV0LCBpbml0KSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV0LnVybEJ1aWxkZXIoaW5wdXQpO1xuICAgIGNvbnN0IG1ldGhvZCA9IGluaXQ/Lm1ldGhvZCA/PyAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaW5wdXQubWV0aG9kIDogXCJHRVRcIik7XG4gICAgaWYgKCF1cmwgfHwgdXJsLnBhdGhuYW1lICE9PSBDSEFUX0NPTVBMRVRJT05TX1BBVEggfHwgbWV0aG9kLnRvVXBwZXJDYXNlKCkgIT09IFwiUE9TVFwiKSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWwoaW5wdXQsIGluaXQpO1xuICAgIH1cbiAgICBjb25zdCByZXdyaXR0ZW4gPSBhd2FpdCByZXdyaXRlU2VydmluZ1JlcXVlc3QoaW5wdXQsIGluaXQpO1xuICAgIGNvbnN0IHBhcnNlZCA9IGpzb24ucGFyc2U8dW5rbm93bj4ocmV3cml0dGVuLmJvZHkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIFwiUE9TVFwiLFxuICAgICAgcGFyc2VkID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB7IHVybDogdXJsLnRvU3RyaW5nKCksIGJvZHlUeXBlOiBcIm5vbi1KU09OXCIgfVxuICAgICAgICA6IHsgdXJsOiB1cmwudG9TdHJpbmcoKSwgYm9keTogcGFyc2VkIH0sXG4gICAgKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9yaWdpbmFsKHJld3JpdHRlbi5pbnB1dCwgcmV3cml0dGVuLmluaXQpO1xuICAgIHJldHVybiByZXBhaXJTZXJ2aW5nUmVzcG9uc2UocmVzcG9uc2UpO1xuICB9KSBhcyB0eXBlb2YgZ2xvYmFsVGhpcy5mZXRjaDtcbn1cblxuLyoqXG4gKiBSZXdyaXRlIGEgc2VydmluZyByZXNwb25zZSB3aG9zZSBib2R5IG5lZWRzIHJlcGFpciwgbGVhdmluZyB1bnN1cHBvcnRlZFxuICogY29udGVudCB0eXBlcyBieXRlLWlkZW50aWNhbC5cbiAqXG4gKiBTU0UgcmVtYWlucyBhIGxpdmUgc3RyZWFtOiBhIFRyYW5zZm9ybVN0cmVhbSByZXBhaXJzIGNvbXBsZXRlIGBkYXRhOmAgbGluZXNcbiAqIGFzIGJ5dGVzIGFycml2ZSBhbmQgcHJlc2VydmVzIHBhcnRpYWwgbGluZXMgYWNyb3NzIG5ldHdvcmsgY2h1bmtzLiBKU09OIGlzXG4gKiBidWZmZXJlZCB0aHJvdWdoIHRoZSBleGlzdGluZyByZXNwb25zZS1ib2R5IHJlcGFpci4gQSBub24tSlNPTi9ub24tU1NFIGJvZHlcbiAqIGlzIHJldHVybmVkIHVudG91Y2hlZCBzbyB0aGUgY2FsbGVyIHN0aWxsIHNlZXMgdGhlIG9yaWdpbmFsIHJlc3BvbnNlLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXBhaXJTZXJ2aW5nUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpID8/IFwiXCI7XG4gIGlmIChjb250ZW50VHlwZS5pbmNsdWRlcyhcInRleHQvZXZlbnQtc3RyZWFtXCIpICYmIHJlc3BvbnNlLmJvZHkpIHtcbiAgICByZXR1cm4gcmVidWlsZFNlcnZpbmdSZXNwb25zZShyZXNwb25zZSwgcmV3cml0ZVNlcnZpbmdSZXNwb25zZVN0cmVhbShyZXNwb25zZS5ib2R5KSk7XG4gIH1cbiAgaWYgKCFjb250ZW50VHlwZS5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikpIHJldHVybiByZXNwb25zZTtcblxuICBjb25zdCBib2R5ID0gYXdhaXQgcmVzcG9uc2UuY2xvbmUoKS50ZXh0KCk7XG4gIGNvbnN0IHJld3JpdHRlbiA9IHJld3JpdGVTZXJ2aW5nUmVzcG9uc2VCb2R5KGJvZHkpO1xuICBpZiAocmV3cml0dGVuID09PSBib2R5KSByZXR1cm4gcmVzcG9uc2U7XG4gIHJldHVybiByZWJ1aWxkU2VydmluZ1Jlc3BvbnNlKHJlc3BvbnNlLCByZXdyaXR0ZW4pO1xufVxuXG4vKiogUmVidWlsZCBhIHRyYW5zZm9ybWVkIHJlc3BvbnNlIHdpdGhvdXQgc3RhbGUgYnl0ZS1sZW5ndGgvZW5jb2RpbmcgaGVhZGVycy4gKi9cbmZ1bmN0aW9uIHJlYnVpbGRTZXJ2aW5nUmVzcG9uc2UoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgYm9keTogc3RyaW5nIHwgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4sXG4pOiBSZXNwb25zZSB7XG4gIC8vIGBjb250ZW50LWxlbmd0aGAgLyBgY29udGVudC1lbmNvZGluZ2AgZGVzY3JpYmUgdGhlIE9SSUdJTkFMIGJ5dGVzLCBzbyB0aGV5XG4gIC8vIGFyZSBkcm9wcGVkOiB0aGUgcmV3cml0dGVuIGJvZHkgaXMgYSBkaWZmZXJlbnQgbGVuZ3RoIGFuZCBhbHJlYWR5IGRlY29kZWQuXG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhyZXNwb25zZS5oZWFkZXJzKTtcbiAgaGVhZGVycy5kZWxldGUoXCJjb250ZW50LWxlbmd0aFwiKTtcbiAgaGVhZGVycy5kZWxldGUoXCJjb250ZW50LWVuY29kaW5nXCIpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGJvZHksIHtcbiAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnMsXG4gIH0pO1xufVxuIl19
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFLeEUsT0FBTyxFQUFFLGVBQWUsRUFBc0MsTUFBTSxhQUFhLENBQUM7QUFDbEYsT0FBTyxFQUNMLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsNEJBQTRCLEdBQzdCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRy9FLE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUM7QUFDcEMsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUVoQyxpRkFBaUY7QUFDakYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxPQUFlO0lBQ3hDLE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3ZGLENBQUM7QUFxQkQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQzlCLE1BQTBCLEVBQzFCLGNBQThCLEVBQzlCLFlBQWlDLEVBQUU7SUFFbkMsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO0lBQzdCLGtF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QVMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxpRkFBaUY7QUFDakYsU0FBUyxzQkFBc0IsQ0FDN0IsUUFBa0IsRUFDbEIsSUFBeUM7SUFFekMsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtRQUN4QixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07UUFDdkIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1FBQy9CLE9BQU87S0FDUixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgcmVzb2x2ZXIgZm9yIE1hc3RyYSBhZ2VudHMuXG4gKlxuICogRWFjaCBhZ2VudCBzdGVwIGNhbGxzIHtAbGluayBidWlsZE1vZGVsfSB3aXRoIHRoZSBhY3RpdmVcbiAqIGBSZXF1ZXN0Q29udGV4dGAuIFRoZSB1c2VyIHN0YW1wZWQgYnkgYE1hc3RyYVNlcnZlcmAgY2FycmllcyBhblxuICogQXBwS2l0IGBXb3Jrc3BhY2VDbGllbnRgOyB3ZSBhc2sgaXQgZm9yIHRoZSB3b3Jrc3BhY2UgaG9zdCBhbmQgYVxuICogZnJlc2ggYmVhcmVyIGhlYWRlciwgdGhlbiBwb2ludCBNYXN0cmEncyBPcGVuQUktY29tcGF0aWJsZSBwcm92aWRlclxuICogYXQgYC9zZXJ2aW5nLWVuZHBvaW50c2Agb24gdGhhdCBob3N0LlxuICpcbiAqIFRoaXMgbW9kdWxlIG9ubHkgYWRkcyB0aGUgTWFzdHJhLXNwZWNpZmljIGdsdWUuIFRoZSBhY3R1YWwgbW9kZWxcbiAqIHNlbGVjdGlvbiAtIGxpc3RpbmcgdGhlIHdvcmtzcGFjZSBjYXRhbG9ndWUgYW5kIHJlc29sdmluZyBhblxuICogZXhwbGljaXQgbmFtZSAvIGNsYXNzIC8gZmFsbGJhY2sgY2hhaW4gdG8gYSByZWFsIGVuZHBvaW50IGlkIC0gbGl2ZXNcbiAqIGluIGBAZGJ4LXRvb2xzL21vZGVsYCAoe0BsaW5rIHNlbGVjdE1vZGVsfSkgc28gbm9uLU1hc3RyYSBjb25zdW1lcnNcbiAqIChlLmcuIGEgam9iIHRoYXQganVzdCBuZWVkcyBhIG1vZGVsIG5hbWUpIGNhbiByZXVzZSBpdC4gSGVyZSB3ZVxuICogYXNzZW1ibGUgdGhlIGV4cGxpY2l0IGFzayBmcm9tIE1hc3RyYSdzIHJlcXVlc3QgY29udGV4dCAodGhlXG4gKiBwZXItcmVxdWVzdCBvdmVycmlkZSB1bmRlciB7QGxpbmsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWX0sIHRoZVxuICogYWdlbnQgLyBwbHVnaW4gYG1vZGVsSWRgLCBvciBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgKSxcbiAqIHBhc3MgdGhlIHBsdWdpbidzIGZ1enp5IC8gY2xhc3MgLyBmYWxsYmFjayBrbm9icyB0aHJvdWdoLCBhbmQgd3JhcFxuICogdGhlIHJlc29sdmVkIGlkIGluIHRoZSBPcGVuQUktY29tcGF0aWJsZSBwcm92aWRlciBjb25maWcgTWFzdHJhXG4gKiBleHBlY3RzLiBDYXRhbG9ndWUgZmV0Y2hlcyBmYWlsIGxvdWQ6IG5ldHdvcmsgLyBhdXRoIGVycm9yc1xuICogcHJvcGFnYXRlIHNvIGNhbGxlcnMgc2VlIHRoZSByZWFsIFNESyBtZXNzYWdlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY2xhc3NlcywgaW52b2tlLCByZXNvbHZlIH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IE1vZGVsU2VydmluZ0FwaSwgbW9kZWxTZXJ2aW5nQXBpIH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWwtcnNcIjtcbmltcG9ydCB7IGZ1bmN0aW9uTW9kdWxlLCBqc29uLCBsb2csIG5ldCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBtb2RlbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNYXN0cmFNb2RlbENvbmZpZyB9IGZyb20gXCJAbWFzdHJhL2NvcmUvbGxtXCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcblxuaW1wb3J0IHsgTUFTVFJBX1VTRVJfS0VZLCB0eXBlIE1hc3RyYVBsdWdpbkNvbmZpZywgdHlwZSBVc2VyIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQge1xuICByZXdyaXRlU2VydmluZ1JlcXVlc3QsXG4gIHJld3JpdGVTZXJ2aW5nUmVzcG9uc2VCb2R5LFxuICByZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtLFxufSBmcm9tIFwiLi9zZXJ2aW5nLXNhbml0aXplLnRzXCI7XG5pbXBvcnQgeyBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZLCByZXNvbHZlU2VydmluZ0NvbmZpZyB9IGZyb20gXCIuL3NlcnZpbmcudHNcIjtcblxudHlwZSBNb2RlbENsYXNzID0gbW9kZWwuTW9kZWxDbGFzcztcbmNvbnN0IHsgcGFyc2VNb2RlbENsYXNzIH0gPSBjbGFzc2VzO1xuY29uc3QgeyBzZWxlY3RNb2RlbCB9ID0gcmVzb2x2ZTtcblxuLyoqIFBpY2sgdGhlIG5hdGl2ZSBEYXRhYnJpY2tzIGluZmVyZW5jZSBzdXJmYWNlIHJlcXVpcmVkIGJ5IGEgcmVzb2x2ZWQgbW9kZWwuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmluZ0FwaShtb2RlbElkOiBzdHJpbmcpOiBcImNoYXRcIiB8IFwicmVzcG9uc2VzXCIge1xuICByZXR1cm4gbW9kZWxTZXJ2aW5nQXBpKG1vZGVsSWQpID09PSBNb2RlbFNlcnZpbmdBcGkuUmVzcG9uc2VzID8gXCJyZXNwb25zZXNcIiA6IFwiY2hhdFwiO1xufVxuXG4vKiogT3B0aW9uYWwgb3ZlcnJpZGVzIGFjY2VwdGVkIGJ5IHtAbGluayBidWlsZE1vZGVsfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRNb2RlbE92ZXJyaWRlcyB7XG4gIC8qKlxuICAgKiBTdGF0aWMgbW9kZWwgaWQgZnJvbSB0aGUgYWdlbnQgLyBwbHVnaW4gY29uZmlnIChzdHJpbmcgc3VnYXIgb25cbiAgICogYGRlZi5tb2RlbGAgb3IgYGNvbmZpZy5kZWZhdWx0TW9kZWxgKS4gTG9zZXMgdG8gdGhlIHBlci1yZXF1ZXN0XG4gICAqIG92ZXJyaWRlIGJ1dCB3aW5zIG92ZXIgZW52IC8gY2xhc3MgLyBmYWxsYmFjay5cbiAgICovXG4gIG1vZGVsSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDaGF0IGNhcGFiaWxpdHkgY2xhc3MgdG8gcmVzb2x2ZSB3aGVuIG5vIGV4cGxpY2l0IG1vZGVsIGlkIGlzXG4gICAqIHN1cHBsaWVkLiBVc2VkIGJ5IGludGVybmFsIGFnZW50cyAoZS5nLiB0aGUgY2hhcnQgcGxhbm5lciBhc2tzIGZvclxuICAgKiB7QGxpbmsgbW9kZWwuTW9kZWxDbGFzcy5DaGF0RmFzdH0pIHRvIGV4cHJlc3MgaW50ZW50IHdpdGhvdXQgcGlubmluZyBhblxuICAgKiBlbmRwb2ludCBuYW1lOyB0aGUgbGl2ZSBjYXRhbG9ndWUgaXMgY2xhc3NpZmllZCBhbmQgdGhlIHRvcFxuICAgKiBhdmFpbGFibGUgbW9kZWwgaW4gdGhlIGNsYXNzIGlzIGNob3NlbiwgZmFsbGluZyBiYWNrIHRvIHRoZVxuICAgKiBjbGFzcydzIHN0YXRpYyBsaXN0IHdoZW4gdGhlIHdvcmtzcGFjZSBoYXMgbm9uZS5cbiAgICovXG4gIG1vZGVsQ2xhc3M/OiBNb2RlbENsYXNzO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBgTWFzdHJhTW9kZWxDb25maWdgIGZvciB0aGUgY3VycmVudCBhZ2VudCBzdGVwLiBSdW5zXG4gKiB3aGlsZSBgYWdlbnQuc3RyZWFtYCBpcyBpbnNpZGUgdGhlIGBhc1VzZXIocmVxKWAgc2NvcGUgc28gdG9rZW5zXG4gKiBhcmUgdXNlci1zY29wZWQ7IG91dHNpZGUgYW4gYWN0aXZlIHVzZXIgY29udGV4dCB0aGUgd29ya3NwYWNlXG4gKiBjbGllbnQgZmFsbHMgYmFjayB0byB0aGUgc2VydmljZSBwcmluY2lwYWwuXG4gKlxuICogRW5kcG9pbnQgcHJlY2VkZW5jZTogdGhlIHBlci1yZXF1ZXN0IG92ZXJyaWRlXG4gKiAoe0BsaW5rIE1BU1RSQV9NT0RFTF9PVkVSUklERV9LRVl9LCBvbmx5IHdoZW4gYGNvbmZpZy5tb2RlbE92ZXJyaWRlYCBhbGxvd3NcbiAqIGl0KSwgdGhlbiB7QGxpbmsgQnVpbGRNb2RlbE92ZXJyaWRlcy5tb2RlbElkfSBmcm9tIHRoZSBhZ2VudCAvIHBsdWdpblxuICogY29uZmlnLCB0aGVuIGBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRWAuIFdpdGggbm9uZSBvZiB0aG9zZSBzZXQgdGhlXG4gKiBjYXBhYmlsaXR5IGNsYXNzIGFuZCBmYWxsYmFjayBsYWRkZXIgaW4gYEBkYngtdG9vbHMvbW9kZWxgIGNob29zZSB0aGVcbiAqIGVuZHBvaW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRNb2RlbChcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gIHJlcXVlc3RDb250ZXh0OiBSZXF1ZXN0Q29udGV4dCxcbiAgb3ZlcnJpZGVzOiBCdWlsZE1vZGVsT3ZlcnJpZGVzID0ge30sXG4pOiBQcm9taXNlPE1hc3RyYU1vZGVsQ29uZmlnPiB7XG4gIHZvaWQgc2V0dXBGZXRjaEludGVyY2VwdG9yKCk7XG4gIC8vIFRoZSBjaGF0IHBhdGggc3RhbXBzIHRoZSBBcHBLaXQgdXNlciBvbiB0aGUgcmVxdWVzdCBjb250ZXh0IHZpYVxuICAvLyBgTWFzdHJhU2VydmVyYC4gVGhlIE1DUCB0cmFuc3BvcnQgcm91dGVzIGRvbid0IHRocmVhZCB0aGF0IGNvbnRleHRcbiAgLy8gaW50byB0b29sIGV4ZWN1dGlvbiwgc28gZmFsbCBiYWNrIHRvIHRoZSBhbWJpZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIC8vICh0aGUgYWN0aXZlIE9CTyBzY29wZSwgb3IgdGhlIHNlcnZpY2UgcHJpbmNpcGFsKSB3aGVuIGl0J3MgYWJzZW50LlxuICBjb25zdCB1c2VyID0gcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9VU0VSX0tFWSkgYXMgVXNlciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IHVzZXI/LmV4ZWN1dGlvbkNvbnRleHQgPz8gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICBjb25zdCBjbGllbnRDb25maWcgPSBleGVjdXRpb25Db250ZXh0LmNsaWVudC5jb25maWc7XG4gIGNvbnN0IGhvc3QgPSAoYXdhaXQgY2xpZW50Q29uZmlnLmdldEhvc3QoKSkudG9TdHJpbmcoKTtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gIGF3YWl0IGNsaWVudENvbmZpZy5hdXRoZW50aWNhdGUoaGVhZGVycyk7XG4gIC8vIFRoZSBPcGVuQUkgTm9kZSBTREsgYXBwZW5kcyBwYXRocyBsaWtlIGAvY2hhdC9jb21wbGV0aW9uc2AgdG8gd2hhdGV2ZXJcbiAgLy8gVVJMIHdlIGhhbmQgaXQuIERyb3AgdGhlIHRyYWlsaW5nIHNsYXNoIHNvIHRoZSByZXN1bHRpbmcgVVJMIHN0YXlzXG4gIC8vIHdlbGwtZm9ybWVkIChgL3NlcnZpbmctZW5kcG9pbnRzL2NoYXQvY29tcGxldGlvbnNgKS5cbiAgY29uc3QgdXJsID0gbmV3IFVSTChcIi9zZXJ2aW5nLWVuZHBvaW50c1wiLCBob3N0KS50b1N0cmluZygpLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcblxuICBjb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKGNvbmZpZyk7XG4gIGNvbnN0IHNlcnZpbmcgPSByZXNvbHZlU2VydmluZ0NvbmZpZyhjb25maWcpO1xuICBjb25zdCBvdmVycmlkZSA9IHNlcnZpbmcuYWxsb3dPdmVycmlkZVxuICAgID8gKHJlcXVlc3RDb250ZXh0LmdldChNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgLy8gVGhlIG92ZXJyaWRlIC8gYWdlbnQgZGVmYXVsdCAvIGVudiB2YWx1ZSBjYW4gYmUgZWl0aGVyIGEgY29uY3JldGVcbiAgLy8gZW5kcG9pbnQgbmFtZSBvciBhIG1vZGVsIGNsYXNzIHNsdWcgKFwiY2hhdC10aGlua2luZ1wiIC9cbiAgLy8gXCJjaGF0LWJhbGFuY2VkXCIgLyBcImNoYXQtZmFzdFwiKS4gQSBjbGFzcyBzbHVnIGJlY29tZXMgYSBjbGFzcyBpbnRlbnRcbiAgLy8gKGxldCB0aGUgbGl2ZSBjYXRhbG9ndWUgcGljayB0aGUgYmVzdCBtb2RlbCBpbiB0aGF0IGJhbmQpOyBhbnl0aGluZ1xuICAvLyBlbHNlIGlzIGFuIGV4cGxpY2l0IG5hbWUgZnV6enktbWF0Y2hlZCBhZ2FpbnN0IHRoZSBjYXRhbG9ndWUuIEFuXG4gIC8vIGludGVybmFsIGBvdmVycmlkZXMubW9kZWxDbGFzc2AgKGUuZy4gdGhlIGNoYXJ0IHBsYW5uZXIpIGlzIHRoZVxuICAvLyBmbG9vciB3aGVuIG5vdGhpbmcgd2FzIHJlcXVlc3RlZC5cbiAgY29uc3QgcmVxdWVzdGVkID0gb3ZlcnJpZGUgPz8gb3ZlcnJpZGVzLm1vZGVsSWQgPz8gcHJvY2Vzcy5lbnYuREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUU7XG4gIGNvbnN0IHJlcXVlc3RlZENsYXNzID0gcmVxdWVzdGVkICE9PSB1bmRlZmluZWQgPyBwYXJzZU1vZGVsQ2xhc3MocmVxdWVzdGVkKSA6IG51bGw7XG4gIGNvbnN0IGV4cGxpY2l0ID0gcmVxdWVzdGVkQ2xhc3MgPT09IG51bGwgPyByZXF1ZXN0ZWQgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSByZXF1ZXN0ZWRDbGFzcyA/PyBvdmVycmlkZXMubW9kZWxDbGFzcztcblxuICBjb25zdCB7IG1vZGVsSWQsIHNvdXJjZSB9ID0gYXdhaXQgc2VsZWN0TW9kZWwoZXhlY3V0aW9uQ29udGV4dC5jbGllbnQsIGhvc3QsIHtcbiAgICAuLi4oZXhwbGljaXQgIT09IHVuZGVmaW5lZCA/IHsgZXhwbGljaXQgfSA6IHt9KSxcbiAgICBmdXp6eTogc2VydmluZy5mdXp6eSxcbiAgICB0aHJlc2hvbGQ6IHNlcnZpbmcudGhyZXNob2xkLFxuICAgIC4uLihtb2RlbENsYXNzICE9PSB1bmRlZmluZWQgPyB7IG1vZGVsQ2xhc3MgfSA6IHt9KSxcbiAgICBmYWxsYmFja3M6IHNlcnZpbmcuZmFsbGJhY2tzLFxuICAgIHR0bE1zOiBzZXJ2aW5nLnR0bE1zLFxuICB9KTtcbiAgbG9nZ2VyLmRlYnVnKFwibW9kZWwgc2VsZWN0ZWRcIiwgeyBtb2RlbElkLCBzb3VyY2UsIHJlcXVlc3RlZCB9KTtcblxuICByZXR1cm4ge1xuICAgIHByb3ZpZGVySWQ6IGNvbmZpZy5wcm92aWRlcklkID8/IFwiZGF0YWJyaWNrc1wiLFxuICAgIG1vZGVsSWQsXG4gICAgdXJsLFxuICAgIGhlYWRlcnM6IE9iamVjdC5mcm9tRW50cmllcyhoZWFkZXJzLmVudHJpZXMoKSksXG4gICAgYXBpOiBzZXJ2aW5nQXBpKG1vZGVsSWQpLFxuICB9O1xufVxuXG4vKiogQ2hhdCBDb21wbGV0aW9ucyByb3V0ZSB3aG9zZSBwcm92aWRlci1zcGVjaWZpYyB3aXJlIHNoYXBlcyBhcmUgbm9ybWFsaXplZCBoZXJlLiAqL1xuY29uc3QgQ0hBVF9DT01QTEVUSU9OU19QQVRIID0gYC8ke2ludm9rZS5DSEFUX0NPTVBMRVRJT05TX1BBVEh9YDtcblxuLyoqXG4gKiBJbnN0YWxsIGEgc2luZ2xlIHNoYXJlZCBgZ2xvYmFsVGhpcy5mZXRjaGAgd3JhcHBlciBmb3IgQ2hhdCBDb21wbGV0aW9uc1xuICogcmVxdWVzdHMuIFRoZSB3cmFwcGVyIGRvZXMgdGhyZWUgdGhpbmdzOlxuICpcbiAqICAgMS4gUmV3cml0ZXMgb3V0Z29pbmcgSlNPTiBmcm9tIGVpdGhlciBgaW5pdC5ib2R5YCBvciBhIGBSZXF1ZXN0YCB0byByZXBhaXJcbiAqICAgICAgcHJvdmlkZXItc3BlY2lmaWMgcmVxdWVzdCBjb25zdHJhaW50cyAoc2VlIHtAbGluayByZXdyaXRlU2VydmluZ1JlcXVlc3R9XG4gKiAgICAgIGluIGAuL3NlcnZpbmctc2FuaXRpemUuanNgKS5cbiAqICAgMi4gQXQgYExPR19MRVZFTD1kZWJ1Z2AsIGR1bXBzIHRoZSAocG9zdC1zYW5pdGl6ZSkgSlNPTiBib2R5IHNvXG4gKiAgICAgIDR4eCBkZWJ1Z2dpbmcgZG9lc24ndCBoYXZlIHRvIGZpZ2h0IEFJIFNESydzIGBbQXJyYXldYFxuICogICAgICBmb3JtYXR0ZXIuXG4gKiAgIDMuIFJlcGFpcnMgYnVmZmVyZWQgYW5kIHN0cmVhbWluZyByZXNwb25zZXMgd2hlcmUgYSBwcm92aWRlciByZXR1cm5zXG4gKiAgICAgIGBjaG9pY2VzW10ubWVzc2FnZS5jb250ZW50YCBvciBgY2hvaWNlc1tdLmRlbHRhLmNvbnRlbnRgIGFzIGEgcGFydHNcbiAqICAgICAgYXJyYXkgdGhhdCB0aGUgQUkgU0RLJ3MgT3BlbkFJIHNjaGVtYSByZWplY3RzLlxuICpcbiAqIFNhZmUgdG8gY2FsbCBmcm9tIGFueSBob3QgcGF0aDoge0BsaW5rIGZ1bmN0aW9uTW9kdWxlLm1lbW9pemV9IGVuc3VyZXNcbiAqIHRoZSB3cmFwcGVyIGlzIGluc3RhbGxlZCBhdCBtb3N0IG9uY2UgcGVyIHByb2Nlc3MsIHNvIHN1YnNlcXVlbnRcbiAqIGNhbGxzIGFyZSBhIG5vLW9wIGV2ZW4gd2hlbiB7QGxpbmsgYnVpbGRNb2RlbH0gZmlyZXMgb24gZXZlcnkgYWdlbnRcbiAqIHN0ZXAuXG4gKi9cbmNvbnN0IHNldHVwRmV0Y2hJbnRlcmNlcHRvciA9IGZ1bmN0aW9uTW9kdWxlLm1lbW9pemUoKCk6IHZvaWQgPT4ge1xuICBnbG9iYWxUaGlzLmZldGNoID0gY3JlYXRlU2VydmluZ0ZldGNoSW50ZXJjZXB0b3IoZ2xvYmFsVGhpcy5mZXRjaC5iaW5kKGdsb2JhbFRoaXMpKTtcbn0pO1xuXG4vKiogQnVpbGQgdGhlIHNlcnZpbmcgZmV0Y2ggd3JhcHBlcjsgZXhwb3J0ZWQgZm9yIHRyYW5zcG9ydC1sZXZlbCByZWdyZXNzaW9uIHRlc3RzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlcnZpbmdGZXRjaEludGVyY2VwdG9yKG9yaWdpbmFsOiB0eXBlb2YgZmV0Y2gpOiB0eXBlb2YgZmV0Y2gge1xuICBjb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL2xsbVwiKTtcbiAgcmV0dXJuIChhc3luYyAoaW5wdXQsIGluaXQpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXQudXJsQnVpbGRlcihpbnB1dCk7XG4gICAgY29uc3QgbWV0aG9kID0gaW5pdD8ubWV0aG9kID8/IChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QgPyBpbnB1dC5tZXRob2QgOiBcIkdFVFwiKTtcbiAgICBpZiAoIXVybCB8fCB1cmwucGF0aG5hbWUgIT09IENIQVRfQ09NUExFVElPTlNfUEFUSCB8fCBtZXRob2QudG9VcHBlckNhc2UoKSAhPT0gXCJQT1NUXCIpIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbChpbnB1dCwgaW5pdCk7XG4gICAgfVxuICAgIGNvbnN0IHJld3JpdHRlbiA9IGF3YWl0IHJld3JpdGVTZXJ2aW5nUmVxdWVzdChpbnB1dCwgaW5pdCk7XG4gICAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZTx1bmtub3duPihyZXdyaXR0ZW4uYm9keSk7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJQT1NUXCIsXG4gICAgICBwYXJzZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHsgdXJsOiB1cmwudG9TdHJpbmcoKSwgYm9keVR5cGU6IFwibm9uLUpTT05cIiB9XG4gICAgICAgIDogeyB1cmw6IHVybC50b1N0cmluZygpLCBib2R5OiBwYXJzZWQgfSxcbiAgICApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb3JpZ2luYWwocmV3cml0dGVuLmlucHV0LCByZXdyaXR0ZW4uaW5pdCk7XG4gICAgcmV0dXJuIHJlcGFpclNlcnZpbmdSZXNwb25zZShyZXNwb25zZSk7XG4gIH0pIGFzIHR5cGVvZiBnbG9iYWxUaGlzLmZldGNoO1xufVxuXG4vKipcbiAqIFJld3JpdGUgYSBzZXJ2aW5nIHJlc3BvbnNlIHdob3NlIGJvZHkgbmVlZHMgcmVwYWlyLCBsZWF2aW5nIHVuc3VwcG9ydGVkXG4gKiBjb250ZW50IHR5cGVzIGJ5dGUtaWRlbnRpY2FsLlxuICpcbiAqIFNTRSByZW1haW5zIGEgbGl2ZSBzdHJlYW06IGEgVHJhbnNmb3JtU3RyZWFtIHJlcGFpcnMgY29tcGxldGUgYGRhdGE6YCBsaW5lc1xuICogYXMgYnl0ZXMgYXJyaXZlIGFuZCBwcmVzZXJ2ZXMgcGFydGlhbCBsaW5lcyBhY3Jvc3MgbmV0d29yayBjaHVua3MuIEpTT04gaXNcbiAqIGJ1ZmZlcmVkIHRocm91Z2ggdGhlIGV4aXN0aW5nIHJlc3BvbnNlLWJvZHkgcmVwYWlyLiBBIG5vbi1KU09OL25vbi1TU0UgYm9keVxuICogaXMgcmV0dXJuZWQgdW50b3VjaGVkIHNvIHRoZSBjYWxsZXIgc3RpbGwgc2VlcyB0aGUgb3JpZ2luYWwgcmVzcG9uc2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcGFpclNlcnZpbmdSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIikgPz8gXCJcIjtcbiAgaWYgKGNvbnRlbnRUeXBlLmluY2x1ZGVzKFwidGV4dC9ldmVudC1zdHJlYW1cIikgJiYgcmVzcG9uc2UuYm9keSkge1xuICAgIHJldHVybiByZWJ1aWxkU2VydmluZ1Jlc3BvbnNlKHJlc3BvbnNlLCByZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtKHJlc3BvbnNlLmJvZHkpKTtcbiAgfVxuICBpZiAoIWNvbnRlbnRUeXBlLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSkgcmV0dXJuIHJlc3BvbnNlO1xuXG4gIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLnRleHQoKTtcbiAgY29uc3QgcmV3cml0dGVuID0gcmV3cml0ZVNlcnZpbmdSZXNwb25zZUJvZHkoYm9keSk7XG4gIGlmIChyZXdyaXR0ZW4gPT09IGJvZHkpIHJldHVybiByZXNwb25zZTtcbiAgcmV0dXJuIHJlYnVpbGRTZXJ2aW5nUmVzcG9uc2UocmVzcG9uc2UsIHJld3JpdHRlbik7XG59XG5cbi8qKiBSZWJ1aWxkIGEgdHJhbnNmb3JtZWQgcmVzcG9uc2Ugd2l0aG91dCBzdGFsZSBieXRlLWxlbmd0aC9lbmNvZGluZyBoZWFkZXJzLiAqL1xuZnVuY3Rpb24gcmVidWlsZFNlcnZpbmdSZXNwb25zZShcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICBib2R5OiBzdHJpbmcgfCBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pixcbik6IFJlc3BvbnNlIHtcbiAgLy8gYGNvbnRlbnQtbGVuZ3RoYCAvIGBjb250ZW50LWVuY29kaW5nYCBkZXNjcmliZSB0aGUgT1JJR0lOQUwgYnl0ZXMsIHNvIHRoZXlcbiAgLy8gYXJlIGRyb3BwZWQ6IHRoZSByZXdyaXR0ZW4gYm9keSBpcyBhIGRpZmZlcmVudCBsZW5ndGggYW5kIGFscmVhZHkgZGVjb2RlZC5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlc3BvbnNlLmhlYWRlcnMpO1xuICBoZWFkZXJzLmRlbGV0ZShcImNvbnRlbnQtbGVuZ3RoXCIpO1xuICBoZWFkZXJzLmRlbGV0ZShcImNvbnRlbnQtZW5jb2RpbmdcIik7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoYm9keSwge1xuICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgaGVhZGVycyxcbiAgfSk7XG59XG4iXX0=
@@ -176,7 +176,7 @@ export declare class MastraPlugin extends Plugin<MastraPluginConfig> {
176
176
  */
177
177
  getDefault: () => Agent | null;
178
178
  /** Underlying Mastra instance for advanced use (custom routes etc.). */
179
- getMastra: () => Mastra<Record<string, Agent<any, import("@mastra/core/agent").ToolsInput, undefined, any, import("@mastra/core/agent").AgentEditorConfig | undefined>>, Record<string, import("@mastra/core/workflows").AnyWorkflow>, Record<string, import("@mastra/core/vector").MastraVector<any>>, Record<string, import("@mastra/core/tts").MastraTTS>, import("@mastra/core/logger").IMastraLogger, Record<string, import("@mastra/core/mcp").MCPServerBase<any>>, Record<string, import("@mastra/core/evals").MastraScorer<any, any, any, any>>, Record<string, import("@mastra/core/tools").ToolAction<any, any, any, any, any, any, unknown>>, Record<string, import("@mastra/core/processors").Processor<any, unknown>>, Record<string, import("@mastra/core/memory").MastraMemory>, Record<string, import("@mastra/core/channels").ChannelProvider>> | null;
179
+ getMastra: () => Mastra<Record<string, Agent<any, import("@mastra/core/agent").ToolsInput, undefined, any, import("@mastra/core/agent").AgentEditorConfig | undefined>>, Record<string, import("@mastra/core/workflows").AnyWorkflow>, Record<string, import("@mastra/core/vector").MastraVector<any>>, Record<string, import("@mastra/core/tts").MastraTTS>, import("@mastra/core/logger").IMastraLogger, Record<string, import("@mastra/core/mcp").MCPServerBase<any>>, Record<string, import("@mastra/core/evals").MastraScorer<any, any, any, any>>, Record<string, import("@mastra/core/tools").ToolAction<any, any, any, any, any, any, unknown>>, Record<string, import("@mastra/core/processors").Processor<any, unknown>>, Record<string, import("@mastra/core/memory").MastraMemory>, Record<string, import("@mastra/core/channels").ChannelProvider>, Record<string, import("@mastra/core/classifier").Classifier<any>>> | null;
180
180
  /**
181
181
  * Build the `RequestContext` an agent turn driven from OUTSIDE this
182
182
  * plugin's routes needs (a Teams activity on another plugin's endpoint, a