@cartanova/qgrid-cli 1.7.3 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +72 -39
  2. package/bundle/dist/application/qgrid/qgrid.frame.js +12 -25
  3. package/bundle/dist/application/qgrid/qgrid.types.js +17 -4
  4. package/bundle/dist/application/qgrid/token-subscriber.js +149 -0
  5. package/bundle/dist/application/qgrid/token-trigger-setup.js +69 -0
  6. package/bundle/dist/application/sonamu.generated.sso.js +1 -1
  7. package/bundle/dist/application/token/token.types.js +1 -1
  8. package/bundle/dist/i18n/sd.generated.js +2 -2
  9. package/bundle/dist/migrations/20260410171405_create__request_logs.js +1 -1
  10. package/bundle/dist/migrations/20260410171406_create__tokens.js +1 -1
  11. package/bundle/dist/migrations/20260411120624_alter_tokens_alter2.js +1 -1
  12. package/bundle/dist/migrations/20260415134649_alter_request_logs_alter1.js +1 -1
  13. package/bundle/dist/migrations/20260421223627_alter_request_logs_add1_alter1.js +1 -1
  14. package/bundle/dist/migrations/20260423180818_alter_request_logs_add1_alter1.js +1 -1
  15. package/bundle/dist/migrations/20260423182017_alter_request_logs_add2_drop1_alter1.js +1 -1
  16. package/bundle/dist/migrations/20260423183613_alter_request_logs_add1_alter1.js +1 -1
  17. package/bundle/dist/sonamu.config.js +22 -36
  18. package/bundle/dist/testing/setup-mocks.js +1 -1
  19. package/bundle/dist/utils/subset-loaders.js +1 -1
  20. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +103 -46
  21. package/bundle/src/application/qgrid/qgrid.frame.ts +14 -26
  22. package/bundle/src/application/qgrid/qgrid.types.ts +13 -0
  23. package/bundle/src/application/qgrid/token-subscriber.ts +176 -0
  24. package/bundle/src/application/qgrid/token-trigger-setup.ts +80 -0
  25. package/bundle/src/application/request-log/request-log.entity.json +3 -1
  26. package/bundle/src/application/sonamu.generated.http +2 -1
  27. package/bundle/src/application/sonamu.generated.sso.ts +5 -5
  28. package/bundle/src/application/token/token.types.ts +1 -1
  29. package/bundle/src/i18n/sd.generated.ts +1 -1
  30. package/bundle/src/migrations/20260410171405_create__request_logs.ts +1 -1
  31. package/bundle/src/migrations/20260410171406_create__tokens.ts +1 -1
  32. package/bundle/src/migrations/20260411120624_alter_tokens_alter2.ts +1 -1
  33. package/bundle/src/migrations/20260415134649_alter_request_logs_alter1.ts +1 -1
  34. package/bundle/src/migrations/20260421223627_alter_request_logs_add1_alter1.ts +1 -1
  35. package/bundle/src/migrations/20260423180818_alter_request_logs_add1_alter1.ts +1 -1
  36. package/bundle/src/migrations/20260423182017_alter_request_logs_add2_drop1_alter1.ts +1 -1
  37. package/bundle/src/migrations/20260423183613_alter_request_logs_add1_alter1.ts +1 -1
  38. package/bundle/src/sonamu.config.ts +33 -39
  39. package/bundle/src/testing/setup-mocks.ts +1 -1
  40. package/bundle/src/typings/fastify.d.ts +1 -1
  41. package/bundle/src/typings/sonamu.d.ts +3 -2
  42. package/bundle/src/utils/subset-loaders.ts +1 -1
  43. package/bundle/web-dist/client/assets/{index-DUmwX7rR.js → index-DxJOOfGV.js} +3 -3
  44. package/bundle/web-dist/client/assets/{logs-ci_3vzTT.js → logs-D83MPvLO.js} +1 -1
  45. package/bundle/web-dist/client/assets/{routes-Ch5LFN0K.js → routes-C1PeZiBp.js} +1 -1
  46. package/bundle/web-dist/client/assets/{sd.generated-CIOZewtL.js → sd.generated-C9WnMJm4.js} +1 -1
  47. package/bundle/web-dist/client/assets/{services.generated-BrB-RELO.js → services.generated-BV5C1PQa.js} +1 -1
  48. package/bundle/web-dist/client/assets/{show-D3N15Krg.js → show-WxeogUIk.js} +1 -1
  49. package/bundle/web-dist/client/assets/tokens--RfCPd1y.js +1 -0
  50. package/bundle/web-dist/client/index.html +2 -2
  51. package/bundle/web-dist/server/assets/{copy-CKCGxwII.js → copy-SIUvcEcZ.js} +1 -1
  52. package/bundle/web-dist/server/assets/{lazyRouteComponent-BlvOfJIF.js → lazyRouteComponent-CcyhCAoL.js} +2 -2
  53. package/bundle/web-dist/server/assets/{logs-CDacVwTQ.js → logs-9j6ES80h.js} +3 -3
  54. package/bundle/web-dist/server/assets/{routes-BLm-zF86.js → routes-DQh4d03H.js} +2 -2
  55. package/bundle/web-dist/server/assets/{sd.generated-CIg_jf8e.js → sd.generated-CkiEsOwK.js} +1 -1
  56. package/bundle/web-dist/server/assets/{services.generated-wCfUuY7Z.js → services.generated-Q2ZIxMdn.js} +5 -4
  57. package/bundle/web-dist/server/assets/{shim-Dq_Izqnc.js → shim-BYpcQGN1.js} +1 -1
  58. package/bundle/web-dist/server/assets/{show-DjJyZunM.js → show-j1j13Hq1.js} +4 -4
  59. package/bundle/web-dist/server/assets/{tokens-rQIIgqMo.js → tokens-hSHCLF_7.js} +24 -5
  60. package/bundle/web-dist/server/entry-server.generated.js +7 -7
  61. package/package.json +1 -1
  62. package/bundle/web-dist/client/assets/tokens-BAlIaa6X.js +0 -1
@@ -8,71 +8,90 @@ import { mkdirSync, writeFileSync } from "node:fs";
8
8
  * QgridDispatcher — OAuth 토큰 선택 + claude CLI fresh spawn 디스패처 싱글턴.
9
9
  *
10
10
  * - 매 요청마다 새 claude CLI 프로세스 spawn → 응답 후 종료
11
- * - system 은 --append-system-prompt 로 분리 전달 (user turn 오염 방지)
12
11
  * - least-used round-robin 으로 토큰 선택
12
+ * - 메모리 캐시 (Map<id, TokenSubsetA>) 는 TokenSubscriber 가 pg LISTEN/NOTIFY 로 갱신
13
+ * - query 시 expires_at 비교 → 임박 시 preemptive refresh
13
14
  * - QuotaError 는 그대로 상위 전파 (자동 failover 없음, UI 에서 수동 토글)
14
15
  *
15
- * env allowlist: PATH, TMPDIR, CLAUDE_CODE_OAUTH_TOKEN + CLAUDE_CODE_DISABLE_*
16
+ * env allowlist: PATH, TMPDIR, CLAUDE_CODE_OAUTH_TOKEN, CLAUDE_CONFIG_DIR
17
+ * + CLAUDE_CODE_DISABLE_* + CLAUDE_CODE_ATTRIBUTION_HEADER
16
18
  */
17
19
  const logger = getLogger(["qgrid"]);
18
20
  const DEFAULT_MODEL = "sonnet";
19
21
  const DEFAULT_TIMEOUT_MS = 6e5;
22
+ const DEFAULT_EFFORT = "high";
20
23
  const CLAUDE_CWD = "/tmp/qgrid";
24
+ const CLAUDE_CONFIG_DIR = "/tmp/qgrid-config";
21
25
  const QGRID_CLAUDE_SETTINGS = {
22
26
  alwaysThinkingEnabled: false,
23
27
  includeGitInstructions: false,
24
28
  cleanupPeriodDays: 1
25
29
  };
30
+ const REFRESH_SAFETY_MS = 6e4;
26
31
  var QgridDispatcherClass = class {
27
32
  tokens = /* @__PURE__ */ new Map();
28
33
  requestCounts = /* @__PURE__ */ new Map();
29
34
  rrIndex = 0;
35
+ subscriber = null;
30
36
  constructor() {
37
+ const settingsJson = JSON.stringify(QGRID_CLAUDE_SETTINGS, null, 2);
31
38
  mkdirSync(`${CLAUDE_CWD}/.claude`, { recursive: true });
32
- writeFileSync(`${CLAUDE_CWD}/.claude/settings.json`, JSON.stringify(QGRID_CLAUDE_SETTINGS, null, 2));
39
+ writeFileSync(`${CLAUDE_CWD}/.claude/settings.json`, settingsJson);
40
+ mkdirSync(CLAUDE_CONFIG_DIR, { recursive: true });
41
+ writeFileSync(`${CLAUDE_CONFIG_DIR}/.claude.json`, "{}");
42
+ writeFileSync(`${CLAUDE_CONFIG_DIR}/settings.json`, settingsJson);
43
+ }
44
+ countOf(name) {
45
+ return this.requestCounts.get(name) ?? 0;
46
+ }
47
+ upsertCache(id, row) {
48
+ this.tokens.set(id, row);
49
+ }
50
+ removeCache(id) {
51
+ this.tokens.delete(id);
52
+ }
53
+ replaceCache(rows) {
54
+ this.tokens = new Map(rows.map((r) => [r.id, r]));
33
55
  }
34
56
  getStats() {
35
- return [...this.tokens.entries()].map(([token, name]) => ({
36
- token,
37
- name,
38
- requests: this.requestCounts.get(token) ?? 0
57
+ return [...this.tokens.values()].map((r) => ({
58
+ token: r.token,
59
+ name: r.name,
60
+ requests: this.countOf(r.name)
39
61
  }));
40
62
  }
41
63
  selectToken() {
42
- const entries = [...this.tokens.entries()];
43
- if (entries.length === 0) return null;
44
- const minCount = Math.min(...entries.map(([t]) => this.requestCounts.get(t) ?? 0));
45
- const idle = entries.filter(([t]) => (this.requestCounts.get(t) ?? 0) === minCount);
64
+ const rows = [...this.tokens.values()];
65
+ if (rows.length === 0) return null;
66
+ const minCount = Math.min(...rows.map((r) => this.countOf(r.name)));
67
+ const idle = rows.filter((r) => this.countOf(r.name) === minCount);
46
68
  const picked = idle[this.rrIndex % idle.length];
47
69
  this.rrIndex++;
48
- return {
49
- token: picked[0],
50
- name: picked[1]
51
- };
70
+ return picked;
52
71
  }
53
72
  async query(input, timeoutMs) {
54
- const sel = this.selectToken();
55
- if (!sel) throw new QuotaError("No tokens available");
56
- this.requestCounts.set(sel.token, (this.requestCounts.get(sel.token) ?? 0) + 1);
57
- logger.info(`→ ${sel.name} (model: ${input.model ?? DEFAULT_MODEL})`);
73
+ const electedToken = this.selectToken();
74
+ if (!electedToken) throw new QuotaError("No tokens available");
75
+ this.requestCounts.set(electedToken.name, this.countOf(electedToken.name) + 1);
76
+ let token = electedToken.token;
77
+ if (electedToken.expires_at && Number(electedToken.expires_at) - Date.now() < REFRESH_SAFETY_MS && electedToken.refresh_token) try {
78
+ const { QgridFrame } = await import("./qgrid.frame.js");
79
+ token = await QgridFrame.refreshToken({
80
+ id: electedToken.id,
81
+ token: electedToken.token,
82
+ name: electedToken.name,
83
+ refresh_token: electedToken.refresh_token
84
+ });
85
+ } catch (e) {
86
+ logger.warn(`refresh failed for ${electedToken.name}: ${e.message}`);
87
+ }
88
+ logger.info(`→ ${electedToken.name} (model: ${input.model ?? DEFAULT_MODEL})`);
58
89
  return {
59
- ...await executeClaude(input, sel.token, timeoutMs ?? DEFAULT_TIMEOUT_MS),
60
- tokenName: sel.name,
90
+ ...await executeClaude(input, token, timeoutMs ?? DEFAULT_TIMEOUT_MS),
91
+ tokenName: electedToken.name,
61
92
  model: input.model ?? DEFAULT_MODEL
62
93
  };
63
94
  }
64
- addToken(token, name) {
65
- if (this.tokens.has(token)) return;
66
- this.tokens.set(token, name);
67
- this.requestCounts.set(token, 0);
68
- }
69
- removeToken(token) {
70
- this.tokens.delete(token);
71
- this.requestCounts.delete(token);
72
- }
73
- hasToken(token) {
74
- return this.tokens.has(token);
75
- }
76
95
  };
77
96
  async function executeClaude(input, token, timeoutMs) {
78
97
  const model = input.model ?? DEFAULT_MODEL;
@@ -86,6 +105,12 @@ async function executeClaude(input, token, timeoutMs) {
86
105
  "--allowed-tools",
87
106
  "StructuredOutput"
88
107
  ] : ["--tools", ""],
108
+ "--disallowedTools",
109
+ ...[
110
+ "Monitor",
111
+ "PushNotification",
112
+ "RemoteTrigger"
113
+ ],
89
114
  "--output-format",
90
115
  "stream-json",
91
116
  "--verbose",
@@ -97,19 +122,27 @@ async function executeClaude(input, token, timeoutMs) {
97
122
  "project",
98
123
  "--model",
99
124
  model,
100
- "--exclude-dynamic-system-prompt-sections",
101
- "--no-session-persistence"
125
+ "--system-prompt",
126
+ input.system ?? "",
127
+ "--thinking",
128
+ "disabled",
129
+ "--effort",
130
+ input.effort ?? DEFAULT_EFFORT,
131
+ "--no-session-persistence",
132
+ "--disable-slash-commands"
102
133
  ];
103
134
  if (useStructuredOutput) args.push("--json-schema", input.jsonSchema);
104
- if (input.system) args.push("--append-system-prompt", input.system);
105
135
  args.push(input.prompt);
106
136
  const env = {
107
137
  PATH: process.env.PATH,
108
138
  TMPDIR: process.env.TMPDIR,
109
139
  CLAUDE_CODE_OAUTH_TOKEN: token,
140
+ CLAUDE_CONFIG_DIR,
110
141
  CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
111
142
  CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING: "1",
112
- CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"
143
+ CLAUDE_CODE_DISABLE_1M_CONTEXT: "1",
144
+ CLAUDE_CODE_DISABLE_CLAUDE_MDS: "1",
145
+ CLAUDE_CODE_ATTRIBUTION_HEADER: "0"
113
146
  };
114
147
  return new Promise((resolve, reject) => {
115
148
  const child = spawn("claude", args, {
@@ -182,6 +215,6 @@ async function executeClaude(input, token, timeoutMs) {
182
215
  }
183
216
  const QgridDispatcher = new QgridDispatcherClass();
184
217
  //#endregion
185
- export { QgridDispatcher };
218
+ export { QgridDispatcher, QgridDispatcherClass };
186
219
 
187
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZGlzcGF0Y2hlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQuZGlzcGF0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFFncmlkRGlzcGF0Y2hlciDigJQgT0F1dGgg7Yag7YGwIOyEoO2DnSArIGNsYXVkZSBDTEkgZnJlc2ggc3Bhd24g65SU7Iqk7Yyo7LKYIOyLseq4gO2EtC5cbiAqXG4gKiAtIOunpCDsmpTssq3rp4jri6Qg7IOIIGNsYXVkZSBDTEkg7ZSE66Gc7IS47IqkIHNwYXduIOKGkiDsnZHri7Ug7ZuEIOyiheujjFxuICogLSBzeXN0ZW0g7J2AIC0tYXBwZW5kLXN5c3RlbS1wcm9tcHQg66GcIOu2hOumrCDsoITri6wgKHVzZXIgdHVybiDsmKTsl7wg67Cp7KeAKVxuICogLSBsZWFzdC11c2VkIHJvdW5kLXJvYmluIOycvOuhnCDthqDtgbAg7ISg7YOdXG4gKiAtIFF1b3RhRXJyb3Ig64qUIOq3uOuMgOuhnCDsg4HsnIQg7KCE7YyMICjsnpDrj5kgZmFpbG92ZXIg7JeG7J2MLCBVSSDsl5DshJwg7IiY64+ZIO2GoOq4gClcbiAqXG4gKiBlbnYgYWxsb3dsaXN0OiBQQVRILCBUTVBESVIsIENMQVVERV9DT0RFX09BVVRIX1RPS0VOICsgQ0xBVURFX0NPREVfRElTQUJMRV8qXG4gKi9cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgdHlwZSBDbGlSZXN1bHQsIHR5cGUgUXVlcnlJbnB1dCwgdHlwZSBUb2tlblN0YXRzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IG1hc2tUb2tlbiwgUHJvY2Vzc0Vycm9yLCBRdW90YUVycm9yLCBUaW1lb3V0RXJyb3IgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIl0pO1xuXG5jb25zdCBERUZBVUxUX01PREVMID0gXCJzb25uZXRcIjtcbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDYwMF8wMDA7XG5cbi8vIGNsYXVkZSBDTEkg7J2YIGN3ZC4g7J20IOqyveuhnOydmCAuY2xhdWRlL3NldHRpbmdzLmpzb24g7J20IHByb2plY3Qgc2NvcGUg66GcIOuhnOuTnOuQmOyWtFxuLy8g7Zi57Iuc652864+EIOyeiOydhCB1c2VyIHNjb3BlICh+Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbinrpbwg642u7Ja07JSAICgtLXNldHRpbmctc291cmNlcyBwcm9qZWN0IOyZgCDtlajqu5gpLlxuY29uc3QgQ0xBVURFX0NXRCA9IFwiL3RtcC9xZ3JpZFwiO1xuXG4vLyBxZ3JpZCDsoITsmqkgcHJvamVjdCBzZXR0aW5ncyDigJQgdXNlciBzY29wZSDqsqnrpqzsmqlcbmNvbnN0IFFHUklEX0NMQVVERV9TRVRUSU5HUyA9IHtcbiAgYWx3YXlzVGhpbmtpbmdFbmFibGVkOiBmYWxzZSwgLy8gdGhpbmtpbmcgYmxvY2sg7LCo64uoXG4gIGluY2x1ZGVHaXRJbnN0cnVjdGlvbnM6IGZhbHNlLCAvLyBzeXN0ZW0gcHJvbXB0IOydmCBnaXQg6rCA7J2065OcIOygnOqxsFxuICBjbGVhbnVwUGVyaW9kRGF5czogMSxcbn07XG5cbmNsYXNzIFFncmlkRGlzcGF0Y2hlckNsYXNzIHtcbiAgdG9rZW5zID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcmVxdWVzdENvdW50cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIHJySW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIG1rZGlyU3luYyhgJHtDTEFVREVfQ1dEfS8uY2xhdWRlYCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhcbiAgICAgIGAke0NMQVVERV9DV0R9Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbmAsXG4gICAgICBKU09OLnN0cmluZ2lmeShRR1JJRF9DTEFVREVfU0VUVElOR1MsIG51bGwsIDIpLFxuICAgICk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBUb2tlblN0YXRzW10ge1xuICAgIHJldHVybiBbLi4udGhpcy50b2tlbnMuZW50cmllcygpXS5tYXAoKFt0b2tlbiwgbmFtZV0pID0+ICh7XG4gICAgICB0b2tlbixcbiAgICAgIG5hbWUsXG4gICAgICByZXF1ZXN0czogdGhpcy5yZXF1ZXN0Q291bnRzLmdldCh0b2tlbikgPz8gMCxcbiAgICB9KSk7XG4gIH1cblxuICBzZWxlY3RUb2tlbigpOiB7IHRva2VuOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgY29uc3QgZW50cmllcyA9IFsuLi50aGlzLnRva2Vucy5lbnRyaWVzKCldO1xuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtaW5Db3VudCA9IE1hdGgubWluKC4uLmVudHJpZXMubWFwKChbdF0pID0+IHRoaXMucmVxdWVzdENvdW50cy5nZXQodCkgPz8gMCkpO1xuICAgIGNvbnN0IGlkbGUgPSBlbnRyaWVzLmZpbHRlcigoW3RdKSA9PiAodGhpcy5yZXF1ZXN0Q291bnRzLmdldCh0KSA/PyAwKSA9PT0gbWluQ291bnQpO1xuICAgIGNvbnN0IHBpY2tlZCA9IGlkbGVbdGhpcy5yckluZGV4ICUgaWRsZS5sZW5ndGhdITtcbiAgICB0aGlzLnJySW5kZXgrKztcbiAgICByZXR1cm4geyB0b2tlbjogcGlja2VkWzBdLCBuYW1lOiBwaWNrZWRbMV0gfTtcbiAgfVxuXG4gIGFzeW5jIHF1ZXJ5KGlucHV0OiBRdWVyeUlucHV0LCB0aW1lb3V0TXM/OiBudW1iZXIpOiBQcm9taXNlPENsaVJlc3VsdD4ge1xuICAgIGNvbnN0IHNlbCA9IHRoaXMuc2VsZWN0VG9rZW4oKTtcbiAgICBpZiAoIXNlbCkgdGhyb3cgbmV3IFF1b3RhRXJyb3IoXCJObyB0b2tlbnMgYXZhaWxhYmxlXCIpO1xuXG4gICAgLy8gYXdhaXQg7KCE7JeQIGNvdW50IOyEoOuwmOyYgS4g67OR66CsIOyalOyyreydtCDrj5nsi5zsl5Ag64+E7LCp7ZW064+EIOqwgeyekCDri6Trpbgg7Yag7YGw7J2EIOqzoOultOuPhOuhnS5cbiAgICB0aGlzLnJlcXVlc3RDb3VudHMuc2V0KHNlbC50b2tlbiwgKHRoaXMucmVxdWVzdENvdW50cy5nZXQoc2VsLnRva2VuKSA/PyAwKSArIDEpO1xuXG4gICAgbG9nZ2VyLmluZm8oYOKGkiAke3NlbC5uYW1lfSAobW9kZWw6ICR7aW5wdXQubW9kZWwgPz8gREVGQVVMVF9NT0RFTH0pYCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlQ2xhdWRlKGlucHV0LCBzZWwudG9rZW4sIHRpbWVvdXRNcyA/PyBERUZBVUxUX1RJTUVPVVRfTVMpO1xuICAgIHJldHVybiB7IC4uLnJlc3VsdCwgdG9rZW5OYW1lOiBzZWwubmFtZSwgbW9kZWw6IGlucHV0Lm1vZGVsID8/IERFRkFVTFRfTU9ERUwgfTtcbiAgfVxuXG4gIGFkZFRva2VuKHRva2VuOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRva2Vucy5oYXModG9rZW4pKSByZXR1cm47XG4gICAgdGhpcy50b2tlbnMuc2V0KHRva2VuLCBuYW1lKTtcbiAgICB0aGlzLnJlcXVlc3RDb3VudHMuc2V0KHRva2VuLCAwKTtcbiAgfVxuXG4gIHJlbW92ZVRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRva2Vucy5kZWxldGUodG9rZW4pO1xuICAgIHRoaXMucmVxdWVzdENvdW50cy5kZWxldGUodG9rZW4pO1xuICB9XG5cbiAgaGFzVG9rZW4odG9rZW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRva2Vucy5oYXModG9rZW4pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVDbGF1ZGUoXG4gIGlucHV0OiBRdWVyeUlucHV0LFxuICB0b2tlbjogc3RyaW5nLFxuICB0aW1lb3V0TXM6IG51bWJlcixcbik6IFByb21pc2U8Q2xpUmVzdWx0PiB7XG4gIGNvbnN0IG1vZGVsID0gaW5wdXQubW9kZWwgPz8gREVGQVVMVF9NT0RFTDtcbiAgY29uc3QgdGltZW91dCA9IGlucHV0LnRpbWVvdXQgPz8gdGltZW91dE1zO1xuICBjb25zdCB1c2VTdHJ1Y3R1cmVkT3V0cHV0ID0gaW5wdXQuanNvblNjaGVtYSAmJiBpbnB1dC5qc29uU2NoZW1hLmxlbmd0aCA+IDA7XG5cbiAgLy8gLS10b29scyBcIlwiIOuhnCDrqqjrk6AgdG9vbCDsnYQg6riw67O4IOywqOuLqC4gc3RydWN0dXJlZCBvdXRwdXQg7JOw66m0IFN0cnVjdHVyZWRPdXRwdXQg66eMIO2ZlOydtO2KuOumrOyKpO2KuC5cbiAgLy8gLS10b29scyBcIlwiIOuKlCDrsJjrk5zsi5wg65Kk7JeQIOuLpOuluCDtlIzrnpjqt7jqsIAg7JmA7JW8IENMSSDtjIzsi7HsnbQg67mIIOusuOyekOyXtOuhnCDsnbjsi51cbiAgY29uc3QgdG9vbEFyZ3MgPSB1c2VTdHJ1Y3R1cmVkT3V0cHV0XG4gICAgPyBbXCItLXRvb2xzXCIsIFwiXCIsIFwiLS1hbGxvd2VkLXRvb2xzXCIsIFwiU3RydWN0dXJlZE91dHB1dFwiXVxuICAgIDogW1wiLS10b29sc1wiLCBcIlwiXTtcblxuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtcbiAgICBcIi1wXCIsXG4gICAgLi4udG9vbEFyZ3MsXG4gICAgXCItLW91dHB1dC1mb3JtYXRcIixcbiAgICBcInN0cmVhbS1qc29uXCIsXG4gICAgXCItLXZlcmJvc2VcIixcbiAgICBcIi0tbWF4LXR1cm5zXCIsXG4gICAgLy8gc3RydWN0dXJlZCBvdXRwdXQg7J2AIHRvb2xfdXNlICsgdG9vbF9yZXN1bHQg66GcIDLthLQg7IaM67mEXG4gICAgdXNlU3RydWN0dXJlZE91dHB1dCA/IFwiMlwiIDogXCIxXCIsXG4gICAgXCItLXBlcm1pc3Npb24tbW9kZVwiLFxuICAgIFwiYnlwYXNzUGVybWlzc2lvbnNcIixcbiAgICBcIi0tc2V0dGluZy1zb3VyY2VzXCIsXG4gICAgXCJwcm9qZWN0XCIsXG4gICAgXCItLW1vZGVsXCIsXG4gICAgbW9kZWwsXG4gICAgLy8gdGhpbmtpbmcg67mE7Zmc7ISx7ZmU64qUIHByb2plY3Qgc2V0dGluZ3MgKGFsd2F5c1RoaW5raW5nRW5hYmxlZDogZmFsc2UpIOyXkOyEnCDsspjrpqxcbiAgICBcIi0tZXhjbHVkZS1keW5hbWljLXN5c3RlbS1wcm9tcHQtc2VjdGlvbnNcIiwgLy8gY3dkL2VudiDrpbwgdXNlciBtc2cg66GcIOydtOuPmSDihpIgcHJlZml4IGNhY2hlIOyViOygle2ZlFxuICAgIFwiLS1uby1zZXNzaW9uLXBlcnNpc3RlbmNlXCIsIC8vIH4vLmNsYXVkZS9wcm9qZWN0cy8g7J2YIG9ycGhhbiBqc29ubCDriITsoIEg67Cp7KeAXG4gIF07XG4gIGlmICh1c2VTdHJ1Y3R1cmVkT3V0cHV0KSB7XG4gICAgYXJncy5wdXNoKFwiLS1qc29uLXNjaGVtYVwiLCBpbnB1dC5qc29uU2NoZW1hISk7XG4gIH1cbiAgaWYgKGlucHV0LnN5c3RlbSkge1xuICAgIGFyZ3MucHVzaChcIi0tYXBwZW5kLXN5c3RlbS1wcm9tcHRcIiwgaW5wdXQuc3lzdGVtKTtcbiAgfVxuICBhcmdzLnB1c2goaW5wdXQucHJvbXB0KTtcblxuICBjb25zdCBlbnY6IE5vZGVKUy5Qcm9jZXNzRW52ID0ge1xuICAgIFBBVEg6IHByb2Nlc3MuZW52LlBBVEgsXG4gICAgVE1QRElSOiBwcm9jZXNzLmVudi5UTVBESVIsXG4gICAgQ0xBVURFX0NPREVfT0FVVEhfVE9LRU46IHRva2VuLFxuICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQVVUT19NRU1PUlk6IFwiMVwiLFxuICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQURBUFRJVkVfVEhJTktJTkc6IFwiMVwiLFxuICAgIENMQVVERV9DT0RFX0RJU0FCTEVfMU1fQ09OVEVYVDogXCIxXCIsXG4gIH07XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPENsaVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oXCJjbGF1ZGVcIiwgYXJncywge1xuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJpZ25vcmVcIl0sXG4gICAgICBlbnYsXG4gICAgICBjd2Q6IENMQVVERV9DV0QsXG4gICAgfSk7XG5cbiAgICBsZXQgYnVmZmVyID0gXCJcIjtcbiAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICBjaGlsZC5raWxsKCk7XG4gICAgICByZWplY3QobmV3IFRpbWVvdXRFcnJvcihgVGltZW91dCBhZnRlciAke3RpbWVvdXQgLyAxMDAwfXMgKHRva2VuOiAke21hc2tUb2tlbih0b2tlbil9KWApKTtcbiAgICB9LCB0aW1lb3V0KTtcblxuICAgIGNoaWxkLnN0ZG91dD8ub24oXCJkYXRhXCIsIChkOiBCdWZmZXIpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBidWZmZXIgKz0gZC50b1N0cmluZygpO1xuICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoXCJcXG5cIik7XG4gICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSA/PyBcIlwiO1xuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGlmICghbGluZS50cmltKCkpIGNvbnRpbnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGxpbmUpO1xuICAgICAgICAgIGlmIChqLnR5cGUgPT09IFwicmVzdWx0XCIgJiYgIXNldHRsZWQpIHtcbiAgICAgICAgICAgIC8vIC0tanNvbi1zY2hlbWEg7IKs7JqpIOyLnCBzdHJ1Y3R1cmVkX291dHB1dCDsl5Ag7YyM7Iux65CcIOqwneyytOqwgCDsmKjri6Qg4oaSIOyasOyEoCDsgqzsmqlcbiAgICAgICAgICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoai5zdHJ1Y3R1cmVkX291dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShqLnN0cnVjdHVyZWRfb3V0cHV0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRleHQgPSAoai5yZXN1bHQgPz8gXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXmBgYCg/Ompzb24pP1xccypcXG4/L2ksIFwiXCIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcbj9gYGBcXHMqJC9pLCBcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRleHQuc3RhcnRzV2l0aChcIllvdSd2ZSBoaXRcIikpIHtcbiAgICAgICAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgUXVvdGFFcnJvcihgUXVvdGEgZXhoYXVzdGVkICh0b2tlbjogJHttYXNrVG9rZW4odG9rZW4pfSlgKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdSA9IGoudXNhZ2UgPz8ge307XG4gICAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgdXNhZ2U6IHtcbiAgICAgICAgICAgICAgICBpbnB1dF90b2tlbnM6IHUuaW5wdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgb3V0cHV0X3Rva2VuczogdS5vdXRwdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB1LmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyA/PyAwLFxuICAgICAgICAgICAgICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB1LmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGR1cmF0aW9uTXM6IGouZHVyYXRpb25fbXMgPz8gMCxcbiAgICAgICAgICAgICAgY29zdFVzZDogai50b3RhbF9jb3N0X3VzZCA/PyAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZWplY3QobmV3IFByb2Nlc3NFcnJvcihgQ0xJIHByb2Nlc3MgY2xvc2VkIHdpdGhvdXQgcmVzdWx0ICh0b2tlbjogJHttYXNrVG9rZW4odG9rZW4pfSlgKSk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZWplY3QobmV3IFByb2Nlc3NFcnJvcihgQ0xJIHByb2Nlc3MgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9ICh0b2tlbjogJHttYXNrVG9rZW4odG9rZW4pfSlgKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgUWdyaWREaXNwYXRjaGVyID0gbmV3IFFncmlkRGlzcGF0Y2hl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
220
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZGlzcGF0Y2hlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQuZGlzcGF0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFFncmlkRGlzcGF0Y2hlciDigJQgT0F1dGgg7Yag7YGwIOyEoO2DnSArIGNsYXVkZSBDTEkgZnJlc2ggc3Bhd24g65SU7Iqk7Yyo7LKYIOyLseq4gO2EtC5cbiAqXG4gKiAtIOunpCDsmpTssq3rp4jri6Qg7IOIIGNsYXVkZSBDTEkg7ZSE66Gc7IS47IqkIHNwYXduIOKGkiDsnZHri7Ug7ZuEIOyiheujjFxuICogLSBsZWFzdC11c2VkIHJvdW5kLXJvYmluIOycvOuhnCDthqDtgbAg7ISg7YOdXG4gKiAtIOuplOuqqOumrCDsupDsi5wgKE1hcDxpZCwgVG9rZW5TdWJzZXRBPikg64qUIFRva2VuU3Vic2NyaWJlciDqsIAgcGcgTElTVEVOL05PVElGWSDroZwg6rCx7IugXG4gKiAtIHF1ZXJ5IOyLnCBleHBpcmVzX2F0IOu5hOq1kCDihpIg7J6E67CVIOyLnCBwcmVlbXB0aXZlIHJlZnJlc2hcbiAqIC0gUXVvdGFFcnJvciDripQg6re464yA66GcIOyDgeychCDsoITtjIwgKOyekOuPmSBmYWlsb3ZlciDsl4bsnYwsIFVJIOyXkOyEnCDsiJjrj5kg7Yag6riAKVxuICpcbiAqIGVudiBhbGxvd2xpc3Q6IFBBVEgsIFRNUERJUiwgQ0xBVURFX0NPREVfT0FVVEhfVE9LRU4sIENMQVVERV9DT05GSUdfRElSXG4gKiAgICsgQ0xBVURFX0NPREVfRElTQUJMRV8qICsgQ0xBVURFX0NPREVfQVRUUklCVVRJT05fSEVBREVSXG4gKi9cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgdHlwZSBUb2tlblN1YnNldEEgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgdHlwZSBDbGlSZXN1bHQsIHR5cGUgUXVlcnlJbnB1dCwgdHlwZSBUb2tlblN0YXRzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IG1hc2tUb2tlbiwgUHJvY2Vzc0Vycm9yLCBRdW90YUVycm9yLCBUaW1lb3V0RXJyb3IgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBUb2tlblN1YnNjcmliZXIgfSBmcm9tIFwiLi90b2tlbi1zdWJzY3JpYmVyXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiXSk7XG5cbmNvbnN0IERFRkFVTFRfTU9ERUwgPSBcInNvbm5ldFwiO1xuY29uc3QgREVGQVVMVF9USU1FT1VUX01TID0gNjAwXzAwMDtcbmNvbnN0IERFRkFVTFRfRUZGT1JUID0gXCJoaWdoXCI7XG5cbi8vIGNsYXVkZSBDTEkg7J2YIGN3ZC4g7J20IOqyveuhnOydmCAuY2xhdWRlL3NldHRpbmdzLmpzb24g7J20IHByb2plY3Qgc2NvcGUg66GcIOuhnOuTnOuQmOyWtFxuLy8g7Zi57Iuc652864+EIOyeiOydhCB1c2VyIHNjb3BlICh+Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbinrpbwg642u7Ja07JSAICgtLXNldHRpbmctc291cmNlcyBwcm9qZWN0IOyZgCDtlajqu5gpLlxuY29uc3QgQ0xBVURFX0NXRCA9IFwiL3RtcC9xZ3JpZFwiO1xuXG4vLyDquIDroZzrsowgdXNlciBjb25maWcg6rKp66asIOqyveuhnC4gKEND7JeQ7IScIO2ZmOqyveuzgOyImOuhnCDsnb3ripTrs4DsiJgpXG5jb25zdCBDTEFVREVfQ09ORklHX0RJUiA9IFwiL3RtcC9xZ3JpZC1jb25maWdcIjtcblxuLy8gcWdyaWQg7KCE7JqpIHByb2plY3QvZ2xvYmFsIHNldHRpbmdzIOKAlCB1c2VyIHNjb3BlIOqyqeumrOyaqVxuY29uc3QgUUdSSURfQ0xBVURFX1NFVFRJTkdTID0ge1xuICBhbHdheXNUaGlua2luZ0VuYWJsZWQ6IGZhbHNlLCAvLyB0aGlua2luZyBibG9jayDssKjri6hcbiAgaW5jbHVkZUdpdEluc3RydWN0aW9uczogZmFsc2UsIC8vIHN5c3RlbSBwcm9tcHQg7J2YIGdpdCDqsIDsnbTrk5wg7KCc6rGwXG4gIGNsZWFudXBQZXJpb2REYXlzOiAxLFxufTtcblxuLy8g7Yag7YGwIOunjOujjCDsnoTrsJUg7J6E6rOE6rCSIOKAlCB0b2tlbi5leHBpcmVkQXTsnbQgMeu2hCDslYjsl5Ag66eM66OM65Cc64uk66m0IHF1ZXJ5IOyLnCDssrTtgaztlZjqs6AgcmVmcmVzaC5cbmNvbnN0IFJFRlJFU0hfU0FGRVRZX01TID0gNjBfMDAwO1xuXG5leHBvcnQgY2xhc3MgUWdyaWREaXNwYXRjaGVyQ2xhc3Mge1xuICB0b2tlbnMgPSBuZXcgTWFwPG51bWJlciwgVG9rZW5TdWJzZXRBPigpO1xuXG4gIC8vIGtleeq4sOuwmCh0b2tlbk5hbWUpIOuIhOyggSDsubTsmrTthLAuIHRva2VuIOydtCBPQXV0aCByZWZyZXNoIOuhnCDroZzthYzsnbTtirjrkJjrj4QgdG9rZW5OYW1lIOydgCDrtojrs4DsnbTrnbwg7Lm07Jq07YSwIOycoOyngOuQqFxuICByZXF1ZXN0Q291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgcnJJbmRleCA9IDA7XG5cbiAgLy8gc29uYW11LmNvbmZpZyBvblN0YXJ0IOyXkOyEnCDsspjrpqztlZjripQg67OA7IiYXG4gIHN1YnNjcmliZXI6IFRva2VuU3Vic2NyaWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNldHRpbmdzSnNvbiA9IEpTT04uc3RyaW5naWZ5KFFHUklEX0NMQVVERV9TRVRUSU5HUywgbnVsbCwgMik7XG5cbiAgICBta2RpclN5bmMoYCR7Q0xBVURFX0NXRH0vLmNsYXVkZWAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHdyaXRlRmlsZVN5bmMoYCR7Q0xBVURFX0NXRH0vLmNsYXVkZS9zZXR0aW5ncy5qc29uYCwgc2V0dGluZ3NKc29uKTtcblxuICAgIG1rZGlyU3luYyhDTEFVREVfQ09ORklHX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhgJHtDTEFVREVfQ09ORklHX0RJUn0vLmNsYXVkZS5qc29uYCwgXCJ7fVwiKTtcbiAgICB3cml0ZUZpbGVTeW5jKGAke0NMQVVERV9DT05GSUdfRElSfS9zZXR0aW5ncy5qc29uYCwgc2V0dGluZ3NKc29uKTtcbiAgfVxuXG4gIGNvdW50T2YobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0Q291bnRzLmdldChuYW1lKSA/PyAwO1xuICB9XG5cbiAgLy8gVG9rZW5TdWJzY3JpYmVyIOy9nOuwsSDigJQg7LqQ7IucIG11dGF0aW9uXG4gIHVwc2VydENhY2hlKGlkOiBudW1iZXIsIHJvdzogVG9rZW5TdWJzZXRBKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbnMuc2V0KGlkLCByb3cpO1xuICB9XG5cbiAgcmVtb3ZlQ2FjaGUoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudG9rZW5zLmRlbGV0ZShpZCk7XG4gIH1cblxuICByZXBsYWNlQ2FjaGUocm93czogVG9rZW5TdWJzZXRBW10pOiB2b2lkIHtcbiAgICB0aGlzLnRva2VucyA9IG5ldyBNYXAocm93cy5tYXAoKHIpID0+IFtyLmlkLCByXSkpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogVG9rZW5TdGF0c1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMudG9rZW5zLnZhbHVlcygpXS5tYXAoKHIpID0+ICh7XG4gICAgICB0b2tlbjogci50b2tlbixcbiAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgIHJlcXVlc3RzOiB0aGlzLmNvdW50T2Yoci5uYW1lKSxcbiAgICB9KSk7XG4gIH1cblxuICBzZWxlY3RUb2tlbigpOiBUb2tlblN1YnNldEEgfCBudWxsIHtcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMudG9rZW5zLnZhbHVlcygpXTtcbiAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbWluQ291bnQgPSBNYXRoLm1pbiguLi5yb3dzLm1hcCgocikgPT4gdGhpcy5jb3VudE9mKHIubmFtZSkpKTtcbiAgICBjb25zdCBpZGxlID0gcm93cy5maWx0ZXIoKHIpID0+IHRoaXMuY291bnRPZihyLm5hbWUpID09PSBtaW5Db3VudCk7XG4gICAgY29uc3QgcGlja2VkID0gaWRsZVt0aGlzLnJySW5kZXggJSBpZGxlLmxlbmd0aF0hO1xuICAgIHRoaXMucnJJbmRleCsrO1xuICAgIHJldHVybiBwaWNrZWQ7XG4gIH1cblxuICBhc3luYyBxdWVyeShpbnB1dDogUXVlcnlJbnB1dCwgdGltZW91dE1zPzogbnVtYmVyKTogUHJvbWlzZTxDbGlSZXN1bHQ+IHtcbiAgICBjb25zdCBlbGVjdGVkVG9rZW4gPSB0aGlzLnNlbGVjdFRva2VuKCk7XG4gICAgaWYgKCFlbGVjdGVkVG9rZW4pIHRocm93IG5ldyBRdW90YUVycm9yKFwiTm8gdG9rZW5zIGF2YWlsYWJsZVwiKTtcblxuICAgIC8vIGF3YWl0IOyghOyXkCBjb3VudCDshKDrsJjsmIEuIOuzkeugrCDsmpTssq3snbQg64+Z7Iuc7JeQIOuPhOywqe2VtOuPhCDqsIHsnpAg64uk66W4IO2GoO2BsOydhCDqs6DrpbTrj4TroZ0uXG4gICAgdGhpcy5yZXF1ZXN0Q291bnRzLnNldChlbGVjdGVkVG9rZW4ubmFtZSwgdGhpcy5jb3VudE9mKGVsZWN0ZWRUb2tlbi5uYW1lKSArIDEpO1xuXG4gICAgbGV0IHRva2VuID0gZWxlY3RlZFRva2VuLnRva2VuO1xuICAgIC8vIGV4cGlyZXNfYXQg7J6E67CV7J2066m0IHJlZnJlc2guXG4gICAgLy8gcmVmcmVzaCDtm4QgREIgc2F2ZSDihpIgdHJpZ2dlciBOT1RJRlkg4oaSIHN1YnNjcmliZXIg6rCAIOuwm+yVhCDsupDsi5wg6rCx7IugICjri6TrpbggZGlzcGF0Y2hlciDrj4Qg64+Z6riw7ZmUKVxuICAgIGlmIChcbiAgICAgIGVsZWN0ZWRUb2tlbi5leHBpcmVzX2F0ICYmXG4gICAgICBOdW1iZXIoZWxlY3RlZFRva2VuLmV4cGlyZXNfYXQpIC0gRGF0ZS5ub3coKSA8IFJFRlJFU0hfU0FGRVRZX01TICYmXG4gICAgICBlbGVjdGVkVG9rZW4ucmVmcmVzaF90b2tlblxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBRZ3JpZEZyYW1lIH0gPSBhd2FpdCBpbXBvcnQoXCIuL3FncmlkLmZyYW1lXCIpO1xuICAgICAgICB0b2tlbiA9IGF3YWl0IFFncmlkRnJhbWUucmVmcmVzaFRva2VuKHtcbiAgICAgICAgICBpZDogZWxlY3RlZFRva2VuLmlkLFxuICAgICAgICAgIHRva2VuOiBlbGVjdGVkVG9rZW4udG9rZW4sXG4gICAgICAgICAgbmFtZTogZWxlY3RlZFRva2VuLm5hbWUsXG4gICAgICAgICAgcmVmcmVzaF90b2tlbjogZWxlY3RlZFRva2VuLnJlZnJlc2hfdG9rZW4sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgcmVmcmVzaCBmYWlsZWQgZm9yICR7ZWxlY3RlZFRva2VuLm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICAvLyByZWZyZXNoIOyLpO2MqCDsi5wg6riw7KG0IHRva2VuIOycvOuhnCDsp4TtlokuIGV4ZWN1dGVDbGF1ZGUg6rCAIDQwMSDrsJvsnLzrqbQgY2FsbGVyIOyymOumrC5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2dnZXIuaW5mbyhg4oaSICR7ZWxlY3RlZFRva2VuLm5hbWV9IChtb2RlbDogJHtpbnB1dC5tb2RlbCA/PyBERUZBVUxUX01PREVMfSlgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVDbGF1ZGUoaW5wdXQsIHRva2VuLCB0aW1lb3V0TXMgPz8gREVGQVVMVF9USU1FT1VUX01TKTtcbiAgICByZXR1cm4geyAuLi5yZXN1bHQsIHRva2VuTmFtZTogZWxlY3RlZFRva2VuLm5hbWUsIG1vZGVsOiBpbnB1dC5tb2RlbCA/PyBERUZBVUxUX01PREVMIH07XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUNsYXVkZShcbiAgaW5wdXQ6IFF1ZXJ5SW5wdXQsXG4gIHRva2VuOiBzdHJpbmcsXG4gIHRpbWVvdXRNczogbnVtYmVyLFxuKTogUHJvbWlzZTxDbGlSZXN1bHQ+IHtcbiAgY29uc3QgbW9kZWwgPSBpbnB1dC5tb2RlbCA/PyBERUZBVUxUX01PREVMO1xuICBjb25zdCB0aW1lb3V0ID0gaW5wdXQudGltZW91dCA/PyB0aW1lb3V0TXM7XG4gIGNvbnN0IHVzZVN0cnVjdHVyZWRPdXRwdXQgPSBpbnB1dC5qc29uU2NoZW1hICYmIGlucHV0Lmpzb25TY2hlbWEubGVuZ3RoID4gMDtcblxuICAvLyAtLXRvb2xzIFwiXCIg66GcIOuqqOuToCB0b29sIOydhCDquLDrs7gg7LCo64uoLiBzdHJ1Y3R1cmVkIG91dHB1dCDsk7DrqbQgU3RydWN0dXJlZE91dHB1dCDrp4wg7ZmU7J207Yq466as7Iqk7Yq4LlxuICAvLyAtLXRvb2xzIFwiXCIg64qUIOuwmOuTnOyLnCDrkqTsl5Ag64uk66W4IO2UjOuemOq3uOqwgCDsmYDslbwgQ0xJIO2MjOyLseydtCDruYgg66y47J6Q7Je066GcIOyduOyLnVxuICBjb25zdCB0b29sQXJncyA9IHVzZVN0cnVjdHVyZWRPdXRwdXRcbiAgICA/IFtcIi0tdG9vbHNcIiwgXCJcIiwgXCItLWFsbG93ZWQtdG9vbHNcIiwgXCJTdHJ1Y3R1cmVkT3V0cHV0XCJdXG4gICAgOiBbXCItLXRvb2xzXCIsIFwiXCJdO1xuXG4gIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gW1xuICAgIFwiLXBcIixcbiAgICAuLi50b29sQXJncyxcbiAgICBcIi0tZGlzYWxsb3dlZFRvb2xzXCIsXG4gICAgLy8gQ0Psl5DshJwg7J6Q64+ZIO2ZnOyEse2ZlOuQmOuKlCBkZWZlcnJlZCDrj4TqtawuIO2GoO2BsCDstZzsoIHtmZTrpbzsnITtlbQg7LCo64uoXG4gICAgLi4uKFtcIk1vbml0b3JcIiwgXCJQdXNoTm90aWZpY2F0aW9uXCIsIFwiUmVtb3RlVHJpZ2dlclwiXSBhcyBjb25zdCksXG4gICAgXCItLW91dHB1dC1mb3JtYXRcIixcbiAgICBcInN0cmVhbS1qc29uXCIsXG4gICAgXCItLXZlcmJvc2VcIixcbiAgICAvLyAtLW1heC10dXJuczogc3RydWN0dXJlZCBvdXRwdXQg7J2AIHRvb2xfdXNlICsgdG9vbF9yZXN1bHQg66GcIDLthLQg7IaM67mEXG4gICAgXCItLW1heC10dXJuc1wiLFxuICAgIHVzZVN0cnVjdHVyZWRPdXRwdXQgPyBcIjJcIiA6IFwiMVwiLFxuICAgIFwiLS1wZXJtaXNzaW9uLW1vZGVcIixcbiAgICBcImJ5cGFzc1Blcm1pc3Npb25zXCIsXG4gICAgXCItLXNldHRpbmctc291cmNlc1wiLFxuICAgIFwicHJvamVjdFwiLFxuICAgIFwiLS1tb2RlbFwiLFxuICAgIG1vZGVsLFxuICAgIC8vIC0tc3lzdGVtLXByb21wdOuKlCDrsJjrk5zsi5wg66qF7Iuc7ZW07JW87ZWoLiDsmLXshZgg7IOd6561IOyLnCBDQ+qwgCBkZWZhdWx0IHN5c3RlbSBwcm9tcHTrpbwg7J6Q64+Z7Jy866GcIOyjvOyehe2VqCgyM2spXG4gICAgXCItLXN5c3RlbS1wcm9tcHRcIixcbiAgICBpbnB1dC5zeXN0ZW0gPz8gXCJcIixcbiAgICBcIi0tdGhpbmtpbmdcIixcbiAgICBcImRpc2FibGVkXCIsXG4gICAgXCItLWVmZm9ydFwiLFxuICAgIGlucHV0LmVmZm9ydCA/PyBERUZBVUxUX0VGRk9SVCxcbiAgICBcIi0tbm8tc2Vzc2lvbi1wZXJzaXN0ZW5jZVwiLFxuICAgIC8vIOuqqOuToCBza2lsbHMg67mE7Zmc7ISx7ZmUXG4gICAgXCItLWRpc2FibGUtc2xhc2gtY29tbWFuZHNcIixcbiAgXTtcbiAgaWYgKHVzZVN0cnVjdHVyZWRPdXRwdXQpIHtcbiAgICBhcmdzLnB1c2goXCItLWpzb24tc2NoZW1hXCIsIGlucHV0Lmpzb25TY2hlbWEhKTtcbiAgfVxuICBhcmdzLnB1c2goaW5wdXQucHJvbXB0KTtcblxuICBjb25zdCBlbnY6IE5vZGVKUy5Qcm9jZXNzRW52ID0ge1xuICAgIFBBVEg6IHByb2Nlc3MuZW52LlBBVEgsXG4gICAgVE1QRElSOiBwcm9jZXNzLmVudi5UTVBESVIsXG4gICAgQ0xBVURFX0NPREVfT0FVVEhfVE9LRU46IHRva2VuLFxuICAgIC8vIENMQVVERV9DT05GSUdfRElSIO2ZmOqyveuzgOyImOuhnCDso7zsnoVcbiAgICBDTEFVREVfQ09ORklHX0RJUixcbiAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0FVVE9fTUVNT1JZOiBcIjFcIixcbiAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0FEQVBUSVZFX1RISU5LSU5HOiBcIjFcIixcbiAgICBDTEFVREVfQ09ERV9ESVNBQkxFXzFNX0NPTlRFWFQ6IFwiMVwiLFxuICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQ0xBVURFX01EUzogXCIxXCIsXG4gICAgQ0xBVURFX0NPREVfQVRUUklCVVRJT05fSEVBREVSOiBcIjBcIixcbiAgfTtcblxuICByZXR1cm4gbmV3IFByb21pc2U8Q2xpUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcImNsYXVkZVwiLCBhcmdzLCB7XG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcImlnbm9yZVwiXSxcbiAgICAgIGVudixcbiAgICAgIC8vIOqyqeumrCAo65GQIOuLqOqzhCk6XG4gICAgICAvLyAxLiBDTEFVREVfQ1dEIOKAlCBwcm9qZWN0IHNjb3BlIOqyqeumrCAoY3dkIOydmCAuY2xhdWRlL3NldHRpbmdzLmpzb24pXG4gICAgICAvLyAyLiBDTEFVREVfQ09ORklHX0RJUiDigJQgdXNlciBzY29wZSDqsqnrpqwgY3dkIOqyqeumrOunjOycvOuhoCDrtoDsobEuXG4gICAgICBjd2Q6IENMQVVERV9DV0QsXG4gICAgfSk7XG5cbiAgICBsZXQgYnVmZmVyID0gXCJcIjtcbiAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICBjaGlsZC5raWxsKCk7XG4gICAgICByZWplY3QobmV3IFRpbWVvdXRFcnJvcihgVGltZW91dCBhZnRlciAke3RpbWVvdXQgLyAxMDAwfXMgKHRva2VuOiAke21hc2tUb2tlbih0b2tlbil9KWApKTtcbiAgICB9LCB0aW1lb3V0KTtcblxuICAgIGNoaWxkLnN0ZG91dD8ub24oXCJkYXRhXCIsIChkOiBCdWZmZXIpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBidWZmZXIgKz0gZC50b1N0cmluZygpO1xuICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoXCJcXG5cIik7XG4gICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSA/PyBcIlwiO1xuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGlmICghbGluZS50cmltKCkpIGNvbnRpbnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGxpbmUpO1xuICAgICAgICAgIGlmIChqLnR5cGUgPT09IFwicmVzdWx0XCIgJiYgIXNldHRsZWQpIHtcbiAgICAgICAgICAgIC8vIC0tanNvbi1zY2hlbWEg7IKs7JqpIOyLnCBzdHJ1Y3R1cmVkX291dHB1dCDsl5Ag7YyM7Iux65CcIOqwneyytOqwgCDsmKjri6Qg4oaSIOyasOyEoCDsgqzsmqlcbiAgICAgICAgICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoai5zdHJ1Y3R1cmVkX291dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShqLnN0cnVjdHVyZWRfb3V0cHV0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRleHQgPSAoai5yZXN1bHQgPz8gXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXmBgYCg/Ompzb24pP1xccypcXG4/L2ksIFwiXCIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcbj9gYGBcXHMqJC9pLCBcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRleHQuc3RhcnRzV2l0aChcIllvdSd2ZSBoaXRcIikpIHtcbiAgICAgICAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgUXVvdGFFcnJvcihgUXVvdGEgZXhoYXVzdGVkICh0b2tlbjogJHttYXNrVG9rZW4odG9rZW4pfSlgKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdSA9IGoudXNhZ2UgPz8ge307XG4gICAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgdXNhZ2U6IHtcbiAgICAgICAgICAgICAgICBpbnB1dF90b2tlbnM6IHUuaW5wdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgb3V0cHV0X3Rva2VuczogdS5vdXRwdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB1LmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyA/PyAwLFxuICAgICAgICAgICAgICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB1LmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGR1cmF0aW9uTXM6IGouZHVyYXRpb25fbXMgPz8gMCxcbiAgICAgICAgICAgICAgY29zdFVzZDogai50b3RhbF9jb3N0X3VzZCA/PyAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZWplY3QobmV3IFByb2Nlc3NFcnJvcihgQ0xJIHByb2Nlc3MgY2xvc2VkIHdpdGhvdXQgcmVzdWx0ICh0b2tlbjogJHttYXNrVG9rZW4odG9rZW4pfSlgKSk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZWplY3QobmV3IFByb2Nlc3NFcnJvcihgQ0xJIHByb2Nlc3MgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9ICh0b2tlbjogJHttYXNrVG9rZW4odG9rZW4pfSlgKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgUWdyaWREaXNwYXRjaGVyID0gbmV3IFFncmlkRGlzcGF0Y2hlckNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUVuQyxNQUFNLGdCQUFnQjtBQUN0QixNQUFNLHFCQUFxQjtBQUMzQixNQUFNLGlCQUFpQjtBQUl2QixNQUFNLGFBQWE7QUFHbkIsTUFBTSxvQkFBb0I7QUFHMUIsTUFBTSx3QkFBd0I7Q0FDNUIsdUJBQXVCO0NBQ3ZC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
@@ -15,12 +15,13 @@ var QgridFrameClass = class extends BaseFrameClass {
15
15
  constructor() {
16
16
  super("Qgrid");
17
17
  }
18
- async query(prompt, system, timeout, model, projectName, jsonSchema) {
18
+ async query(prompt, system, timeout, model, projectName, jsonSchema, effort) {
19
19
  const result = await QgridDispatcher.query({
20
20
  system,
21
21
  prompt,
22
22
  model,
23
- jsonSchema
23
+ jsonSchema,
24
+ effort
24
25
  }, timeout);
25
26
  RequestLogModel.save([{
26
27
  token_name: result.tokenName,
@@ -53,7 +54,6 @@ var QgridFrameClass = class extends BaseFrameClass {
53
54
  name,
54
55
  ...refreshToken && refreshToken.length > 0 ? { refresh_token: refreshToken } : {}
55
56
  }]);
56
- QgridDispatcher.addToken(token, name);
57
57
  return { added: true };
58
58
  }
59
59
  async updateToken(token, name, newToken, refreshToken) {
@@ -67,23 +67,16 @@ var QgridFrameClass = class extends BaseFrameClass {
67
67
  name: name !== void 0 ? name : entry.name,
68
68
  ...hasRefreshToken ? { refresh_token: refreshToken } : {}
69
69
  }]);
70
- if (hasNewToken) {
71
- QgridDispatcher.removeToken(token);
72
- QgridDispatcher.addToken(newToken, name ?? entry.name);
73
- }
74
70
  return { updated: true };
75
71
  }
76
72
  async removeToken(token) {
77
- if (!QgridDispatcher.hasToken(token)) return { removed: false };
78
73
  const entry = await TokenModel.findByToken("A", token);
79
- if (entry) await TokenModel.del([entry.id]);
80
- QgridDispatcher.removeToken(token);
74
+ if (!entry) return { removed: false };
75
+ await TokenModel.del([entry.id]);
81
76
  return { removed: true };
82
77
  }
83
78
  /**
84
- * @param id token_id
85
- * 토큰 활성화/비활성화 토글 (dispatcher 등록/제거 & DB의 active 필드 업데이트)
86
- * @returns 토큰 활성화 여부
79
+ * 토큰 활성화/비활성화 토글 DB의 active 필드 업데이트
87
80
  */
88
81
  async toggleToken(id) {
89
82
  const entry = await TokenModel.findOne("A", { id });
@@ -95,8 +88,6 @@ var QgridFrameClass = class extends BaseFrameClass {
95
88
  active: newActive,
96
89
  name: entry.name
97
90
  }]);
98
- if (newActive) QgridDispatcher.addToken(entry.token, entry.name);
99
- else QgridDispatcher.removeToken(entry.token);
100
91
  return { active: newActive };
101
92
  }
102
93
  async oauthStart(name) {
@@ -119,10 +110,7 @@ var QgridFrameClass = class extends BaseFrameClass {
119
110
  const tokens = await exchangeCodeForTokens(code, pending.codeVerifier, state, pending.redirectUri);
120
111
  if (tokens.accountUuid) {
121
112
  const oldEntries = await TokenModel.findByAccountUuid("A", tokens.accountUuid);
122
- if (oldEntries.length > 0) {
123
- for (const old of oldEntries) QgridDispatcher.removeToken(old.token);
124
- await TokenModel.del(oldEntries.map((o) => o.id));
125
- }
113
+ if (oldEntries.length > 0) await TokenModel.del(oldEntries.map((o) => o.id));
126
114
  }
127
115
  await TokenModel.save([{
128
116
  token: tokens.accessToken,
@@ -131,7 +119,6 @@ var QgridFrameClass = class extends BaseFrameClass {
131
119
  expires_at: tokens.expiresAt ? BigInt(tokens.expiresAt) : null,
132
120
  account_uuid: tokens.accountUuid
133
121
  }]);
134
- QgridDispatcher.addToken(tokens.accessToken, pending.name);
135
122
  return reply.redirect(`/?oauth=success&name=${encodeURIComponent(pending.name)}`);
136
123
  } catch (e) {
137
124
  return reply.redirect(`/?oauth=error&reason=${encodeURIComponent(e.message)}`);
@@ -168,14 +155,13 @@ var QgridFrameClass = class extends BaseFrameClass {
168
155
  expires_at: BigInt(refreshed.expiresAt),
169
156
  name: token.name ?? ""
170
157
  }]);
171
- QgridDispatcher.removeToken(token.token);
172
- QgridDispatcher.addToken(refreshed.accessToken, token.name);
173
158
  return refreshed.accessToken;
174
159
  }
175
160
  async health() {
176
161
  return {
177
162
  status: "ok",
178
- activeTokens: QgridDispatcher.tokens.size
163
+ activeTokens: QgridDispatcher.tokens.size,
164
+ subscriber: QgridDispatcher.subscriber?.status() ?? null
179
165
  };
180
166
  }
181
167
  };
@@ -191,7 +177,8 @@ __decorate([
191
177
  Number,
192
178
  String,
193
179
  String,
194
- String
180
+ String,
181
+ Object
195
182
  ]),
196
183
  __decorateMetadata("design:returntype", Promise)
197
184
  ], QgridFrameClass.prototype, "query", null);
@@ -298,4 +285,4 @@ const QgridFrame = new QgridFrameClass();
298
285
  //#endregion
299
286
  export { QgridFrame };
300
287
 
301
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyBhcGksIEJhc2VGcmFtZUNsYXNzIH0gZnJvbSBcInNvbmFtdVwiO1xuXG5pbXBvcnQgeyBNSUNST19VU0QsIFJlcXVlc3RMb2dNb2RlbCB9IGZyb20gXCIuLi9yZXF1ZXN0LWxvZy9yZXF1ZXN0LWxvZy5tb2RlbFwiO1xuaW1wb3J0IHsgVG9rZW5Nb2RlbCB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBSZWZyZXNoVG9rZW5QYXJhbXMgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4udHlwZXNcIjtcbmltcG9ydCB7XG4gIGJ1aWxkQXV0aFVybCxcbiAgZXhjaGFuZ2VDb2RlRm9yVG9rZW5zLFxuICBmZXRjaFVzYWdlLFxuICBnZW5lcmF0ZVBLQ0UsXG4gIHJlZnJlc2hBY2Nlc3NUb2tlbixcbn0gZnJvbSBcIi4vb2F1dGhcIjtcbmltcG9ydCB7IFFncmlkRGlzcGF0Y2hlciB9IGZyb20gXCIuL3FncmlkLmRpc3BhdGNoZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ2xpUmVzdWx0LFxuICB0eXBlIEhlYWx0aFJlc3BvbnNlLFxuICB0eXBlIE9BdXRoU3RhcnRSZXN1bHQsXG4gIHR5cGUgVG9rZW5TdGF0cyxcbiAgdHlwZSBVc2FnZVJlc3BvbnNlLFxufSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBwZW5kaW5nT0F1dGggPSBuZXcgTWFwPHN0cmluZywgeyBjb2RlVmVyaWZpZXI6IHN0cmluZzsgbmFtZTogc3RyaW5nOyByZWRpcmVjdFVyaTogc3RyaW5nIH0+KCk7XG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIl0pO1xuY29uc3Qgb2F1dGhMb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJvYXV0aFwiXSk7XG5cbmNsYXNzIFFncmlkRnJhbWVDbGFzcyBleHRlbmRzIEJhc2VGcmFtZUNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJRZ3JpZFwiKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBxdWVyeShcbiAgICBwcm9tcHQ6IHN0cmluZyxcbiAgICBzeXN0ZW0/OiBzdHJpbmcsXG4gICAgdGltZW91dD86IG51bWJlcixcbiAgICBtb2RlbD86IHN0cmluZyxcbiAgICBwcm9qZWN0TmFtZT86IHN0cmluZyxcbiAgICBqc29uU2NoZW1hPzogc3RyaW5nLFxuICApOiBQcm9taXNlPENsaVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFFncmlkRGlzcGF0Y2hlci5xdWVyeSh7IHN5c3RlbSwgcHJvbXB0LCBtb2RlbCwganNvblNjaGVtYSB9LCB0aW1lb3V0KTtcblxuICAgIFJlcXVlc3RMb2dNb2RlbC5zYXZlKFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW5fbmFtZTogcmVzdWx0LnRva2VuTmFtZSxcbiAgICAgICAgcHJvamVjdF9uYW1lOiBwcm9qZWN0TmFtZSAmJiBwcm9qZWN0TmFtZS5sZW5ndGggPiAwID8gcHJvamVjdE5hbWUgOiBudWxsLFxuICAgICAgICBtb2RlbF9uYW1lOiByZXN1bHQubW9kZWwgPz8gbnVsbCxcbiAgICAgICAgdXNlcl9wcm9tcHQ6IHByb21wdCxcbiAgICAgICAgc3lzdGVtX3Byb21wdDogc3lzdGVtID8/IG51bGwsXG4gICAgICAgIHJlc3BvbnNlOiByZXN1bHQudGV4dCxcbiAgICAgICAgaW5wdXRfdG9rZW5zOiByZXN1bHQudXNhZ2UuaW5wdXRfdG9rZW5zLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiByZXN1bHQudXNhZ2Uub3V0cHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zLFxuICAgICAgICBkdXJhdGlvbl9tczogcmVzdWx0LmR1cmF0aW9uTXMsXG4gICAgICAgIGNvc3RfdXNkOiByZXN1bHQuY29zdFVzZCAhPT0gbnVsbCA/IE1hdGgucm91bmQocmVzdWx0LmNvc3RVc2QgKiBNSUNST19VU0QpIDogbnVsbCxcbiAgICAgIH0sXG4gICAgXSkuY2F0Y2goKGUpID0+IGxvZ2dlci5lcnJvcihgcmVxdWVzdExvZyBzYXZlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgc3RhdHMoKTogUHJvbWlzZTxUb2tlblN0YXRzW10+IHtcbiAgICByZXR1cm4gUWdyaWREaXNwYXRjaGVyLmdldFN0YXRzKCk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyB0b3RhbENvc3QodG9rZW5OYW1lPzogc3RyaW5nKTogUHJvbWlzZTx7IHVzZDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4geyB1c2Q6IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC50b3RhbENvc3QoeyB0b2tlbl9uYW1lOiB0b2tlbk5hbWUgfSkgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIHByb2plY3ROYW1lcygpOiBQcm9taXNlPHsgbmFtZXM6IHN0cmluZ1tdIH0+IHtcbiAgICByZXR1cm4geyBuYW1lczogYXdhaXQgUmVxdWVzdExvZ01vZGVsLmRpc3RpbmN0UHJvamVjdE5hbWVzKCkgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBhZGRUb2tlbih0b2tlbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHJlZnJlc2hUb2tlbj86IHN0cmluZyk6IFByb21pc2U8eyBhZGRlZDogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW4sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIC4uLihyZWZyZXNoVG9rZW4gJiYgcmVmcmVzaFRva2VuLmxlbmd0aCA+IDAgPyB7IHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbiB9IDoge30pLFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBRZ3JpZERpc3BhdGNoZXIuYWRkVG9rZW4odG9rZW4sIG5hbWUpO1xuICAgIHJldHVybiB7IGFkZGVkOiB0cnVlIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdXBkYXRlVG9rZW4oXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBuYW1lPzogc3RyaW5nLFxuICAgIG5ld1Rva2VuPzogc3RyaW5nLFxuICAgIHJlZnJlc2hUb2tlbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7IHVwZGF0ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlUb2tlbihcIkFcIiwgdG9rZW4pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IHVwZGF0ZWQ6IGZhbHNlIH07XG5cbiAgICBjb25zdCBoYXNOZXdUb2tlbiA9IG5ld1Rva2VuICE9PSB1bmRlZmluZWQgJiYgbmV3VG9rZW4ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNSZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW4gIT09IHVuZGVmaW5lZCAmJiByZWZyZXNoVG9rZW4ubGVuZ3RoID4gMDtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgIHRva2VuOiBoYXNOZXdUb2tlbiA/IG5ld1Rva2VuIDogZW50cnkudG9rZW4sXG4gICAgICAgIG5hbWU6IG5hbWUgIT09IHVuZGVmaW5lZCA/IG5hbWUgOiBlbnRyeS5uYW1lLFxuICAgICAgICAuLi4oaGFzUmVmcmVzaFRva2VuID8geyByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4gfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICBpZiAoaGFzTmV3VG9rZW4pIHtcbiAgICAgIFFncmlkRGlzcGF0Y2hlci5yZW1vdmVUb2tlbih0b2tlbik7XG4gICAgICBRZ3JpZERpc3BhdGNoZXIuYWRkVG9rZW4obmV3VG9rZW4sIG5hbWUgPz8gZW50cnkubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB7IHVwZGF0ZWQ6IHRydWUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyByZW1vdmVUb2tlbih0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx7IHJlbW92ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGlmICghUWdyaWREaXNwYXRjaGVyLmhhc1Rva2VuKHRva2VuKSkgcmV0dXJuIHsgcmVtb3ZlZDogZmFsc2UgfTtcblxuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlUb2tlbihcIkFcIiwgdG9rZW4pO1xuICAgIGlmIChlbnRyeSkgYXdhaXQgVG9rZW5Nb2RlbC5kZWwoW2VudHJ5LmlkXSk7XG4gICAgUWdyaWREaXNwYXRjaGVyLnJlbW92ZVRva2VuKHRva2VuKTtcbiAgICByZXR1cm4geyByZW1vdmVkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGlkIHRva2VuX2lkXG4gICAqIO2GoO2BsCDtmZzshLHtmZQv67mE7Zmc7ISx7ZmUIO2GoOq4gCAoZGlzcGF0Y2hlciDrk7HroZ0v7KCc6rGwICYgRELsnZggYWN0aXZlIO2VhOuTnCDsl4XrjbDsnbTtirgpXG4gICAqIEByZXR1cm5zIO2GoO2BsCDtmZzshLHtmZQg7Jes67aAXG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdG9nZ2xlVG9rZW4oaWQ6IG51bWJlcik6IFByb21pc2U8eyBhY3RpdmU6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IGFjdGl2ZTogZmFsc2UgfTtcblxuICAgIGNvbnN0IG5ld0FjdGl2ZSA9ICFlbnRyeS5hY3RpdmU7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFt7IGlkLCB0b2tlbjogZW50cnkudG9rZW4sIGFjdGl2ZTogbmV3QWN0aXZlLCBuYW1lOiBlbnRyeS5uYW1lIH1dKTtcblxuICAgIGlmIChuZXdBY3RpdmUpIHtcbiAgICAgIFFncmlkRGlzcGF0Y2hlci5hZGRUb2tlbihlbnRyeS50b2tlbiwgZW50cnkubmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFFncmlkRGlzcGF0Y2hlci5yZW1vdmVUb2tlbihlbnRyeS50b2tlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYWN0aXZlOiBuZXdBY3RpdmUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBvYXV0aFN0YXJ0KG5hbWU6IHN0cmluZyk6IFByb21pc2U8T0F1dGhTdGFydFJlc3VsdD4ge1xuICAgIGNvbnN0IHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9ID0gZ2VuZXJhdGVQS0NFKCk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQb3J0ID0gcHJvY2Vzcy5lbnYuUE9SVCA/PyBcIjQ0OTAwXCI7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSBgaHR0cDovL2xvY2FsaG9zdDoke3NlcnZlclBvcnR9L2NhbGxiYWNrYDtcbiAgICBjb25zdCBhdXRoVXJsID0gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2UsIHN0YXRlLCByZWRpcmVjdFVyaSk7XG5cbiAgICBwZW5kaW5nT0F1dGguc2V0KHN0YXRlLCB7IGNvZGVWZXJpZmllciwgbmFtZSwgcmVkaXJlY3RVcmkgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBwZW5kaW5nT0F1dGguZGVsZXRlKHN0YXRlKSwgMzAwXzAwMCk7XG5cbiAgICByZXR1cm4geyBhdXRoVXJsIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVPQXV0aENhbGxiYWNrKGNvZGU6IHN0cmluZywgc3RhdGU6IHN0cmluZywgcmVwbHk6IEZhc3RpZnlSZXBseSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlbmRpbmcgPSBwZW5kaW5nT0F1dGguZ2V0KHN0YXRlKTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChcIi8/b2F1dGg9ZXJyb3ImcmVhc29uPWludmFsaWRfc3RhdGVcIik7XG4gICAgfVxuICAgIHBlbmRpbmdPQXV0aC5kZWxldGUoc3RhdGUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IGV4Y2hhbmdlQ29kZUZvclRva2VucyhcbiAgICAgICAgY29kZSxcbiAgICAgICAgcGVuZGluZy5jb2RlVmVyaWZpZXIsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwZW5kaW5nLnJlZGlyZWN0VXJpLFxuICAgICAgKTtcblxuICAgICAgaWYgKHRva2Vucy5hY2NvdW50VXVpZCkge1xuICAgICAgICBjb25zdCBvbGRFbnRyaWVzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlBY2NvdW50VXVpZChcIkFcIiwgdG9rZW5zLmFjY291bnRVdWlkKTtcbiAgICAgICAgaWYgKG9sZEVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAoY29uc3Qgb2xkIG9mIG9sZEVudHJpZXMpIFFncmlkRGlzcGF0Y2hlci5yZW1vdmVUb2tlbihvbGQudG9rZW4pO1xuICAgICAgICAgIGF3YWl0IFRva2VuTW9kZWwuZGVsKG9sZEVudHJpZXMubWFwKChvKSA9PiBvLmlkKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgICAge1xuICAgICAgICAgIHRva2VuOiB0b2tlbnMuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgbmFtZTogcGVuZGluZy5uYW1lLFxuICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHRva2Vucy5yZWZyZXNoVG9rZW4sXG4gICAgICAgICAgZXhwaXJlc19hdDogdG9rZW5zLmV4cGlyZXNBdCA/IEJpZ0ludCh0b2tlbnMuZXhwaXJlc0F0KSA6IG51bGwsXG4gICAgICAgICAgYWNjb3VudF91dWlkOiB0b2tlbnMuYWNjb3VudFV1aWQsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICAgIFFncmlkRGlzcGF0Y2hlci5hZGRUb2tlbih0b2tlbnMuYWNjZXNzVG9rZW4sIHBlbmRpbmcubmFtZSk7XG5cbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChgLz9vYXV0aD1zdWNjZXNzJm5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQocGVuZGluZy5uYW1lKX1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoYC8/b2F1dGg9ZXJyb3ImcmVhc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KChlIGFzIEVycm9yKS5tZXNzYWdlKX1gKTtcbiAgICB9XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyB1c2FnZSh0b2tlbk5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPFVzYWdlUmVzcG9uc2U+IHtcbiAgICBjb25zdCB7IHJvd3M6IGFsbFRva2VucyB9ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kTWFueShcIkFcIik7XG4gICAgY29uc3QgZW50cnkgPSB0b2tlbk5hbWVcbiAgICAgID8gYWxsVG9rZW5zLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gdG9rZW5OYW1lKVxuICAgICAgOiBhbGxUb2tlbnMuZmluZExhc3QoKGUpID0+IGUuYWN0aXZlKTtcblxuICAgIGlmICghZW50cnkpIHJldHVybiB7IGVycm9yOiBcIk5PVF9GT1VORFwiIH07XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBlbnRyeS50b2tlbjtcbiAgICBjb25zdCBpc0V4cGlyZWQgPSBlbnRyeS5leHBpcmVzX2F0ICYmIE51bWJlcihlbnRyeS5leHBpcmVzX2F0KSA8IERhdGUubm93KCk7XG5cbiAgICBpZiAoaXNFeHBpcmVkICYmIGVudHJ5LnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oZW50cnkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBvYXV0aExvZ2dlci53YXJuKGByZWZyZXNoIGZhaWxlZCBmb3IgJHtlbnRyeS5uYW1lfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IFwicmUtbG9naW4gcmVxdWlyZWRcIiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoVXNhZ2UoYWNjZXNzVG9rZW4pO1xuXG4gICAgaWYgKHJlc3VsdC5lcnJvciAmJiBlbnRyeS5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhY2Nlc3NUb2tlbiA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuKGVudHJ5KTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZldGNoVXNhZ2UoYWNjZXNzVG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBvYXV0aExvZ2dlci53YXJuKGByZWZyZXNoIGZhaWxlZCBmb3IgJHtlbnRyeS5uYW1lfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IFwicmUtbG9naW4gcmVxdWlyZWRcIiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyByZWZyZXNoVG9rZW4odG9rZW46IFJlZnJlc2hUb2tlblBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0b2tlbi5yZWZyZXNoX3Rva2VuKSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWZyZXNoIHRva2VuXCIpO1xuICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IHJlZnJlc2hBY2Nlc3NUb2tlbih0b2tlbi5yZWZyZXNoX3Rva2VuKTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgIHRva2VuOiByZWZyZXNoZWQuYWNjZXNzVG9rZW4sXG4gICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hlZC5yZWZyZXNoVG9rZW4sXG4gICAgICAgIGV4cGlyZXNfYXQ6IEJpZ0ludChyZWZyZXNoZWQuZXhwaXJlc0F0KSxcbiAgICAgICAgbmFtZTogdG9rZW4ubmFtZSA/PyBcIlwiLFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBRZ3JpZERpc3BhdGNoZXIucmVtb3ZlVG9rZW4odG9rZW4udG9rZW4pO1xuICAgIFFncmlkRGlzcGF0Y2hlci5hZGRUb2tlbihyZWZyZXNoZWQuYWNjZXNzVG9rZW4sIHRva2VuLm5hbWUpO1xuICAgIHJldHVybiByZWZyZXNoZWQuYWNjZXNzVG9rZW47XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBoZWFsdGgoKTogUHJvbWlzZTxIZWFsdGhSZXNwb25zZT4ge1xuICAgIHJldHVybiB7IHN0YXR1czogXCJva1wiLCBhY3RpdmVUb2tlbnM6IFFncmlkRGlzcGF0Y2hlci50b2tlbnMuc2l6ZSB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBRZ3JpZEZyYW1lID0gbmV3IFFncmlkRnJhbWVDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBdUJBLE1BQU0sK0JBQWUsSUFBSSxLQUEwRTtBQUNuRyxNQUFNLFNBQVMsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUNuQyxNQUFNLGNBQWMsVUFBVSxDQUFDLFNBQVMsUUFBUSxDQUFDO0FBRWpELElBQU0sa0JBQU4sY0FBOEIsZUFBZTtDQUMzQyxjQUFjO0FBQ1osUUFBTSxRQUFROztDQUdoQixNQUNNLE1BQ0osUUFDQSxRQUNBLFNBQ0EsT0FDQSxhQUNBLFlBQ29CO0VBQ3BCLE1BQU0sU0FBUyxNQUFNLGdCQUFnQixNQUFNO0dBQUU7R0FBUTtHQUFRO0dBQU87R0FBWSxFQUFFLFFBQVE7QUFFMUYsa0JBQWdCLEtBQUssQ0FDbkI7R0FDRSxZQUFZLE9BQU87R0FDbkIsY0FBYyxlQUFlLFlBQVksU0FBUyxJQUFJLGNBQWM7R0FDcEUsWUFBWSxPQUFPLFNBQVM7R0FDNUIsYUFBYTtHQUNiLGVBQWUsVUFBVTtHQUN6QixVQUFVLE9BQU87R0FDakIsY0FBYyxPQUFPLE1BQU07R0FD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
288
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyBhcGksIEJhc2VGcmFtZUNsYXNzIH0gZnJvbSBcInNvbmFtdVwiO1xuXG5pbXBvcnQgeyBNSUNST19VU0QsIFJlcXVlc3RMb2dNb2RlbCB9IGZyb20gXCIuLi9yZXF1ZXN0LWxvZy9yZXF1ZXN0LWxvZy5tb2RlbFwiO1xuaW1wb3J0IHsgVG9rZW5Nb2RlbCB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBSZWZyZXNoVG9rZW5QYXJhbXMgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4udHlwZXNcIjtcbmltcG9ydCB7XG4gIGJ1aWxkQXV0aFVybCxcbiAgZXhjaGFuZ2VDb2RlRm9yVG9rZW5zLFxuICBmZXRjaFVzYWdlLFxuICBnZW5lcmF0ZVBLQ0UsXG4gIHJlZnJlc2hBY2Nlc3NUb2tlbixcbn0gZnJvbSBcIi4vb2F1dGhcIjtcbmltcG9ydCB7IFFncmlkRGlzcGF0Y2hlciB9IGZyb20gXCIuL3FncmlkLmRpc3BhdGNoZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ2xpUmVzdWx0LFxuICB0eXBlIEVmZm9ydCxcbiAgdHlwZSBIZWFsdGhSZXNwb25zZSxcbiAgdHlwZSBPQXV0aFN0YXJ0UmVzdWx0LFxuICB0eXBlIFRva2VuU3RhdHMsXG4gIHR5cGUgVXNhZ2VSZXNwb25zZSxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgcGVuZGluZ09BdXRoID0gbmV3IE1hcDxzdHJpbmcsIHsgY29kZVZlcmlmaWVyOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgcmVkaXJlY3RVcmk6IHN0cmluZyB9PigpO1xuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCJdKTtcbmNvbnN0IG9hdXRoTG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwib2F1dGhcIl0pO1xuXG5jbGFzcyBRZ3JpZEZyYW1lQ2xhc3MgZXh0ZW5kcyBCYXNlRnJhbWVDbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUWdyaWRcIik7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcXVlcnkoXG4gICAgcHJvbXB0OiBzdHJpbmcsXG4gICAgc3lzdGVtPzogc3RyaW5nLFxuICAgIHRpbWVvdXQ/OiBudW1iZXIsXG4gICAgbW9kZWw/OiBzdHJpbmcsXG4gICAgcHJvamVjdE5hbWU/OiBzdHJpbmcsXG4gICAganNvblNjaGVtYT86IHN0cmluZyxcbiAgICBlZmZvcnQ/OiBFZmZvcnQsXG4gICk6IFByb21pc2U8Q2xpUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUWdyaWREaXNwYXRjaGVyLnF1ZXJ5KFxuICAgICAgeyBzeXN0ZW0sIHByb21wdCwgbW9kZWwsIGpzb25TY2hlbWEsIGVmZm9ydCB9LFxuICAgICAgdGltZW91dCxcbiAgICApO1xuXG4gICAgUmVxdWVzdExvZ01vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICB0b2tlbl9uYW1lOiByZXN1bHQudG9rZW5OYW1lLFxuICAgICAgICBwcm9qZWN0X25hbWU6IHByb2plY3ROYW1lICYmIHByb2plY3ROYW1lLmxlbmd0aCA+IDAgPyBwcm9qZWN0TmFtZSA6IG51bGwsXG4gICAgICAgIG1vZGVsX25hbWU6IHJlc3VsdC5tb2RlbCA/PyBudWxsLFxuICAgICAgICB1c2VyX3Byb21wdDogcHJvbXB0LFxuICAgICAgICBzeXN0ZW1fcHJvbXB0OiBzeXN0ZW0gPz8gbnVsbCxcbiAgICAgICAgcmVzcG9uc2U6IHJlc3VsdC50ZXh0LFxuICAgICAgICBpbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5pbnB1dF90b2tlbnMsXG4gICAgICAgIG91dHB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5vdXRwdXRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMsXG4gICAgICAgIGR1cmF0aW9uX21zOiByZXN1bHQuZHVyYXRpb25NcyxcbiAgICAgICAgY29zdF91c2Q6IHJlc3VsdC5jb3N0VXNkICE9PSBudWxsID8gTWF0aC5yb3VuZChyZXN1bHQuY29zdFVzZCAqIE1JQ1JPX1VTRCkgOiBudWxsLFxuICAgICAgfSxcbiAgICBdKS5jYXRjaCgoZSkgPT4gbG9nZ2VyLmVycm9yKGByZXF1ZXN0TG9nIHNhdmUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBzdGF0cygpOiBQcm9taXNlPFRva2VuU3RhdHNbXT4ge1xuICAgIHJldHVybiBRZ3JpZERpc3BhdGNoZXIuZ2V0U3RhdHMoKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIHRvdGFsQ29zdCh0b2tlbk5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPHsgdXNkOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB7IHVzZDogYXdhaXQgUmVxdWVzdExvZ01vZGVsLnRvdGFsQ29zdCh7IHRva2VuX25hbWU6IHRva2VuTmFtZSB9KSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgcHJvamVjdE5hbWVzKCk6IFByb21pc2U8eyBuYW1lczogc3RyaW5nW10gfT4ge1xuICAgIHJldHVybiB7IG5hbWVzOiBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZGlzdGluY3RQcm9qZWN0TmFtZXMoKSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGFkZFRva2VuKHRva2VuOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcmVmcmVzaFRva2VuPzogc3RyaW5nKTogUHJvbWlzZTx7IGFkZGVkOiBib29sZWFuIH0+IHtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICB0b2tlbixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgLi4uKHJlZnJlc2hUb2tlbiAmJiByZWZyZXNoVG9rZW4ubGVuZ3RoID4gMCA/IHsgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuIH0gOiB7fSksXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHJldHVybiB7IGFkZGVkOiB0cnVlIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdXBkYXRlVG9rZW4oXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBuYW1lPzogc3RyaW5nLFxuICAgIG5ld1Rva2VuPzogc3RyaW5nLFxuICAgIHJlZnJlc2hUb2tlbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7IHVwZGF0ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlUb2tlbihcIkFcIiwgdG9rZW4pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IHVwZGF0ZWQ6IGZhbHNlIH07XG5cbiAgICBjb25zdCBoYXNOZXdUb2tlbiA9IG5ld1Rva2VuICE9PSB1bmRlZmluZWQgJiYgbmV3VG9rZW4ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNSZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW4gIT09IHVuZGVmaW5lZCAmJiByZWZyZXNoVG9rZW4ubGVuZ3RoID4gMDtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgIHRva2VuOiBoYXNOZXdUb2tlbiA/IG5ld1Rva2VuIDogZW50cnkudG9rZW4sXG4gICAgICAgIG5hbWU6IG5hbWUgIT09IHVuZGVmaW5lZCA/IG5hbWUgOiBlbnRyeS5uYW1lLFxuICAgICAgICAuLi4oaGFzUmVmcmVzaFRva2VuID8geyByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4gfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgdXBkYXRlZDogdHJ1ZSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHJlbW92ZVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHsgcmVtb3ZlZDogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRCeVRva2VuKFwiQVwiLCB0b2tlbik7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHsgcmVtb3ZlZDogZmFsc2UgfTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLmRlbChbZW50cnkuaWRdKTtcbiAgICByZXR1cm4geyByZW1vdmVkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICog7Yag7YGwIO2ZnOyEse2ZlC/ruYTtmZzshLHtmZQg7Yag6riAIERC7J2YIGFjdGl2ZSDtlYTrk5wg7JeF642w7J207Yq4XG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdG9nZ2xlVG9rZW4oaWQ6IG51bWJlcik6IFByb21pc2U8eyBhY3RpdmU6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IGFjdGl2ZTogZmFsc2UgfTtcblxuICAgIGNvbnN0IG5ld0FjdGl2ZSA9ICFlbnRyeS5hY3RpdmU7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFt7IGlkLCB0b2tlbjogZW50cnkudG9rZW4sIGFjdGl2ZTogbmV3QWN0aXZlLCBuYW1lOiBlbnRyeS5uYW1lIH1dKTtcbiAgICByZXR1cm4geyBhY3RpdmU6IG5ld0FjdGl2ZSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIG9hdXRoU3RhcnQobmFtZTogc3RyaW5nKTogUHJvbWlzZTxPQXV0aFN0YXJ0UmVzdWx0PiB7XG4gICAgY29uc3QgeyBjb2RlVmVyaWZpZXIsIGNvZGVDaGFsbGVuZ2UsIHN0YXRlIH0gPSBnZW5lcmF0ZVBLQ0UoKTtcblxuICAgIGNvbnN0IHNlcnZlclBvcnQgPSBwcm9jZXNzLmVudi5QT1JUID8/IFwiNDQ5MDBcIjtcbiAgICBjb25zdCByZWRpcmVjdFVyaSA9IGBodHRwOi8vbG9jYWxob3N0OiR7c2VydmVyUG9ydH0vY2FsbGJhY2tgO1xuICAgIGNvbnN0IGF1dGhVcmwgPSBidWlsZEF1dGhVcmwoY29kZUNoYWxsZW5nZSwgc3RhdGUsIHJlZGlyZWN0VXJpKTtcblxuICAgIHBlbmRpbmdPQXV0aC5zZXQoc3RhdGUsIHsgY29kZVZlcmlmaWVyLCBuYW1lLCByZWRpcmVjdFVyaSB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHBlbmRpbmdPQXV0aC5kZWxldGUoc3RhdGUpLCAzMDBfMDAwKTtcblxuICAgIHJldHVybiB7IGF1dGhVcmwgfTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZU9BdXRoQ2FsbGJhY2soY29kZTogc3RyaW5nLCBzdGF0ZTogc3RyaW5nLCByZXBseTogRmFzdGlmeVJlcGx5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdPQXV0aC5nZXQoc3RhdGUpO1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcmV0dXJuIHJlcGx5LnJlZGlyZWN0KFwiLz9vYXV0aD1lcnJvciZyZWFzb249aW52YWxpZF9zdGF0ZVwiKTtcbiAgICB9XG4gICAgcGVuZGluZ09BdXRoLmRlbGV0ZShzdGF0ZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW5zID0gYXdhaXQgZXhjaGFuZ2VDb2RlRm9yVG9rZW5zKFxuICAgICAgICBjb2RlLFxuICAgICAgICBwZW5kaW5nLmNvZGVWZXJpZmllcixcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHBlbmRpbmcucmVkaXJlY3RVcmksXG4gICAgICApO1xuXG4gICAgICBpZiAodG9rZW5zLmFjY291bnRVdWlkKSB7XG4gICAgICAgIGNvbnN0IG9sZEVudHJpZXMgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRCeUFjY291bnRVdWlkKFwiQVwiLCB0b2tlbnMuYWNjb3VudFV1aWQpO1xuICAgICAgICBpZiAob2xkRW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYXdhaXQgVG9rZW5Nb2RlbC5kZWwob2xkRW50cmllcy5tYXAoKG8pID0+IG8uaWQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAgICB7XG4gICAgICAgICAgdG9rZW46IHRva2Vucy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICBuYW1lOiBwZW5kaW5nLm5hbWUsXG4gICAgICAgICAgcmVmcmVzaF90b2tlbjogdG9rZW5zLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBleHBpcmVzX2F0OiB0b2tlbnMuZXhwaXJlc0F0ID8gQmlnSW50KHRva2Vucy5leHBpcmVzQXQpIDogbnVsbCxcbiAgICAgICAgICBhY2NvdW50X3V1aWQ6IHRva2Vucy5hY2NvdW50VXVpZCxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoYC8/b2F1dGg9c3VjY2VzcyZuYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBlbmRpbmcubmFtZSl9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHJlcGx5LnJlZGlyZWN0KGAvP29hdXRoPWVycm9yJnJlYXNvbj0ke2VuY29kZVVSSUNvbXBvbmVudCgoZSBhcyBFcnJvcikubWVzc2FnZSl9YCk7XG4gICAgfVxuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgdXNhZ2UodG9rZW5OYW1lPzogc3RyaW5nKTogUHJvbWlzZTxVc2FnZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgeyByb3dzOiBhbGxUb2tlbnMgfSA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE1hbnkoXCJBXCIpO1xuICAgIGNvbnN0IGVudHJ5ID0gdG9rZW5OYW1lXG4gICAgICA/IGFsbFRva2Vucy5maW5kKChlKSA9PiBlLm5hbWUgPT09IHRva2VuTmFtZSlcbiAgICAgIDogYWxsVG9rZW5zLmZpbmRMYXN0KChlKSA9PiBlLmFjdGl2ZSk7XG5cbiAgICBpZiAoIWVudHJ5KSByZXR1cm4geyBlcnJvcjogXCJOT1RfRk9VTkRcIiB9O1xuXG4gICAgbGV0IGFjY2Vzc1Rva2VuID0gZW50cnkudG9rZW47XG4gICAgY29uc3QgaXNFeHBpcmVkID0gZW50cnkuZXhwaXJlc19hdCAmJiBOdW1iZXIoZW50cnkuZXhwaXJlc19hdCkgPCBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGlzRXhwaXJlZCAmJiBlbnRyeS5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhY2Nlc3NUb2tlbiA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuKGVudHJ5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgb2F1dGhMb2dnZXIud2FybihgcmVmcmVzaCBmYWlsZWQgZm9yICR7ZW50cnkubmFtZX06ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiB7IGVycm9yOiBcInJlLWxvZ2luIHJlcXVpcmVkXCIgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuKTtcblxuICAgIGlmIChyZXN1bHQuZXJyb3IgJiYgZW50cnkucmVmcmVzaF90b2tlbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihlbnRyeSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgb2F1dGhMb2dnZXIud2FybihgcmVmcmVzaCBmYWlsZWQgZm9yICR7ZW50cnkubmFtZX06ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiB7IGVycm9yOiBcInJlLWxvZ2luIHJlcXVpcmVkXCIgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaFRva2VuKHRva2VuOiBSZWZyZXNoVG9rZW5QYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghdG9rZW4ucmVmcmVzaF90b2tlbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVmcmVzaCB0b2tlblwiKTtcbiAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCByZWZyZXNoQWNjZXNzVG9rZW4odG9rZW4ucmVmcmVzaF90b2tlbik7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IHRva2VuLmlkLFxuICAgICAgICB0b2tlbjogcmVmcmVzaGVkLmFjY2Vzc1Rva2VuLFxuICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoZWQucmVmcmVzaFRva2VuLFxuICAgICAgICBleHBpcmVzX2F0OiBCaWdJbnQocmVmcmVzaGVkLmV4cGlyZXNBdCksXG4gICAgICAgIG5hbWU6IHRva2VuLm5hbWUgPz8gXCJcIixcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHJlZnJlc2hlZC5hY2Nlc3NUb2tlbjtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIGhlYWx0aCgpOiBQcm9taXNlPEhlYWx0aFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogXCJva1wiLFxuICAgICAgYWN0aXZlVG9rZW5zOiBRZ3JpZERpc3BhdGNoZXIudG9rZW5zLnNpemUsXG4gICAgICBzdWJzY3JpYmVyOiBRZ3JpZERpc3BhdGNoZXIuc3Vic2NyaWJlcj8uc3RhdHVzKCkgPz8gbnVsbCxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBRZ3JpZEZyYW1lID0gbmV3IFFncmlkRnJhbWVDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBd0JBLE1BQU0sK0JBQWUsSUFBSSxLQUEwRTtBQUNuRyxNQUFNLFNBQVMsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUNuQyxNQUFNLGNBQWMsVUFBVSxDQUFDLFNBQVMsUUFBUSxDQUFDO0FBRWpELElBQU0sa0JBQU4sY0FBOEIsZUFBZTtDQUMzQyxjQUFjO0FBQ1osUUFBTSxR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
@@ -1,12 +1,18 @@
1
1
  import "../../_virtual/_rolldown/runtime.js";
2
2
  import { z } from "zod";
3
3
  //#region src/application/qgrid/qgrid.types.ts
4
+ const Effort = z.enum([
5
+ "low",
6
+ "medium",
7
+ "high"
8
+ ]);
4
9
  const QueryInput = z.object({
5
10
  system: z.string().optional(),
6
11
  prompt: z.string(),
7
12
  model: z.string().optional(),
8
13
  timeout: z.number().optional(),
9
- jsonSchema: z.string().optional()
14
+ jsonSchema: z.string().optional(),
15
+ effort: Effort.optional()
10
16
  });
11
17
  const CliResult = z.object({
12
18
  text: z.string(),
@@ -51,9 +57,16 @@ const UsageResponse = z.object({
51
57
  utilization: z.number().nullable()
52
58
  }).nullable().optional()
53
59
  });
60
+ const SubscriberStatus = z.object({
61
+ connected: z.boolean(),
62
+ connectedAt: z.date().nullable(),
63
+ lastReconcileAt: z.date().nullable(),
64
+ attempt: z.number()
65
+ });
54
66
  const HealthResponse = z.object({
55
67
  status: z.string(),
56
- activeTokens: z.number()
68
+ activeTokens: z.number(),
69
+ subscriber: SubscriberStatus.nullable()
57
70
  });
58
71
  var QuotaError = class extends Error {
59
72
  code = "QUOTA_EXHAUSTED";
@@ -68,6 +81,6 @@ function maskToken(token) {
68
81
  return token.length > 4 ? `...${token.slice(-4)}` : token;
69
82
  }
70
83
  //#endregion
71
- export { AddTokenInput, CliResult, HealthResponse, OAuthStartResult, ProcessError, QueryInput, QuotaError, RemoveTokenInput, TimeoutError, TokenStats, UsageResponse, maskToken };
84
+ export { AddTokenInput, CliResult, Effort, HealthResponse, OAuthStartResult, ProcessError, QueryInput, QuotaError, RemoveTokenInput, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, maskToken };
72
85
 
73
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lm9iamVjdCh7XG4gIHN5c3RlbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9tcHQ6IHouc3RyaW5nKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpbWVvdXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAganNvblNjaGVtYTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRdWVyeUlucHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBDbGlSZXN1bHQgPSB6Lm9iamVjdCh7XG4gIHRleHQ6IHouc3RyaW5nKCksXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2FnZTogei5vYmplY3Qoe1xuICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgfSksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIENsaVJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIENsaVJlc3VsdD47XG5cbi8vIOKUgOKUgOKUgCBUb2tlbiBNYW5hZ2VtZW50IOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgQWRkVG9rZW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIEFkZFRva2VuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBBZGRUb2tlbklucHV0PjtcblxuZXhwb3J0IGNvbnN0IFJlbW92ZVRva2VuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBSZW1vdmVUb2tlbklucHV0ID0gei5pbmZlcjx0eXBlb2YgUmVtb3ZlVG9rZW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBUb2tlblN0YXRzID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgcmVxdWVzdHM6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIFRva2VuU3RhdHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN0YXRzPjtcblxuLy8g4pSA4pSA4pSAIE9BdXRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgT0F1dGhTdGFydFJlc3VsdCA9IHoub2JqZWN0KHtcbiAgYXV0aFVybDogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgT0F1dGhTdGFydFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIE9BdXRoU3RhcnRSZXN1bHQ+O1xuXG5jb25zdCBSYXRlTGltaXQgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHV0aWxpemF0aW9uOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgcmVzZXRzX2F0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIH0pXG4gIC5udWxsYWJsZSgpO1xuXG5leHBvcnQgY29uc3QgVXNhZ2VSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZml2ZV9ob3VyOiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgc2V2ZW5fZGF5OiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgc2V2ZW5fZGF5X29wdXM6IFJhdGVMaW1pdC5vcHRpb25hbCgpLFxuICBzZXZlbl9kYXlfc29ubmV0OiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgc2V2ZW5fZGF5X29hdXRoX2FwcHM6IFJhdGVMaW1pdC5vcHRpb25hbCgpLFxuICBzZXZlbl9kYXlfY293b3JrOiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgZXh0cmFfdXNhZ2U6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGlzX2VuYWJsZWQ6IHouYm9vbGVhbigpLFxuICAgICAgbW9udGhseV9saW1pdDogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgICAgdXNlZF9jcmVkaXRzOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgICB1dGlsaXphdGlvbjogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgIH0pXG4gICAgLm51bGxhYmxlKClcbiAgICAub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVXNhZ2VSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFVzYWdlUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgSGVhbHRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgSGVhbHRoUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5zdHJpbmcoKSxcbiAgYWN0aXZlVG9rZW5zOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBIZWFsdGhSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEhlYWx0aFJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEVycm9ycyDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIFF1b3RhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlFVT1RBX0VYSEFVU1RFRFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiVElNRU9VVFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUFJPQ0VTU19FUlJPUlwiIGFzIGNvbnN0O1xufVxuXG4vLyDilIDilIDilIAgVXRpbHMg4pSA4pSA4pSAXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXNrVG9rZW4odG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b2tlbi5sZW5ndGggPiA0ID8gYC4uLiR7dG9rZW4uc2xpY2UoLTQpfWAgOiB0b2tlbjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSxhQUFhLEVBQUUsT0FBTztDQUNqQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDN0IsUUFBUSxFQUFFLFFBQVE7Q0FDbEIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQzVCLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM5QixZQUFZLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDbEMsQ0FBQztBQUdGLE1BQWEsWUFBWSxFQUFFLE9BQU87Q0FDaEMsTUFBTSxFQUFFLFFBQVE7Q0FDaEIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2hDLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM1QixPQUFPLEVBQUUsT0FBTztFQUNkLGNBQWMsRUFBRSxRQUFRO0VBQ3hCLGVBQWUsRUFBRSxRQUFRO0VBQ3pCLDZCQUE2QixFQUFFLFFBQVE7RUFDdkMseUJBQXlCLEVBQUUsUUFBUTtFQUNwQyxDQUFDO0NBQ0YsWUFBWSxFQUFFLFFBQVE7Q0FDdEIsU0FBUyxFQUFFLFFBQVE7Q0FDcEIsQ0FBQztBQUtGLE1BQWEsZ0JBQWdCLEVBQUUsT0FBTztDQUNwQyxPQUFPLEVBQUUsUUFBUTtDQUNqQixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBR0YsTUFBYSxtQkFBbUIsRUFBRSxPQUFPLEVBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQ2xCLENBQUM7QUFHRixNQUFhLGFBQWEsRUFBRSxPQUFPO0NBQ2pDLE9BQU8sRUFBRSxRQUFRO0NBQ2pCLE1BQU0sRUFBRSxRQUFRO0NBQ2hCLFVBQVUsRUFBRSxRQUFRO0NBQ3JCLENBQUM7QUFLRixNQUFhLG1CQUFtQixFQUFFLE9BQU8sRUFDdkMsU0FBUyxFQUFFLFFBQVEsRUFDcEIsQ0FBQztBQUdGLE1BQU0sWUFBWSxFQUNmLE9BQU87Q0FDTixhQUFhLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDbEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2pDLENBQUMsQ0FDRCxVQUFVO0FBRWIsTUFBYSxnQkFBZ0IsRUFBRSxPQUFPO0NBQ3BDLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM1QixXQUFXLFVBQVUsVUFBVTtDQUMvQixXQUFXLFVBQVUsVUFBVTtDQUMvQixnQkFBZ0IsVUFBVSxVQUFVO0NBQ3BDLGtCQUFrQixVQUFVLFVBQVU7Q0FDdEMsc0JBQXNCLFVBQVUsVUFBVTtDQUMxQyxrQkFBa0IsVUFBVSxVQUFVO0NBQ3RDLGFBQWEsRUFDVixPQUFPO0VBQ04sWUFBWSxFQUFFLFNBQVM7RUFDdkIsZUFBZSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0VBQ3BDLGNBQWMsRUFBRSxRQUFRLENBQUMsVUFBVTtFQUNuQyxhQUFhLEVBQUUsUUFBUSxDQUFDLFVBQVU7RUFDbkMsQ0FBQyxDQUNELFVBQVUsQ0FDVixVQUFVO0NBQ2QsQ0FBQztBQUtGLE1BQWEsaUJBQWlCLEVBQUUsT0FBTztDQUNyQyxRQUFRLEVBQUUsUUFBUTtDQUNsQixjQUFjLEVBQUUsUUFBUTtDQUN6QixDQUFDO0FBS0YsSUFBYSxhQUFiLGNBQWdDLE1BQU07Q0FDcEMsT0FBZ0I7O0FBRWxCLElBQWEsZUFBYixjQUFrQyxNQUFNO0NBQ3RDLE9BQWdCOztBQUVsQixJQUFhLGVBQWIsY0FBa0MsTUFBTTtDQUN0QyxPQUFnQjs7QUFLbEIsU0FBZ0IsVUFBVSxPQUF1QjtBQUMvQyxRQUFPLE1BQU0sU0FBUyxJQUFJLE1BQU0sTUFBTSxNQUFNLEdBQUcsS0FBSyJ9
86
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRdWVyeUlucHV0ID0gei5vYmplY3Qoe1xuICBzeXN0ZW06IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvbXB0OiB6LnN0cmluZygpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aW1lb3V0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGpzb25TY2hlbWE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZWZmb3J0OiBFZmZvcnQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFF1ZXJ5SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgQ2xpUmVzdWx0ID0gei5vYmplY3Qoe1xuICB0ZXh0OiB6LnN0cmluZygpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNhZ2U6IHoub2JqZWN0KHtcbiAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gIH0pLFxuICBkdXJhdGlvbk1zOiB6Lm51bWJlcigpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBDbGlSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBDbGlSZXN1bHQ+O1xuXG4vLyDilIDilIDilIAgVG9rZW4gTWFuYWdlbWVudCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEFkZFRva2VuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBBZGRUb2tlbklucHV0ID0gei5pbmZlcjx0eXBlb2YgQWRkVG9rZW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBSZW1vdmVUb2tlbklucHV0ID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVG9rZW5JbnB1dCA9IHouaW5mZXI8dHlwZW9mIFJlbW92ZVRva2VuSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgVG9rZW5TdGF0cyA9IHoub2JqZWN0KHtcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIHJlcXVlc3RzOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBUb2tlblN0YXRzID0gei5pbmZlcjx0eXBlb2YgVG9rZW5TdGF0cz47XG5cbi8vIOKUgOKUgOKUgCBPQXV0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IE9BdXRoU3RhcnRSZXN1bHQgPSB6Lm9iamVjdCh7XG4gIGF1dGhVcmw6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIE9BdXRoU3RhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBPQXV0aFN0YXJ0UmVzdWx0PjtcblxuY29uc3QgUmF0ZUxpbWl0ID0gelxuICAub2JqZWN0KHtcbiAgICB1dGlsaXphdGlvbjogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgIHJlc2V0c19hdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB9KVxuICAubnVsbGFibGUoKTtcblxuZXhwb3J0IGNvbnN0IFVzYWdlUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZpdmVfaG91cjogUmF0ZUxpbWl0Lm9wdGlvbmFsKCksXG4gIHNldmVuX2RheTogUmF0ZUxpbWl0Lm9wdGlvbmFsKCksXG4gIHNldmVuX2RheV9vcHVzOiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgc2V2ZW5fZGF5X3Nvbm5ldDogUmF0ZUxpbWl0Lm9wdGlvbmFsKCksXG4gIHNldmVuX2RheV9vYXV0aF9hcHBzOiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgc2V2ZW5fZGF5X2Nvd29yazogUmF0ZUxpbWl0Lm9wdGlvbmFsKCksXG4gIGV4dHJhX3VzYWdlOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBpc19lbmFibGVkOiB6LmJvb2xlYW4oKSxcbiAgICAgIG1vbnRobHlfbGltaXQ6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICAgIHVzZWRfY3JlZGl0czogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgICAgdXRpbGl6YXRpb246IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICB9KVxuICAgIC5udWxsYWJsZSgpXG4gICAgLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFVzYWdlUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBVc2FnZVJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEhlYWx0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFN1YnNjcmliZXJTdGF0dXMgPSB6Lm9iamVjdCh7XG4gIGNvbm5lY3RlZDogei5ib29sZWFuKCksXG4gIGNvbm5lY3RlZEF0OiB6LmRhdGUoKS5udWxsYWJsZSgpLFxuICBsYXN0UmVjb25jaWxlQXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG4gIGF0dGVtcHQ6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIFN1YnNjcmliZXJTdGF0dXMgPSB6LmluZmVyPHR5cGVvZiBTdWJzY3JpYmVyU3RhdHVzPjtcblxuZXhwb3J0IGNvbnN0IEhlYWx0aFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouc3RyaW5nKCksXG4gIGFjdGl2ZVRva2Vuczogei5udW1iZXIoKSxcbiAgc3Vic2NyaWJlcjogU3Vic2NyaWJlclN0YXR1cy5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBIZWFsdGhSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEhlYWx0aFJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEVycm9ycyDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIFF1b3RhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlFVT1RBX0VYSEFVU1RFRFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiVElNRU9VVFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUFJPQ0VTU19FUlJPUlwiIGFzIGNvbnN0O1xufVxuXG4vLyDilIDilIDilIAgVXRpbHMg4pSA4pSA4pSAXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXNrVG9rZW4odG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b2tlbi5sZW5ndGggPiA0ID8gYC4uLiR7dG9rZW4uc2xpY2UoLTQpfWAgOiB0b2tlbjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSxTQUFTLEVBQUUsS0FBSztDQUFDO0NBQU87Q0FBVTtDQUFPLENBQUM7QUFHdkQsTUFBYSxhQUFhLEVBQUUsT0FBTztDQUNqQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDN0IsUUFBUSxFQUFFLFFBQVE7Q0FDbEIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQzVCLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM5QixZQUFZLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDakMsUUFBUSxPQUFPLFVBQVU7Q0FDMUIsQ0FBQztBQUdGLE1BQWEsWUFBWSxFQUFFLE9BQU87Q0FDaEMsTUFBTSxFQUFFLFFBQVE7Q0FDaEIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2hDLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM1QixPQUFPLEVBQUUsT0FBTztFQUNkLGNBQWMsRUFBRSxRQUFRO0VBQ3hCLGVBQWUsRUFBRSxRQUFRO0VBQ3pCLDZCQUE2QixFQUFFLFFBQVE7RUFDdkMseUJBQXlCLEVBQUUsUUFBUTtFQUNwQyxDQUFDO0NBQ0YsWUFBWSxFQUFFLFFBQVE7Q0FDdEIsU0FBUyxFQUFFLFFBQVE7Q0FDcEIsQ0FBQztBQUtGLE1BQWEsZ0JBQWdCLEVBQUUsT0FBTztDQUNwQyxPQUFPLEVBQUUsUUFBUTtDQUNqQixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBR0YsTUFBYSxtQkFBbUIsRUFBRSxPQUFPLEVBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQ2xCLENBQUM7QUFHRixNQUFhLGFBQWEsRUFBRSxPQUFPO0NBQ2pDLE9BQU8sRUFBRSxRQUFRO0NBQ2pCLE1BQU0sRUFBRSxRQUFRO0NBQ2hCLFVBQVUsRUFBRSxRQUFRO0NBQ3JCLENBQUM7QUFLRixNQUFhLG1CQUFtQixFQUFFLE9BQU8sRUFDdkMsU0FBUyxFQUFFLFFBQVEsRUFDcEIsQ0FBQztBQUdGLE1BQU0sWUFBWSxFQUNmLE9BQU87Q0FDTixhQUFhLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDbEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2pDLENBQUMsQ0FDRCxVQUFVO0FBRWIsTUFBYSxnQkFBZ0IsRUFBRSxPQUFPO0NBQ3BDLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM1QixXQUFXLFVBQVUsVUFBVTtDQUMvQixXQUFXLFVBQVUsVUFBVTtDQUMvQixnQkFBZ0IsVUFBVSxVQUFVO0NBQ3BDLGtCQUFrQixVQUFVLFVBQVU7Q0FDdEMsc0JBQXNCLFVBQVUsVUFBVTtDQUMxQyxrQkFBa0IsVUFBVSxVQUFVO0NBQ3RDLGFBQWEsRUFDVixPQUFPO0VBQ04sWUFBWSxFQUFFLFNBQVM7RUFDdkIsZUFBZSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0VBQ3BDLGNBQWMsRUFBRSxRQUFRLENBQUMsVUFBVTtFQUNuQyxhQUFhLEVBQUUsUUFBUSxDQUFDLFVBQVU7RUFDbkMsQ0FBQyxDQUNELFVBQVUsQ0FDVixVQUFVO0NBQ2QsQ0FBQztBQUtGLE1BQWEsbUJBQW1CLEVBQUUsT0FBTztDQUN2QyxXQUFXLEVBQUUsU0FBUztDQUN0QixhQUFhLEVBQUUsTUFBTSxDQUFDLFVBQVU7Q0FDaEMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLFVBQVU7Q0FDcEMsU0FBUyxFQUFFLFFBQVE7Q0FDcEIsQ0FBQztBQUdGLE1BQWEsaUJBQWlCLEVBQUUsT0FBTztDQUNyQyxRQUFRLEVBQUUsUUFBUTtDQUNsQixjQUFjLEVBQUUsUUFBUTtDQUN4QixZQUFZLGlCQUFpQixVQUFVO0NBQ3hDLENBQUM7QUFLRixJQUFhLGFBQWIsY0FBZ0MsTUFBTTtDQUNwQyxPQUFnQjs7QUFFbEIsSUFBYSxlQUFiLGNBQWtDLE1BQU07Q0FDdEMsT0FBZ0I7O0FBRWxCLElBQWEsZUFBYixjQUFrQyxNQUFNO0NBQ3RDLE9BQWdCOztBQUtsQixTQUFnQixVQUFVLE9BQXVCO0FBQy9DLFFBQU8sTUFBTSxTQUFTLElBQUksTUFBTSxNQUFNLE1BQU0sR0FBRyxLQUFLIn0=