@intutic/mcp-governance-proxy 2.1.0 → 2.3.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.
- package/README.md +34 -18
- package/dist/agentTools.d.ts +68 -0
- package/dist/agentTools.d.ts.map +1 -0
- package/dist/agentTools.js +150 -0
- package/dist/agentTools.js.map +1 -0
- package/dist/anomaly/detectors.js +1 -1
- package/dist/anomaly/detectors.js.map +1 -1
- package/dist/anomaly/index.d.ts +2 -1
- package/dist/anomaly/index.d.ts.map +1 -1
- package/dist/anomaly/index.js.map +1 -1
- package/dist/approvalHold.d.ts +66 -0
- package/dist/approvalHold.d.ts.map +1 -0
- package/dist/approvalHold.js +143 -0
- package/dist/approvalHold.js.map +1 -0
- package/dist/budget.d.ts +133 -0
- package/dist/budget.d.ts.map +1 -0
- package/dist/budget.js +191 -0
- package/dist/budget.js.map +1 -0
- package/dist/config.d.ts +7 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/daemon/healthMonitor.d.ts +2 -0
- package/dist/daemon/healthMonitor.d.ts.map +1 -1
- package/dist/daemon/healthMonitor.js +60 -27
- package/dist/daemon/healthMonitor.js.map +1 -1
- package/dist/daemon/index.d.ts +0 -2
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +0 -2
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/instrumentation.d.ts +2 -2
- package/dist/daemon/instrumentation.js +2 -2
- package/dist/daemon/policyCache.d.ts +38 -3
- package/dist/daemon/policyCache.d.ts.map +1 -1
- package/dist/daemon/policyCache.js +64 -22
- package/dist/daemon/policyCache.js.map +1 -1
- package/dist/daemon/socketServer.d.ts +0 -1
- package/dist/daemon/socketServer.d.ts.map +1 -1
- package/dist/daemon/socketServer.js +0 -1
- package/dist/daemon/socketServer.js.map +1 -1
- package/dist/daemon/statusReporter.d.ts.map +1 -1
- package/dist/daemon/statusReporter.js +0 -1
- package/dist/daemon/statusReporter.js.map +1 -1
- package/dist/daemon/telemetryBatcher.d.ts.map +1 -1
- package/dist/daemon/telemetryBatcher.js +0 -1
- package/dist/daemon/telemetryBatcher.js.map +1 -1
- package/dist/daemonClient.d.ts.map +1 -1
- package/dist/daemonClient.js +0 -1
- package/dist/daemonClient.js.map +1 -1
- package/dist/dlp.d.ts +32 -3
- package/dist/dlp.d.ts.map +1 -1
- package/dist/dlp.js +116 -18
- package/dist/dlp.js.map +1 -1
- package/dist/dlpPii.d.ts +66 -0
- package/dist/dlpPii.d.ts.map +1 -0
- package/dist/dlpPii.js +235 -0
- package/dist/dlpPii.js.map +1 -0
- package/dist/emitter.d.ts +68 -10
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +29 -43
- package/dist/emitter.js.map +1 -1
- package/dist/guardedValkey.d.ts +40 -0
- package/dist/guardedValkey.d.ts.map +1 -0
- package/dist/guardedValkey.js +84 -0
- package/dist/guardedValkey.js.map +1 -0
- package/dist/httpJson.d.ts +19 -0
- package/dist/httpJson.d.ts.map +1 -0
- package/dist/httpJson.js +62 -0
- package/dist/httpJson.js.map +1 -0
- package/dist/identity.d.ts +27 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +36 -0
- package/dist/identity.js.map +1 -0
- package/dist/injection.js +1 -1
- package/dist/interceptor.d.ts +135 -8
- package/dist/interceptor.d.ts.map +1 -1
- package/dist/interceptor.js +284 -45
- package/dist/interceptor.js.map +1 -1
- package/dist/policy.d.ts +105 -2
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +188 -40
- package/dist/policy.js.map +1 -1
- package/dist/proxy.d.ts +35 -11
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +183 -66
- package/dist/proxy.js.map +1 -1
- package/dist/refusals.d.ts +26 -0
- package/dist/refusals.d.ts.map +1 -0
- package/dist/refusals.js +43 -0
- package/dist/refusals.js.map +1 -0
- package/dist/registryObserver.d.ts +37 -0
- package/dist/registryObserver.d.ts.map +1 -0
- package/dist/registryObserver.js +70 -0
- package/dist/registryObserver.js.map +1 -0
- package/dist/session.d.ts +1 -1
- package/dist/session.js +1 -1
- package/dist/sessionScope.d.ts +1 -1
- package/dist/sessionScope.js +1 -1
- package/dist/sessionStore.d.ts +10 -23
- package/dist/sessionStore.d.ts.map +1 -1
- package/dist/sessionStore.js +17 -76
- package/dist/sessionStore.js.map +1 -1
- package/dist/version.d.ts +12 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +13 -0
- package/dist/version.js.map +1 -0
- package/dist/wasm/context.d.ts +10 -0
- package/dist/wasm/context.d.ts.map +1 -1
- package/dist/wasm/context.js +27 -0
- package/dist/wasm/context.js.map +1 -1
- package/dist/wasm/hostImports.d.ts +3 -3
- package/dist/wasm/hostImports.d.ts.map +1 -1
- package/dist/wasm/hostImports.js +8 -7
- package/dist/wasm/hostImports.js.map +1 -1
- package/dist/wasm/loader.d.ts +8 -1
- package/dist/wasm/loader.d.ts.map +1 -1
- package/dist/wasm/loader.js +2 -0
- package/dist/wasm/loader.js.map +1 -1
- package/dist/wasm/referencedFiles.d.ts +29 -4
- package/dist/wasm/referencedFiles.d.ts.map +1 -1
- package/dist/wasm/referencedFiles.js +48 -21
- package/dist/wasm/referencedFiles.js.map +1 -1
- package/dist/wasm/runner.d.ts +106 -22
- package/dist/wasm/runner.d.ts.map +1 -1
- package/dist/wasm/runner.js +194 -74
- package/dist/wasm/runner.js.map +1 -1
- package/dist/wasm/watch.js +1 -1
- package/dist/wasm/worker.d.ts +10 -6
- package/dist/wasm/worker.d.ts.map +1 -1
- package/dist/wasm/worker.js +93 -9
- package/dist/wasm/worker.js.map +1 -1
- package/package.json +5 -4
- package/dist/toolPoison.d.ts +0 -32
- package/dist/toolPoison.d.ts.map +0 -1
- package/dist/toolPoison.js +0 -81
- package/dist/toolPoison.js.map +0 -1
- package/dist/wasm/fuel.d.ts +0 -35
- package/dist/wasm/fuel.d.ts.map +0 -1
- package/dist/wasm/fuel.js +0 -299
- package/dist/wasm/fuel.js.map +0 -1
- package/dist/wasm/memoryCap.d.ts +0 -21
- package/dist/wasm/memoryCap.d.ts.map +0 -1
- package/dist/wasm/memoryCap.js +0 -54
- package/dist/wasm/memoryCap.js.map +0 -1
- package/dist/wasm/wasmBinary.d.ts +0 -25
- package/dist/wasm/wasmBinary.d.ts.map +0 -1
- package/dist/wasm/wasmBinary.js +0 -100
- package/dist/wasm/wasmBinary.js.map +0 -1
package/dist/interceptor.js
CHANGED
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
* interceptor.ts — tools/call decision engine.
|
|
3
3
|
*
|
|
4
4
|
* Given a tool name and arguments, evaluates:
|
|
5
|
+
* 0. The MCP server registry, server/tool allowlists and SSO group clearance
|
|
5
6
|
* 1. DLP scan (credential / destructive pattern detection)
|
|
6
7
|
* 2. SOP policy rules (fetched from control plane via PolicyClient)
|
|
8
|
+
* 3–5. Prompt injection, anomaly detectors, WASM rules
|
|
9
|
+
* 6. MCP call budgets — last, so only a call that would otherwise run is counted
|
|
7
10
|
*
|
|
8
11
|
* Returns an allow / block / redact decision.
|
|
9
12
|
*
|
|
@@ -11,15 +14,26 @@
|
|
|
11
14
|
*/
|
|
12
15
|
import * as node_crypto from 'node:crypto';
|
|
13
16
|
import { createStderrLogger as createLogger } from './stderrLog.js';
|
|
14
|
-
import {
|
|
17
|
+
import { evaluateMcpRegistry, evaluateSsoGroupClearance, holdApprovalHint } from '@intutic/shared-types';
|
|
18
|
+
import { scanToolInput, formatDlpBlockReason, setDynamicPatterns, setWorkspacePii } from './dlp.js';
|
|
15
19
|
import { scanText, injectionSeverity, setDynamicInjectionPatterns } from './injection.js';
|
|
16
20
|
import { evaluateSequenceDetectors, resolveEffectiveDisposition, REASK_MAX_ATTEMPTS } from './anomaly/index.js';
|
|
17
21
|
import { SessionState } from './session.js';
|
|
22
|
+
import { detectionFinding } from './emitter.js';
|
|
23
|
+
import { budgetEventDetail, exceededReason, unavailableReason, warningReason } from './budget.js';
|
|
18
24
|
const log = createLogger('mcp-proxy-interceptor');
|
|
25
|
+
/** The decision for a refusal. */
|
|
26
|
+
function block(code, ruleId, reason, detail) {
|
|
27
|
+
return detail ? { action: 'block', reason, code, ruleId, detail } : { action: 'block', reason, code, ruleId };
|
|
28
|
+
}
|
|
29
|
+
/** Every governance check that cannot complete refuses with this, when the proxy fails closed. */
|
|
30
|
+
const FAIL_CLOSED_REASON = 'Governance check failed — Intutic control plane unreachable. ' +
|
|
31
|
+
'Tool call blocked by workspace policy (fail-closed mode). ' +
|
|
32
|
+
'Contact your administrator or update mcpProxyFailBehavior to open.';
|
|
19
33
|
export class ToolCallInterceptor {
|
|
20
34
|
policy;
|
|
21
35
|
emitter;
|
|
22
|
-
|
|
36
|
+
localFailOpen;
|
|
23
37
|
serverName;
|
|
24
38
|
injectionActionDefault;
|
|
25
39
|
session;
|
|
@@ -27,7 +41,15 @@ export class ToolCallInterceptor {
|
|
|
27
41
|
anomalyOverridesDefault;
|
|
28
42
|
wasmRunner;
|
|
29
43
|
workspaceId;
|
|
30
|
-
|
|
44
|
+
holds;
|
|
45
|
+
budgets;
|
|
46
|
+
constructor(policy, emitter,
|
|
47
|
+
/**
|
|
48
|
+
* The local fail setting (`INTUTIC_MCP_FAIL_OPEN`, config.ts). The
|
|
49
|
+
* workspace's `mcpProxyFailBehavior`, once a policy has delivered it,
|
|
50
|
+
* takes precedence — see {@link failOpen}.
|
|
51
|
+
*/
|
|
52
|
+
localFailOpen = true,
|
|
31
53
|
/**
|
|
32
54
|
* The real MCP server this proxy process fronts, from `--server-name`
|
|
33
55
|
* (config.ts, threaded since Phase D's `wrapWithProxy` but unconsumed
|
|
@@ -86,10 +108,24 @@ export class ToolCallInterceptor {
|
|
|
86
108
|
* identity: the MCP SERVER this process fronts, not the WORKSPACE it
|
|
87
109
|
* belongs to).
|
|
88
110
|
*/
|
|
89
|
-
workspaceId = 'unknown'
|
|
111
|
+
workspaceId = 'unknown',
|
|
112
|
+
/**
|
|
113
|
+
* Turns a `require_approval` rule into a hold through the control
|
|
114
|
+
* plane's decisions API. `undefined` (construction sites that predate
|
|
115
|
+
* holds) leaves such a call held with nothing recorded, which is still a
|
|
116
|
+
* refusal — never an allow.
|
|
117
|
+
*/
|
|
118
|
+
holds = undefined,
|
|
119
|
+
/**
|
|
120
|
+
* Counts each call against the workspace's MCP call budgets (budget.ts).
|
|
121
|
+
* `undefined` (construction sites that predate budgets) skips them; the
|
|
122
|
+
* proxy always passes one, with no store when it has no Valkey, so a
|
|
123
|
+
* covered call then resolves through the fail setting.
|
|
124
|
+
*/
|
|
125
|
+
budgets = undefined) {
|
|
90
126
|
this.policy = policy;
|
|
91
127
|
this.emitter = emitter;
|
|
92
|
-
this.
|
|
128
|
+
this.localFailOpen = localFailOpen;
|
|
93
129
|
this.serverName = serverName;
|
|
94
130
|
this.injectionActionDefault = injectionActionDefault;
|
|
95
131
|
this.session = session;
|
|
@@ -97,6 +133,19 @@ export class ToolCallInterceptor {
|
|
|
97
133
|
this.anomalyOverridesDefault = anomalyOverridesDefault;
|
|
98
134
|
this.wasmRunner = wasmRunner;
|
|
99
135
|
this.workspaceId = workspaceId;
|
|
136
|
+
this.holds = holds;
|
|
137
|
+
this.budgets = budgets;
|
|
138
|
+
}
|
|
139
|
+
/** Set once this process has said that budgets went unchecked under fail-open, so the log says it once. */
|
|
140
|
+
budgetsUncheckedWarned = false;
|
|
141
|
+
/**
|
|
142
|
+
* Whether a governance check that cannot complete lets the call through:
|
|
143
|
+
* the workspace's `mcpProxyFailBehavior` when the control plane has sent
|
|
144
|
+
* it, the local `INTUTIC_MCP_FAIL_OPEN` until then (and for a workspace
|
|
145
|
+
* that never chose).
|
|
146
|
+
*/
|
|
147
|
+
get failOpen() {
|
|
148
|
+
return this.policy.getFailOpen() ?? this.localFailOpen;
|
|
100
149
|
}
|
|
101
150
|
/**
|
|
102
151
|
* Applies the shared reask ladder (Phase 2 anomaly detectors AND Phase 3
|
|
@@ -115,12 +164,108 @@ export class ToolCallInterceptor {
|
|
|
115
164
|
`attempts with no correction.`;
|
|
116
165
|
log.warn({ action: 'reask_hardened', toolName, key, attempts }, 'Reask attempts exhausted — hardening to a hard block');
|
|
117
166
|
this.emitter.emit('tool_blocked', toolName, toolInput, hardenedReason);
|
|
118
|
-
return
|
|
167
|
+
return block('REASK_EXHAUSTED', key, hardenedReason);
|
|
119
168
|
}
|
|
120
169
|
const reaskReason = `${baseReason} (attempt ${attempts}/${REASK_MAX_ATTEMPTS} — will become an unconditional ` +
|
|
121
170
|
`block if this keeps tripping)`;
|
|
122
171
|
this.emitter.emit('tool_blocked', toolName, toolInput, reaskReason);
|
|
123
|
-
return
|
|
172
|
+
return block('REASK', key, reaskReason);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* A `require_approval` rule matched. Returns the hold decision, or `null`
|
|
176
|
+
* when an approved bypass for this exact call lets it continue. Every hold
|
|
177
|
+
* reason names the hold id, who may approve it and when a retry passes, in
|
|
178
|
+
* the words the hook gates print (`holdApprovalHint`), so a person reading
|
|
179
|
+
* the agent's transcript knows what to do.
|
|
180
|
+
*/
|
|
181
|
+
async hold(rule, toolName, toolInput) {
|
|
182
|
+
const outcome = this.holds
|
|
183
|
+
? await this.holds.request(rule, toolName, toolInput)
|
|
184
|
+
: { kind: 'held', holdId: '', recorded: false };
|
|
185
|
+
if (outcome.kind === 'bypassed') {
|
|
186
|
+
const reason = `Approved bypass for ${rule.id} — approved by ${outcome.decidedBy || 'an approver'} on hold ${outcome.holdId}`;
|
|
187
|
+
log.warn({ action: 'hold_approved_bypass_used', toolName, ruleId: rule.id, holdId: outcome.holdId }, reason);
|
|
188
|
+
this.emitter.emit('hold_approved_bypass_used', toolName, toolInput, reason);
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
const reason = outcome.recorded
|
|
192
|
+
? `HELD for approval: ${rule.reason} [${rule.id}]. Hold id: ${outcome.holdId}. ` +
|
|
193
|
+
holdApprovalHint(outcome.holdId)
|
|
194
|
+
: `HELD for approval: ${rule.reason} [${rule.id}], but the hold could not be recorded ` +
|
|
195
|
+
`(Intutic control plane unreachable), so there is nothing to approve yet. Retry once the ` +
|
|
196
|
+
`control plane is reachable to request approval.`;
|
|
197
|
+
log.warn({ action: 'tool_held', toolName, ruleId: rule.id, holdId: outcome.holdId, recorded: outcome.recorded }, reason);
|
|
198
|
+
this.emitter.emit('tool_held', toolName, toolInput, `${rule.reason} [${rule.id}]`);
|
|
199
|
+
return { action: 'hold', reason, holdId: outcome.recorded ? outcome.holdId : '', ruleId: rule.id };
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Refuses the call when the registry says this server — or this tool on it —
|
|
203
|
+
* may not be used. Returns `null` to let the call continue.
|
|
204
|
+
*
|
|
205
|
+
* A blocked server is refused under either default; under `deny`, so is any
|
|
206
|
+
* server not approved (a candidate, or one the registry has never seen);
|
|
207
|
+
* a disabled tool is refused within any server. All three are definite
|
|
208
|
+
* operator decisions and do not depend on `failOpen`.
|
|
209
|
+
*
|
|
210
|
+
* What does depend on it is a registry this process has never loaded — the
|
|
211
|
+
* control plane unreachable since start, or only the MCP daemon's snapshot
|
|
212
|
+
* seed so far. The last-known registry is kept for as long as the process
|
|
213
|
+
* runs, so this is only ever the never-loaded case. Fail-open lets the call continue
|
|
214
|
+
* unchecked against the registry, exactly as a workspace with no registry;
|
|
215
|
+
* fail-closed refuses it, because a `deny` workspace cannot be told apart
|
|
216
|
+
* from an `allow` one without the registry.
|
|
217
|
+
*/
|
|
218
|
+
async checkRegistry(toolName, toolInput) {
|
|
219
|
+
await this.policy.ready();
|
|
220
|
+
const registry = this.policy.getRegistry();
|
|
221
|
+
if (!registry) {
|
|
222
|
+
if (this.failOpen)
|
|
223
|
+
return null;
|
|
224
|
+
const reason = `MCP server registry for this workspace has not loaded (Intutic control plane unreachable ` +
|
|
225
|
+
`since this proxy started), so whether "${this.serverName}" is approved is unknown. ` +
|
|
226
|
+
`Tool call blocked (fail-closed mode: mcpProxyFailBehavior or INTUTIC_MCP_FAIL_OPEN=false).`;
|
|
227
|
+
log.warn({ action: 'registry_unknown_block', serverName: this.serverName, toolName }, reason);
|
|
228
|
+
this.emitter.emit('tool_blocked', toolName, toolInput, reason);
|
|
229
|
+
return block('REGISTRY_UNAVAILABLE', 'mcpProxyFailBehavior', reason);
|
|
230
|
+
}
|
|
231
|
+
// The decision every gate makes (`@intutic/shared-types` mcpRegistryRecord.ts):
|
|
232
|
+
// the harness hook gates apply the same function, from the policy
|
|
233
|
+
// snapshot, to the servers no proxy fronts.
|
|
234
|
+
const decision = evaluateMcpRegistry(registry, this.serverName, toolName);
|
|
235
|
+
const refusal = decision ? block(decision.code, decision.ruleId, decision.reason) : null;
|
|
236
|
+
if (!refusal)
|
|
237
|
+
return null;
|
|
238
|
+
log.warn({ action: 'registry_block', serverName: this.serverName, toolName }, refusal.reason);
|
|
239
|
+
this.emitter.emit('tool_blocked', toolName, toolInput, refusal.reason);
|
|
240
|
+
return refusal;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* The workspace's SSO group policy, applied to the member this proxy's API
|
|
244
|
+
* key resolves to, by `evaluateSsoGroupClearance` — the function the
|
|
245
|
+
* server-side hook gate (`resolveSsoGroupPrivilege`) and the policy snapshot
|
|
246
|
+
* use, so all of them answer alike. A tool matches by its bare MCP name or
|
|
247
|
+
* as `mcp__<server>__<tool>`, the name the harness hooks see for the same
|
|
248
|
+
* call. A tool on the `requireOboFor` list is refused: a proxy has no
|
|
249
|
+
* on-behalf-of token to present.
|
|
250
|
+
*
|
|
251
|
+
* With a policy but no resolved member the groups are unknown, and a
|
|
252
|
+
* high-risk tool is refused rather than allowed — unknown is never granted.
|
|
253
|
+
* Without a policy there is nothing to apply.
|
|
254
|
+
*/
|
|
255
|
+
checkSsoGroupClearance(toolName, toolInput) {
|
|
256
|
+
const policy = this.policy.getSsoGroupPolicy();
|
|
257
|
+
if (!policy)
|
|
258
|
+
return null;
|
|
259
|
+
const principal = this.policy.getPrincipal();
|
|
260
|
+
const decision = evaluateSsoGroupClearance(policy, [toolName, `mcp__${this.serverName}__${toolName}`], principal ? principal.ssoGroups : null);
|
|
261
|
+
if (decision.clearance === 'GRANTED')
|
|
262
|
+
return null;
|
|
263
|
+
// The bracketed rule id is how hook-events and the SIEM export name the
|
|
264
|
+
// rule that decided — the same id every other gate gives this decision.
|
|
265
|
+
const reason = `${decision.reason} [${decision.ruleId}]`;
|
|
266
|
+
log.warn({ action: 'sso_group_block', toolName, memberId: principal?.memberId ?? null, ruleId: decision.ruleId }, reason);
|
|
267
|
+
this.emitter.emit('tool_blocked', toolName, toolInput, reason);
|
|
268
|
+
return block('SSO_GROUP', decision.ruleId ?? 'sso_group', reason);
|
|
124
269
|
}
|
|
125
270
|
/**
|
|
126
271
|
* Evaluate a tools/call request and return a governance decision.
|
|
@@ -138,6 +283,11 @@ export class ToolCallInterceptor {
|
|
|
138
283
|
let injectionFindingsForContext = [];
|
|
139
284
|
let injectionSourcesForContext = [];
|
|
140
285
|
let corroboratingDetectorsForContext = 0;
|
|
286
|
+
// -2. The MCP server registry: operator decisions on this server, and the
|
|
287
|
+
// workspace's default for servers nobody has decided on yet.
|
|
288
|
+
const registryDecision = await this.checkRegistry(toolName, toolInput);
|
|
289
|
+
if (registryDecision)
|
|
290
|
+
return registryDecision;
|
|
141
291
|
// -1. Additive SERVER scoping. When the workspace declares a server
|
|
142
292
|
// allowlist (mcpAllowedServers), ONLY calls proxied to those servers may
|
|
143
293
|
// proceed — checked ahead of the per-tool allowlist below since a
|
|
@@ -158,7 +308,7 @@ export class ToolCallInterceptor {
|
|
|
158
308
|
`allowlist in workspace settings (mcpAllowedServers).`;
|
|
159
309
|
log.warn({ action: 'server_allowlist_block', serverName: this.serverName, toolName }, reason);
|
|
160
310
|
this.emitter.emit('tool_blocked', toolName, toolInput, reason);
|
|
161
|
-
return
|
|
311
|
+
return block('SERVER_NOT_ALLOWED', 'mcpAllowedServers', reason);
|
|
162
312
|
}
|
|
163
313
|
// 0. Additive tool scoping. When the workspace declares an allowlist,
|
|
164
314
|
// ONLY those tools may be called — the inverse of every other rule here,
|
|
@@ -173,8 +323,12 @@ export class ToolCallInterceptor {
|
|
|
173
323
|
`allowlist in workspace settings (mcpAllowedTools).`;
|
|
174
324
|
log.warn({ action: 'allowlist_block', toolName }, reason);
|
|
175
325
|
this.emitter.emit('tool_blocked', toolName, toolInput, reason);
|
|
176
|
-
return
|
|
326
|
+
return block('TOOL_NOT_ALLOWED', 'mcpAllowedTools', reason);
|
|
177
327
|
}
|
|
328
|
+
// 0.5. SSO group clearance, after the scoping checks and before DLP.
|
|
329
|
+
const clearance = this.checkSsoGroupClearance(toolName, toolInput);
|
|
330
|
+
if (clearance)
|
|
331
|
+
return clearance;
|
|
178
332
|
// 1. DLP scan — with the workspace's own patterns loaded first, so a
|
|
179
333
|
// control-plane-defined pattern reaches the same scanner as the floor.
|
|
180
334
|
try {
|
|
@@ -183,6 +337,21 @@ export class ToolCallInterceptor {
|
|
|
183
337
|
catch {
|
|
184
338
|
// Pattern delivery must never take the scanner down; the floor stands.
|
|
185
339
|
}
|
|
340
|
+
// The workspace's PII detector actions, the baseline this machine's
|
|
341
|
+
// INTUTIC_MCP_DLP_DETECTORS may only tighten. When the control plane
|
|
342
|
+
// could not read them, which detectors the workspace requires is
|
|
343
|
+
// unknown: fail-closed refuses the call, as the LLM proxy refuses the
|
|
344
|
+
// request; fail-open scans with the local config alone.
|
|
345
|
+
const piiDetectors = this.policy.getPiiDetectors();
|
|
346
|
+
if (piiDetectors.kind === 'unreadable' && !this.failOpen) {
|
|
347
|
+
const reason = `This workspace's PII detector actions could not be read (${piiDetectors.reason}), so which ` +
|
|
348
|
+
`detectors apply is unknown. Tool call blocked (fail-closed mode: mcpProxyFailBehavior or ` +
|
|
349
|
+
`INTUTIC_MCP_FAIL_OPEN=false).`;
|
|
350
|
+
log.warn({ action: 'pii_detectors_unreadable_block', toolName }, reason);
|
|
351
|
+
this.emitter.emit('tool_blocked', toolName, toolInput, reason);
|
|
352
|
+
return block('GOVERNANCE_UNAVAILABLE', 'piiDetectors', reason);
|
|
353
|
+
}
|
|
354
|
+
setWorkspacePii(piiDetectors);
|
|
186
355
|
try {
|
|
187
356
|
const dlp = scanToolInput(toolInput);
|
|
188
357
|
// Captured regardless of outcome — by pipeline position, a non-empty
|
|
@@ -194,19 +363,13 @@ export class ToolCallInterceptor {
|
|
|
194
363
|
const reason = formatDlpBlockReason(dlp.findings);
|
|
195
364
|
log.warn({ action: 'dlp_block', toolName, findings: dlp.findings }, 'DLP block');
|
|
196
365
|
this.emitter.emit('tool_blocked', toolName, toolInput, reason);
|
|
197
|
-
return {
|
|
366
|
+
return block('DLP', `dlp.${dlp.findings[0]?.pattern ?? 'input'}`, reason);
|
|
198
367
|
}
|
|
199
368
|
}
|
|
200
369
|
catch (err) {
|
|
201
370
|
log.error({ action: 'dlp_error', err: err.message }, 'DLP scan error — skipping');
|
|
202
|
-
if (!this.failOpen)
|
|
203
|
-
return
|
|
204
|
-
action: 'block',
|
|
205
|
-
reason: 'Governance check failed — Intutic control plane unreachable. ' +
|
|
206
|
-
'Tool call blocked by workspace policy (fail-closed mode). ' +
|
|
207
|
-
'Contact your administrator or update mcpProxyFailBehavior to open.',
|
|
208
|
-
};
|
|
209
|
-
}
|
|
371
|
+
if (!this.failOpen)
|
|
372
|
+
return block('GOVERNANCE_UNAVAILABLE', 'mcpProxyFailBehavior', FAIL_CLOSED_REASON);
|
|
210
373
|
}
|
|
211
374
|
// 2. SOP policy rule match
|
|
212
375
|
try {
|
|
@@ -216,34 +379,27 @@ export class ToolCallInterceptor {
|
|
|
216
379
|
if (rule.action === 'block') {
|
|
217
380
|
log.warn({ action: 'policy_block', toolName, ruleId: rule.id, reason: rule.reason }, 'Policy block');
|
|
218
381
|
this.emitter.emit('tool_blocked', toolName, toolInput, rule.reason);
|
|
219
|
-
return
|
|
382
|
+
return block('SOP_RULE', rule.id, rule.reason);
|
|
220
383
|
}
|
|
221
384
|
if (rule.action === 'warn') {
|
|
222
385
|
log.warn({ action: 'policy_warn', toolName, ruleId: rule.id, reason: rule.reason }, 'Policy warning (allowing)');
|
|
223
386
|
// Fall through to allow. Reported as `tool_flagged` with the rule id
|
|
224
387
|
// in the reason — the same shape the harness gates use — so a
|
|
225
|
-
// SHADOW guardrail's evidence
|
|
388
|
+
// SHADOW guardrail's evidence counts this proxy's traffic.
|
|
226
389
|
this.emitter.emit('tool_flagged', toolName, toolInput, `${rule.reason} [${rule.id}]`);
|
|
227
390
|
}
|
|
228
|
-
// 'require_approval' treated as block in headless proxy (no interactive UI)
|
|
229
391
|
if (rule.action === 'require_approval') {
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
392
|
+
const held = await this.hold(rule, toolName, toolInput);
|
|
393
|
+
if (held)
|
|
394
|
+
return held;
|
|
395
|
+
// An approved bypass: the remaining checks still apply.
|
|
234
396
|
}
|
|
235
397
|
}
|
|
236
398
|
}
|
|
237
399
|
catch (err) {
|
|
238
400
|
log.error({ action: 'policy_error', err: err.message }, 'Policy evaluation error');
|
|
239
|
-
if (!this.failOpen)
|
|
240
|
-
return
|
|
241
|
-
action: 'block',
|
|
242
|
-
reason: 'Governance check failed — Intutic control plane unreachable. ' +
|
|
243
|
-
'Tool call blocked by workspace policy (fail-closed mode). ' +
|
|
244
|
-
'Contact your administrator or update mcpProxyFailBehavior to open.',
|
|
245
|
-
};
|
|
246
|
-
}
|
|
401
|
+
if (!this.failOpen)
|
|
402
|
+
return block('GOVERNANCE_UNAVAILABLE', 'mcpProxyFailBehavior', FAIL_CLOSED_REASON);
|
|
247
403
|
}
|
|
248
404
|
// 3. Prompt-injection scan (request direction) — the `toolInput` a
|
|
249
405
|
// MISBEHAVING or COMPROMISED calling agent sends, e.g. an agent that
|
|
@@ -263,10 +419,16 @@ export class ToolCallInterceptor {
|
|
|
263
419
|
const reason = `Prompt-injection pattern(s) detected in tool input: ${findings.join(', ')}`;
|
|
264
420
|
log.warn({ action: 'injection_detected', toolName, patterns: findings, source: 'tool_input', severity }, 'Prompt-injection pattern matched in tool call input');
|
|
265
421
|
const injectionAction = this.policy.getInjectionAction() ?? this.injectionActionDefault;
|
|
266
|
-
this.emitter.emit('injection_detected', toolName, toolInput, reason,
|
|
422
|
+
this.emitter.emit('injection_detected', toolName, toolInput, reason, {
|
|
423
|
+
detectorId: 'injection:tool_input',
|
|
424
|
+
kind: 'prompt_injection',
|
|
425
|
+
disposition: injectionAction === 'block' ? 'kill' : 'steer',
|
|
426
|
+
severity,
|
|
427
|
+
confidence: 1,
|
|
428
|
+
});
|
|
267
429
|
if (injectionAction === 'block') {
|
|
268
430
|
this.emitter.emit('tool_blocked', toolName, toolInput, reason);
|
|
269
|
-
return
|
|
431
|
+
return block('INJECTION', 'injection.tool_input', reason);
|
|
270
432
|
}
|
|
271
433
|
// 'warn' (default): report only, fall through to allow.
|
|
272
434
|
}
|
|
@@ -291,7 +453,7 @@ export class ToolCallInterceptor {
|
|
|
291
453
|
// built) and allow.
|
|
292
454
|
const anomalyMode = this.policy.getAnomalyMode() ?? this.anomalyModeDefault;
|
|
293
455
|
// The session window — the shared one across this session's sibling
|
|
294
|
-
// proxy processes when a store is configured (Wave 5.3
|
|
456
|
+
// proxy processes when a store is configured (Wave 5.3), the
|
|
295
457
|
// per-process one otherwise. One round trip at most per tools/call, and
|
|
296
458
|
// none when nothing below would read it.
|
|
297
459
|
const window = anomalyMode !== 'off' || this.wasmRunner ? await this.session.loadWindow(toolName) : undefined;
|
|
@@ -314,10 +476,10 @@ export class ToolCallInterceptor {
|
|
|
314
476
|
disposition: effective,
|
|
315
477
|
confidence: finding.confidence,
|
|
316
478
|
}, 'Anomaly detector fired');
|
|
317
|
-
this.emitter.emit('anomaly_detected', toolName, toolInput, finding.reason, severity);
|
|
479
|
+
this.emitter.emit('anomaly_detected', toolName, toolInput, finding.reason, detectionFinding(finding, effective, severity));
|
|
318
480
|
if (effective === 'kill') {
|
|
319
481
|
this.emitter.emit('tool_blocked', toolName, toolInput, finding.reason);
|
|
320
|
-
return
|
|
482
|
+
return block('ANOMALY', finding.detectorId, finding.reason);
|
|
321
483
|
}
|
|
322
484
|
if (effective === 'reask') {
|
|
323
485
|
// Keyed per-detector-id, independent of every other detector's
|
|
@@ -360,30 +522,107 @@ export class ToolCallInterceptor {
|
|
|
360
522
|
injectionSources: injectionSourcesForContext,
|
|
361
523
|
corroboratingDetectors: corroboratingDetectorsForContext,
|
|
362
524
|
toolContractChanged: this.session.getToolContractChanged(),
|
|
525
|
+
serverName: this.serverName,
|
|
363
526
|
});
|
|
527
|
+
if (verdict.code === 'unavailable') {
|
|
528
|
+
// A rule reached no verdict: refused whatever `failOpen` says (see
|
|
529
|
+
// `WasmRunner.evaluate`). Reported like any refusal, except a
|
|
530
|
+
// quarantined rule's: the call that quarantined it was reported
|
|
531
|
+
// already, and one event per refused call after it would file an
|
|
532
|
+
// incident per retry.
|
|
533
|
+
log.warn({ action: 'wasm_unavailable_block', toolName, ruleId: verdict.ruleId, stop: verdict.stop }, verdict.reason);
|
|
534
|
+
if (verdict.stop !== 'quarantined')
|
|
535
|
+
this.emitter.emit('tool_blocked', toolName, toolInput, verdict.reason);
|
|
536
|
+
return block('GOVERNANCE_UNAVAILABLE', `wasm:${verdict.ruleId}`, verdict.reason);
|
|
537
|
+
}
|
|
364
538
|
if (verdict.code === 'block') {
|
|
365
539
|
log.warn({ action: 'wasm_block', toolName, ruleId: verdict.ruleId }, 'Tool call blocked by WASM governance rule');
|
|
366
540
|
this.emitter.emit('tool_blocked', toolName, toolInput, verdict.reason);
|
|
367
|
-
return
|
|
541
|
+
return block('WASM_RULE', `wasm:${verdict.ruleId}`, verdict.reason);
|
|
368
542
|
}
|
|
369
543
|
if (verdict.code === 'reask') {
|
|
370
544
|
// Keyed per-rule-id, independent of every anomaly detector's own
|
|
371
545
|
// counter — see applyReaskLadder's doc comment.
|
|
372
546
|
return await this.applyReaskLadder(`wasm:${verdict.ruleId}`, verdict.reason, toolName, toolInput);
|
|
373
547
|
}
|
|
548
|
+
if (verdict.code === 'hold') {
|
|
549
|
+
// A Rego rule's hold takes the `require_approval` path: the same
|
|
550
|
+
// approved-bypass lookup and hold record, keyed on the rule id.
|
|
551
|
+
const held = await this.hold({ id: verdict.ruleId, reason: verdict.reason }, toolName, toolInput);
|
|
552
|
+
if (held)
|
|
553
|
+
return held;
|
|
554
|
+
// An approved bypass: the remaining checks still apply.
|
|
555
|
+
}
|
|
374
556
|
// 'allow': fall through.
|
|
375
557
|
}
|
|
376
558
|
catch (err) {
|
|
377
|
-
//
|
|
378
|
-
//
|
|
379
|
-
// rule
|
|
380
|
-
//
|
|
381
|
-
log.error({ action: 'wasm_evaluate_error', err: err.message }, 'WASM rule evaluation error
|
|
559
|
+
// The runner itself failed (not one rule's timeout or trap, which
|
|
560
|
+
// `WasmRunner.evaluate` turns into a verdict): no rule judged the
|
|
561
|
+
// call, so it is refused like a rule that reached no verdict, whatever
|
|
562
|
+
// the fail setting.
|
|
563
|
+
log.error({ action: 'wasm_evaluate_error', err: err.message }, 'WASM rule evaluation error');
|
|
564
|
+
return block('GOVERNANCE_UNAVAILABLE', 'wasm', `Custom rules could not be evaluated: ${err.message}. Tool call blocked: a rule ` +
|
|
565
|
+
`that cannot decide never allows.`);
|
|
382
566
|
}
|
|
383
567
|
}
|
|
384
|
-
// 6.
|
|
568
|
+
// 6. MCP call budgets — after every other check, so a call another check
|
|
569
|
+
// refuses never spends allowance.
|
|
570
|
+
const budgetDecision = await this.checkBudgets(toolName, toolInput);
|
|
571
|
+
if (budgetDecision)
|
|
572
|
+
return budgetDecision;
|
|
573
|
+
// 7. Allow — emit telemetry event
|
|
385
574
|
this.emitter.emit('tool_allowed', toolName, toolInput);
|
|
386
575
|
return { action: 'allow' };
|
|
387
576
|
}
|
|
577
|
+
/**
|
|
578
|
+
* Counts the call against every budget that covers it, or refuses it when
|
|
579
|
+
* one is used up. The threshold and exceeded events go out once per budget
|
|
580
|
+
* per period (the store claims them), each as a `budget_breach` finding; a
|
|
581
|
+
* refusal also sends `tool_blocked`, as every refusal does, carrying the
|
|
582
|
+
* budget — the control plane files one incident per budget per period from
|
|
583
|
+
* those and counts the rest on it.
|
|
584
|
+
*
|
|
585
|
+
* When the count cannot be checked, the fail setting decides, as for every
|
|
586
|
+
* other governance check that cannot complete.
|
|
587
|
+
*/
|
|
588
|
+
async checkBudgets(toolName, toolInput) {
|
|
589
|
+
if (!this.budgets)
|
|
590
|
+
return null;
|
|
591
|
+
const policy = this.policy.getMcpBudgets();
|
|
592
|
+
const verdict = await this.budgets.check(policy, toolName, this.policy.getPrincipal()?.memberId ?? null);
|
|
593
|
+
if (verdict.kind === 'unlimited')
|
|
594
|
+
return null;
|
|
595
|
+
if (verdict.kind === 'allowed') {
|
|
596
|
+
for (const standing of verdict.warnings) {
|
|
597
|
+
const reason = warningReason(standing, policy.warnAtPct);
|
|
598
|
+
log.warn({ action: 'mcp_budget_threshold', toolName, budgetId: standing.budget.id, used: standing.used }, reason);
|
|
599
|
+
this.emitter.emit('mcp_budget_threshold', toolName, undefined, reason, { detectorId: 'budget', kind: 'budget_breach', disposition: 'steer', severity: 'low', confidence: 1 }, budgetEventDetail(standing));
|
|
600
|
+
}
|
|
601
|
+
return null;
|
|
602
|
+
}
|
|
603
|
+
if (verdict.kind === 'exceeded') {
|
|
604
|
+
const reason = exceededReason(verdict.standing);
|
|
605
|
+
log.warn({ action: 'mcp_budget_exceeded', toolName, budgetId: verdict.standing.budget.id, notify: verdict.notify }, reason);
|
|
606
|
+
if (verdict.notify) {
|
|
607
|
+
this.emitter.emit('mcp_budget_exceeded', toolName, undefined, reason, { detectorId: 'budget', kind: 'budget_breach', disposition: 'kill', severity: 'medium', confidence: 1 }, budgetEventDetail(verdict.standing));
|
|
608
|
+
}
|
|
609
|
+
const detail = budgetEventDetail(verdict.standing);
|
|
610
|
+
this.emitter.emit('tool_blocked', toolName, toolInput, reason, undefined, detail);
|
|
611
|
+
return block('BUDGET_EXCEEDED', detail.budgetId, reason, { ...detail });
|
|
612
|
+
}
|
|
613
|
+
// Unavailable: no Valkey configured, or it did not answer.
|
|
614
|
+
if (this.failOpen) {
|
|
615
|
+
if (!this.budgetsUncheckedWarned) {
|
|
616
|
+
this.budgetsUncheckedWarned = true;
|
|
617
|
+
log.warn({ action: 'mcp_budget_unchecked', budgets: verdict.budgets.map((b) => b.id) }, 'MCP call budgets cover calls through this proxy but could not be checked (no Valkey, or unreachable); ' +
|
|
618
|
+
'allowing them uncounted (fail-open)');
|
|
619
|
+
}
|
|
620
|
+
return null;
|
|
621
|
+
}
|
|
622
|
+
const reason = unavailableReason(verdict.budgets);
|
|
623
|
+
log.warn({ action: 'mcp_budget_unchecked_block', toolName }, reason);
|
|
624
|
+
this.emitter.emit('tool_blocked', toolName, toolInput, reason);
|
|
625
|
+
return block('BUDGET_UNAVAILABLE', 'mcpProxyFailBehavior', reason, { budgetIds: verdict.budgets.map((b) => b.id) });
|
|
626
|
+
}
|
|
388
627
|
}
|
|
389
628
|
//# sourceMappingURL=interceptor.js.map
|
package/dist/interceptor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,WAAW,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxG,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAEnG,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAA;AACzF,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE/G,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,gBAAgB,EAA0B,MAAM,cAAc,CAAA;AAEvE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAA0B,MAAM,aAAa,CAAA;AAGzH,MAAM,GAAG,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAA;AA2BjD,kCAAkC;AAClC,SAAS,KAAK,CAAC,IAAmB,EAAE,MAAc,EAAE,MAAc,EAAE,MAAgC;IAClG,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/G,CAAC;AAED,kGAAkG;AAClG,MAAM,kBAAkB,GACtB,+DAA+D;IAC/D,4DAA4D;IAC5D,oEAAoE,CAAA;AAEtE,MAAM,OAAO,mBAAmB;IAEX;IACA;IAMA;IAQA;IASA;IAUA;IASA;IAQA;IAOA;IAQA;IAOA;IAOA;IAjFnB,YACmB,MAAoB,EACpB,OAA0B;IAC3C;;;;OAIG;IACc,gBAAyB,IAAI;IAC9C;;;;;;OAMG;IACc,aAAqB,SAAS;IAC/C;;;;;;;OAOG;IACc,yBAA2C,MAAM;IAClE;;;;;;;;OAQG;IACc,UAAwB,IAAI,YAAY,EAAE;IAC3D;;;;;;;OAOG;IACc,qBAAkC,SAAS;IAC5D;;;;;;OAMG;IACc,0BAAyE,EAAE;IAC5F;;;;;OAKG;IACc,aAAqC,SAAS;IAC/D;;;;;;OAMG;IACc,cAAsB,SAAS;IAChD;;;;;OAKG;IACc,QAAmC,SAAS;IAC7D;;;;;OAKG;IACc,UAAyC,SAAS;QAhFlD,WAAM,GAAN,MAAM,CAAc;QACpB,YAAO,GAAP,OAAO,CAAmB;QAM1B,kBAAa,GAAb,aAAa,CAAgB;QAQ7B,eAAU,GAAV,UAAU,CAAoB;QAS9B,2BAAsB,GAAtB,sBAAsB,CAA2B;QAUjD,YAAO,GAAP,OAAO,CAAmC;QAS1C,uBAAkB,GAAlB,kBAAkB,CAAyB;QAQ3C,4BAAuB,GAAvB,uBAAuB,CAAoD;QAO3E,eAAU,GAAV,UAAU,CAAoC;QAQ9C,gBAAW,GAAX,WAAW,CAAoB;QAO/B,UAAK,GAAL,KAAK,CAAuC;QAO5C,YAAO,GAAP,OAAO,CAA2C;IAClE,CAAC;IAEJ,2GAA2G;IACnG,sBAAsB,GAAG,KAAK,CAAA;IAEtC;;;;;OAKG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,aAAa,CAAA;IACxD,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,UAAkB,EAAE,QAAgB,EAAE,SAAkB;QAClG,qEAAqE;QACrE,qEAAqE;QACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAA;QAC/D,IAAI,QAAQ,GAAG,kBAAkB,EAAE,CAAC;YAClC,MAAM,cAAc,GAClB,GAAG,UAAU,+CAA+C,kBAAkB,SAAS;gBACvF,8BAA8B,CAAA;YAChC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,sDAAsD,CAAC,CAAA;YACvH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;YACtE,OAAO,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,cAAc,CAAC,CAAA;QACtD,CAAC;QACD,MAAM,WAAW,GACf,GAAG,UAAU,aAAa,QAAQ,IAAI,kBAAkB,kCAAkC;YAC1F,+BAA+B,CAAA;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;QACnE,OAAO,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,CAAA;IACzC,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,IAAI,CAAC,IAAoC,EAAE,QAAgB,EAAE,SAAkB;QAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK;YACxB,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC;YACrD,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;QAE1D,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,uBAAuB,IAAI,CAAC,EAAE,kBAAkB,OAAO,CAAC,SAAS,IAAI,aAAa,YAAY,OAAO,CAAC,MAAM,EAAE,CAAA;YAC7H,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,2BAA2B,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAA;YAC5G,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YAC3E,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ;YAC7B,CAAC,CAAC,sBAAsB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,eAAe,OAAO,CAAC,MAAM,IAAI;gBAC9E,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC;YAClC,CAAC,CAAC,sBAAsB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,wCAAwC;gBACrF,0FAA0F;gBAC1F,iDAAiD,CAAA;QACrD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAA;QACxH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;QAClF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;IACpG,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACK,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,SAAkB;QAC9D,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAA;YAC9B,MAAM,MAAM,GACV,2FAA2F;gBAC3F,0CAA0C,IAAI,CAAC,UAAU,4BAA4B;gBACrF,4FAA4F,CAAA;YAC9F,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAA;YAC7F,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YAC9D,OAAO,KAAK,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAA;QACtE,CAAC;QAED,gFAAgF;QAChF,kEAAkE;QAClE,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QACzE,MAAM,OAAO,GAAiB,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACtG,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACzB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAC7F,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QACtE,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,sBAAsB,CAAC,QAAgB,EAAE,SAAkB;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAA;QAC9C,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,yBAAyB,CACxC,MAAM,EACN,CAAC,QAAQ,EAAE,QAAQ,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC,EAClD,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACvC,CAAA;QACD,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QACjD,wEAAwE;QACxE,wEAAwE;QACxE,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAA;QACxD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAA;QACzH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAC9D,OAAO,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,IAAI,WAAW,EAAE,MAAM,CAAC,CAAA;IACnE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,SAAkB;QAC/C,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,EAAE,sBAAsB,CAAC,CAAA;QAE7E,wEAAwE;QACxE,qEAAqE;QACrE,8DAA8D;QAC9D,IAAI,qBAAqB,GAAiB,EAAE,CAAA;QAC5C,IAAI,2BAA2B,GAAa,EAAE,CAAA;QAC9C,IAAI,0BAA0B,GAAa,EAAE,CAAA;QAC7C,IAAI,gCAAgC,GAAG,CAAC,CAAA;QAExC,0EAA0E;QAC1E,6DAA6D;QAC7D,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QACtE,IAAI,gBAAgB;YAAE,OAAO,gBAAgB,CAAA;QAE7C,oEAAoE;QACpE,yEAAyE;QACzE,kEAAkE;QAClE,uEAAuE;QACvE,uEAAuE;QACvE,uEAAuE;QACvE,sEAAsE;QACtE,sEAAsE;QACtE,kEAAkE;QAClE,mEAAmE;QACnE,sEAAsE;QACtE,uEAAuE;QACvE,SAAS;QACT,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAA;QACtD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3E,MAAM,MAAM,GACV,eAAe,IAAI,CAAC,UAAU,oDAAoD;gBAClF,IAAI,cAAc,CAAC,MAAM,mDAAmD;gBAC5E,sDAAsD,CAAA;YACxD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAA;YAC7F,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YAC9D,OAAO,KAAK,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAA;QACjE,CAAC;QAED,sEAAsE;QACtE,yEAAyE;QACzE,wEAAwE;QACxE,kEAAkE;QAClE,sEAAsE;QACtE,8DAA8D;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAA;QAClD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,MAAM,MAAM,GACV,SAAS,QAAQ,kDAAkD;gBACnE,IAAI,YAAY,CAAC,MAAM,iDAAiD;gBACxE,oDAAoD,CAAA;YACtD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAA;YACzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YAC9D,OAAO,KAAK,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAC7D,CAAC;QAED,qEAAqE;QACrE,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QAClE,IAAI,SAAS;YAAE,OAAO,SAAS,CAAA;QAE/B,qEAAqE;QACrE,uEAAuE;QACvE,IAAI,CAAC;YACH,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;QACzE,CAAC;QACD,oEAAoE;QACpE,qEAAqE;QACrE,iEAAiE;QACjE,sEAAsE;QACtE,wDAAwD;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAA;QAClD,IAAI,YAAY,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzD,MAAM,MAAM,GACV,4DAA4D,YAAY,CAAC,MAAM,cAAc;gBAC7F,2FAA2F;gBAC3F,+BAA+B,CAAA;YACjC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gCAAgC,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAA;YACxE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YAC9D,OAAO,KAAK,CAAC,wBAAwB,EAAE,cAAc,EAAE,MAAM,CAAC,CAAA;QAChE,CAAC;QACD,eAAe,CAAC,YAAY,CAAC,CAAA;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;YACpC,qEAAqE;YACrE,iEAAiE;YACjE,8DAA8D;YAC9D,8DAA8D;YAC9D,qBAAqB,GAAG,GAAG,CAAC,QAAQ,CAAA;YACpC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;gBACjD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAA;gBAChF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;gBAC9D,OAAO,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,OAAO,EAAE,EAAE,MAAM,CAAC,CAAA;YAC3E,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,EAAE,2BAA2B,CAAC,CAAA;YAC5F,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC,wBAAwB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,CAAA;QACxG,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;YAC3D,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC5B,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAA;oBACpG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;oBACnE,OAAO,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;gBAChD,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,2BAA2B,CAAC,CAAA;oBAChH,qEAAqE;oBACrE,8DAA8D;oBAC9D,2DAA2D;oBAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;gBACvF,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;oBACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;oBACvD,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAA;oBACrB,wDAAwD;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAA;YAC7F,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC,wBAAwB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,CAAA;QACxG,CAAC;QAED,mEAAmE;QACnE,qEAAqE;QACrE,uEAAuE;QACvE,qEAAqE;QACrE,uEAAuE;QACvE,uEAAuE;QACvE,wBAAwB;QACxB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;YACrD,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAA;YAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;YACxC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,2BAA2B,GAAG,QAAQ,CAAA;gBACtC,0BAA0B,GAAG,CAAC,YAAY,CAAC,CAAA;gBAC3C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;gBAC1D,MAAM,MAAM,GAAG,uDAAuD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;gBAC3F,GAAG,CAAC,IAAI,CACN,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,EAC9F,qDAAqD,CACtD,CAAA;gBACD,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAA;gBACvF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE;oBACnE,UAAU,EAAE,sBAAsB;oBAClC,IAAI,EAAE,kBAAkB;oBACxB,WAAW,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;oBAC3D,QAAQ;oBACR,UAAU,EAAE,CAAC;iBACd,CAAC,CAAA;gBACF,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;oBAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;oBAC9D,OAAO,KAAK,CAAC,WAAW,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAA;gBAC3D,CAAC;gBACD,wDAAwD;YAC1D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oEAAoE;YACpE,uEAAuE;YACvE,iEAAiE;YACjE,oEAAoE;YACpE,uDAAuD;YACvD,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,EAAE,iCAAiC,CAAC,CAAA;QAC/G,CAAC;QAED,+DAA+D;QAC/D,yDAAyD;QACzD,qEAAqE;QACrE,+DAA+D;QAC/D,wEAAwE;QACxE,qEAAqE;QACrE,mEAAmE;QACnE,kEAAkE;QAClE,oEAAoE;QACpE,oBAAoB;QACpB,MAAM,WAAW,GAAgB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,kBAAkB,CAAA;QACxF,oEAAoE;QACpE,6DAA6D;QAC7D,wEAAwE;QACxE,yCAAyC;QACzC,MAAM,MAAM,GAAG,WAAW,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC7G,IAAI,WAAW,KAAK,KAAK,IAAI,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;gBACtC,MAAM,QAAQ,GAAG,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;gBAC5E,gCAAgC,GAAG,QAAQ,CAAC,MAAM,CAAA;gBAClD,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAA;gBAC3F,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,SAAS,GAAwB,2BAA2B,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;oBACnG,IAAI,SAAS,KAAK,KAAK;wBAAE,SAAQ,CAAC,mDAAmD;oBAErF,MAAM,QAAQ,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAA;oBACzF,GAAG,CAAC,IAAI,CACN;wBACE,MAAM,EAAE,kBAAkB;wBAC1B,QAAQ;wBACR,UAAU,EAAE,OAAO,CAAC,UAAU;wBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,WAAW,EAAE,SAAS;wBACtB,UAAU,EAAE,OAAO,CAAC,UAAU;qBAC/B,EACD,wBAAwB,CACzB,CAAA;oBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;oBAE1H,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;wBACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;wBACtE,OAAO,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;oBAC7D,CAAC;oBAED,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;wBAC1B,+DAA+D;wBAC/D,8DAA8D;wBAC9D,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;oBAC7F,CAAC;oBAED,8DAA8D;oBAC9D,kEAAkE;oBAClE,mEAAmE;oBACnE,8BAA8B;gBAChC,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,oEAAoE;gBACpE,kEAAkE;gBAClE,kEAAkE;gBAClE,yDAAyD;gBACzD,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,yBAAyB,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,EAAE,oCAAoC,CAAC,CAAA;YACrH,CAAC;QACH,CAAC;QAED,+DAA+D;QAC/D,wEAAwE;QACxE,wEAAwE;QACxE,2DAA2D;QAC3D,wEAAwE;QACxE,8DAA8D;QAC9D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAC7C,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;oBACjC,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;oBAClC,UAAU,EAAE,WAAW,CAAC,UAAU,EAAE;oBACpC,QAAQ;oBACR,aAAa,EAAE,SAAS;oBACxB,YAAY,EAAE,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC;oBAC/E,YAAY,EAAE,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;oBAClE,sBAAsB,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;oBACvE,iBAAiB,EAAE,2BAA2B;oBAC9C,gBAAgB,EAAE,0BAA0B;oBAC5C,sBAAsB,EAAE,gCAAgC;oBACxD,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;oBAC1D,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B,CAAC,CAAA;gBAEF,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACnC,mEAAmE;oBACnE,8DAA8D;oBAC9D,gEAAgE;oBAChE,iEAAiE;oBACjE,sBAAsB;oBACtB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;oBACpH,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa;wBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;oBAC1G,OAAO,KAAK,CAAC,wBAAwB,EAAE,QAAQ,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;gBAClF,CAAC;gBACD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,2CAA2C,CAAC,CAAA;oBACjH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;oBACtE,OAAO,KAAK,CAAC,WAAW,EAAE,QAAQ,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;gBACrE,CAAC;gBACD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC7B,iEAAiE;oBACjE,gDAAgD;oBAChD,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;gBACnG,CAAC;gBACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC5B,iEAAiE;oBACjE,gEAAgE;oBAChE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;oBACjG,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAA;oBACrB,wDAAwD;gBAC1D,CAAC;gBACD,yBAAyB;YAC3B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kEAAkE;gBAClE,kEAAkE;gBAClE,uEAAuE;gBACvE,oBAAoB;gBACpB,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,EAAE,4BAA4B,CAAC,CAAA;gBACvG,OAAO,KAAK,CACV,wBAAwB,EACxB,MAAM,EACN,wCAAyC,GAAa,CAAC,OAAO,8BAA8B;oBAC1F,kCAAkC,CACrC,CAAA;YACH,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,kCAAkC;QAClC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QACnE,IAAI,cAAc;YAAE,OAAO,cAAc,CAAA;QAEzC,kCAAkC;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QACtD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IAC5B,CAAC;IAED;;;;;;;;;;OAUG;IACK,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,SAAkB;QAC7D,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAA;QAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAA;QAExG,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,IAAI,CAAA;QAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;gBACxD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;gBACjH,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,sBAAsB,EACtB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,EACrG,iBAAiB,CAAC,QAAQ,CAAC,CAC5B,CAAA;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC/C,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAA;YAC3H,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,qBAAqB,EACrB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,EACvG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CACpC,CAAA;YACH,CAAC;YACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAClD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YACjF,OAAO,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;QACzE,CAAC;QAED,2DAA2D;QAC3D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBACjC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAA;gBAClC,GAAG,CAAC,IAAI,CACN,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAC7E,wGAAwG;oBACtG,qCAAqC,CACxC,CAAA;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACjD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,4BAA4B,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAA;QACpE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAC9D,OAAO,KAAK,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACrH,CAAC;CACF"}
|