@agent-native/core 0.122.1 → 0.122.3
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 +1 -13
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +12 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/production-agent.ts +65 -1
- package/corpus/core/src/agent/run-loop-with-resume.ts +12 -0
- package/corpus/core/src/agent/run-store.ts +61 -1
- package/corpus/core/src/integrations/a2a-continuation-processor.ts +182 -0
- package/corpus/core/src/integrations/a2a-continuations-store.ts +122 -12
- package/corpus/core/src/integrations/integration-campaign-recovery.ts +127 -0
- package/corpus/core/src/integrations/integration-campaigns-store.ts +1039 -0
- package/corpus/core/src/integrations/integration-durable-dispatch.ts +28 -3
- package/corpus/core/src/integrations/pending-tasks-retry-job.ts +8 -0
- package/corpus/core/src/integrations/plugin.ts +453 -35
- package/corpus/core/src/integrations/webhook-handler.ts +469 -11
- package/corpus/core/src/server/builder-design-systems.ts +1 -1
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +15 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/report-panel-window.ts +3 -3
- package/corpus/templates/analytics/changelog/2026-07-25-analytics-dashboards-and-scheduled-reports-are-faster-and-mo.md +6 -0
- package/corpus/templates/analytics/server/db/schema.ts +12 -0
- package/corpus/templates/analytics/server/lib/dashboard-panel-query.ts +8 -4
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +136 -5
- package/corpus/templates/analytics/server/lib/dashboard-time-scope.ts +250 -1
- package/corpus/templates/analytics/server/lib/first-party-analytics-cache.ts +167 -0
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +34 -9
- package/corpus/templates/analytics/server/lib/first-party-dashboard-repair.ts +105 -23
- package/corpus/templates/analytics/server/lib/first-party-unbounded-panel-repair.ts +169 -0
- package/corpus/templates/analytics/server/plugins/db.ts +41 -1
- package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +6 -3
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +7 -3
- package/corpus/templates/content/app/components/editor/body-hydration.ts +10 -0
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +1 -0
- package/corpus/templates/content/app/root.tsx +12 -1
- package/corpus/templates/content/changelog/2026-07-23-new-pages-open-immediately-while-slow-network-work-continues.md +6 -0
- package/corpus/templates/content/changelog/2026-07-25-database-preview-actions-open-reliably.md +6 -0
- package/corpus/templates/content/e2e/playwright.config.ts +1 -1
- package/corpus/templates/design/actions/edit-design.ts +66 -27
- package/corpus/templates/design/changelog/2026-07-25-design-edits-retry-concurrent-changes.md +6 -0
- package/corpus/templates/design/server/source-workspace.ts +5 -1
- package/corpus/templates/forms/.agents/skills/form-responses/SKILL.md +6 -4
- package/corpus/templates/forms/actions/create-form.ts +5 -1
- package/corpus/templates/forms/actions/export-responses.ts +22 -11
- package/corpus/templates/forms/actions/update-form.ts +5 -1
- package/corpus/templates/forms/changelog/2026-07-25-fields-can-be-created-without-ids.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-25-response-exports-use-file-storage.md +6 -0
- package/corpus/templates/forms/server/lib/validate-fields.ts +43 -0
- package/corpus/templates/slides/actions/extract-pdf.ts +4 -4
- package/corpus/templates/slides/actions/import-file.ts +3 -4
- package/corpus/templates/slides/changelog/2026-07-25-gemini-image-models-updated.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-25-pdf-imports-tolerate-missing-canvas.md +6 -0
- package/corpus/templates/slides/server/handlers/image-providers/gemini.ts +5 -2
- package/corpus/templates/slides/server/lib/pdf-parse-setup.ts +150 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +63 -1
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts +7 -1
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +7 -0
- package/dist/agent/run-loop-with-resume.js.map +1 -1
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +49 -0
- package/dist/agent/run-store.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/integrations/a2a-continuation-processor.d.ts +14 -0
- package/dist/integrations/a2a-continuation-processor.d.ts.map +1 -1
- package/dist/integrations/a2a-continuation-processor.js +134 -1
- package/dist/integrations/a2a-continuation-processor.js.map +1 -1
- package/dist/integrations/a2a-continuations-store.d.ts +23 -0
- package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
- package/dist/integrations/a2a-continuations-store.js +99 -13
- package/dist/integrations/a2a-continuations-store.js.map +1 -1
- package/dist/integrations/integration-campaign-recovery.d.ts +16 -0
- package/dist/integrations/integration-campaign-recovery.d.ts.map +1 -0
- package/dist/integrations/integration-campaign-recovery.js +94 -0
- package/dist/integrations/integration-campaign-recovery.js.map +1 -0
- package/dist/integrations/integration-campaigns-store.d.ts +121 -0
- package/dist/integrations/integration-campaigns-store.d.ts.map +1 -0
- package/dist/integrations/integration-campaigns-store.js +784 -0
- package/dist/integrations/integration-campaigns-store.js.map +1 -0
- package/dist/integrations/integration-durable-dispatch.d.ts +3 -0
- package/dist/integrations/integration-durable-dispatch.d.ts.map +1 -1
- package/dist/integrations/integration-durable-dispatch.js +22 -3
- package/dist/integrations/integration-durable-dispatch.js.map +1 -1
- package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -1
- package/dist/integrations/pending-tasks-retry-job.js +6 -0
- package/dist/integrations/pending-tasks-retry-job.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +325 -18
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts +16 -1
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +368 -13
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/observability/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
- package/dist/provider-api/actions/provider-api.d.ts +8 -8
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/builder-design-systems.js +1 -1
- package/dist/server/builder-design-systems.js.map +1 -1
- package/package.json +3 -3
- package/src/agent/production-agent.ts +65 -1
- package/src/agent/run-loop-with-resume.ts +12 -0
- package/src/agent/run-store.ts +61 -1
- package/src/integrations/a2a-continuation-processor.ts +182 -0
- package/src/integrations/a2a-continuations-store.ts +122 -12
- package/src/integrations/integration-campaign-recovery.ts +127 -0
- package/src/integrations/integration-campaigns-store.ts +1039 -0
- package/src/integrations/integration-durable-dispatch.ts +28 -3
- package/src/integrations/pending-tasks-retry-job.ts +8 -0
- package/src/integrations/plugin.ts +453 -35
- package/src/integrations/webhook-handler.ts +469 -11
- package/src/server/builder-design-systems.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/integrations/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,YAAY,GACb,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAErD,OAAO,EACL,gCAAgC,EAChC,sCAAsC,GACvC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EACL,QAAQ,EACR,yBAAyB,GAC1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gCAAgC,EAChC,yCAAyC,GAC1C,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iCAAiC,EACjC,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,8BAA8B,EAC9B,qCAAqC,EACrC,6BAA6B,EAC7B,sCAAsC,GACvC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,cAAc,EACd,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,IAAI,uBAAuB,EAC/C,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,6BAA6B,EAC7B,kBAAkB,EAClB,6BAA6B,EAC7B,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EACL,mCAAmC,EACnC,mCAAmC,EACnC,4BAA4B,EAC5B,8BAA8B,EAC9B,wCAAwC,EACxC,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAQtC,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,gCAAgC,EAChC,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAS1D,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,iCAAiC,GAElC,MAAM,sBAAsB,CAAC;AAI9B,IAAI,4BAA4B,GAA0C,IAAI,CAAC;AAE/E,SAAS,4BAA4B,CACnC,QAAsC;IAEtC,IAAI,4BAA4B;QAAE,OAAO;IACzC,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;QACnC,0BAA0B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACrD,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,MAAM,CAAC,CAAC;IACX,UAAU,CAAC,YAAY,CAAC,CAAC;IACzB,4BAA4B,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9C,0BAA0B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACrD,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,MAAM,CAAC,CAAC;IACX,UAAU,CAAC,4BAA4B,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,KAAqC;IACtD,KAA2C,CAAC,KAAK,EAAE,EAAE,CAAC;AACzD,CAAC;AAED,+EAA+E;AAC/E,uEAAuE;AACvE,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,0EAA0E;AAC1E,MAAM,WAAW,GAAG,kBAAkB,CACpC,IAAI,GAAG,CAAC,4CAA4C,CAAC,CACtD,CAAC;AACF,MAAM,cAAc,GAAG,CAAC,6BAA6B,EAAE,qBAAqB,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,KAAK,UAAU,yBAAyB,CAAC,UAAkB;IACzD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE;QACtD,MAAM,EAAE,cAAc;QACtB,QAAQ;KACT,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,sEAAsE;IACtE,4DAA4D;IAC5D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;IACjE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,sCAAsC,GAAG,MAAM,CAAC,MAAM,CAAC;IAClE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;IAC3C,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE;IACjD,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE;IACjD,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC9D,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE;IAC/C,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE;IACtD,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;CAI3C,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC,MAAM,CAC3D,sCAAsC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CACvE,CAAC;AAEF,MAAM,UAAU,gCAAgC;IAC9C,OAAO,sCAAsC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,yBAAyB,GAAG;;;;;;0FAMwD,CAAC;AAgB3F,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAEvC,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AACpD,MAAM,2BAA2B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AAUzD,SAAS,oBAAoB,CAC3B,SAAiB,EACjB,KAAa,EACb,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,OAAO,iBAAiB,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAmC;IAEnC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;QAChD,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IAEH,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7D,UAAU,EAAE,MAAM,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM;YAChB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACpD,MAAM,SAAS,GAAG,IAA+B,CAAC;gBAClD,OAAO,SAAS,CAAC,EAAE,KAAK,MAAM,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC;YAC/D,CAAC,CAAC;YACJ,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO;YACL,EAAE,EAAE,IAAI;YACR,UAAU;YACV,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC7C,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;QAC9C,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IACH,MAAM,iBAAiB,GACrB,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,MAAM,GACV,CAAC,iBAAiB;QAChB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,iBAAiB,CAAC;QACjE,CAAC,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,0DAA0D;SAClE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,WAAW,EAAE,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC;QACxC,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,UAAU;QACV,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI;QACpC,IAAI;QACJ,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC;QACxC,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI;QAC9C,gBAAgB,EAAE,UAAU,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,IAAI;KAC/D,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,SAAS,EAAE,GAAG,CAAC,EAAE;QACjB,SAAS,EAAE,GAAG,CAAC,EAAE;QACjB,UAAU;QACV,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC7C,OAAO,EACL,WAAW,KAAK,QAAQ;YACtB,CAAC,CAAC,UAAU;gBACV,CAAC,CAAC,oBAAoB,GAAG,CAAC,EAAE,IAAI;gBAChC,CAAC,CAAC,oBAAoB,GAAG,CAAC,EAAE,kFAAkF;YAChH,CAAC,CAAC,SAAS;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,WAA+B;IAE/B,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC;QACtB,KAAK,UAAU;YACb,OAAO,iBAAiB,CAAC;QAC3B,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAgC;IAEhC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;YACxC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;YAChC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;YAC5B,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;YAC5C,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;SACnD,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;YAC9D,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9D,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;SACnD,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,8BAA8B,CACrC,IAA6B;IAE7B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAExD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvD,IAAI,SAAS,KAAK,uBAAuB,EAAE,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,KAAK,0BAA0B,EAAE,CAAC;QAC7C,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,OAAO,CAAC,KAAK;YACrB,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO;YACvC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,KAAK,mCAAmC,EAAE,CAAC;QACtD,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACtD,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK;YAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,KAAK,qBAAqB,EAAE,CAAC;QACxC,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,OAAO,CAAC,KAAK;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB,CAChC,OAAsB;IAEtB,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC;IAC1D,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,GAAG,EAAE,CAAC;QACR,OAAO;YACL,GAAG,GAAG;YACN,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,MAAM,EAAE,OAAO,CAAC,QAAQ;YACxB,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM;YAChD,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS;SAC1D,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAChD,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,OAAO,CAAC,EAAE;QACjB,MAAM,EAAE,OAAO,CAAC,QAAQ;QACxB,KAAK,EACH,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY;QACvE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QACjC,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC1D,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAqC;IACjE,OAAO,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QAC1C,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,uBAAuB;QAC3D,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,UAAkB,EAClB,KAAgC;IAEhC,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;QAC9C,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAoB;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1E,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,KAAK;QAClB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EACJ,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1E,UAAU,EAAE,MAAM,CAAC,UAAU;YAC3B,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;YAC3C,CAAC,CAAC,SAAS;QACb,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QACtC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,SAAS;QAC1C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QACtC,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAU,EAAE,WAAmB;IACvD,MAAM,OAAO,GAAG,MAAM,CACpB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,CACjE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GACV,WAAW,IAAI,CAAC;QACd,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/C,CAAC,CAAC,UAAU,CAAC;IACjB,OAAO,MAAM;SACV,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAsB;IAEtB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,KAAK,GACT,MAAM,KAAK,WAAW;QACpB,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,MAAM,KAAK,QAAQ;YACnB,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,oBAAoB,CAAC;IAC7B,MAAM,IAAI,GACR,MAAM,KAAK,WAAW;QACpB,CAAC,CAAC,yCAAyC;QAC3C,CAAC,CAAC,MAAM,KAAK,QAAQ;YACnB,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,gDAAgD,CAAC;IACzD,OAAO;QACL,KAAK;QACL,IAAI;QACJ,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,MAAM,EAAE,OAAO,CAAC,QAAQ;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM;QACN,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAmC;IAEnC,IACE,OAAO,EAAE,QAAQ,KAAK,SAAS;QAC/B,OAAO,CAAC,gBAAgB,KAAK,SAAS,EACtC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,EAAE,QAAa,EAAE,EAAE;QAC7B,yBAAyB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACpD,MAAM,QAAQ,GACZ,OAAO,EAAE,QAAQ;YACjB,wBAAwB,CACtB,gCAAgC,EAAE,EAClC,OAAO,EAAE,gBAAgB,CAC1B,CAAC;QACJ,MAAM,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;QACtD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;QAC7B,qEAAqE;QACrE,sEAAsE;QACtE,kEAAkE;QAClE,6DAA6D;QAC7D,mEAAmE;QACnE,cAAc;QACd,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;QAE9C,0BAA0B;QAC1B,MAAM,gBAAgB,GAAG,OAAO,EAAE,YAAY,IAAI,yBAAyB,CAAC;QAE5E,yEAAyE;QACzE,8EAA8E;QAC9E,MAAM,YAAY,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAC5C,IAAI,cAAc,GAA4B,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACrD,cAAc,GAAG;gBACf,YAAY,EAAE;oBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,GAAG,EAAE,CAAC,IAA4B,EAAE,OAAgB,EAAE,EAAE,CACtD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAc,EAAE,OAAO,EAAE,KAAK,CAAC;iBAChD;aACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;QACD,MAAM,OAAO,GAAG;YACd,GAAG,wBAAwB,EAAE;YAC7B,GAAG,YAAY;YACf,GAAG,cAAc;SACK,CAAC;QACzB,wEAAwE;QACxE,qEAAqE;QACrE,6DAA6D;QAC7D,sEAAsE;QACtE,qEAAqE;QACrE,iEAAiE;QACjE,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEnD,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,GAAG,sBAAsB,eAAe,CAAC;QAEnD,KAAK,UAAU,mBAAmB,CAChC,KAAU,EACV,QAAyB,EACzB,IAAY,EACZ,IAAmD;YAEnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;YACzB,MAAM,MAAM,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAC,EACD,IAAI,EAAE,WAAW,IAAI,2BAA2B,CACjD,CAAC;YACF,MAAM,cAAc,GAAG,iBAAiB,MAAM,EAAE,CAAC;YACjD,MAAM,OAAO,GAAuC;gBAClD,IAAI,EAAE,eAAe;gBACrB,QAAQ;gBACR,IAAI;gBACJ,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,iBAAiB,CAAC;oBACtB,EAAE,EAAE,MAAM;oBACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,mEAAmE;oBACnE,uEAAuE;oBACvE,8DAA8D;oBAC9D,gBAAgB,EAAE,cAAc;oBAChC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;oBAChC,UAAU,EAAE,eAAe,QAAQ,CAAC,QAAQ,EAAE;oBAC9C,gBAAgB,EAAE,IAAI,EAAE,SAAS;wBAC/B,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;wBACnD,CAAC,CAAC,SAAS;oBACb,aAAa,EAAE,6BAA6B,CAAC;wBAC3C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,gBAAgB,EAAE,cAAc;wBAChC,eAAe,EAAE,QAAQ,CAAC,eAAe;qBAC1C,CAAC;iBACH,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,qBAAqB,CAAC,GAAG,CAAC;oBAAE,OAAO;gBACvC,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,MAAM,8BAA8B,CAAC;gBACnC,MAAM;gBACN,IAAI,EAAE;oBACJ,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,gBAAgB,EAAE,cAAc;oBAChC,eAAe,EAAE,QAAQ,CAAC,eAAe;iBAC1C;gBACD,KAAK;gBACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,UAAU,qBAAqB,CAClC,KAAU;YAEV,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC5D,OAAO;gBACL,UAAU,EAAE,OAAO,CAAC,KAAK;gBACzB,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;aAC9C,CAAC;QACJ,CAAC;QAED,SAAS,mBAAmB,CAC1B,GAAiD,EACjD,IAAwC;YAExC,OAAO;gBACL,SAAS,EAAE,GAAG,CAAC,UAAU;gBACzB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,qCAAqC,CAClD,MAAwD;YAExD,MAAM,UAAU,GACd,OAAO,MAAM,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACvE,OAAO;gBACL,SAAS,EAAE,UAAU;gBACrB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,mBAAmB,EAAE,IAAI;aAC1B,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,qBAAqB,CAClC,OAA4C,EAC5C,EAAoB;YAEpB,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,EAAE,CAAC;YAC1B,OAAO,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,UAAU,mBAAmB,CAAC,KAAU;YAC3C,MAAM,KAAK,GAAG,kBAAkB,CAC9B,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,CACzC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;;;;;;;;;;;;;;;;;;WAmBG;QACH,KAAK,UAAU,aAAa,CAC1B,KAAU;YAEV,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACzD,wDAAwD;YACxD,IAAI,CAAC,GAAG,EAAE,KAAK;gBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACtE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EACH,mEAAmE;aACtE,CAAC;QACJ,CAAC;QAED,iEAAiE;QACjE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,SAAS,EACb,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAwB,EAAE,CAAC;YACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CACjE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAC3B,CAAC;gBACF,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC5D,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;gBAC/C,MAAM,CAAC,UAAU,GAAG,GAAG,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,UAAU,CAAC;gBACjE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;oBACxD,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CACH,CAAC;QAEF,gEAAgE;QAChE,oDAAoD;QACpD,qEAAqE;QACrE,wEAAwE;QACxE,qEAAqE;QACrE,qEAAqE;QACrE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,oBAAoB,EACxB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,OAAO,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,gEAAgE;QAChE,uEAAuE;QACvE,uEAAuE;QACvE,yEAAyE;QACzE,wEAAwE;QACxE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,kBAAkB,EACtB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAQlC,CAAC;YACF,MAAM,KAAK,GACT,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBACjD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBACjC,CAAC,CAAC,eAAe,CAAC;YACtB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,kBAAkB,CAAC;gBACjD,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK;gBACL,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACnC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;gBACnE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAChE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;aACpC,CAAC,CAAC;YACH,OAAO,EAAE,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;QACzD,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,eAAe,EACnB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;gBAC9C,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YACtD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;gBACrC,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,iBAAiB,EACrB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACjE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAExD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;wBAC9C,UAAU,EAAE,GAAG,CAAC,UAAU;wBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,KAAK,EAAE,GAAG;qBACX,CAAC,CAAC;oBACH,OAAO;wBACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;wBAC1C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;qBACvC,CAAC;gBACJ,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;oBAC3C,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;oBACZ,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;iBACjB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;gBACvC,CAAC;gBACD,OAAO;oBACL,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC;oBACpC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC;iBACjC,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACtD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAChC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC;gBAC9C,EAAE;gBACF,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;YACvC,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,oBAAoB,EACxB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACjE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,MAAM,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAC3C,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,mBAAmB,EACvB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChE,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;gBAC9C,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC7B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACnC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;gBACnE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAChE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;aACpC,CAAC,CAAC;YACH,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;aACvD,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,uBAAuB,EAC3B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;YACrC,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,4BAA4B,CAAC;gBACtD,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS;gBAChD,KAAK;gBACL,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACnC,cAAc,EACZ,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC9D,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;aAC9B,CAAC,CAAC;YACH,OAAO;gBACL,YAAY,EAAE,8BAA8B,CAAC,YAAY,CAAC;aAC3D,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,4BAA4B,EAChC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,aAAa,GAAG,MAAM,mCAAmC,CAAC;gBAC9D,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,eAAe,KAAK,MAAM;gBAC3D,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;YACH,OAAO;gBACL,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,8BAA8B,CAAC;aACjE,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,yBAAyB,EAC7B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC7C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChE,MAAM,OAAO,GAAG,MAAM,wCAAwC,CAAC;gBAC7D,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC1D,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;aAC9B,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;YAC7C,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACtB,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,4BAA4B,EAChC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,KAAK,WAAW;gBAC5B,KAAK,CAAC,MAAM,KAAK,QAAQ;gBACzB,KAAK,CAAC,MAAM,KAAK,SAAS;gBACxB,CAAC,CAAC,KAAK,CAAC,MAAM;gBACd,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,aAAa,GAAG,MAAM,mCAAmC,CAAC;gBAC9D,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM;gBACN,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE;aACvC,CAAC,CAAC;YACH,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,cAAc,EAClB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;gBAChD,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;iBAC9D,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACtC,MAAM,GAAG,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,CACL,OAAO,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,EAAE,EAAE,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,KAAK,KAAK,CAClE,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;YACpC,CAAC;YACD,MAAM,GAAG,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;YAE7C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;gBAC9B,MAAM,WAAW,GACf,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;oBACtB,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;oBACnB,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvB,MAAM,MAAM,GAAG,WAAW;oBACxB,CAAC,CAAC,MAAM,mBAAmB,CAAC;wBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,WAAW;wBACX,KAAK,EAAE,IAAI;qBACZ,CAAC;oBACJ,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO;oBACL,GAAG;oBACH,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;iBAC3C,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YACvC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAChC,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,4BAA4B,EAChC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;YACnE,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;gBAChC,CAAC;gBACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxD,OAAO;oBACL,SAAS,EAAE,MAAM,6BAA6B,CAAC;wBAC7C,UAAU,EAAE,GAAG,CAAC,UAAU;wBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;wBACpC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;wBAChC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;wBAC9B,MAAM;wBACN,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,GAAG;qBACzC,CAAC;iBACH,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChE,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9D,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;oBACxD,CAAC,CAAC,IAAI,CAAC,QAAQ;oBACf,CAAC,CAAC,IAAI,CAAC;gBACX,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC/C,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC7B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;gBACvD,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC;oBAC5C,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAChC,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,UAAU;oBACV,QAAQ;oBACR,SAAS,EAAE,GAAG,CAAC,UAAU;oBACzB,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;iBAChC,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;gBAC9D,CAAC;gBACD,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAChC,CAAC;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;YACrD,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,6BAA6B,CAAC;oBACnD,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,QAAQ;oBACR,QAAQ,EAAE,IAAI,CAAC,QAAmC;iBACnD,CAAC,CAAC;gBACH,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,2BAA2B,EAC/B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;YACrD,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;oBAC3C,QAAQ;oBACR,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,QAAQ,EAAE,IAAI,CAAC,QAAmC;oBAClD,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACpC,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,iBAAiB,EACrB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAUlC,CAAC;YACF,MAAM,SAAS,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,oBAAoB,CAAC;oBAC1B,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;oBAC7B,OAAO,EAAE,SAAS;oBAClB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI;wBACrB,QAAQ,EACN,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;wBAC9D,gBAAgB,EACd,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;4BACvC,CAAC,CAAC,IAAI,CAAC,gBAAgB;4BACvB,CAAC,CAAC,QAAQ;qBACf;iBACF,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC/D,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;YAC3C,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;gBAC3C,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACjB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;YACvC,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;YACrC,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC;gBAC5C,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;gBACzB,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;gBAClE,gBAAgB,EACd,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;oBACvC,CAAC,CAAC,IAAI,CAAC,gBAAgB;oBACvB,CAAC,CAAC,IAAI;aACX,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,cAAc,EAClB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,IAAI,GACR,MAAM,KAAK,MAAM;gBACf,CAAC,CAAE,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAGrB;gBACJ,CAAC,CAAC,EAAE,CAAC;YACT,IAAI,aAAa,GAAG,MAAM,CAAC;YAC3B,IACE,MAAM,KAAK,MAAM;gBACjB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAClE,CAAC;gBACD,MAAM,oBAAoB,GAAG,wBAAwB,CACnD,IAAI,CAAC,oBAAoB,CAC1B,CAAC;gBACF,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;oBAC9C,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,QAAQ,EAAE;wBACR,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;wBAC1B,oBAAoB;qBACrB;iBACF,CAAC,CAAC;gBACH,IAAI,OAAO;oBAAE,aAAa,GAAG,OAAO,CAAC;YACvC,CAAC;YACD,MAAM,aAAa,GACjB,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;YAErC,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,gBAAgB,GACpB,kCAAkC,CAAC,aAAa,CAAC,CAAC;gBACpD,MAAM,eAAe,GACnB,gBAAgB,CAAC,MAAM,GAAG,CAAC;oBACzB,CAAC,CAAC,MAAM,wBAAwB,CAAC;wBAC7B,QAAQ,EAAE,aAAa,CAAC,EAAE;wBAC1B,UAAU,EAAE,aAAa,CAAC,UAAU;wBACpC,KAAK,EAAE,aAAa,CAAC,KAAK;wBAC1B,gBAAgB;qBACjB,CAAC;oBACJ,CAAC,CAAC,IAAI,CAAC;gBACX,MAAM,OAAO,GACX,eAAe,IAAI,CAAC,MAAM,sBAAsB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtE,IAAI,OAAO;oBAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACxC,IAAI,SAAS,IAAI,CAAC;oBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC7C,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,gBAAgB,EACpB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAKlC,CAAC;YACF,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,IACE,IAAI,CAAC,MAAM,KAAK,SAAS;gBACzB,IAAI,CAAC,MAAM,KAAK,WAAW;gBAC3B,IAAI,CAAC,MAAM,KAAK,QAAQ,EACxB,CAAC;gBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;YAC7C,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;gBAC9C,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,YAAY,EACV,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;aACnE,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;YACxC,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAClE,MAAM,4BAA4B,CAAC;oBACjC,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,wBAAwB,CAAC,OAAO,CAAC;iBAC3C,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,oBAAoB,EACxB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAIlC,CAAC;YACF,MAAM,WAAW,GACf,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;gBAC7D,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;gBACzB,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBACnD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBACnB,CAAC,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;YACtC,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;iBACvB,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;iBACd,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACpB,MAAM,KAAK,GAAG,KAA2C,CAAC;gBAC1D,MAAM,QAAQ,GACZ,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK;oBACpD,CAAC,CAAC,KAAK,CAAC,KAAK;oBACb,CAAC,CAAC,KAAK,CAAC;gBACZ,OAAO;oBACL,GAAG,EACD,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,KAAK;wBAClD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;wBACnB,CAAC,CAAC,KAAK;oBACX,KAAK,EAAE,QAAQ,IAAI,IAAI;iBACxB,CAAC;YACJ,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACpE,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACzC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;YAC7C,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;gBACzC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,WAAW;gBACX,MAAM;aACP,CAAC,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,CACH,CAAC;QAEF,gEAAgE;QAChE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,oBAAoB,EACxB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAGlC,CAAC;YACF,IAAI,IAAI,EAAE,MAAM,KAAK,qCAAqC,EAAE,CAAC;gBAC3D,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;YAC5C,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC5B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,gDAAgD,EAAE,CAAC;YACrE,CAAC;YACD,MAAM,KAAK,GAAG,kBAAkB,CAC9B,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,CACzC,CAAC;YACF,IACE,CAAC,KAAK;gBACN,CAAC,mBAAmB,CAAC,qCAAqC,EAAE,KAAK,CAAC,EAClE,CAAC;gBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;YACxD,CAAC;YACD,IAAI,CAAC,sCAAsC,EAAE,EAAE,CAAC;gBAC9C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACtC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;gBAC1C,cAAc,EAAE,UAAU,CAAC,KAAK,CAAC;gBACjC,KAAK,EAAE,EAAE;gBACT,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,CACH,CAAC;QAEF,gEAAgE;QAChE,gDAAgD;QAChD,2EAA2E;QAC3E,yEAAyE;QACzE,4CAA4C;QAC5C,qEAAqE;QACrE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,eAAe,EACnB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAGlC,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;YACtC,CAAC;YAED,yCAAyC;YACzC,EAAE;YACF,iEAAiE;YACjE,kEAAkE;YAClE,qEAAqE;YACrE,kEAAkE;YAClE,oCAAoC;YACpC,EAAE;YACF,iEAAiE;YACjE,6DAA6D;YAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO;wBACL,KAAK,EACH,4GAA4G;qBAC/G,CAAC;gBACJ,CAAC;gBACD,+EAA+E;YACjF,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,kBAAkB,CAC5B,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,CACzC,CAAC;gBACF,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC9C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC;YAED,8DAA8D;YAC9D,MAAM,eAAe,GACnB,IAAI,CAAC,gCAAgC,CAAC;gBACtC,sCAAsC;gBACpC,CAAC,CAAC,yBAAyB;gBAC3B,CAAC,CAAC,sBAAsB,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;YAC7D,CAAC;YAED,IAAI,8BAA8B,GAAG,KAAK,CAAC;YAC3C,IAAI,qBAES,CAAC;YACd,IAAI,6BAAiD,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,cAAc,CAAC,MAAM,EAAE,qBAAqB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACnE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;gBACvC,CAAC;gBACD,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAClD;oBACE,SAAS,EAAE,IAAI,CAAC,UAAU;oBAC1B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,mBAAmB,EAAE,IAAI;iBAC1B,EACD,KAAK,IAAI,EAAE;oBACT,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAGnB,CAAC;oBACzB,IAAI,WAAW,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;wBACzC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;4BAC9B,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,CAAC,QAAQ,gCAAgC,CAC1D,CAAC;wBACJ,CAAC;wBACD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACzD,MAAM,iBAAiB,GACrB,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;wBACtD,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAClD,OAAO,CAAC,gBAAiB,CACvB,WAAW,CAAC,QAAQ,EACpB,WAAW,CAAC,IAAI,EAChB;4BACE,GAAG,CAAC,WAAW,CAAC,SAAS;gCACvB,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE;gCACtC,CAAC,CAAC,EAAE,CAAC;4BACP,GAAG,CAAC,WAAW,CAAC,WAAW;gCACzB,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE;gCAC1C,CAAC,CAAC,EAAE,CAAC;yBACR,CACF,CACF,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,IAAI,WAAW,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;wBAC7C,IAAI,OAAO,GACT,WAAW,CAAC,eAAe,CAAC;wBAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;4BACb,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAClC,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,QAAQ,EACpB;gCACE,GAAG,CAAC,WAAW,CAAC,cAAc;oCAC5B,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,EAAE;oCAChD,CAAC,CAAC,EAAE,CAAC;6BACR,CACF,CAAC;wBACJ,CAAC;wBACD,IAAI,OAAO,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;4BACpC,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,QAAQ,4CAA4C,CAC7D,CAAC;wBACJ,CAAC;wBACD,MAAM,gBAAgB,GAAG,WAAW,CAAC,eAAe;4BAClD,CAAC,CAAC,WAAW;4BACb,CAAC,CAAC;gCACE,GAAG,WAAW;gCACd,eAAe,EAAE,OAAO;gCACxB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;6BACtC,CAAC;wBACN,6BAA6B;4BAC3B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;wBACnC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;4BACjC,qBAAqB,GAAG;gCACtB,OAAO,EAAE,6BAA6B;gCACtC,YAAY,EACV,mEAAmE;6BACtE,CAAC;4BACF,MAAM,wBAAwB,CAC5B,IAAI,CAAC,EAAE,EACP,qBAAqB,CAAC,OAAO,CAC9B,CAAC;4BACF,qBAAqB,GAAG,SAAS,CAAC;wBACpC,CAAC;wBACD,MAAM,iCAAiC,CACrC,gBAAgB,EAChB,OAAO,CACR,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAC5C,IAAI,CAAC,UAAU,EACf,IAAI,EACJ,OAAO,EAAE,KAAK,EACd,IAAI,CAAC,KAAK,CACX,CAAC;oBACF,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE;wBAChD,OAAO;wBACP,YAAY,EAAE,gBAAgB,GAAG,SAAS;wBAC1C,OAAO;wBACP,gBAAgB;wBAChB,KAAK;wBACL,MAAM,EAAE,SAAS,EAAE;wBACnB,MAAM,EAAE,OAAO,EAAE,MAAM;wBACvB,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,KAAK,EAAE,OAAO,EAAE,KAAK;qBACtB,CAAC,CAAC;oBACH,IAAI,MAAM,EAAE,MAAM,KAAK,kBAAkB,EAAE,CAAC;wBAC1C,8BAA8B,GAAG,IAAI,CAAC;wBACtC,MAAM,yBAAyB,CAC7B,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,MAAM,CAAC,YAAY,CACpB,CAAC;wBACF,OAAO,gBAAyB,CAAC;oBACnC,CAAC;oBACD,OAAO,WAAoB,CAAC;gBAC9B,CAAC,CACF,CAAC;gBACF,IAAI,gBAAgB,KAAK,gBAAgB,EAAE,CAAC;oBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;gBAC7D,CAAC;gBACD,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAChC,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAChD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,gBAAgB,CACtB,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,8BAA8B,CAAC;wBACnC,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,IAAI,EAAE;4BACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;4BACvC,eAAe,EAAE,QAAQ,CAAC,aAAa;gCACrC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,EAAE;gCACvC,CAAC,CAAC,SAAS;yBACd;wBACD,KAAK;wBACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,0BAA0B,CAAC;oBAC/B,QAAQ,EAAE,UAAU;oBACpB,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACf,OAAO,CAAC,KAAK,CACX,6DAA6D,EAC7D,GAAG,CACJ,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC9B,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,YAAY,GAAG,GAAG,EAAE,OAAO;oBAC/B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;oBACpC,CAAC,CAAC,kBAAkB,CAAC;gBACvB,IAAI,qBAAqB,EAAE,CAAC;oBAC1B,IAAI,CAAC;wBACH,MAAM,yBAAyB,CAC7B,MAAM,EACN,qBAAqB,CAAC,OAAO,EAC7B,GAAG,qBAAqB,CAAC,YAAY,KAAK,YAAY,EAAE,CACzD,CAAC;wBACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;oBAC7D,CAAC;oBAAC,OAAO,eAAe,EAAE,CAAC;wBACzB,MAAM,iBAAiB,GACrB,eAAe,YAAY,KAAK;4BAC9B,CAAC,CAAC,eAAe,CAAC,OAAO;4BACzB,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;wBAC9B,MAAM,0BAA0B,CAC9B,MAAM,EACN,qDAAqD,iBAAiB,EAAE,CACzE,CAAC,KAAK,CAAC,CAAC,sBAAsB,EAAE,EAAE;4BACjC,OAAO,CAAC,KAAK,CACX,uEAAuE,EACvE,sBAAsB,CACvB,CAAC;wBACJ,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,IAAI,6BAA6B,EAAE,CAAC;oBACzC,IAAI,CAAC;wBACH,MAAM,yBAAyB,CAC7B,MAAM,EACN,6BAA6B,EAC7B,mEAAmE,YAAY,EAAE,CAClF,CAAC;wBACF,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;wBAC3D,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;oBAC7D,CAAC;oBAAC,OAAO,eAAe,EAAE,CAAC;wBACzB,OAAO,CAAC,KAAK,CACX,8DAA8D,EAC9D,eAAe,CAChB,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,IAAI,8BAA8B,EAAE,CAAC;oBAC1C,MAAM,0BAA0B,CAC9B,MAAM,EACN,mDAAmD,YAAY,EAAE,CAClE,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,EAAE;wBAC1B,OAAO,CAAC,KAAK,CACX,qEAAqE,EACrE,eAAe,CAChB,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,yBAAyB,EAAE,CAAC;oBACtD,MAAM,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,MAAM,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBAChD,CAAC;gBACD,iEAAiE;gBACjE,iEAAiE;gBACjE,iEAAiE;gBACjE,2DAA2D;gBAC3D,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;gBAC3D,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,mEAAmE;QACnE,4DAA4D;QAC5D,gEAAgE;QAChE,8DAA8D;QAC9D,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,2BAA2B,EAC/B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAgC,CAAC;YACpE,MAAM,cAAc,GAAG,IAAI,EAAE,cAAc,CAAC;YAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;YAC9C,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO;wBACL,KAAK,EACH,4GAA4G;qBAC/G,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,kBAAkB,CAC5B,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,CACzC,CAAC;gBACF,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC;oBACtD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,0BAA0B,CAAC,cAAc,EAAE;oBAC/C,QAAQ,EAAE,UAAU;iBACrB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,sEAAsE;gBACtE,iEAAiE;gBACjE,MAAM,mBAAmB,CACvB,cAAc,EACd,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,gCAAgC,CAChE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CACX,kDAAkD,EAClD,GAAG,CACJ,CAAC;gBACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;YACzD,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QACtC,CAAC,CAAC,CACH,CAAC;QAEF,iEAAiE;QACjE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,qBAAqB,EACzB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,qEAAqE;YACrE,qEAAqE;YACrE,8BAA8B;YAC9B,MAAM,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;YAChD,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;gBACnD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrD,MAAM,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,UAAU,GACd,MAAM,EAAE,SAAS,KAAK,sBAAsB;oBAC1C,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,MAAM,EAAE,SAAS,KAAK,mBAAmB;wBACzC,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,MAAM,EAAE,SAAS,KAAK,qBAAqB;4BAC3C,CAAC,CAAC,QAAQ;4BACV,CAAC,CAAC,IAAI,CAAC;gBACf,IAAI,CAAC,UAAU,IAAI,OAAO,MAAM,EAAE,KAAK,KAAK,QAAQ;oBAAE,OAAO,IAAI,CAAC;gBAClE,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;gBAC3D,MAAM,SAAS,GACb,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;gBACzD,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;gBACjD,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;oBACxD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC;oBAC5C,EAAE,EAAE,MAAM,CAAC,KAAK;oBAChB,MAAM,EAAE,UAAU;oBAClB,WAAW;oBACX,MAAM;oBACN,QAAQ,EACN,OAAO,OAAO,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBACnE,SAAS;oBACT,SAAS;iBACV,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC;gBAC1B,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;oBAC5B,IAAI,OAAO,CAAC,KAAK;wBAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;oBAC3D,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,UAAU,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,WAAW;oBAAE,OAAO,IAAI,CAAC;gBAEtC,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9E,MAAM,QAAQ,GAAG;oBACf,GAAG,OAAO,CAAC,QAAQ;oBACnB,IAAI,EAAE,+DAA+D;oBACrE,iBAAiB,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;oBACxC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,eAAe,EAAE;wBACf,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe;wBACnC,OAAO,EAAE,WAAW,OAAO,CAAC,EAAE,EAAE;qBACjC;iBACF,CAAC;gBACF,MAAM,iBAAiB,CAAC;oBACtB,EAAE,EAAE,MAAM;oBACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;oBAC3C,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;oBACrC,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,gBAAgB,EAAE,WAAW,OAAO,CAAC,EAAE,EAAE;oBACzC,aAAa,EAAE,6BAA6B,CAAC;wBAC3C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;wBAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;qBAC1C,CAAC;iBACH,CAAC,CAAC;gBACH,MAAM,8BAA8B,CAAC;oBACnC,MAAM;oBACN,IAAI,EAAE;wBACJ,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;wBAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;qBAC1C;oBACD,KAAK;oBACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;iBAC3B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CACH,CAAC;QAEF,gEAAgE;QAChE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,gBAAgB,EACpB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YACnC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG;gBACZ,SAAS,EAAE,OAAO,CAAC,KAAK;gBACxB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;gBAC1C,UAAU,EAAE,GAAG,EAAE,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO;aAC3D,CAAC;YACF,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,OAAO;oBACL,aAAa,EAAE,MAAM,4BAA4B,CAC/C,KAAK,EACL,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAChE;iBACF,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAGlC,CAAC;YACF,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;YAC/C,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBACjC,OAAO;oBACL,YAAY,EAAE,MAAM,iCAAiC,CAAC,EAAE,EAAE,KAAK,CAAC;iBACjE,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,YAAY,GAAG,CACnB,MAAM,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC,CACnD,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;gBAC7C,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAChD,YAAY,CAAC,QAAQ,EACrB,YAAY,CAAC,eAAe,CAC7B,CAAC;gBACF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,EAAE,EAAE,KAAK,EAAE;wBAC7D,MAAM,EAAE,SAAS;wBACjB,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,mBAAmB;wBAC9B,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;qBAC5B,CAAC,CAAC;oBACH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;gBACnC,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,EAAE,EAAE,KAAK,EAAE;oBAC7D,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;oBAC7D,SAAS,EAAE,MAAM,CAAC,KAAK;oBACvB,eAAe,EAAE,MAAM,CAAC,SAAS;oBACjC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1D,CAAC,CAAC;gBACH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;YACnC,CAAC;YACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;QACtD,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,SAAS,EACb,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAChE,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,OAAO;oBACL,MAAM,EAAE,MAAM,qBAAqB,CAAC,MAAM,EAAE;wBAC1C,QAAQ,EACN,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;wBACjE,QAAQ,EACN,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;qBAClE,CAAC;iBACH,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAE/B,CAAC;gBACL,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO;oBACL,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAC5D,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,UAAU,EACd,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAChE,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;YAChE,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAE/B,CAAC;gBACL,OAAO;oBACL,MAAM,EAAE,MAAM,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC;iBACvD,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO;oBACL,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB;iBAC7D,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,SAAS,EACb,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,IAAI,GACR,MAAM,KAAK,MAAM;gBACf,CAAC,CAAE,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA6B;gBACtD,CAAC,CAAC,IAAI,CAAC;YACX,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBAC/B,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ;oBACjC,CAAC,CAAC,IAAI,CAAC,OAAO;oBACd,CAAC,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,CAAC,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACtD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAC9B,CAAC;YACF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;YAClD,CAAC;YACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7D,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,IAAI,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO;oBACL,MAAM,EAAE,MAAM,2BAA2B,CACvC;wBACE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;wBAC7B,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;wBAC3C,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;qBACpC,EACD,KAAK,CAAC,EAAE,CACT;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO;oBACL,MAAM,EAAE,MAAM,uBAAuB,CACnC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EACjC,KAAK,CAAC,EAAE,CACT;iBACF,CAAC;YACJ,CAAC;YACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;QAChD,CAAC,CAAC,CACH,CAAC;QAEF,iEAAiE;QACjE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,iBAAiB,EACrB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,gBAAgB,GAAG,uBAAuB,CAC9C,KAAK,EACL,GAAG,CAAC,uBAAuB,CAC5B,CAAC;YACF,MAAM,gBAAgB,GAAG,uBAAuB,CAC9C,KAAK,EACL,GAAG,CAAC,gBAAgB,CACrB,CAAC;YACF,MAAM,uBAAuB,GAAG,uBAAuB,CACrD,KAAK,EACL,GAAG,CAAC,qBAAqB,CAC1B,CAAC;YACF,IACE,CAAC,gBAAgB;gBACjB,CAAC,gBAAgB;gBACjB,CAAC,uBAAuB,EACxB,CAAC;gBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC;YAC3D,CAAC;YACD,iBAAiB,CACf,KAAK,EACL,qBAAqB,EACrB,yDAAyD,CAC1D,CAAC;YACF,OAAO,uBAAuB,CAAC;gBAC7B,gBAAgB;gBAChB,gBAAgB;gBAChB,uBAAuB;aACxB,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,sBAAsB,EAC1B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;YACvD,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC;gBACH,wBAAwB,CAAC;oBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;oBAC1C,OAAO,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI;iBAC3B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO;oBACL,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;iBAClE,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,qBAAqB,CAChC;gBACE,SAAS,EAAE,OAAO,CAAC,KAAK;gBACxB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;aAChD,EACD,KAAK,IAAI,EAAE;gBACT,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAAC,CAAC;gBACxD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,qBAAqB,CAAC,CAAC;gBAChE,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,sBAAsB,CAAC,CAAC;gBAClE,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;oBACjD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO;wBACL,KAAK,EACH,kGAAkG;qBACrG,CAAC;gBACJ,CAAC;gBACD,MAAM,WAAW,GAAG,uBAAuB,CACzC,KAAK,EACL,GAAG,CAAC,uBAAuB,CAC5B,CAAC;gBACF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC;gBAC/D,CAAC;gBACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,gBAAgB,CAAC;oBAC7B,WAAW;oBACX,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;oBAC/C,GAAG,EAAE,oBAAoB;oBACzB,UAAU,EAAE,IAAI;oBAChB,SAAS,EACP,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY;iBACjE,CAAC,CAAC;gBACH,OAAO,YAAY,CACjB,KAAK,EACL,sBAAsB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EACxD,GAAG,CACJ,CAAC;YACJ,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,uBAAuB,EAC3B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACpC,OAAO,cAAc,CAAC,6CAA6C,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,gBAAgB,GAAG,uBAAuB,CAC9C,KAAK,EACL,GAAG,CAAC,uBAAuB,CAC5B,CAAC;YACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,cAAc,CAAC,0CAA0C,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,KAAK,GAAG,gBAAgB,CAC5B,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EACzD,gBAAgB,CACjB,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACzD,IACE,KAAK,CAAC,GAAG,KAAK,oBAAoB;gBAClC,CAAC,OAAO,EAAE,KAAK;gBACf,CAAC,KAAK,CAAC,KAAK;gBACZ,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;gBACzD,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,EAC/D,CAAC;gBACD,OAAO,cAAc,CACnB,yEAAyE,CAC1E,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAChE,IAAI,CAAC,IAAI;gBAAE,OAAO,cAAc,CAAC,qCAAqC,CAAC,CAAC;YACxE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,wBAAwB,CAAC;oBACtC,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;oBAC1C,OAAO,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI;iBAC3B,CAAC,CAAC;gBACH,OAAO,MAAM,qBAAqB,CAChC;oBACE,SAAS,EAAE,MAAM,CAAC,UAAU;oBAC5B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS;iBACjC,EACD,KAAK,IAAI,EAAE;oBACT,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAAC,CAAC;oBACxD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,qBAAqB,CAAC,CAAC;oBAChE,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;wBAC/B,OAAO,cAAc,CAAC,gCAAgC,CAAC,CAAC;oBAC1D,CAAC;oBACD,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC;wBACzC,IAAI;wBACJ,QAAQ;wBACR,YAAY;wBACZ,WAAW,EAAE,KAAK,CAAC,WAAW;qBAC/B,CAAC,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;oBAC7D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;wBACf,OAAO,cAAc,CACnB,yEAAyE,CAC1E,CAAC;oBACJ,CAAC;oBACD,IACE,KAAK,CAAC,IAAI,EAAE,EAAE;wBACd,MAAM,CAAC,MAAM;wBACb,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,EAC/B,CAAC;wBACD,OAAO,cAAc,CACnB,8DAA8D,CAC/D,CAAC;oBACJ,CAAC;oBACD,MAAM,KAAK,GAAG,gCAAgC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC9D,MAAM,YAAY,GAAG,MAAM,6BAA6B,CAAC;wBACvD,GAAG,KAAK;wBACR,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,eAAe,EAAE,MAAM,CAAC,SAAS;wBACjC,aAAa,EAAE,MAAM,CAAC,SAAS;qBAChC,CAAC,CAAC;oBACH,MAAM,qBAAqB,CACzB,OAAO,EACP,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EACrC,SAAS,EACT,MAAM,CAAC,UAAU,CAClB,CAAC;oBACF,OAAO,qBAAqB,CAC1B,KAAK,EACL,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,cAAc,IAAI,OAAO,EAC/D;wBACE,UAAU,EAAE,IAAI;wBAChB,OAAO,EAAE,cAAc;wBACvB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,YAAY;qBAC3C,CACF,CAAC;gBACJ,CAAC,CACF,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;gBACrD,OAAO,cAAc,CAAC,4CAA4C,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,iEAAiE;QACjE,qEAAqE;QACrE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,EAAE,EACN,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,iEAAiE;YACjE,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE7C,uDAAuD;YACvD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACxD,kEAAkE;YAClE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY;gBAAE,OAAO;YACtC,0DAA0D;YAC1D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,OAAO;YAClC,6DAA6D;YAC7D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,cAAc;gBAAE,OAAO;YACxC,6DAA6D;YAC7D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,mBAAmB;gBAAE,OAAO;YAC7C,yEAAyE;YACzE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,0BAA0B;gBAAE,OAAO;YACpD,kEAAkE;YAClE,qEAAqE;YACrE,sEAAsE;YACtE,sEAAsE;YACtE,yDAAyD;YACzD,IACE,KAAK,CAAC,CAAC,CAAC,KAAK,eAAe;gBAC5B,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;gBACrB,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;gBACtB,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EACrB,CAAC;gBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAChC,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,0CAA0C;YAEnE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;YACxC,CAAC;YAED,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,qBAAqB,QAAQ,EAAE,EAAE,CAAC;YACpD,CAAC;YAED,yCAAyC;YACzC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG;oBACrB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM;oBACvB,QAAQ;iBACT,CAAC;YACJ,CAAC;YAED,0DAA0D;YAC1D,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5C,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;gBAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC,mBAAmB,CAAC,GAAG,CAAC,EACxB,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CACjC,CAAC;gBACF,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;gBAC/C,MAAM,CAAC,UAAU,GAAG,GAAG,OAAO,GAAG,CAAC,IAAI,QAAQ,UAAU,CAAC;gBACzD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;oBACxD,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,0DAA0D;YAC1D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9C,kEAAkE;gBAClE,kEAAkE;gBAClE,iEAAiE;gBACjE,iEAAiE;gBACjE,sCAAsC;gBACtC,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;oBACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;4BAC1C,6DAA6D;4BAC7D,qDAAqD;4BACrD,gCAAgC;4BAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BAC9B,OAAO;gCACL,EAAE,EAAE,KAAK;gCACT,KAAK,EACH,8DAA8D;6BACjE,CAAC;wBACJ,CAAC;wBACD,gEAAgE;wBAChE,mDAAmD;wBACnD,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;4BACrC,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;wBAC1D,CAAC,CAAC,CAAC;wBACH,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;oBAClE,IAAI,CAAC;wBACH,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;oBAC9C,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,OAAO,CAAC,IAAI,CACV,qCAAqC,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CACnE,CAAC;wBACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;oBAC9C,CAAC;oBACD,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;wBACrC,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;oBAC1D,CAAC,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,iBAAiB,GACrB,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;gBAEtD,2DAA2D;gBAC3D,8DAA8D;gBAC9D,wCAAwC;gBACxC,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAC9C,iBAAiB,EACjB,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CACxC,CAAC;gBAEF,gEAAgE;gBAChE,kEAAkE;gBAClE,gEAAgE;gBAChE,+DAA+D;gBAC/D,oDAAoD;gBACpD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAClE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAC7B,CAAC;gBACF,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;gBAChD,CAAC;gBACD,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBACzB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,YAAY,CAAC,QAAQ,IAAI,IAAI,CAAC;gBACvC,CAAC;gBAED,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;oBACjC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,eAAe,QAAQ,iBAAiB,EAAE,CAAC;gBAC7D,CAAC;gBAED,IAAI,QAAQ,GAAG,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CACjE,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CACpC,CAAC;gBACF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;oBACpC,IAAI,CAAC;wBACH,QAAQ,GAAG,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAC7D,OAAO,CAAC,uBAAwB,CAAC,QAAS,CAAC,CAC5C,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,+DAA+D;wBAC/D,gEAAgE;wBAChE,+DAA+D;wBAC/D,OAAO,CAAC,IAAI,CACV,oCAAoC,QAAQ,mBAAmB,EAC/D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,IAAI,uBAAuB,GACzB,IAAI,CAAC;gBACP,IACE,QAAQ,CAAC,QAAQ,KAAK,OAAO;oBAC7B,QAAQ,CAAC,gBAAgB,KAAK,IAAI;oBAClC,CAAC,OAAO,EAAE,uBAAuB,EACjC,CAAC;oBACD,IAAI,CAAC;wBACH,uBAAuB,GAAG,MAAM,qBAAqB,CACnD,iBAAiB,EACjB,GAAG,EAAE,CAAC,yCAAyC,CAAC,QAAS,CAAC,CAC3D,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,+DAA+D;wBAC/D,8DAA8D;wBAC9D,iEAAiE;wBACjE,gEAAgE;wBAChE,gEAAgE;wBAChE,MAAM,QAAQ,GACZ,GAAG,YAAY,gCAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC/D,IAAI,QAAQ,EAAE,CAAC;4BACb,OAAO,CAAC,IAAI,CACV,4DAA4D,EAC5D,QAAQ,CAAC,OAAO,CACjB,CAAC;4BACF,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gCAC7B,IAAI,CAAC;oCACH,MAAM,mBAAmB,CACvB,KAAK,EACL,QAAS,EACT,QAAQ,CAAC,iBAAiB,EAC1B;wCACE,SAAS,EAAE,WAAW,QAAS,CAAC,QAAQ,IAAI,SAAS,IAAI,QAAS,CAAC,QAAQ,IAAI,SAAS,IAAI,QAAQ,CAAC,MAAM,EAAE;wCAC7G,WAAW,EAAE,4BAA4B;qCAC1C,CACF,CAAC;gCACJ,CAAC;gCAAC,OAAO,SAAS,EAAE,CAAC;oCACnB,OAAO,CAAC,IAAI,CACV,kDAAkD,EAClD,SAAS,YAAY,KAAK;wCACxB,CAAC,CAAC,SAAS,CAAC,OAAO;wCACnB,CAAC,CAAC,SAAS,CACd,CAAC;oCACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oCAC9B,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;gCAC5C,CAAC;4BACH,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,KAAK,CACX,0DAA0D,EAC1D,GAAG,CACJ,CAAC;wBACJ,CAAC;wBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,IAAI,gBAAgB,GAAgC;oBAClD,UAAU,EAAE,eAAe,QAAQ,EAAE;oBACrC,KAAK,EAAE,IAAqB;oBAC5B,aAAa,EAAE,SAAkB;iBAClC,CAAC;gBACF,IAAI,OAAO,EAAE,uBAAuB,EAAE,CAAC;oBACrC,IAAI,CAAC;wBACH,gBAAgB,GAAG,MAAM,qBAAqB,CAC5C,iBAAiB,EACjB,GAAG,EAAE,CACH,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAwB,CAAC,QAAQ,CAAC,CAAC,CAC9D,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CACX,wDAAwD,EACxD,GAAG,CACJ,CAAC;wBACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;qBAAM,IAAI,uBAAuB,EAAE,CAAC;oBACnC,gBAAgB,GAAG,uBAAuB,CAAC;oBAC3C,IAAI,uBAAuB,CAAC,eAAe,EAAE,CAAC;wBAC5C,IAAI,CAAC,OAAO,EAAE,8BAA8B,EAAE,CAAC;4BAC7C,MAAM,WAAW,GACf,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ;gCACxC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;gCACzB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;gCAC7B,CAAC,CAAC,IAAI,CAAC;4BACX,MAAM,UAAU,GAAG,WAAW;gCAC5B,CAAC,CAAC,gIAAgI,WAAW,mBAAmB;gCAChK,CAAC,CAAC,wKAAwK,CAAC;4BAC7K,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gCAC7B,IAAI,CAAC;oCACH,MAAM,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;wCACrD,SAAS,EAAE,2BAA2B,QAAQ,CAAC,QAAQ,IAAI,SAAS,IAAI,QAAQ,CAAC,QAAQ,IAAI,SAAS,EAAE;qCACzG,CAAC,CAAC;gCACL,CAAC;gCAAC,OAAO,SAAS,EAAE,CAAC;oCACnB,OAAO,CAAC,IAAI,CACV,0DAA0D,EAC1D,SAAS,YAAY,KAAK;wCACxB,CAAC,CAAC,SAAS,CAAC,OAAO;wCACnB,CAAC,CAAC,SAAS,CACd,CAAC;oCACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oCAC9B,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;gCAC5C,CAAC;4BACH,CAAC;4BACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BAC9B,OAAO,IAAI,CAAC;wBACd,CAAC;wBACD,6DAA6D;wBAC7D,8DAA8D;wBAC9D,sDAAsD;wBACtD,QAAQ,CAAC,YAAY;4BACnB,ySAAyS,CAAC;wBAC5S,2DAA2D;wBAC3D,+DAA+D;wBAC/D,6DAA6D;wBAC7D,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;4BAC7B,MAAM,WAAW,GACf,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ;gCACxC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;gCACzB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;gCAC7B,CAAC,CAAC,IAAI,CAAC;4BACX,MAAM,UAAU,GAAG,WAAW;gCAC5B,CAAC,CAAC,iIAAiI,WAAW,2CAA2C;gCACzL,CAAC,CAAC,2LAA2L,CAAC;4BAChM,IAAI,CAAC;gCACH,MAAM,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;oCACrD,SAAS,EAAE,kBAAkB,QAAQ,CAAC,QAAQ,IAAI,SAAS,IAAI,QAAQ,CAAC,QAAQ,IAAI,SAAS,EAAE;iCAChG,CAAC,CAAC;4BACL,CAAC;4BAAC,OAAO,SAAS,EAAE,CAAC;gCACnB,OAAO,CAAC,IAAI,CACV,yDAAyD,EACzD,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAC3D,CAAC;gCACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gCAC9B,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;4BAC5C,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;oBACjC,IAAI,CAAC;wBACH,gBAAgB,CAAC,UAAU,GAAG,MAAM,qBAAqB,CACvD,iBAAiB,EACjB,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAa,CAAC,QAAQ,CAAC,CAAC,CACvD,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CACX,oDAAoD,EACpD,GAAG,CACJ,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC;wBACH,gBAAgB,GAAG,MAAM,qBAAqB,CAC5C,iBAAiB,EACjB,GAAG,EAAE,CAAC,yCAAyC,CAAC,QAAS,CAAC,CAC3D,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CACX,2DAA2D,EAC3D,GAAG,CACJ,CAAC;wBACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;oBAC7B,QAAQ,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,OAAO,CAAC;gBACzD,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE;oBACxC,OAAO;oBACP,gEAAgE;oBAChE,gEAAgE;oBAChE,+DAA+D;oBAC/D,YAAY,EAAE,gBAAgB;oBAC9B,OAAO;oBACP,gBAAgB;oBAChB,KAAK;oBACL,MAAM,EAAE,SAAS,EAAE;oBACnB,MAAM,EAAE,OAAO,EAAE,MAAM;oBACvB,KAAK,EAAE,OAAO,EAAE,KAAK;oBACrB,UAAU,EAAE,gBAAgB,CAAC,UAAU;oBACvC,KAAK,EAAE,gBAAgB,CAAC,KAAK;oBAC7B,aAAa,EAAE,gBAAgB,CAAC,aAAa;oBAC7C,aAAa,EAAE,OAAO,EAAE,aAAa;oBACrC,QAAQ;iBACT,CAAC,CAAC;gBACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxC,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;YAED,0DAA0D;YAC1D,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,UAAU,CAAC,EAAE,KAAK,KAAK;oBAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;gBAChE,8DAA8D;gBAC9D,8DAA8D;gBAC9D,0CAA0C;gBAC1C,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC1D,MAAM,qBAAqB,CACzB,QAAQ,EACR,EAAE,OAAO,EAAE,IAAI,EAAE,EACjB,SAAS,EACT,OAAO,EAAE,KAAK,CACf,CAAC;gBACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/C,CAAC;YAED,0DAA0D;YAC1D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,UAAU,CAAC,EAAE,KAAK,KAAK;oBAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;gBAChE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC1D,MAAM,qBAAqB,CACzB,QAAQ,EACR,EAAE,OAAO,EAAE,KAAK,EAAE,EAClB,SAAS,EACT,OAAO,EAAE,KAAK,CACf,CAAC;gBACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAChD,CAAC;YAED,0DAA0D;YAC1D,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC5C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,UAAU,CAAC,EAAE,KAAK,KAAK;oBAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;gBAChE,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;oBAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;oBAClC,MAAM,UAAU,GAAG,GAAG,OAAO,GAAG,CAAC,mBAAmB,CAAC;oBACrD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;oBAC/C,IAAI,CAAC,GAAG;wBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;oBAC3C,MAAM,KAAK,GAAG,MAAM,qBAAqB,CACvC,mBAAmB,CAAC,GAAG,CAAC,EACxB,GAAG,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAC1C,CAAC;oBACF,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAC/C,mBAAmB,CAAC,GAAG,CAAC,EACxB,GAAG,EAAE,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAC/C,CAAC;oBACF,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;wBAC7B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO;4BACL,KAAK,EACH,yFAAyF;yBAC5F,CAAC;oBACJ,CAAC;oBACD,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,+BAA+B,KAAK,aAAa,EACjD;4BACE,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;4BAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,GAAG,EAAE,UAAU;gCACf,YAAY,EAAE,aAAa;6BAC5B,CAAC;yBACH,CACF,CAAC;wBACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;wBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;oBAC1D,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChC,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;YAC9D,CAAC;YAED,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAChC,CAAC,CAAC,CACH,CAAC;QAEF,iEAAiE;QACjE,wEAAwE;QACxE,mEAAmE;QACnE,qEAAqE;QACrE,8CAA8C;QAC9C,yBAAyB,CAAC;YACxB,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;SAC7C,CAAC,CAAC;QACH,4BAA4B,CAAC,UAAU,CAAC,CAAC;QACzC,2BAA2B,EAAE,CAAC;QAC9B,0BAA0B,EAAE,CAAC;QAE7B,iEAAiE;QACjE,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,sDAAsD;YACtD,UAAU,CAAC,GAAG,EAAE;gBACd,iEAAiE;gBACjE,mEAAmE;gBACnE,oEAAoE;gBACpE,mEAAmE;gBACnE,8CAA8C;gBAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAC7C,MAAM,UAAU,GAAG,OAAO;oBACxB,CAAC,CAAC,GAAG,yBAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB;oBACjE,CAAC,CAAC,SAAS,CAAC;gBAEd,KAAK,qBAAqB,CAAC;oBACzB,YAAY,EAAE,gBAAgB;oBAC9B,OAAO;oBACP,gBAAgB;oBAChB,KAAK,EAAE,KAAK,IAAI,EAAE;oBAClB,MAAM,EAAE,SAAS,EAAE;oBACnB,UAAU,EAAE,yBAAyB;oBACrC,UAAU;iBACX,CAAC,CAAC;YACL,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK;YACnB,OAAO,CAAC,GAAG,CACT,kDAAkD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/F,CAAC;IACN,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,wBAAwB,EAAE,CAAC;AAEpE,wCAAwC;AACxC,SAAS,UAAU,CAAC,KAAU;IAC5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QAChE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CACjC,OAAO,OAAO,CAAC,GAAG,KAAK,UAAU;YAC/B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACnB,CAAC,CAAE,OAAkC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC;QACvD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC;QACnD,OAAO,yBAAyB,CAAC,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI;YAChC,GAAG,CAAC,OAAO;gBACT,CAAC,CAAC;oBACE,aAAa,EAAE,MAAM,CAAC,aAAa,KAAK,IAAI;oBAC5C,aAAa,EAAE,MAAM,CAAC,aAAa,KAAK,IAAI;iBAC7C;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI;YAC7C,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;SAC5C,CAAC;IACJ,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;QACpC,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CACzC,MAAsC;IAEtC,MAAM,YAAY,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,OAAO,GAA6B,EAAE,CAAC;IAC7C,IAAI,YAAY,EAAE,OAAO,EAAE,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,IAAI,YAAY,EAAE,OAAO,EAAE,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,IAAI,YAAY,EAAE,OAAO,EAAE,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,IAAI,YAAY,EAAE,OAAO,EAAE,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,OAAO,KAAK,KAAK,SAAS;QACxB,KAAK,KAAK,UAAU;QACpB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,UAAU;QACpB,KAAK,KAAK,SAAS;QACnB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAU,EAAE,KAAc;IAC/D,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;QAC9C,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,eAAe;YAC5B,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;gBACvB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB;oBAChC,KAAK,CAAC,IAAI,KAAK,iBAAiB;oBAClC,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,GAAG,CAAC;QACd,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,KAAK,CAAC;AACd,CAAC","sourcesContent":["import {\n defineEventHandler,\n setResponseStatus,\n setResponseHeader,\n getMethod,\n getQuery,\n sendRedirect,\n} from \"h3\";\nimport { getRequestHeader } from \"h3\";\nimport { createRemoteJWKSet, jwtVerify } from \"jose\";\n\nimport {\n AGENT_BACKGROUND_PROCESSOR_FIELD,\n AGENT_BACKGROUND_PROCESSOR_INTEGRATION,\n} from \"../agent/durable-background.js\";\nimport { abortRun } from \"../agent/run-manager.js\";\nimport { getOrgContext, resolveOrgIdForEmail } from \"../org/context.js\";\nimport { loadResourcesForPrompt } from \"../server/agent-chat-plugin.js\";\nimport { withConfiguredAppBasePath } from \"../server/app-base-path.js\";\nimport { getSession } from \"../server/auth.js\";\nimport { FRAMEWORK_ROUTE_PREFIX } from \"../server/core-routes-plugin.js\";\nimport { resolveSecret } from \"../server/credential-provider.js\";\nimport {\n getH3App,\n markDefaultPluginProvided,\n} from \"../server/framework-request-handler.js\";\nimport {\n decodeOAuthState,\n encodeOAuthState,\n oauthCallbackResponse,\n oauthErrorPage,\n resolveOAuthRedirectUri,\n} from \"../server/google-oauth.js\";\nimport { readBody } from \"../server/h3-helpers.js\";\nimport { runWithRequestContext } from \"../server/request-context.js\";\nimport {\n processA2AContinuationById,\n processDueA2AContinuations,\n} from \"./a2a-continuation-processor.js\";\nimport { failA2AContinuation } from \"./a2a-continuations-store.js\";\nimport { mergeIntegrationAdapters } from \"./adapter-overrides.js\";\nimport { discordAdapter } from \"./adapters/discord.js\";\nimport { emailAdapter } from \"./adapters/email.js\";\nimport { googleDocsAdapter } from \"./adapters/google-docs.js\";\nimport { microsoftTeamsAdapter } from \"./adapters/microsoft-teams.js\";\nimport { slackAdapter } from \"./adapters/slack.js\";\nimport { telegramAdapter } from \"./adapters/telegram.js\";\nimport { whatsappAdapter } from \"./adapters/whatsapp.js\";\nimport {\n createComputerApprovalRequest,\n decideComputerApproval,\n listComputerApprovalsForOwner,\n} from \"./computer-supervision-store.js\";\nimport { ComputerSupervisionError } from \"./computer-supervision.js\";\nimport { getIntegrationConfig, saveIntegrationConfig } from \"./config-store.js\";\nimport { claimIntegrationControl } from \"./controls-store.js\";\nimport {\n startGoogleDocsPoller,\n handlePushNotification,\n} from \"./google-docs-poller.js\";\nimport {\n IntegrationIdentityDeclinedError,\n resolveDefaultIntegrationExecutionContext,\n} from \"./identity.js\";\nimport {\n disconnectIntegrationInstallation,\n listIntegrationInstallations,\n resolveIntegrationTokenBundle,\n updateIntegrationInstallation,\n upsertIntegrationInstallation,\n} from \"./installations-store.js\";\nimport {\n dispatchPendingIntegrationTask,\n INTEGRATION_RETRY_SWEEP_TOKEN_SUBJECT,\n integrationDispatchScopeValue,\n isIntegrationDurableDispatchConfigured,\n} from \"./integration-durable-dispatch.js\";\nimport {\n forgetIntegrationMemory,\n integrationMemoryActions,\n listIntegrationMemory,\n rememberForIntegrationScope,\n} from \"./integration-memory.js\";\nimport { extractBearerToken, verifyInternalToken } from \"./internal-token.js\";\nimport {\n retryStuckPendingTasks,\n startPendingTasksRetryJob,\n} from \"./pending-tasks-retry-job.js\";\nimport {\n claimPendingTask,\n failTaskDeliveryTransition,\n getNextPendingTaskForThread,\n insertPendingTask,\n isDuplicateEventError,\n MAX_PENDING_TASK_ATTEMPTS,\n markTaskCompleted,\n markTaskDeliveryRetryable,\n markTaskFailed,\n markTaskRetryable,\n stageTaskDeliveryPayload,\n} from \"./pending-tasks-store.js\";\nimport {\n claimNextComputerCommand,\n claimNextRemoteCommand,\n enqueueComputerCommand,\n enqueueRemoteCommand as enqueueRemoteCommandRow,\n isRemoteCommandKind,\n listRemoteCommandsForOwner,\n updateRemoteCommandResult,\n} from \"./remote-commands-store.js\";\nimport {\n authenticateRemoteDeviceToken,\n createRemoteDevice,\n getRemoteComputerCapabilities,\n getRemoteDeviceForOwner,\n listRemoteDevicesForOwner,\n revokeRemoteDeviceForOwner,\n toPublicRemoteDevice,\n unregisterRemoteDevice,\n updateRemoteDeviceDetails,\n} from \"./remote-devices-store.js\";\nimport { startRemotePushDeliveryJob } from \"./remote-push-delivery-job.js\";\nimport {\n listRemotePushNotificationsForOwner,\n listRemotePushRegistrationsForOwner,\n queueRemotePushNotifications,\n toPublicRemotePushRegistration,\n unregisterRemotePushRegistrationForOwner,\n upsertRemotePushRegistration,\n} from \"./remote-push-store.js\";\nimport { startRemoteCommandsRetryJob } from \"./remote-retry-job.js\";\nimport {\n insertRemoteRunEvents,\n listRemoteRunEvents,\n} from \"./remote-run-events-store.js\";\nimport type {\n ComputerCommandEnvelope,\n ComputerOperationClass,\n RemoteCommand,\n RemoteCommandKind,\n RemoteDevice,\n} from \"./remote-types.js\";\nimport { listIntegrationScopes, saveIntegrationScope } from \"./scope-store.js\";\nimport { buildSlackAgentManifest } from \"./slack-manifest.js\";\nimport {\n assertSlackInstallAccess,\n buildSlackAuthorizeUrl,\n exchangeSlackOAuthCode,\n slackOAuthResponseToInstallation,\n testSlackAuth,\n} from \"./slack-oauth.js\";\nimport { getTaskQueueStats } from \"./task-queue-stats.js\";\nimport type {\n PlatformAdapter,\n IntegrationsPluginOptions,\n IntegrationStatus,\n IntegrationExecutionContext,\n IncomingMessage,\n PlatformDeliveryReceipt,\n} from \"./types.js\";\nimport {\n listIntegrationUsageBudgets,\n saveIntegrationUsageBudget,\n} from \"./usage-budget-store.js\";\nimport {\n handleWebhook,\n processIntegrationTask,\n recordIntegrationResponseDelivery,\n type IntegrationResponseDeliveryTaskPayload,\n} from \"./webhook-handler.js\";\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nlet a2aContinuationRetryInterval: ReturnType<typeof setInterval> | null = null;\n\nfunction startA2AContinuationRetryJob(\n adapters: Map<string, PlatformAdapter>,\n): void {\n if (a2aContinuationRetryInterval) return;\n const initialTimer = setTimeout(() => {\n processDueA2AContinuations({ adapters }).catch((err) => {\n console.error(\"[integrations] A2A continuation retry job failed:\", err);\n });\n }, 10_000);\n unrefTimer(initialTimer);\n a2aContinuationRetryInterval = setInterval(() => {\n processDueA2AContinuations({ adapters }).catch((err) => {\n console.error(\"[integrations] A2A continuation retry job failed:\", err);\n });\n }, 60_000);\n unrefTimer(a2aContinuationRetryInterval);\n}\n\nfunction unrefTimer(timer: ReturnType<typeof setInterval>): void {\n (timer as unknown as { unref?: () => void }).unref?.();\n}\n\n// ─── Google Pub/Sub OIDC verifier (for Drive changes.watch push) ────────────\n// Cache Google's public keys for OIDC verification. jose handles TTL +\n// refresh internally — same pattern as templates/mail/.../gmail/push.post.ts.\n// Used to verify Google Pub/Sub push notifications carry a valid bearer token\n// signed by a configured service account. Without this, the webhook is wide\n// open to anonymous callers who can force a Drive sync (H7 in the audit).\nconst GOOGLE_JWKS = createRemoteJWKSet(\n new URL(\"https://www.googleapis.com/oauth2/v3/certs\"),\n);\nconst GOOGLE_ISSUERS = [\"https://accounts.google.com\", \"accounts.google.com\"];\n\n/**\n * Verify a Pub/Sub OIDC bearer token. Throws on any verification failure.\n * Requires GOOGLE_DOCS_PUSH_AUDIENCE and GOOGLE_DOCS_PUSH_SIGNER_EMAIL to be\n * set; if either is missing in production, the webhook handler refuses the\n * request entirely (so a misconfigured deployment fails closed, surfacing in\n * Pub/Sub's delivery metrics).\n */\nasync function verifyGoogleDocsPushToken(authHeader: string): Promise<void> {\n if (!authHeader.startsWith(\"Bearer \")) {\n throw new Error(\"missing bearer token\");\n }\n const token = authHeader.slice(7);\n const audience = process.env.GOOGLE_DOCS_PUSH_AUDIENCE;\n if (!audience) {\n throw new Error(\"GOOGLE_DOCS_PUSH_AUDIENCE not configured\");\n }\n const { payload } = await jwtVerify(token, GOOGLE_JWKS, {\n issuer: GOOGLE_ISSUERS,\n audience,\n });\n if (payload.email_verified !== true) {\n throw new Error(\"email_verified claim is not true\");\n }\n // Pin to a specific service account — without this, any Google-issued\n // token with the right audience could trigger a Drive sync.\n const expectedSigner = process.env.GOOGLE_DOCS_PUSH_SIGNER_EMAIL;\n if (!expectedSigner) {\n throw new Error(\"GOOGLE_DOCS_PUSH_SIGNER_EMAIL not configured\");\n }\n if (payload.email !== expectedSigner) {\n throw new Error(`unexpected signer: ${String(payload.email)}`);\n }\n}\n\nexport const BUILT_IN_INTEGRATION_ADAPTER_FACTORIES = Object.freeze([\n { platform: \"slack\", create: slackAdapter },\n { platform: \"telegram\", create: telegramAdapter },\n { platform: \"whatsapp\", create: whatsappAdapter },\n { platform: \"microsoft-teams\", create: microsoftTeamsAdapter },\n { platform: \"discord\", create: discordAdapter },\n { platform: \"google-docs\", create: googleDocsAdapter },\n { platform: \"email\", create: emailAdapter },\n] as const satisfies ReadonlyArray<{\n platform: string;\n create: () => PlatformAdapter;\n}>);\n\nexport const BUILT_IN_INTEGRATION_ADAPTER_IDS = Object.freeze(\n BUILT_IN_INTEGRATION_ADAPTER_FACTORIES.map(({ platform }) => platform),\n);\n\nexport function createBuiltInIntegrationAdapters(): PlatformAdapter[] {\n return BUILT_IN_INTEGRATION_ADAPTER_FACTORIES.map(({ create }) => create());\n}\n\nconst INTEGRATION_SYSTEM_PROMPT = `You are an AI agent responding via a messaging platform integration (Slack, Microsoft Teams, Discord interactions, Telegram, WhatsApp, etc.).\n\nYou have the same capabilities as the web chat agent. Use your tools to help the user.\n\nKeep responses concise — messaging platforms have character limits and users expect shorter replies than in a web interface. Use markdown sparingly (bold and lists are fine, but avoid complex formatting that may not render well on all platforms).\n\nIf a task requires many steps, summarize what you did rather than streaming every detail.`;\n\ntype RemoteCodeCommandEnvelope = {\n kind?: unknown;\n ownerEmail?: unknown;\n orgId?: unknown;\n command?: unknown;\n source?: unknown;\n};\n\ntype IntegrationCredentialContext = {\n userEmail: string;\n orgId?: string;\n isIntegrationCaller?: boolean;\n};\n\nconst REMOTE_DEVICE_ONLINE_MS = 90_000;\n\n// One decline reply per sender + decline reason per window: during a Slack\n// API outage every message would otherwise get another identical \"try again\"\n// reply. Short enough that a persistent condition still reminds the sender.\nconst DECLINE_NOTICE_DEDUPE_TTL_MS = 5 * 60 * 1_000;\nconst SYSTEM_NOTICE_DEDUPE_TTL_MS = 24 * 60 * 60 * 1_000;\n\ntype IntegrationSystemNoticeTaskPayload = {\n kind: \"system-notice\";\n incoming: IncomingMessage;\n text: string;\n dedupeKey?: string;\n dedupeTtlMs?: number;\n};\n\nfunction systemNoticeEventKey(\n dedupeKey: string,\n ttlMs: number,\n now = Date.now(),\n): string {\n return `system-notice:${dedupeKey}:${Math.floor(now / ttlMs)}`;\n}\n\nexport async function enqueueRemoteCommand(\n envelope: RemoteCodeCommandEnvelope,\n): Promise<Record<string, unknown>> {\n const ownerEmail = readString(envelope.ownerEmail);\n if (!ownerEmail) throw new Error(\"ownerEmail is required\");\n const hasOrgId = Object.prototype.hasOwnProperty.call(envelope, \"orgId\");\n const orgId = hasOrgId ? (readString(envelope.orgId) ?? null) : undefined;\n const command = readObject(envelope.command);\n if (!command) throw new Error(\"command is required\");\n const commandType = readString(command.type);\n const commands = await listRemoteCommandsForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n limit: 50,\n });\n\n if (commandType === \"list\") {\n return {\n ok: true,\n runs: commands.map(remoteCommandToRunSummary).filter(Boolean),\n hostOnline: await hasOnlineRemoteDevice(ownerEmail, orgId),\n };\n }\n\n if (commandType === \"status\") {\n const runRef = readString(command.runRef);\n const run = runRef\n ? commands.map(remoteCommandToRunSummary).find((item) => {\n const candidate = item as Record<string, unknown>;\n return candidate.id === runRef || candidate.runId === runRef;\n })\n : undefined;\n const hostOnline = await hasOnlineRemoteDevice(ownerEmail, orgId);\n return {\n ok: true,\n hostOnline,\n hostStatus: hostOnline ? \"online\" : \"offline\",\n ...(run ? { run } : {}),\n };\n }\n\n const devices = await listRemoteDevicesForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n status: \"active\",\n limit: 10,\n });\n const requestedDeviceId =\n readString(command.hostId) ?? readString(command.deviceId);\n const device =\n (requestedDeviceId\n ? devices.find((candidate) => candidate.id === requestedDeviceId)\n : undefined) ?? devices[0];\n if (!device) {\n return {\n ok: false,\n hostOnline: false,\n hostStatus: \"offline\",\n error: \"No paired computer is available for code-agent commands.\",\n };\n }\n\n const source = readObject(envelope.source);\n const kind = remoteCodeCommandKind(commandType);\n if (!kind) throw new Error(`Unsupported code-agent command: ${commandType}`);\n const row = await enqueueRemoteCommandRow({\n deviceId: device.id,\n ownerEmail,\n orgId: device.orgId ?? orgId ?? null,\n kind,\n params: remoteCodeCommandParams(command),\n platform: readString(source?.platform) ?? null,\n externalThreadId: readString(source?.externalThreadId) ?? null,\n });\n const hostOnline = isRemoteDeviceOnline(device);\n return {\n ok: true,\n commandId: row.id,\n requestId: row.id,\n hostOnline,\n hostStatus: hostOnline ? \"online\" : \"offline\",\n message:\n commandType === \"create\"\n ? hostOnline\n ? `Queued code run (${row.id}).`\n : `Queued code run (${row.id}). Your computer looks offline or asleep, so it will pick this up when it wakes.`\n : undefined,\n };\n}\n\nfunction remoteCodeCommandKind(\n commandType: string | undefined,\n): RemoteCommandKind | null {\n switch (commandType) {\n case \"create\":\n return \"create-run\";\n case \"continue\":\n return \"append-followup\";\n case \"approve\":\n return \"approve\";\n case \"deny\":\n return \"deny\";\n case \"stop\":\n return \"stop\";\n default:\n return null;\n }\n}\n\nfunction remoteCodeCommandParams(\n command: Record<string, unknown>,\n): Record<string, unknown> {\n const type = readString(command.type);\n if (type === \"create\") {\n return {\n prompt: readString(command.prompt) ?? \"\",\n title: readString(command.title),\n cwd: readString(command.cwd),\n goalId: readString(command.goalId) ?? \"task\",\n permissionMode: readString(command.permissionMode),\n };\n }\n if (type === \"continue\") {\n return {\n runId: readString(command.runRef) ?? readString(command.runId),\n prompt: readString(command.text) ?? readString(command.prompt),\n permissionMode: readString(command.permissionMode),\n };\n }\n if (type === \"approve\" || type === \"deny\") {\n const id = readString(command.approvalId) ?? readString(command.runId);\n return { runId: id, approvalId: id };\n }\n if (type === \"stop\") {\n return { runId: readString(command.runRef) ?? readString(command.runId) };\n }\n return {};\n}\n\nfunction enqueueBodyToRemoteCodeCommand(\n body: Record<string, unknown>,\n): Record<string, unknown> | null {\n const direct = readObject(body.command);\n if (body.kind === \"code-agent\" && direct) return direct;\n\n const operation = readString(body.operation) ?? readString(body.type);\n const payload = readObject(body.payload) ?? body;\n if (!operation?.startsWith(\"code-agent.\")) return null;\n\n if (operation === \"code-agent.run.create\") {\n return {\n type: \"create\",\n prompt: payload.prompt,\n title: payload.title,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n cwd: payload.cwd,\n goalId: payload.goalId,\n permissionMode: payload.permissionMode,\n };\n }\n if (operation === \"code-agent.run.follow-up\") {\n return {\n type: \"continue\",\n runRef: payload.runId,\n text: payload.prompt ?? payload.message,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n permissionMode: payload.permissionMode,\n };\n }\n if (operation === \"code-agent.pending-command.decide\") {\n return {\n type: payload.decision === \"deny\" ? \"deny\" : \"approve\",\n approvalId: payload.commandId ?? payload.runId,\n runId: payload.runId,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n };\n }\n if (operation === \"code-agent.run.stop\") {\n return {\n type: \"stop\",\n runRef: payload.runId,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n };\n }\n return null;\n}\n\nfunction remoteCommandToRunSummary(\n command: RemoteCommand,\n): Record<string, unknown> | null {\n const result = readObject(command.result);\n const nestedResult = readObject(result?.result) ?? result;\n const run = readObject(nestedResult?.run);\n if (run) {\n return {\n ...run,\n commandId: command.id,\n hostId: command.deviceId,\n status: readString(run.status) ?? command.status,\n updatedAt: readString(run.updatedAt) ?? command.updatedAt,\n };\n }\n if (command.kind !== \"create-run\") return null;\n const params = readObject(command.params) ?? {};\n return {\n id: command.id,\n runId: command.id,\n hostId: command.deviceId,\n title:\n readString(params.title) ?? readString(params.prompt) ?? \"Queued run\",\n prompt: readString(params.prompt),\n status: command.status === \"failed\" ? \"errored\" : \"queued\",\n createdAt: command.createdAt,\n updatedAt: command.updatedAt,\n metadata: { remoteCommandId: command.id },\n };\n}\n\nfunction readObject(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction isRemoteDeviceOnline(device: { lastSeenAt: number | null }): boolean {\n return typeof device.lastSeenAt === \"number\"\n ? Date.now() - device.lastSeenAt <= REMOTE_DEVICE_ONLINE_MS\n : false;\n}\n\nasync function hasOnlineRemoteDevice(\n ownerEmail: string,\n orgId: string | null | undefined,\n): Promise<boolean> {\n const hasOrgId = orgId !== undefined;\n const devices = await listRemoteDevicesForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n status: \"active\",\n limit: 10,\n });\n return devices.some(isRemoteDeviceOnline);\n}\n\nfunction remoteDeviceToHost(device: RemoteDevice): Record<string, unknown> {\n const online = device.status === \"active\" && isRemoteDeviceOnline(device);\n return {\n id: device.id,\n name: device.label,\n label: device.label,\n status:\n device.status === \"active\" ? (online ? \"online\" : \"offline\") : \"revoked\",\n lastSeenAt: device.lastSeenAt\n ? new Date(device.lastSeenAt).toISOString()\n : undefined,\n platform: device.platform ?? \"desktop\",\n appVersion: device.appVersion ?? undefined,\n hostName: device.hostName ?? undefined,\n metadata: device.metadata ?? undefined,\n device: toPublicRemoteDevice(device),\n };\n}\n\nfunction mountedPathParts(event: any, mountSuffix: string): string[] {\n const rawPath = String(\n event.path ?? event.url?.pathname ?? event.node?.req?.url ?? \"/\",\n ).split(\"?\")[0];\n const normalized = rawPath.replace(/^\\/+/, \"\");\n const marker = mountSuffix.replace(/^\\/+/, \"\");\n const markerIndex = normalized.indexOf(marker);\n const suffix =\n markerIndex >= 0\n ? normalized.slice(markerIndex + marker.length)\n : normalized;\n return suffix\n .split(\"/\")\n .filter(Boolean)\n .map((part) => decodeURIComponent(part));\n}\n\nfunction remoteCommandPushPayload(\n command: RemoteCommand,\n): Record<string, unknown> {\n const status = command.status;\n const title =\n status === \"completed\"\n ? \"Remote run completed\"\n : status === \"failed\"\n ? \"Remote run failed\"\n : \"Remote run updated\";\n const body =\n status === \"completed\"\n ? \"Open Agent Native to review the result.\"\n : status === \"failed\"\n ? \"Open Agent Native to review the failure.\"\n : \"Open Agent Native to review the latest status.\";\n return {\n title,\n body,\n commandId: command.id,\n hostId: command.deviceId,\n kind: command.kind,\n status,\n updatedAt: command.updatedAt,\n };\n}\n\n/**\n * Creates a Nitro plugin that mounts messaging platform integration webhook routes.\n *\n * Routes:\n * POST /_agent-native/integrations/:platform/webhook — receive platform webhooks\n * GET /_agent-native/integrations/status — all integrations status\n * GET /_agent-native/integrations/:platform/status — single platform status\n * POST /_agent-native/integrations/:platform/enable — enable integration\n * POST /_agent-native/integrations/:platform/disable — disable integration\n * POST /_agent-native/integrations/:platform/setup — platform-specific setup\n */\nexport function createIntegrationsPlugin(\n options?: IntegrationsPluginOptions,\n): NitroPluginDef {\n if (\n options?.adapters !== undefined &&\n options.adapterOverrides !== undefined\n ) {\n throw new Error(\n \"Choose either adapters for full replacement or adapterOverrides for per-platform customization.\",\n );\n }\n return async (nitroApp: any) => {\n markDefaultPluginProvided(nitroApp, \"integrations\");\n const adapters =\n options?.adapters ??\n mergeIntegrationAdapters(\n createBuiltInIntegrationAdapters(),\n options?.adapterOverrides,\n );\n const adapterMap = new Map<string, PlatformAdapter>();\n for (const adapter of adapters) {\n adapterMap.set(adapter.platform, adapter);\n }\n\n const model = options?.model;\n // Read the API key at REQUEST time, not plugin-init time. On Netlify\n // Lambda the plugin module loads in a context where env vars from the\n // site's runtime config may not yet be populated, so capturing at\n // init can leave us with an empty string forever. The getter\n // re-resolves on every webhook so freshly-set secrets work without\n // a redeploy.\n const getApiKey = () => options?.apiKey ?? \"\";\n\n // Build the system prompt\n const baseSystemPrompt = options?.systemPrompt ?? INTEGRATION_SYSTEM_PROMPT;\n\n // Resolve actions — auto-include call-agent so the integration agent can\n // delegate to other A2A apps, matching the behavior of the agent-chat plugin.\n const localActions = options?.actions ?? {};\n let callAgentEntry: Record<string, unknown> = {};\n try {\n const mod = await import(\"../scripts/call-agent.js\");\n callAgentEntry = {\n \"call-agent\": {\n tool: mod.tool,\n run: (args: Record<string, string>, context: unknown) =>\n mod.run(args, context as any, options?.appId),\n },\n };\n } catch {\n // call-agent script not available — skip\n }\n const actions = {\n ...integrationMemoryActions(),\n ...localActions,\n ...callAgentEntry,\n } as typeof localActions;\n // Keep the app's own actions visible on the first request to the model;\n // defer the framework additions merged in above (integration memory,\n // call-agent) behind the tool-search entry `handleWebhook` /\n // `startGoogleDocsPoller` attach to `actions`. The run loop's mid-run\n // tool expansion still lets the model discover and call them after a\n // search — see `filterInitialEngineTools` / `expandActiveTools`.\n const initialToolNames = Object.keys(localActions);\n\n const h3 = getH3App(nitroApp);\n const P = `${FRAMEWORK_ROUTE_PREFIX}/integrations`;\n\n async function enqueueSystemNotice(\n event: any,\n incoming: IncomingMessage,\n text: string,\n opts?: { dedupeKey?: string; dedupeTtlMs?: number },\n ): Promise<void> {\n if (!text.trim()) return;\n const taskId = `notice-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n const dedupeTtlMs = Math.max(\n 1,\n opts?.dedupeTtlMs ?? SYSTEM_NOTICE_DEDUPE_TTL_MS,\n );\n const noticeThreadId = `system-notice:${taskId}`;\n const payload: IntegrationSystemNoticeTaskPayload = {\n kind: \"system-notice\",\n incoming,\n text,\n ...(opts?.dedupeKey ? { dedupeKey: opts.dedupeKey } : {}),\n ...(opts?.dedupeTtlMs ? { dedupeTtlMs: opts.dedupeTtlMs } : {}),\n };\n try {\n await insertPendingTask({\n id: taskId,\n platform: incoming.platform,\n // System notices are auxiliary delivery work, not the user's agent\n // run. Give each notice its own queue lane so a retrying notice cannot\n // block the real message task for this Slack/Telegram thread.\n externalThreadId: noticeThreadId,\n payload: JSON.stringify(payload),\n ownerEmail: `integration@${incoming.platform}`,\n externalEventKey: opts?.dedupeKey\n ? systemNoticeEventKey(opts.dedupeKey, dedupeTtlMs)\n : undefined,\n dispatchScope: integrationDispatchScopeValue({\n platform: incoming.platform,\n externalThreadId: noticeThreadId,\n platformContext: incoming.platformContext,\n }),\n });\n } catch (err) {\n if (isDuplicateEventError(err)) return;\n throw err;\n }\n\n await dispatchPendingIntegrationTask({\n taskId,\n task: {\n platform: incoming.platform,\n externalThreadId: noticeThreadId,\n platformContext: incoming.platformContext,\n },\n event,\n baseUrl: getBaseUrl(event),\n });\n }\n\n async function requireSessionContext(\n event: any,\n ): Promise<{ ownerEmail: string; orgId: string | null } | null> {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return null;\n }\n const orgCtx = await getOrgContext(event).catch(() => null);\n return {\n ownerEmail: session.email,\n orgId: orgCtx?.orgId ?? session.orgId ?? null,\n };\n }\n\n function toCredentialContext(\n ctx: { ownerEmail: string; orgId: string | null },\n opts?: { isIntegrationCaller?: boolean },\n ): IntegrationCredentialContext {\n return {\n userEmail: ctx.ownerEmail,\n ...(ctx.orgId ? { orgId: ctx.orgId } : {}),\n ...(opts?.isIntegrationCaller ? { isIntegrationCaller: true } : {}),\n };\n }\n\n async function credentialContextForIntegrationConfig(\n config: Awaited<ReturnType<typeof getIntegrationConfig>>,\n ): Promise<IntegrationCredentialContext | null> {\n const ownerEmail =\n typeof config?.owner === \"string\" ? config.owner.trim() : \"\";\n if (!ownerEmail) return null;\n const orgId = await resolveOrgIdForEmail(ownerEmail).catch(() => null);\n return {\n userEmail: ownerEmail,\n ...(orgId ? { orgId } : {}),\n isIntegrationCaller: true,\n };\n }\n\n async function withCredentialContext<T>(\n context: IntegrationCredentialContext | null,\n fn: () => Promise<T>,\n ): Promise<T> {\n if (!context) return fn();\n return runWithRequestContext(context, fn);\n }\n\n async function requireRemoteDevice(event: any) {\n const token = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n const device = await authenticateRemoteDeviceToken(token);\n if (device) return device;\n setResponseStatus(event, 401);\n return null;\n }\n\n /**\n * Gate destructive integration writes (enable/disable, setup,\n * setIntegrationConfig…) behind an org-owner/admin check.\n *\n * `integration_configs` is keyed `(platform, config_key)` with no\n * owner column in the PRIMARY KEY — so this row is effectively\n * deployment-wide. Any signed-in user toggling /enable or /disable\n * would otherwise affect every other user (a regular org member could\n * disable Slack/email org-wide, write a malicious allowlist for\n * inbound email, etc.). This check enforces that only owners and\n * admins of the user's active org may mutate integration config.\n *\n * Solo / no-org sessions (i.e. ctx.orgId == null) are allowed — that's\n * the local-dev / single-user case where there's no privilege gradient\n * to enforce. The deployment is single-tenant by definition there.\n *\n * Returns an `{ ok: true }` on pass, or `{ ok: false, error }` with the\n * status already set on the event. The error string lines up with the\n * status code (401 → \"unauthorized\"; 403 → admin-required message).\n */\n async function checkOrgAdmin(\n event: any,\n ): Promise<{ ok: true } | { ok: false; error: string }> {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { ok: false, error: \"unauthorized\" };\n }\n const ctx = await getOrgContext(event).catch(() => null);\n // Solo (no org membership) — single-tenant flow, allow.\n if (!ctx?.orgId) return { ok: true };\n if (ctx.role === \"owner\" || ctx.role === \"admin\") return { ok: true };\n setResponseStatus(event, 403);\n return {\n ok: false,\n error:\n \"Only organization owners and admins can mutate integration config\",\n };\n }\n\n // ─── Status endpoint (all integrations) ───────────────────────\n h3.use(\n `${P}/status`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const baseUrl = getBaseUrl(event);\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const credentialContext = toCredentialContext(ctx);\n const statuses: IntegrationStatus[] = [];\n for (const adapter of adapters) {\n const status = await withCredentialContext(credentialContext, () =>\n adapter.getStatus(baseUrl),\n );\n const config = await getIntegrationConfig(adapter.platform);\n status.enabled = !!config?.configData?.enabled;\n status.webhookUrl = `${baseUrl}${P}/${adapter.platform}/webhook`;\n if (!status.requiredEnvKeys) {\n try {\n status.requiredEnvKeys = adapter.getRequiredEnvKeys();\n } catch {\n status.requiredEnvKeys = [];\n }\n }\n statuses.push(status);\n }\n return statuses;\n }),\n );\n\n // ─── Task queue status (observability) ───────────────────────\n // GET /_agent-native/integrations/task-queue/status\n // Returns counts + recent failures for the integration_pending_tasks\n // queue. Requires a normal session — this exposes operational data, not\n // platform secrets. If the queue table doesn't exist yet (no inbound\n // webhook has been processed), returns zeroed stats rather than 500.\n h3.use(\n `${P}/task-queue/status`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const scope = await requireSessionContext(event);\n if (!scope) return { error: \"unauthorized\" };\n try {\n return await getTaskQueueStats(scope);\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err?.message ?? String(err) };\n }\n }),\n );\n\n // ─── Remote relay endpoints ──────────────────────────────────\n // These routes allow a signed-in browser session to enqueue work for a\n // registered remote device, and the device to claim/complete that work\n // using its one-time-issued bearer token. State lives entirely in SQL so\n // long polling can safely degrade to short polling on serverless hosts.\n h3.use(\n `${P}/remote/register`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n label?: unknown;\n platform?: unknown;\n appVersion?: unknown;\n version?: unknown;\n hostName?: unknown;\n hostname?: unknown;\n metadata?: unknown;\n };\n const label =\n typeof body.label === \"string\" && body.label.trim()\n ? body.label.trim().slice(0, 200)\n : \"Remote device\";\n const { device, token } = await createRemoteDevice({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n label,\n platform: readString(body.platform),\n appVersion: readString(body.appVersion) ?? readString(body.version),\n hostName: readString(body.hostName) ?? readString(body.hostname),\n metadata: readObject(body.metadata),\n });\n return { device: toPublicRemoteDevice(device), token };\n }),\n );\n\n h3.use(\n `${P}/remote/hosts`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const devices = await listRemoteDevicesForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 50,\n });\n const hosts = devices.map(remoteDeviceToHost);\n const parts = mountedPathParts(event, \"remote/hosts\");\n if (parts[0]) {\n const host = hosts.find((candidate) => candidate.id === parts[0]);\n if (!host) {\n setResponseStatus(event, 404);\n return { error: \"host not found\" };\n }\n return { host, device: host.device };\n }\n return { hosts, devices: hosts };\n }),\n );\n\n h3.use(\n `${P}/remote/devices`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"DELETE\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const parts = mountedPathParts(event, \"remote/devices\");\n\n if (method === \"GET\") {\n if (!parts[0]) {\n const devices = await listRemoteDevicesForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 100,\n });\n return {\n devices: devices.map(toPublicRemoteDevice),\n hosts: devices.map(remoteDeviceToHost),\n };\n }\n const device = await getRemoteDeviceForOwner({\n id: parts[0],\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n return {\n device: toPublicRemoteDevice(device),\n host: remoteDeviceToHost(device),\n };\n }\n\n const id = parts[0];\n const action = parts[1];\n if (!id || (method === \"POST\" && action !== \"revoke\")) {\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }\n const device = await revokeRemoteDeviceForOwner({\n id,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n return { ok: true, device: toPublicRemoteDevice(device) };\n }),\n );\n\n h3.use(\n `${P}/remote/unregister`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\" && getMethod(event) !== \"DELETE\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n await unregisterRemoteDevice(device.id);\n return { ok: true, deviceId: device.id };\n }),\n );\n\n h3.use(\n `${P}/remote/heartbeat`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const updated = await updateRemoteDeviceDetails({\n id: device.id,\n label: readString(body.label),\n platform: readString(body.platform),\n appVersion: readString(body.appVersion) ?? readString(body.version),\n hostName: readString(body.hostName) ?? readString(body.hostname),\n metadata: readObject(body.metadata),\n });\n return {\n ok: true,\n device: updated ? toPublicRemoteDevice(updated) : null,\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/register`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const token = readString(body.token);\n if (!token) {\n setResponseStatus(event, 400);\n return { error: \"token required\" };\n }\n const registration = await upsertRemotePushRegistration({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n provider: readString(body.provider) ?? \"unknown\",\n token,\n platform: readString(body.platform),\n clientDeviceId:\n readString(body.clientDeviceId) ?? readString(body.deviceId),\n label: readString(body.label),\n });\n return {\n registration: toPublicRemotePushRegistration(registration),\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/registrations`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const registrations = await listRemotePushRegistrationsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n includeInactive: getQuery(event).includeInactive === \"true\",\n limit: 100,\n });\n return {\n registrations: registrations.map(toPublicRemotePushRegistration),\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/unregister`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"POST\" && method !== \"DELETE\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const removed = await unregisterRemotePushRegistrationForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n id: readString(body.id) ?? readString(body.registrationId),\n token: readString(body.token),\n });\n if (!removed) {\n setResponseStatus(event, 404);\n return { error: \"registration not found\" };\n }\n return { ok: true };\n }),\n );\n\n h3.use(\n `${P}/remote/push/notifications`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const query = getQuery(event);\n const status =\n query.status === \"delivered\" ||\n query.status === \"failed\" ||\n query.status === \"pending\"\n ? query.status\n : undefined;\n const notifications = await listRemotePushNotificationsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n status,\n limit: Number(query.limit ?? 50) || 50,\n });\n return { notifications };\n }),\n );\n\n h3.use(\n `${P}/remote/runs`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const parts = mountedPathParts(event, \"remote/runs\");\n const commands = await listRemoteCommandsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 100,\n });\n\n if (parts.length === 0) {\n return {\n runs: commands.map(remoteCommandToRunSummary).filter(Boolean),\n };\n }\n\n const runId = decodeURIComponent(parts[0] ?? \"\");\n const match = commands.find((command) => {\n const run = remoteCommandToRunSummary(command);\n return (\n command.id === runId || run?.id === runId || run?.runId === runId\n );\n });\n if (!match) {\n setResponseStatus(event, 404);\n return { error: \"run not found\" };\n }\n const run = remoteCommandToRunSummary(match);\n\n if (parts[1] === \"transcript\") {\n const remoteRunId =\n readString(run?.runId) ??\n readString(run?.id) ??\n readString(match.id);\n const events = remoteRunId\n ? await listRemoteRunEvents({\n deviceId: match.deviceId,\n remoteRunId,\n limit: 1000,\n })\n : [];\n return {\n run,\n events: events.map((event) => event.event),\n };\n }\n\n if (parts.length === 1) return { run };\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }),\n );\n\n h3.use(\n `${P}/remote/computer/approvals`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const parts = mountedPathParts(event, \"remote/computer/approvals\");\n if (method === \"GET\") {\n if (parts.length > 0) {\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }\n const query = getQuery(event);\n const status = readComputerApprovalStatus(query.status);\n return {\n approvals: await listComputerApprovalsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n deviceId: readString(query.deviceId),\n taskId: readString(query.taskId),\n runId: readString(query.runId),\n status,\n limit: Number(query.limit ?? 100) || 100,\n }),\n };\n }\n const body = (await readBody(event)) as Record<string, unknown>;\n if (parts[0] && parts[1] === \"decision\" && parts.length === 2) {\n const decision =\n body.decision === \"approved\" || body.decision === \"denied\"\n ? body.decision\n : null;\n const actionHash = readString(body.actionHash);\n if (!decision || !actionHash) {\n setResponseStatus(event, 400);\n return { error: \"decision and actionHash required\" };\n }\n const approval = await decideComputerApproval({\n id: decodeURIComponent(parts[0]),\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n actionHash,\n decision,\n decidedBy: ctx.ownerEmail,\n result: readObject(body.result),\n });\n if (!approval) {\n setResponseStatus(event, 404);\n return { error: \"approval not found or no longer pending\" };\n }\n return { approval };\n }\n if (parts.length > 0) {\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }\n const deviceId = readString(body.deviceId);\n if (!deviceId || !body.envelope) {\n setResponseStatus(event, 400);\n return { error: \"deviceId and envelope required\" };\n }\n try {\n const approval = await createComputerApprovalRequest({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n deviceId,\n envelope: body.envelope as ComputerCommandEnvelope,\n });\n return { approval };\n } catch (error) {\n return computerSupervisionRouteError(event, error);\n }\n }),\n );\n\n h3.use(\n `${P}/remote/computer/commands`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const deviceId = readString(body.deviceId);\n if (!deviceId || !body.envelope) {\n setResponseStatus(event, 400);\n return { error: \"deviceId and envelope required\" };\n }\n try {\n const command = await enqueueComputerCommand({\n deviceId,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n envelope: body.envelope as ComputerCommandEnvelope,\n platform: readString(body.platform),\n });\n return { command };\n } catch (error) {\n return computerSupervisionRouteError(event, error);\n }\n }),\n );\n\n h3.use(\n `${P}/remote/enqueue`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n deviceId?: unknown;\n kind?: unknown;\n params?: unknown;\n platform?: unknown;\n externalThreadId?: unknown;\n operation?: unknown;\n payload?: unknown;\n command?: unknown;\n source?: unknown;\n };\n const highLevel = enqueueBodyToRemoteCodeCommand(body);\n if (highLevel) {\n return enqueueRemoteCommand({\n kind: \"code-agent\",\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId ?? undefined,\n command: highLevel,\n source: body.source ?? {\n platform:\n typeof body.platform === \"string\" ? body.platform : \"mobile\",\n externalThreadId:\n typeof body.externalThreadId === \"string\"\n ? body.externalThreadId\n : \"mobile\",\n },\n });\n }\n if (typeof body.deviceId !== \"string\" || !body.deviceId.trim()) {\n setResponseStatus(event, 400);\n return { error: \"deviceId required\" };\n }\n if (!isRemoteCommandKind(body.kind)) {\n setResponseStatus(event, 400);\n return { error: \"invalid command kind\" };\n }\n const device = await getRemoteDeviceForOwner({\n id: body.deviceId,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n if (device.status !== \"active\") {\n setResponseStatus(event, 410);\n return { error: \"device revoked\" };\n }\n const command = await enqueueRemoteCommandRow({\n deviceId: device.id,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n kind: body.kind,\n params: body.params ?? {},\n platform: typeof body.platform === \"string\" ? body.platform : null,\n externalThreadId:\n typeof body.externalThreadId === \"string\"\n ? body.externalThreadId\n : null,\n });\n return { command };\n }),\n );\n\n h3.use(\n `${P}/remote/poll`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"POST\" && method !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const query = getQuery(event);\n const body =\n method === \"POST\"\n ? ((await readBody(event)) as {\n waitMs?: unknown;\n computerCapabilities?: unknown;\n })\n : {};\n let pollingDevice = device;\n if (\n method === \"POST\" &&\n Object.prototype.hasOwnProperty.call(body, \"computerCapabilities\")\n ) {\n const computerCapabilities = readComputerCapabilities(\n body.computerCapabilities,\n );\n const updated = await updateRemoteDeviceDetails({\n id: device.id,\n metadata: {\n ...(device.metadata ?? {}),\n computerCapabilities,\n },\n });\n if (updated) pollingDevice = updated;\n }\n const requestedWait =\n Number(body.waitMs ?? query.waitMs ?? query.wait_ms ?? 25_000) || 0;\n const waitMs = Math.max(0, Math.min(25_000, requestedWait));\n const deadline = Date.now() + waitMs;\n\n while (true) {\n const operationClasses =\n advertisedComputerOperationClasses(pollingDevice);\n const computerCommand =\n operationClasses.length > 0\n ? await claimNextComputerCommand({\n deviceId: pollingDevice.id,\n ownerEmail: pollingDevice.ownerEmail,\n orgId: pollingDevice.orgId,\n operationClasses,\n })\n : null;\n const command =\n computerCommand ?? (await claimNextRemoteCommand(pollingDevice.id));\n if (command) return { command };\n const remaining = deadline - Date.now();\n if (remaining <= 0) return { command: null };\n await sleep(Math.min(1000, remaining));\n }\n }),\n );\n\n h3.use(\n `${P}/remote/result`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n commandId?: unknown;\n status?: unknown;\n result?: unknown;\n errorMessage?: unknown;\n };\n if (typeof body.commandId !== \"string\" || !body.commandId.trim()) {\n setResponseStatus(event, 400);\n return { error: \"commandId required\" };\n }\n if (\n body.status !== \"running\" &&\n body.status !== \"completed\" &&\n body.status !== \"failed\"\n ) {\n setResponseStatus(event, 400);\n return { error: \"invalid command status\" };\n }\n const command = await updateRemoteCommandResult({\n deviceId: device.id,\n commandId: body.commandId,\n status: body.status,\n result: body.result,\n errorMessage:\n typeof body.errorMessage === \"string\" ? body.errorMessage : null,\n });\n if (!command) {\n setResponseStatus(event, 404);\n return { error: \"command not found\" };\n }\n if (command.status === \"completed\" || command.status === \"failed\") {\n await queueRemotePushNotifications({\n ownerEmail: device.ownerEmail,\n orgId: device.orgId,\n payload: remoteCommandPushPayload(command),\n }).catch((err) => {\n console.error(\"[integrations] remote push queue failed:\", err);\n });\n }\n return { command };\n }),\n );\n\n h3.use(\n `${P}/remote/run-events`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n remoteRunId?: unknown;\n runId?: unknown;\n events?: unknown;\n };\n const remoteRunId =\n typeof body.remoteRunId === \"string\" && body.remoteRunId.trim()\n ? body.remoteRunId.trim()\n : typeof body.runId === \"string\" && body.runId.trim()\n ? body.runId.trim()\n : \"\";\n if (!remoteRunId) {\n setResponseStatus(event, 400);\n return { error: \"remoteRunId required\" };\n }\n if (!Array.isArray(body.events)) {\n setResponseStatus(event, 400);\n return { error: \"events required\" };\n }\n const events = body.events\n .slice(0, 1000)\n .map((entry, index) => {\n const value = entry as { seq?: unknown; event?: unknown };\n const rawEvent =\n value && typeof value === \"object\" && \"event\" in value\n ? value.event\n : entry;\n return {\n seq:\n value && typeof value === \"object\" && \"seq\" in value\n ? Number(value.seq)\n : index,\n event: rawEvent ?? null,\n };\n })\n .filter((entry) => Number.isInteger(entry.seq) && entry.seq >= 0);\n if (events.length !== body.events.length) {\n setResponseStatus(event, 400);\n return { error: \"invalid event sequence\" };\n }\n const result = await insertRemoteRunEvents({\n deviceId: device.id,\n remoteRunId,\n events,\n });\n return { ok: true, ...result };\n }),\n );\n\n // ─── Durable pending-task recovery sweep ─────────────────────\n h3.use(\n `${P}/retry-stuck-tasks`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const body = (await readBody(event)) as {\n taskId?: string;\n [AGENT_BACKGROUND_PROCESSOR_FIELD]?: string;\n };\n if (body?.taskId !== INTEGRATION_RETRY_SWEEP_TOKEN_SUBJECT) {\n setResponseStatus(event, 400);\n return { error: \"invalid sweep subject\" };\n }\n if (!process.env.A2A_SECRET) {\n setResponseStatus(event, 503);\n return { error: \"durable integration recovery is not configured\" };\n }\n const token = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n if (\n !token ||\n !verifyInternalToken(INTEGRATION_RETRY_SWEEP_TOKEN_SUBJECT, token)\n ) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired internal token\" };\n }\n if (!isIntegrationDurableDispatchConfigured()) {\n return { ok: true, disabled: true };\n }\n const result = await retryStuckPendingTasks({\n webhookBaseUrl: getBaseUrl(event),\n limit: 20,\n durableOnly: true,\n });\n return { ok: true, ...result };\n }),\n );\n\n // ─── Process pending task (cross-platform task queue) ────────\n // POST /_agent-native/integrations/process-task\n // Internal endpoint invoked from the public webhook handler through either\n // the portable self-dispatch path or an acknowledged background handoff.\n // Auth: HMAC bearer signed with A2A_SECRET.\n // Each invocation runs the agent loop in a fresh function execution.\n h3.use(\n `${P}/process-task`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const body = (await readBody(event)) as {\n taskId?: string;\n [AGENT_BACKGROUND_PROCESSOR_FIELD]?: string;\n };\n const taskId = body?.taskId;\n if (!taskId) {\n setResponseStatus(event, 400);\n return { error: \"taskId required\" };\n }\n\n // Auth: HMAC token bound to the task id.\n //\n // In production we MUST require A2A_SECRET — a publicly-callable\n // process-task endpoint lets attackers re-trigger any queued task\n // by guessing or sniffing its id (C3 in the webhook security audit).\n // The atomic SQL claim only prevents *double*-processing, not the\n // first attacker-driven processing.\n //\n // In dev we keep the loose posture so contributors don't have to\n // configure A2A_SECRET to play with the integration locally.\n if (!process.env.A2A_SECRET) {\n if (process.env.NODE_ENV === \"production\") {\n setResponseStatus(event, 503);\n return {\n error:\n \"A2A_SECRET not configured — internal token signing is required to process integration tasks in production.\",\n };\n }\n // Dev: fall through unsigned (the atomic claim still gates double-processing).\n } else {\n const tok = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n if (!tok || !verifyInternalToken(taskId, tok)) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired internal token\" };\n }\n }\n\n // Atomic claim: only one invocation gets to process this task\n const dispatchOutcome =\n body[AGENT_BACKGROUND_PROCESSOR_FIELD] ===\n AGENT_BACKGROUND_PROCESSOR_INTEGRATION\n ? \"background-acknowledged\"\n : \"portable-unconfirmed\";\n const task = await claimPendingTask(taskId, { dispatchOutcome });\n if (!task) {\n setResponseStatus(event, 200);\n return { ok: true, skipped: \"already-claimed-or-missing\" };\n }\n\n let deliveryRetryTransitionStarted = false;\n let deliveryRetryRecovery:\n | { payload: string; errorMessage: string }\n | undefined;\n let confirmedDeliveryRetryPayload: string | undefined;\n try {\n const adapter = adapterMap.get(task.platform);\n if (!adapter) {\n await markTaskFailed(taskId, `Unknown platform: ${task.platform}`);\n setResponseStatus(event, 404);\n return { error: \"Unknown platform\" };\n }\n const processingResult = await runWithRequestContext(\n {\n userEmail: task.ownerEmail,\n ...(task.orgId ? { orgId: task.orgId } : {}),\n isIntegrationCaller: true,\n },\n async () => {\n const taskPayload = JSON.parse(task.payload) as\n | IntegrationSystemNoticeTaskPayload\n | IntegrationResponseDeliveryTaskPayload\n | { kind?: undefined };\n if (taskPayload.kind === \"system-notice\") {\n if (!adapter.sendSystemNotice) {\n throw new Error(\n `Platform ${task.platform} cannot deliver system notices`,\n );\n }\n const config = await getIntegrationConfig(task.platform);\n const credentialContext =\n await credentialContextForIntegrationConfig(config);\n await withCredentialContext(credentialContext, () =>\n adapter.sendSystemNotice!(\n taskPayload.incoming,\n taskPayload.text,\n {\n ...(taskPayload.dedupeKey\n ? { dedupeKey: taskPayload.dedupeKey }\n : {}),\n ...(taskPayload.dedupeTtlMs\n ? { dedupeTtlMs: taskPayload.dedupeTtlMs }\n : {}),\n },\n ),\n );\n return;\n }\n if (taskPayload.kind === \"response-delivery\") {\n let receipt: void | PlatformDeliveryReceipt =\n taskPayload.deliveryReceipt;\n if (!receipt) {\n receipt = await adapter.sendResponse(\n taskPayload.message,\n taskPayload.incoming,\n {\n ...(taskPayload.placeholderRef\n ? { placeholderRef: taskPayload.placeholderRef }\n : {}),\n },\n );\n }\n if (receipt?.status !== \"delivered\") {\n throw new Error(\n `${task.platform} response completed without delivery proof`,\n );\n }\n const deliveredPayload = taskPayload.deliveryReceipt\n ? taskPayload\n : {\n ...taskPayload,\n deliveryReceipt: receipt,\n deliveredAt: new Date().toISOString(),\n };\n confirmedDeliveryRetryPayload =\n JSON.stringify(deliveredPayload);\n if (!taskPayload.deliveryReceipt) {\n deliveryRetryRecovery = {\n payload: confirmedDeliveryRetryPayload,\n errorMessage:\n \"Provider delivery was confirmed but its receipt checkpoint failed\",\n };\n await stageTaskDeliveryPayload(\n task.id,\n deliveryRetryRecovery.payload,\n );\n deliveryRetryRecovery = undefined;\n }\n await recordIntegrationResponseDelivery(\n deliveredPayload,\n receipt,\n );\n return;\n }\n const resources = await loadResourcesForPrompt(\n task.ownerEmail,\n true,\n options?.appId,\n task.orgId,\n );\n const result = await processIntegrationTask(task, {\n adapter,\n systemPrompt: baseSystemPrompt + resources,\n actions,\n initialToolNames,\n model,\n apiKey: getApiKey(),\n engine: options?.engine,\n ownerEmail: task.ownerEmail,\n appId: options?.appId,\n });\n if (result?.status === \"delivery-pending\") {\n deliveryRetryTransitionStarted = true;\n await markTaskDeliveryRetryable(\n task.id,\n JSON.stringify(result.payload),\n result.errorMessage,\n );\n return \"delivery-retry\" as const;\n }\n return \"completed\" as const;\n },\n );\n if (processingResult === \"delivery-retry\") {\n setResponseStatus(event, 202);\n return { ok: true, taskId, retrying: \"response-delivery\" };\n }\n await markTaskCompleted(taskId);\n const nextTask = await getNextPendingTaskForThread(\n task.platform,\n task.externalThreadId,\n );\n if (nextTask) {\n await dispatchPendingIntegrationTask({\n taskId: nextTask.id,\n task: {\n platform: task.platform,\n externalThreadId: task.externalThreadId,\n platformContext: nextTask.dispatchScope\n ? { channelId: nextTask.dispatchScope }\n : undefined,\n },\n event,\n baseUrl: getBaseUrl(event),\n });\n }\n await processDueA2AContinuations({\n adapters: adapterMap,\n limit: 2,\n }).catch((err) => {\n console.error(\n \"[integrations] A2A continuation opportunistic sweep failed:\",\n err,\n );\n });\n return { ok: true, taskId };\n } catch (err: any) {\n const errorMessage = err?.message\n ? String(err.message).slice(0, 1000)\n : \"processor failed\";\n if (deliveryRetryRecovery) {\n try {\n await markTaskDeliveryRetryable(\n taskId,\n deliveryRetryRecovery.payload,\n `${deliveryRetryRecovery.errorMessage}: ${errorMessage}`,\n );\n setResponseStatus(event, 202);\n return { ok: true, taskId, retrying: \"response-delivery\" };\n } catch (transitionError) {\n const transitionMessage =\n transitionError instanceof Error\n ? transitionError.message\n : String(transitionError);\n await failTaskDeliveryTransition(\n taskId,\n `Could not safely checkpoint the delivery receipt: ${transitionMessage}`,\n ).catch((failureTransitionError) => {\n console.error(\n \"[integrations] Failed to contain delivery receipt transition failure:\",\n failureTransitionError,\n );\n });\n }\n } else if (confirmedDeliveryRetryPayload) {\n try {\n await markTaskDeliveryRetryable(\n taskId,\n confirmedDeliveryRetryPayload,\n `Provider delivery was confirmed but history persistence failed: ${errorMessage}`,\n );\n console.error(\"[integrations] process-task failure:\", err);\n setResponseStatus(event, 202);\n return { ok: true, taskId, retrying: \"response-delivery\" };\n } catch (transitionError) {\n console.error(\n \"[integrations] Failed to requeue confirmed delivery history:\",\n transitionError,\n );\n }\n } else if (deliveryRetryTransitionStarted) {\n await failTaskDeliveryTransition(\n taskId,\n `Could not safely checkpoint the delivery retry: ${errorMessage}`,\n ).catch((transitionError) => {\n console.error(\n \"[integrations] Failed to contain delivery retry transition failure:\",\n transitionError,\n );\n });\n } else if (task.attempts >= MAX_PENDING_TASK_ATTEMPTS) {\n await markTaskFailed(taskId, errorMessage);\n } else {\n await markTaskRetryable(taskId, errorMessage);\n }\n // Log the detail server-side; never return the raw error message\n // to the caller. Raw messages have leaked DB error codes, schema\n // names, and stack hints in the past (L3 in the webhook security\n // audit). Sentry / log providers still see the full error.\n console.error(\"[integrations] process-task failure:\", err);\n setResponseStatus(event, 500);\n return { error: \"Internal task failed\" };\n }\n }),\n );\n\n // ─── Process deferred A2A continuation ──────────────────────────\n // POST /_agent-native/integrations/process-a2a-continuation\n // Internal endpoint invoked when call-agent timed out inside an\n // integration processor but the remote A2A task kept running.\n h3.use(\n `${P}/process-a2a-continuation`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const body = (await readBody(event)) as { continuationId?: string };\n const continuationId = body?.continuationId;\n if (!continuationId) {\n setResponseStatus(event, 400);\n return { error: \"continuationId required\" };\n }\n\n if (!process.env.A2A_SECRET) {\n if (process.env.NODE_ENV === \"production\") {\n setResponseStatus(event, 503);\n return {\n error:\n \"A2A_SECRET not configured — internal token signing is required to process A2A continuations in production.\",\n };\n }\n } else {\n const tok = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n if (!tok || !verifyInternalToken(continuationId, tok)) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired internal token\" };\n }\n }\n\n try {\n await processA2AContinuationById(continuationId, {\n adapters: adapterMap,\n });\n } catch (err: any) {\n // Mark the continuation failed so it isn't left dangling, and surface\n // a 500 to the caller instead of leaking an unhandled rejection.\n await failA2AContinuation(\n continuationId,\n err?.message?.slice(0, 500) || \"continuation processing failed\",\n ).catch(() => {});\n console.error(\n \"[integrations] process-a2a-continuation failure:\",\n err,\n );\n setResponseStatus(event, 500);\n return { error: \"Failed to process A2A continuation\" };\n }\n return { ok: true, continuationId };\n }),\n );\n\n // ─── Slack native action controls ─────────────────────────────\n h3.use(\n `${P}/slack/interactions`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const adapter = adapterMap.get(\"slack\");\n if (!adapter) {\n setResponseStatus(event, 404);\n return \"ok\";\n }\n // handleVerification caches the exact raw form bytes even though the\n // body is not JSON; verifyWebhook then validates Slack's HMAC before\n // any action value is parsed.\n await adapter.handleVerification(event);\n if (!(await adapter.verifyWebhook(event))) {\n setResponseStatus(event, 401);\n return { error: \"Invalid webhook signature\" };\n }\n try {\n const raw = String(event.context?.__rawBody ?? \"\");\n const encoded = new URLSearchParams(raw).get(\"payload\");\n const payload = encoded ? JSON.parse(encoded) : null;\n const action = payload?.actions?.[0];\n const actionKind =\n action?.action_id === \"agent_native_approve\"\n ? \"approve\"\n : action?.action_id === \"agent_native_deny\"\n ? \"deny\"\n : action?.action_id === \"agent_native_cancel\"\n ? \"cancel\"\n : null;\n if (!actionKind || typeof action?.value !== \"string\") return \"ok\";\n const requesterId = payload?.user?.id;\n const teamId = payload?.team?.id ?? payload?.user?.team_id;\n const channelId =\n payload?.channel?.id ?? payload?.container?.channel_id;\n const messageTs = payload?.container?.message_ts;\n if (!requesterId || !teamId || !channelId || !messageTs) {\n return \"ok\";\n }\n const control = await claimIntegrationControl({\n id: action.value,\n action: actionKind,\n requesterId,\n teamId,\n apiAppId:\n typeof payload?.api_app_id === \"string\" ? payload.api_app_id : \"\",\n channelId,\n messageTs,\n });\n if (!control) return \"ok\";\n if (actionKind === \"cancel\") {\n if (control.runId) abortRun(control.runId, \"slack_cancel\");\n return \"ok\";\n }\n if (actionKind === \"deny\") return \"ok\";\n if (!control.approvalKey) return \"ok\";\n\n const taskId = `task-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n const incoming = {\n ...control.incoming,\n text: \"The requester approved the pending action. Continue the task.\",\n approvedToolCalls: [control.approvalKey],\n timestamp: Date.now(),\n platformContext: {\n ...control.incoming.platformContext,\n eventId: `control:${control.id}`,\n },\n };\n await insertPendingTask({\n id: taskId,\n platform: incoming.platform,\n externalThreadId: incoming.externalThreadId,\n payload: JSON.stringify({ incoming }),\n ownerEmail: control.ownerEmail,\n orgId: control.orgId,\n externalEventKey: `control:${control.id}`,\n dispatchScope: integrationDispatchScopeValue({\n platform: incoming.platform,\n externalThreadId: incoming.externalThreadId,\n platformContext: incoming.platformContext,\n }),\n });\n await dispatchPendingIntegrationTask({\n taskId,\n task: {\n platform: incoming.platform,\n externalThreadId: incoming.externalThreadId,\n platformContext: incoming.platformContext,\n },\n event,\n baseUrl: getBaseUrl(event),\n });\n } catch (err) {\n console.error(\"[slack] Interaction handling failed:\", err);\n }\n return \"ok\";\n }),\n );\n\n // ─── Managed integration installations ───────────────────────\n h3.use(\n `${P}/installations`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n const org = await getOrgContext(event).catch(() => null);\n const actor = {\n userEmail: session.email,\n orgId: org?.orgId ?? session.orgId ?? null,\n isOrgAdmin: org?.role === \"owner\" || org?.role === \"admin\",\n };\n if (method === \"GET\") {\n const query = getQuery(event);\n return {\n installations: await listIntegrationInstallations(\n actor,\n typeof query.platform === \"string\" ? query.platform : undefined,\n ),\n };\n }\n const body = (await readBody(event)) as {\n id?: unknown;\n action?: unknown;\n };\n const id = typeof body.id === \"string\" ? body.id : \"\";\n if (!id) {\n setResponseStatus(event, 400);\n return { error: \"installation id required\" };\n }\n if (body.action === \"disconnect\") {\n return {\n installation: await disconnectIntegrationInstallation(id, actor),\n };\n }\n if (body.action === \"test\") {\n const installation = (\n await listIntegrationInstallations(actor, \"slack\")\n ).find((item) => item.id === id);\n if (!installation) {\n setResponseStatus(event, 404);\n return { error: \"installation not found\" };\n }\n const bundle = await resolveIntegrationTokenBundle(\n installation.platform,\n installation.installationKey,\n );\n if (!bundle) {\n const updated = await updateIntegrationInstallation(id, actor, {\n health: \"revoked\",\n status: \"revoked\",\n lastError: \"token_unavailable\",\n healthCheckedAt: Date.now(),\n });\n return { installation: updated };\n }\n const health = await testSlackAuth(bundle.accessToken);\n const updated = await updateIntegrationInstallation(id, actor, {\n health: health.health,\n status: health.health === \"revoked\" ? \"revoked\" : \"connected\",\n lastError: health.error,\n healthCheckedAt: health.checkedAt,\n ...(health.ok ? { lastHealthyAt: health.checkedAt } : {}),\n });\n return { installation: updated };\n }\n setResponseStatus(event, 400);\n return { error: \"unsupported installation action\" };\n }),\n );\n\n h3.use(\n `${P}/scopes`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const access = { ownerEmail: ctx.ownerEmail, orgId: ctx.orgId };\n if (method === \"GET\") {\n const query = getQuery(event);\n return {\n scopes: await listIntegrationScopes(access, {\n platform:\n typeof query.platform === \"string\" ? query.platform : undefined,\n tenantId:\n typeof query.tenantId === \"string\" ? query.tenantId : undefined,\n }),\n };\n }\n const admin = await checkOrgAdmin(event);\n if (!admin.ok) return { error: admin.error };\n try {\n const body = (await readBody(event)) as Parameters<\n typeof saveIntegrationScope\n >[0];\n return { scope: await saveIntegrationScope(body, access) };\n } catch (err) {\n setResponseStatus(event, 400);\n return {\n error: err instanceof Error ? err.message : \"invalid scope\",\n };\n }\n }),\n );\n\n h3.use(\n `${P}/budgets`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const access = { ownerEmail: ctx.ownerEmail, orgId: ctx.orgId };\n if (method === \"GET\") {\n return { budgets: await listIntegrationUsageBudgets(access) };\n }\n const admin = await checkOrgAdmin(event);\n if (!admin.ok) return { error: admin.error };\n try {\n const body = (await readBody(event)) as Parameters<\n typeof saveIntegrationUsageBudget\n >[0];\n return {\n budget: await saveIntegrationUsageBudget(body, access),\n };\n } catch (err) {\n setResponseStatus(event, 400);\n return {\n error: err instanceof Error ? err.message : \"invalid budget\",\n };\n }\n }),\n );\n\n h3.use(\n `${P}/memory`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const access = { ownerEmail: ctx.ownerEmail, orgId: ctx.orgId };\n const query = getQuery(event);\n const body =\n method === \"POST\"\n ? ((await readBody(event)) as Record<string, unknown>)\n : null;\n const scopeId =\n typeof query.scopeId === \"string\"\n ? query.scopeId\n : typeof body?.scopeId === \"string\"\n ? body.scopeId\n : \"\";\n const scope = (await listIntegrationScopes(access)).find(\n (item) => item.id === scopeId,\n );\n if (!scope) {\n setResponseStatus(event, 404);\n return { error: \"integration scope not found\" };\n }\n if (method === \"GET\") {\n return { memories: await listIntegrationMemory(scope.id) };\n }\n const admin = await checkOrgAdmin(event);\n if (!admin.ok) return { error: admin.error };\n if (body?.action === \"remember\") {\n return {\n memory: await rememberForIntegrationScope(\n {\n name: String(body.name ?? \"\"),\n description: String(body.description ?? \"\"),\n content: String(body.content ?? \"\"),\n },\n scope.id,\n ),\n };\n }\n if (body?.action === \"forget\") {\n return {\n memory: await forgetIntegrationMemory(\n { name: String(body.name ?? \"\") },\n scope.id,\n ),\n };\n }\n setResponseStatus(event, 400);\n return { error: \"unsupported memory action\" };\n }),\n );\n\n // ─── Managed Slack OAuth ──────────────────────────────────────\n h3.use(\n `${P}/slack/manifest`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const oauthRedirectUrl = resolveOAuthRedirectUri(\n event,\n `${P}/slack/oauth/callback`,\n );\n const eventsRequestUrl = resolveOAuthRedirectUri(\n event,\n `${P}/slack/webhook`,\n );\n const interactivityRequestUrl = resolveOAuthRedirectUri(\n event,\n `${P}/slack/interactions`,\n );\n if (\n !oauthRedirectUrl ||\n !eventsRequestUrl ||\n !interactivityRequestUrl\n ) {\n setResponseStatus(event, 400);\n return { error: \"Slack manifest URLs are not allowed.\" };\n }\n setResponseHeader(\n event,\n \"content-disposition\",\n 'attachment; filename=\"agent-native-slack-manifest.json\"',\n );\n return buildSlackAgentManifest({\n oauthRedirectUrl,\n eventsRequestUrl,\n interactivityRequestUrl,\n });\n }),\n );\n\n h3.use(\n `${P}/slack/oauth/install`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Sign in before connecting Slack.\" };\n }\n const org = await getOrgContext(event).catch(() => null);\n try {\n assertSlackInstallAccess({\n email: session.email,\n orgId: org?.orgId ?? session.orgId ?? null,\n orgRole: org?.role ?? null,\n });\n } catch (err) {\n setResponseStatus(event, 403);\n return {\n error: err instanceof Error ? err.message : \"Slack access denied\",\n };\n }\n return await runWithRequestContext(\n {\n userEmail: session.email,\n orgId: org?.orgId ?? session.orgId ?? undefined,\n },\n async () => {\n const clientId = await resolveSecret(\"SLACK_CLIENT_ID\");\n const clientSecret = await resolveSecret(\"SLACK_CLIENT_SECRET\");\n const signingSecret = await resolveSecret(\"SLACK_SIGNING_SECRET\");\n if (!clientId || !clientSecret || !signingSecret) {\n setResponseStatus(event, 503);\n return {\n error:\n \"Slack OAuth is not configured. Add the Slack client id, client secret, and signing secret first.\",\n };\n }\n const redirectUri = resolveOAuthRedirectUri(\n event,\n `${P}/slack/oauth/callback`,\n );\n if (!redirectUri) {\n setResponseStatus(event, 400);\n return { error: \"Slack OAuth redirect URL is not allowed.\" };\n }\n const query = getQuery(event);\n const state = encodeOAuthState({\n redirectUri,\n owner: session.email,\n orgId: org?.orgId ?? session.orgId ?? undefined,\n app: \"agent-native:slack\",\n addAccount: true,\n returnUrl:\n typeof query.return === \"string\" ? query.return : \"/messaging\",\n });\n return sendRedirect(\n event,\n buildSlackAuthorizeUrl({ clientId, redirectUri, state }),\n 302,\n );\n },\n );\n }),\n );\n\n h3.use(\n `${P}/slack/oauth/callback`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const query = getQuery(event);\n if (typeof query.error === \"string\") {\n return oauthErrorPage(\"Slack authorization was canceled or denied.\");\n }\n const fallbackRedirect = resolveOAuthRedirectUri(\n event,\n `${P}/slack/oauth/callback`,\n );\n if (!fallbackRedirect) {\n return oauthErrorPage(\"Slack OAuth redirect URL is not allowed.\");\n }\n const state = decodeOAuthState(\n typeof query.state === \"string\" ? query.state : undefined,\n fallbackRedirect,\n );\n const session = await getSession(event).catch(() => null);\n const org = await getOrgContext(event).catch(() => null);\n if (\n state.app !== \"agent-native:slack\" ||\n !session?.email ||\n !state.owner ||\n session.email.toLowerCase() !== state.owner.toLowerCase() ||\n (state.orgId ?? null) !== (org?.orgId ?? session.orgId ?? null)\n ) {\n return oauthErrorPage(\n \"Your Slack install session expired or changed. Sign in and start again.\",\n );\n }\n const code = typeof query.code === \"string\" ? query.code : null;\n if (!code) return oauthErrorPage(\"Slack did not return an OAuth code.\");\n try {\n const access = assertSlackInstallAccess({\n email: session.email,\n orgId: org?.orgId ?? session.orgId ?? null,\n orgRole: org?.role ?? null,\n });\n return await runWithRequestContext(\n {\n userEmail: access.ownerEmail,\n orgId: access.orgId ?? undefined,\n },\n async () => {\n const clientId = await resolveSecret(\"SLACK_CLIENT_ID\");\n const clientSecret = await resolveSecret(\"SLACK_CLIENT_SECRET\");\n if (!clientId || !clientSecret) {\n return oauthErrorPage(\"Slack OAuth is not configured.\");\n }\n const oauth = await exchangeSlackOAuthCode({\n code,\n clientId,\n clientSecret,\n redirectUri: state.redirectUri,\n });\n const health = await testSlackAuth(oauth.access_token || \"\");\n if (!health.ok) {\n return oauthErrorPage(\n \"Slack connected, but the bot token could not be verified. Please retry.\",\n );\n }\n if (\n oauth.team?.id &&\n health.teamId &&\n oauth.team.id !== health.teamId\n ) {\n return oauthErrorPage(\n \"Slack returned inconsistent workspace details. Please retry.\",\n );\n }\n const input = slackOAuthResponseToInstallation(oauth, access);\n const installation = await upsertIntegrationInstallation({\n ...input,\n health: health.health,\n healthCheckedAt: health.checkedAt,\n lastHealthyAt: health.checkedAt,\n });\n await saveIntegrationConfig(\n \"slack\",\n { enabled: true, managedOAuth: true },\n \"default\",\n access.ownerEmail,\n );\n return oauthCallbackResponse(\n event,\n installation.teamName || installation.enterpriseName || \"Slack\",\n {\n addAccount: true,\n appName: \"Agent Native\",\n returnUrl: state.returnUrl || \"/messaging\",\n },\n );\n },\n );\n } catch (err) {\n console.error(\"[slack] OAuth callback failed:\", err);\n return oauthErrorPage(\"Slack connection failed. Please try again.\");\n }\n }),\n );\n\n // ─── Per-platform catch-all ───────────────────────────────────\n // Handles: webhook, status, enable, disable, setup for each platform\n h3.use(\n `${P}`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n // event.path is stripped to the remainder after the mount prefix\n const raw = (event.path || \"/\").split(\"?\")[0].replace(/^\\//, \"\");\n const parts = raw.split(\"/\").filter(Boolean);\n\n // Already handled by the dedicated /status route above\n if (parts[0] === \"status\" && parts.length === 1) return;\n // Already handled by the dedicated /task-queue/status route above\n if (parts[0] === \"task-queue\") return;\n // Already handled by the dedicated /remote/* routes above\n if (parts[0] === \"remote\") return;\n // Already handled by the dedicated /process-task route above\n if (parts[0] === \"process-task\") return;\n // Already handled by the signed durable recovery route above\n if (parts[0] === \"retry-stuck-tasks\") return;\n // Already handled by the dedicated /process-a2a-continuation route above\n if (parts[0] === \"process-a2a-continuation\") return;\n // These are framework-owned control-plane routes, not integration\n // platforms. The dedicated handlers above normally return a response\n // before this catch-all runs, but keeping them reserved here prevents\n // an unexpected mount fall-through from turning a valid control-plane\n // request into a misleading \"Unknown platform\" response.\n if (\n parts[0] === \"installations\" ||\n parts[0] === \"scopes\" ||\n parts[0] === \"budgets\" ||\n parts[0] === \"memory\"\n ) {\n setResponseStatus(event, 404);\n return { error: \"Not found\" };\n }\n\n const platform = parts[0];\n const action = parts[1]; // webhook, status, enable, disable, setup\n\n if (!platform) {\n setResponseStatus(event, 404);\n return { error: \"Platform required\" };\n }\n\n const adapter = adapterMap.get(platform);\n if (!adapter) {\n setResponseStatus(event, 404);\n return { error: `Unknown platform: ${platform}` };\n }\n\n // Set params for handlers that read them\n if (event.context) {\n event.context.params = {\n ...event.context.params,\n platform,\n };\n }\n\n // ─── GET /:platform/status ─────────────────────────────\n if (action === \"status\" && method === \"GET\") {\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const baseUrl = getBaseUrl(event);\n const status = await withCredentialContext(\n toCredentialContext(ctx),\n () => adapter.getStatus(baseUrl),\n );\n const config = await getIntegrationConfig(platform);\n status.enabled = !!config?.configData?.enabled;\n status.webhookUrl = `${baseUrl}${P}/${platform}/webhook`;\n if (!status.requiredEnvKeys) {\n try {\n status.requiredEnvKeys = adapter.getRequiredEnvKeys();\n } catch {\n status.requiredEnvKeys = [];\n }\n }\n return status;\n }\n\n // ─── POST /:platform/webhook ───────────────────────────\n if (action === \"webhook\" && method === \"POST\") {\n // Google Docs push notifications bypass the normal webhook flow —\n // they're opaque \"something changed\" pings, not message payloads.\n // We MUST verify the Pub/Sub OIDC token here. Without it, anyone\n // could POST any body to this URL and force a Drive changes pull\n // (H7 in the webhook security audit).\n if (platform === \"google-docs\") {\n const audience = process.env.GOOGLE_DOCS_PUSH_AUDIENCE;\n if (!audience) {\n if (process.env.NODE_ENV === \"production\") {\n // Fail closed in prod so a misconfigured deployment surfaces\n // in Pub/Sub's delivery metrics rather than silently\n // accepting anonymous requests.\n setResponseStatus(event, 503);\n return {\n ok: false,\n error:\n \"google-docs push endpoint disabled (audience not configured)\",\n };\n }\n // Dev: keep the loose posture so contributors can play with the\n // integration locally without configuring Pub/Sub.\n handlePushNotification().catch((err) => {\n console.error(\"[google-docs] Push handler error:\", err);\n });\n return \"ok\";\n }\n const authHeader = getRequestHeader(event, \"authorization\") || \"\";\n try {\n await verifyGoogleDocsPushToken(authHeader);\n } catch (err: any) {\n console.warn(\n `[google-docs] OIDC verify failed: ${err?.message ?? String(err)}`,\n );\n setResponseStatus(event, 401);\n return { ok: false, error: \"unauthorized\" };\n }\n handlePushNotification().catch((err) => {\n console.error(\"[google-docs] Push handler error:\", err);\n });\n return \"ok\";\n }\n\n const config = await getIntegrationConfig(platform);\n const credentialContext =\n await credentialContextForIntegrationConfig(config);\n\n // Let the adapter cache the raw request and identify setup\n // challenges, but never return a challenge response until the\n // provider signature has been verified.\n const verification = await withCredentialContext(\n credentialContext,\n () => adapter.handleVerification(event),\n );\n\n // Verify the webhook signature BEFORE parsing. We pre-parse the\n // body here (so handleWebhook can skip its second readBody, which\n // hangs on streaming providers), and that means handleWebhook's\n // own verifyWebhook step is bypassed. Without this call anyone\n // could POST a forged Slack/Telegram/email payload.\n const isValid = await withCredentialContext(credentialContext, () =>\n adapter.verifyWebhook(event),\n );\n if (!isValid) {\n setResponseStatus(event, 401);\n return { error: \"Invalid webhook signature\" };\n }\n if (verification.handled) {\n setResponseStatus(event, 200);\n return verification.response ?? \"ok\";\n }\n\n if (!config?.configData?.enabled) {\n setResponseStatus(event, 404);\n return { error: `Integration ${platform} is not enabled` };\n }\n\n let incoming = await withCredentialContext(credentialContext, () =>\n adapter.parseIncomingMessage(event),\n );\n if (!incoming) {\n setResponseStatus(event, 200);\n return \"ok\";\n }\n if (adapter.hydrateIncomingIdentity) {\n try {\n incoming = await withCredentialContext(credentialContext, () =>\n adapter.hydrateIncomingIdentity!(incoming!),\n );\n } catch (err) {\n // Identity hydration is best-effort for platforms that have an\n // app-specific resolver. Slack's default DM resolver below will\n // still fail closed when the identity is absent or unverified.\n console.warn(\n `[integrations] Could not hydrate ${platform} sender identity:`,\n err instanceof Error ? err.message : err,\n );\n }\n }\n let defaultExecutionContext: IntegrationExecutionContext | null =\n null;\n if (\n incoming.platform === \"slack\" &&\n incoming.conversationType === \"dm\" &&\n !options?.resolveExecutionContext\n ) {\n try {\n defaultExecutionContext = await withCredentialContext(\n credentialContext,\n () => resolveDefaultIntegrationExecutionContext(incoming!),\n );\n } catch (err) {\n // The legacy owner-only resolver predates org-bound identities\n // and must not turn a rejected Slack DM into an authenticated\n // owner run. Custom resolveExecutionContext is checked above and\n // skips this default ladder entirely so apps can fully own auth\n // without framework membership checks or identity side effects.\n const declined =\n err instanceof IntegrationIdentityDeclinedError ? err : null;\n if (declined) {\n console.warn(\n `[integrations] default Slack DM identity declined message:`,\n declined.message,\n );\n if (adapter.sendSystemNotice) {\n try {\n await enqueueSystemNotice(\n event,\n incoming!,\n declined.userFacingMessage,\n {\n dedupeKey: `decline:${incoming!.tenantId ?? \"unknown\"}:${incoming!.senderId ?? \"unknown\"}:${declined.reason}`,\n dedupeTtlMs: DECLINE_NOTICE_DEDUPE_TTL_MS,\n },\n );\n } catch (noticeErr) {\n console.warn(\n `[integrations] could not persist decline notice:`,\n noticeErr instanceof Error\n ? noticeErr.message\n : noticeErr,\n );\n setResponseStatus(event, 500);\n return { error: \"notice enqueue failed\" };\n }\n }\n } else {\n console.error(\n `[integrations] default Slack DM identity denied message:`,\n err,\n );\n }\n setResponseStatus(event, 200);\n return \"ok\";\n }\n }\n let executionContext: IntegrationExecutionContext = {\n ownerEmail: `integration@${platform}`,\n orgId: null as string | null,\n principalType: \"service\" as const,\n };\n if (options?.resolveExecutionContext) {\n try {\n executionContext = await withCredentialContext(\n credentialContext,\n () =>\n Promise.resolve(options.resolveExecutionContext!(incoming)),\n );\n } catch (err) {\n console.error(\n `[integrations] resolveExecutionContext denied message:`,\n err,\n );\n setResponseStatus(event, 200);\n return \"ok\";\n }\n } else if (defaultExecutionContext) {\n executionContext = defaultExecutionContext;\n if (defaultExecutionContext.anonymousMember) {\n if (!options?.allowAnonymousOrgScopedSlackDm) {\n const senderEmail =\n typeof incoming.senderEmail === \"string\" &&\n incoming.senderEmail.trim()\n ? incoming.senderEmail.trim()\n : null;\n const noticeText = senderEmail\n ? `I couldn't match your Slack account to an organization member, so I can't run this request. Ask an organization admin to add ${senderEmail}, then try again.`\n : \"I couldn't verify your Slack account email, so I can't run this request. Ask an organization admin to reconnect Slack with the users:read.email scope, then try again.\";\n if (adapter.sendSystemNotice) {\n try {\n await enqueueSystemNotice(event, incoming, noticeText, {\n dedupeKey: `anonymous-tier-disabled:${incoming.tenantId ?? \"unknown\"}:${incoming.senderId ?? \"unknown\"}`,\n });\n } catch (noticeErr) {\n console.warn(\n `[integrations] could not persist unlinked-member notice:`,\n noticeErr instanceof Error\n ? noticeErr.message\n : noticeErr,\n );\n setResponseStatus(event, 500);\n return { error: \"notice enqueue failed\" };\n }\n }\n setResponseStatus(event, 200);\n return \"ok\";\n }\n // The anonymous tier must never be silent. (1) The agent run\n // can tell: the note rides the serialized `incoming` into the\n // queued task and surfaces via <integration-context>.\n incoming.identityNote =\n \"Caller is an unlinked Slack workspace member running with organization-wide visibility only; personal or privately-shared data is not accessible. They can get personal access by having an admin add their Slack email to the organization (or by reconnecting Slack with the users:read.email scope).\";\n // (2) The sender gets a one-time heads-up through the same\n // durable SQL queue as agent work. The self-dispatch is only a\n // latency optimization; the retry sweep guarantees delivery.\n if (adapter.sendSystemNotice) {\n const senderEmail =\n typeof incoming.senderEmail === \"string\" &&\n incoming.senderEmail.trim()\n ? incoming.senderEmail.trim()\n : null;\n const noticeText = senderEmail\n ? `Heads up: I couldn't match your Slack account to an organization member, so I can only use org-wide data. Ask an admin to add ${senderEmail} to the organization for personal access.`\n : \"Heads up: I couldn't verify your Slack account's email, so I can only use org-wide data. Ask an admin to update the Slack connection with the users:read.email scope for personal access.\";\n try {\n await enqueueSystemNotice(event, incoming, noticeText, {\n dedupeKey: `anonymous-tier:${incoming.tenantId ?? \"unknown\"}:${incoming.senderId ?? \"unknown\"}`,\n });\n } catch (noticeErr) {\n console.warn(\n `[integrations] could not persist anonymous-tier notice:`,\n noticeErr instanceof Error ? noticeErr.message : noticeErr,\n );\n setResponseStatus(event, 500);\n return { error: \"notice enqueue failed\" };\n }\n }\n }\n } else if (options?.resolveOwner) {\n try {\n executionContext.ownerEmail = await withCredentialContext(\n credentialContext,\n () => Promise.resolve(options.resolveOwner!(incoming)),\n );\n } catch (err) {\n console.error(\n `[integrations] resolveOwner failed, using default:`,\n err,\n );\n }\n } else {\n try {\n executionContext = await withCredentialContext(\n credentialContext,\n () => resolveDefaultIntegrationExecutionContext(incoming!),\n );\n } catch (err) {\n console.error(\n `[integrations] default execution identity denied message:`,\n err,\n );\n setResponseStatus(event, 200);\n return \"ok\";\n }\n }\n if (executionContext.scopeId) {\n incoming.integrationScopeId = executionContext.scopeId;\n }\n const result = await handleWebhook(event, {\n adapter,\n // The processor reloads scoped resources immediately before the\n // agent run. Avoid doing that work on the acknowledgement path,\n // where providers such as Discord enforce a 3-second deadline.\n systemPrompt: baseSystemPrompt,\n actions,\n initialToolNames,\n model,\n apiKey: getApiKey(),\n engine: options?.engine,\n appId: options?.appId,\n ownerEmail: executionContext.ownerEmail,\n orgId: executionContext.orgId,\n principalType: executionContext.principalType,\n beforeProcess: options?.beforeProcess,\n incoming,\n });\n setResponseStatus(event, result.status);\n return result.body;\n }\n\n // ─── POST /:platform/enable ────────────────────────────\n if (action === \"enable\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n // Stamp the org-admin who toggled this so downstream code can\n // tell who is responsible — useful for audit logs even though\n // the row itself remains deployment-wide.\n const session = await getSession(event).catch(() => null);\n await saveIntegrationConfig(\n platform,\n { enabled: true },\n \"default\",\n session?.email,\n );\n return { ok: true, platform, enabled: true };\n }\n\n // ─── POST /:platform/disable ───────────────────────────\n if (action === \"disable\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n const session = await getSession(event).catch(() => null);\n await saveIntegrationConfig(\n platform,\n { enabled: false },\n \"default\",\n session?.email,\n );\n return { ok: true, platform, enabled: false };\n }\n\n // ─── POST /:platform/setup ─────────────────────────────\n if (action === \"setup\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n if (platform === \"telegram\") {\n const baseUrl = getBaseUrl(event);\n const webhookUrl = `${baseUrl}${P}/telegram/webhook`;\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const token = await withCredentialContext(\n toCredentialContext(ctx),\n () => resolveSecret(\"TELEGRAM_BOT_TOKEN\"),\n );\n const webhookSecret = await withCredentialContext(\n toCredentialContext(ctx),\n () => resolveSecret(\"TELEGRAM_WEBHOOK_SECRET\"),\n );\n if (!token || !webhookSecret) {\n setResponseStatus(event, 400);\n return {\n error:\n \"TELEGRAM_BOT_TOKEN and TELEGRAM_WEBHOOK_SECRET must be configured before webhook setup.\",\n };\n }\n try {\n const res = await fetch(\n `https://api.telegram.org/bot${token}/setWebhook`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n url: webhookUrl,\n secret_token: webhookSecret,\n }),\n },\n );\n const data = await res.json();\n return { ok: true, platform, webhookUrl, result: data };\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err.message };\n }\n }\n return { ok: true, platform, message: \"No setup required\" };\n }\n\n setResponseStatus(event, 404);\n return { error: \"Not found\" };\n }),\n );\n\n // ─── Start pending-tasks retry sweeper ────────────────────────\n // Sweeps the integration_pending_tasks queue every 60s and re-fires the\n // processor for any tasks that got stuck (initial dispatch lost or\n // processor killed mid-flight). No-ops gracefully if the queue table\n // hasn't been created yet on this deployment.\n startPendingTasksRetryJob({\n webhookBaseUrl: process.env.WEBHOOK_BASE_URL,\n });\n startA2AContinuationRetryJob(adapterMap);\n startRemoteCommandsRetryJob();\n startRemotePushDeliveryJob();\n\n // ─── Start Google Docs poller/push ────────────────────────────\n if (adapterMap.has(\"google-docs\")) {\n // Defer startup slightly so the server is fully ready\n setTimeout(() => {\n // We don't know the base URL at plugin init time — it depends on\n // the incoming request. For push mode, the webhook URL needs to be\n // resolved. We pass it as a special option; the poller will attempt\n // to register a watch when the first request reveals the base URL,\n // or use the WEBHOOK_BASE_URL env var if set.\n const baseUrl = process.env.WEBHOOK_BASE_URL;\n const webhookUrl = baseUrl\n ? `${withConfiguredAppBasePath(baseUrl)}${P}/google-docs/webhook`\n : undefined;\n\n void startGoogleDocsPoller({\n systemPrompt: baseSystemPrompt,\n actions,\n initialToolNames,\n model: model ?? \"\",\n apiKey: getApiKey(),\n ownerEmail: \"integration@google-docs\",\n webhookUrl,\n });\n }, 2000);\n }\n\n if (process.env.DEBUG)\n console.log(\n `[integrations] Mounted integration routes for: ${adapters.map((a) => a.platform).join(\", \")}`,\n );\n };\n}\n\n/**\n * Default integrations plugin — auto-mounts all adapters.\n */\nexport const defaultIntegrationsPlugin = createIntegrationsPlugin();\n\n/** Extract base URL from the request */\nfunction getBaseUrl(event: any): string {\n try {\n const headers = event.node?.req?.headers || event.headers || {};\n const getHeader = (name: string) =>\n typeof headers.get === \"function\"\n ? headers.get(name)\n : (headers as Record<string, string>)[name];\n const proto = getHeader(\"x-forwarded-proto\") || \"http\";\n const host = getHeader(\"host\") || \"localhost:3000\";\n return withConfiguredAppBasePath(`${proto}://${host}`);\n } catch {\n return withConfiguredAppBasePath(\"http://localhost:3000\");\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction readComputerCapabilities(value: unknown) {\n const input = readObject(value);\n const readSurface = (surface: unknown, desktop = false) => {\n const record = readObject(surface);\n if (!record) return undefined;\n return {\n observe: record.observe === true,\n control: record.control === true,\n ...(desktop\n ? {\n accessibility: record.accessibility === true,\n screenCapture: record.screenCapture === true,\n }\n : {}),\n provider: readString(record.provider) ?? null,\n version: readString(record.version) ?? null,\n };\n };\n return {\n browser: readSurface(input?.browser),\n desktop: readSurface(input?.desktop, true),\n };\n}\n\nfunction advertisedComputerOperationClasses(\n device: Pick<RemoteDevice, \"metadata\">,\n): ComputerOperationClass[] {\n const capabilities = getRemoteComputerCapabilities(device);\n const classes: ComputerOperationClass[] = [];\n if (capabilities?.browser?.observe) classes.push(\"browser.observe\");\n if (capabilities?.browser?.control) classes.push(\"browser.control\");\n if (capabilities?.desktop?.observe) classes.push(\"desktop.observe\");\n if (capabilities?.desktop?.control) classes.push(\"desktop.control\");\n return classes;\n}\n\nfunction readComputerApprovalStatus(value: unknown) {\n return value === \"pending\" ||\n value === \"approved\" ||\n value === \"denied\" ||\n value === \"consumed\" ||\n value === \"expired\"\n ? value\n : undefined;\n}\n\nfunction computerSupervisionRouteError(event: any, error: unknown) {\n if (error instanceof ComputerSupervisionError) {\n const status =\n error.code === \"expired-lease\"\n ? 410\n : error.code === \"replay\"\n ? 409\n : error.code === \"approval-required\" ||\n error.code === \"approval-denied\"\n ? 403\n : 400;\n setResponseStatus(event, status);\n return { error: error.message, code: error.code };\n }\n throw error;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/integrations/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,YAAY,GACb,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAErD,OAAO,EACL,gCAAgC,EAChC,sCAAsC,GACvC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EACL,QAAQ,EACR,yBAAyB,GAC1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,2CAA2C,GAC5C,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gCAAgC,EAChC,yCAAyC,GAC1C,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iCAAiC,EACjC,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EACL,uCAAuC,EACvC,uCAAuC,EACvC,+BAA+B,EAC/B,8CAA8C,EAC9C,mCAAmC,EACnC,uBAAuB,EACvB,6CAA6C,EAC7C,qCAAqC,EACrC,kDAAkD,EAClD,gDAAgD,EAChD,6BAA6B,GAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,8BAA8B,EAC9B,oCAAoC,EACpC,qCAAqC,EACrC,6BAA6B,EAC7B,sCAAsC,EACtC,0CAA0C,GAC3C,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,cAAc,EACd,iBAAiB,EACjB,wBAAwB,GAEzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,IAAI,uBAAuB,EAC/C,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,6BAA6B,EAC7B,kBAAkB,EAClB,6BAA6B,EAC7B,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EACL,mCAAmC,EACnC,mCAAmC,EACnC,4BAA4B,EAC5B,8BAA8B,EAC9B,wCAAwC,EACxC,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAQtC,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,gCAAgC,EAChC,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAS1D,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,iCAAiC,GAElC,MAAM,sBAAsB,CAAC;AAI9B,IAAI,4BAA4B,GAA0C,IAAI,CAAC;AAC/E,MAAM,6BAA6B,GAAG,CAAC,GAAG,MAAM,CAAC;AAEjD,KAAK,UAAU,kCAAkC,CAC/C,IAAiB,EACjB,OAAe,EACf,YAAoB,EACpB,KAAc,EACd,aAKC;IAED,IAAI,cAAkD,CAAC;IACvD,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,OAAO,CAC2C,CAAC;QACrD,cAAc,GAAG,MAAM,CAAC,sBAAsB,CAAC;QAC/C,gBAAgB,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,KAAK,WAAW,CAAC;QAClE,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,KAAK,IAAI,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,IAAI,qBAAqB,EAAE,CAAC;QAC1B,IAAI,aAAa,IAAI,aAAa,CAAC,cAAc,KAAK,aAAa,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,YAAY,GAAG,aAAa;YAChC,CAAC,CAAC,MAAM,kDAAkD,CAAC,IAAI,CAAC,EAAE,EAAE;gBAChE,OAAO;gBACP,YAAY;gBACZ,UAAU,EAAE,aAAa,CAAC,UAAU;gBACpC,KAAK,EAAE,aAAa,CAAC,KAAK;gBAC1B,UAAU,EAAE,aAAa,CAAC,UAAU;gBACpC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;aAC/B,CAAC;YACJ,CAAC,CAAC,MAAM,6CAA6C,CAAC,IAAI,CAAC,EAAE,EAAE;gBAC3D,OAAO;gBACP,YAAY;aACb,CAAC,CAAC;QACP,IAAI,CAAC,YAAY;YAAE,OAAO,YAAY,CAAC;QACvC,MAAM,8BAA8B,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,eAAe,EAAE,IAAI,CAAC,aAAa;oBACjC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE;oBACnC,CAAC,CAAC,SAAS;aACd;YACD,KAAK;YACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;YAC1B,oBAAoB,EAAE,IAAI;YAC1B,2CAA2C,EAAE,gBAAgB;SAC9D,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,cAAc,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,cAAc,IAAI,aAAa,EAAE,CAAC;QACpC,IAAI,cAAc,KAAK,aAAa,CAAC,cAAc,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,gDAAgD,CACzE,IAAI,CAAC,EAAE,EACP;YACE,OAAO;YACP,YAAY;YACZ,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,UAAU,EAAE,aAAa,CAAC,UAAU;YACpC,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,UAAU,EAAE,aAAa,CAAC,UAAU;SACrC,CACF,CAAC;QACF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,yBAAyB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,8BAA8B,CAAC;QACnC,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,IAAI,EAAE;YACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,IAAI,CAAC,aAAa;gBACjC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE;gBACnC,CAAC,CAAC,SAAS;SACd;QACD,KAAK;QACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;KAC3B,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC5C,IAAiB,EACjB,YAAoB,EACpB,KAAc;IAEd,MAAM,SAAS,GAAG,MAAM,8CAA8C,CACpE,IAAI,CAAC,EAAE,EACP,YAAY,CACb,CAAC;IACF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAChD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,gBAAgB,CACtB,CAAC;IACF,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,MAAM,8BAA8B,CAAC;QACnC,MAAM,EAAE,QAAQ,CAAC,EAAE;QACnB,IAAI,EAAE;YACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,QAAQ,CAAC,aAAa;gBACrC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,EAAE;gBACvC,CAAC,CAAC,SAAS;SACd;QACD,KAAK;QACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CACnC,QAAsC;IAEtC,IAAI,4BAA4B;QAAE,OAAO;IACzC,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;QACnC,0BAA0B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACrD,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,MAAM,CAAC,CAAC;IACX,UAAU,CAAC,YAAY,CAAC,CAAC;IACzB,4BAA4B,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9C,0BAA0B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACrD,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,MAAM,CAAC,CAAC;IACX,UAAU,CAAC,4BAA4B,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,KAAqC;IACtD,KAA2C,CAAC,KAAK,EAAE,EAAE,CAAC;AACzD,CAAC;AAED,+EAA+E;AAC/E,uEAAuE;AACvE,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,0EAA0E;AAC1E,MAAM,WAAW,GAAG,kBAAkB,CACpC,IAAI,GAAG,CAAC,4CAA4C,CAAC,CACtD,CAAC;AACF,MAAM,cAAc,GAAG,CAAC,6BAA6B,EAAE,qBAAqB,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,KAAK,UAAU,yBAAyB,CAAC,UAAkB;IACzD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE;QACtD,MAAM,EAAE,cAAc;QACtB,QAAQ;KACT,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,sEAAsE;IACtE,4DAA4D;IAC5D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;IACjE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,sCAAsC,GAAG,MAAM,CAAC,MAAM,CAAC;IAClE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;IAC3C,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE;IACjD,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE;IACjD,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC9D,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE;IAC/C,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE;IACtD,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;CAI3C,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC,MAAM,CAC3D,sCAAsC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CACvE,CAAC;AAEF,MAAM,UAAU,gCAAgC;IAC9C,OAAO,sCAAsC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,yBAAyB,GAAG;;;;;;0FAMwD,CAAC;AAgB3F,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAEvC,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AACpD,MAAM,2BAA2B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AAUzD,SAAS,oBAAoB,CAC3B,SAAiB,EACjB,KAAa,EACb,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,OAAO,iBAAiB,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAmC;IAEnC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;QAChD,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IAEH,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7D,UAAU,EAAE,MAAM,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM;YAChB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACpD,MAAM,SAAS,GAAG,IAA+B,CAAC;gBAClD,OAAO,SAAS,CAAC,EAAE,KAAK,MAAM,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC;YAC/D,CAAC,CAAC;YACJ,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO;YACL,EAAE,EAAE,IAAI;YACR,UAAU;YACV,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC7C,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;QAC9C,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IACH,MAAM,iBAAiB,GACrB,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,MAAM,GACV,CAAC,iBAAiB;QAChB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,iBAAiB,CAAC;QACjE,CAAC,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,0DAA0D;SAClE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,WAAW,EAAE,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC;QACxC,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,UAAU;QACV,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI;QACpC,IAAI;QACJ,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC;QACxC,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI;QAC9C,gBAAgB,EAAE,UAAU,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,IAAI;KAC/D,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,SAAS,EAAE,GAAG,CAAC,EAAE;QACjB,SAAS,EAAE,GAAG,CAAC,EAAE;QACjB,UAAU;QACV,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC7C,OAAO,EACL,WAAW,KAAK,QAAQ;YACtB,CAAC,CAAC,UAAU;gBACV,CAAC,CAAC,oBAAoB,GAAG,CAAC,EAAE,IAAI;gBAChC,CAAC,CAAC,oBAAoB,GAAG,CAAC,EAAE,kFAAkF;YAChH,CAAC,CAAC,SAAS;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,WAA+B;IAE/B,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC;QACtB,KAAK,UAAU;YACb,OAAO,iBAAiB,CAAC;QAC3B,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAgC;IAEhC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;YACxC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;YAChC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;YAC5B,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;YAC5C,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;SACnD,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;YAC9D,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9D,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;SACnD,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,8BAA8B,CACrC,IAA6B;IAE7B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAExD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvD,IAAI,SAAS,KAAK,uBAAuB,EAAE,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,KAAK,0BAA0B,EAAE,CAAC;QAC7C,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,OAAO,CAAC,KAAK;YACrB,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO;YACvC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,KAAK,mCAAmC,EAAE,CAAC;QACtD,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACtD,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK;YAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,KAAK,qBAAqB,EAAE,CAAC;QACxC,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,OAAO,CAAC,KAAK;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB,CAChC,OAAsB;IAEtB,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC;IAC1D,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,GAAG,EAAE,CAAC;QACR,OAAO;YACL,GAAG,GAAG;YACN,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,MAAM,EAAE,OAAO,CAAC,QAAQ;YACxB,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM;YAChD,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS;SAC1D,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAChD,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,OAAO,CAAC,EAAE;QACjB,MAAM,EAAE,OAAO,CAAC,QAAQ;QACxB,KAAK,EACH,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY;QACvE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QACjC,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC1D,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAqC;IACjE,OAAO,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QAC1C,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,uBAAuB;QAC3D,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,UAAkB,EAClB,KAAgC;IAEhC,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;QAC9C,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAoB;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1E,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,KAAK;QAClB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EACJ,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1E,UAAU,EAAE,MAAM,CAAC,UAAU;YAC3B,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;YAC3C,CAAC,CAAC,SAAS;QACb,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QACtC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,SAAS;QAC1C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QACtC,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAU,EAAE,WAAmB;IACvD,MAAM,OAAO,GAAG,MAAM,CACpB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,CACjE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GACV,WAAW,IAAI,CAAC;QACd,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/C,CAAC,CAAC,UAAU,CAAC;IACjB,OAAO,MAAM;SACV,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAsB;IAEtB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,KAAK,GACT,MAAM,KAAK,WAAW;QACpB,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,MAAM,KAAK,QAAQ;YACnB,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,oBAAoB,CAAC;IAC7B,MAAM,IAAI,GACR,MAAM,KAAK,WAAW;QACpB,CAAC,CAAC,yCAAyC;QAC3C,CAAC,CAAC,MAAM,KAAK,QAAQ;YACnB,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,gDAAgD,CAAC;IACzD,OAAO;QACL,KAAK;QACL,IAAI;QACJ,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,MAAM,EAAE,OAAO,CAAC,QAAQ;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM;QACN,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAmC;IAEnC,IACE,OAAO,EAAE,QAAQ,KAAK,SAAS;QAC/B,OAAO,CAAC,gBAAgB,KAAK,SAAS,EACtC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,EAAE,QAAa,EAAE,EAAE;QAC7B,yBAAyB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACpD,MAAM,QAAQ,GACZ,OAAO,EAAE,QAAQ;YACjB,wBAAwB,CACtB,gCAAgC,EAAE,EAClC,OAAO,EAAE,gBAAgB,CAC1B,CAAC;QACJ,MAAM,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;QACtD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;QAC7B,qEAAqE;QACrE,sEAAsE;QACtE,kEAAkE;QAClE,6DAA6D;QAC7D,mEAAmE;QACnE,cAAc;QACd,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;QAE9C,0BAA0B;QAC1B,MAAM,gBAAgB,GAAG,OAAO,EAAE,YAAY,IAAI,yBAAyB,CAAC;QAE5E,yEAAyE;QACzE,8EAA8E;QAC9E,MAAM,YAAY,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAC5C,IAAI,cAAc,GAA4B,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACrD,cAAc,GAAG;gBACf,YAAY,EAAE;oBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,GAAG,EAAE,CAAC,IAA4B,EAAE,OAAgB,EAAE,EAAE,CACtD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAc,EAAE,OAAO,EAAE,KAAK,CAAC;iBAChD;aACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;QACD,MAAM,OAAO,GAAG;YACd,GAAG,wBAAwB,EAAE;YAC7B,GAAG,YAAY;YACf,GAAG,cAAc;SACK,CAAC;QACzB,wEAAwE;QACxE,qEAAqE;QACrE,6DAA6D;QAC7D,sEAAsE;QACtE,qEAAqE;QACrE,iEAAiE;QACjE,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEnD,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,GAAG,sBAAsB,eAAe,CAAC;QAEnD,KAAK,UAAU,mBAAmB,CAChC,KAAU,EACV,QAAyB,EACzB,IAAY,EACZ,IAAmD;YAEnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;YACzB,MAAM,MAAM,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAC,EACD,IAAI,EAAE,WAAW,IAAI,2BAA2B,CACjD,CAAC;YACF,MAAM,cAAc,GAAG,iBAAiB,MAAM,EAAE,CAAC;YACjD,MAAM,OAAO,GAAuC;gBAClD,IAAI,EAAE,eAAe;gBACrB,QAAQ;gBACR,IAAI;gBACJ,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,iBAAiB,CAAC;oBACtB,EAAE,EAAE,MAAM;oBACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,mEAAmE;oBACnE,uEAAuE;oBACvE,8DAA8D;oBAC9D,gBAAgB,EAAE,cAAc;oBAChC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;oBAChC,UAAU,EAAE,eAAe,QAAQ,CAAC,QAAQ,EAAE;oBAC9C,gBAAgB,EAAE,IAAI,EAAE,SAAS;wBAC/B,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;wBACnD,CAAC,CAAC,SAAS;oBACb,aAAa,EAAE,6BAA6B,CAAC;wBAC3C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,gBAAgB,EAAE,cAAc;wBAChC,eAAe,EAAE,QAAQ,CAAC,eAAe;qBAC1C,CAAC;iBACH,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,qBAAqB,CAAC,GAAG,CAAC;oBAAE,OAAO;gBACvC,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,MAAM,8BAA8B,CAAC;gBACnC,MAAM;gBACN,IAAI,EAAE;oBACJ,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,gBAAgB,EAAE,cAAc;oBAChC,eAAe,EAAE,QAAQ,CAAC,eAAe;iBAC1C;gBACD,KAAK;gBACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,UAAU,qBAAqB,CAClC,KAAU;YAEV,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC5D,OAAO;gBACL,UAAU,EAAE,OAAO,CAAC,KAAK;gBACzB,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;aAC9C,CAAC;QACJ,CAAC;QAED,SAAS,mBAAmB,CAC1B,GAAiD,EACjD,IAAwC;YAExC,OAAO;gBACL,SAAS,EAAE,GAAG,CAAC,UAAU;gBACzB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,qCAAqC,CAClD,MAAwD;YAExD,MAAM,UAAU,GACd,OAAO,MAAM,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACvE,OAAO;gBACL,SAAS,EAAE,UAAU;gBACrB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,mBAAmB,EAAE,IAAI;aAC1B,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,qBAAqB,CAClC,OAA4C,EAC5C,EAAoB;YAEpB,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,EAAE,CAAC;YAC1B,OAAO,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,UAAU,mBAAmB,CAAC,KAAU;YAC3C,MAAM,KAAK,GAAG,kBAAkB,CAC9B,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,CACzC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;;;;;;;;;;;;;;;;;;WAmBG;QACH,KAAK,UAAU,aAAa,CAC1B,KAAU;YAEV,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACzD,wDAAwD;YACxD,IAAI,CAAC,GAAG,EAAE,KAAK;gBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACtE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EACH,mEAAmE;aACtE,CAAC;QACJ,CAAC;QAED,iEAAiE;QACjE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,SAAS,EACb,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAwB,EAAE,CAAC;YACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CACjE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAC3B,CAAC;gBACF,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC5D,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;gBAC/C,MAAM,CAAC,UAAU,GAAG,GAAG,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,UAAU,CAAC;gBACjE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;oBACxD,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CACH,CAAC;QAEF,gEAAgE;QAChE,oDAAoD;QACpD,qEAAqE;QACrE,wEAAwE;QACxE,qEAAqE;QACrE,qEAAqE;QACrE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,oBAAoB,EACxB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,OAAO,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,gEAAgE;QAChE,uEAAuE;QACvE,uEAAuE;QACvE,yEAAyE;QACzE,wEAAwE;QACxE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,kBAAkB,EACtB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAQlC,CAAC;YACF,MAAM,KAAK,GACT,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBACjD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBACjC,CAAC,CAAC,eAAe,CAAC;YACtB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,kBAAkB,CAAC;gBACjD,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK;gBACL,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACnC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;gBACnE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAChE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;aACpC,CAAC,CAAC;YACH,OAAO,EAAE,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;QACzD,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,eAAe,EACnB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;gBAC9C,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YACtD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;gBACrC,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,iBAAiB,EACrB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACjE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAExD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;wBAC9C,UAAU,EAAE,GAAG,CAAC,UAAU;wBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,KAAK,EAAE,GAAG;qBACX,CAAC,CAAC;oBACH,OAAO;wBACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;wBAC1C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;qBACvC,CAAC;gBACJ,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;oBAC3C,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;oBACZ,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;iBACjB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;gBACvC,CAAC;gBACD,OAAO;oBACL,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC;oBACpC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC;iBACjC,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACtD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAChC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC;gBAC9C,EAAE;gBACF,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;YACvC,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,oBAAoB,EACxB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACjE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,MAAM,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAC3C,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,mBAAmB,EACvB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChE,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;gBAC9C,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC7B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACnC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;gBACnE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAChE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;aACpC,CAAC,CAAC;YACH,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;aACvD,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,uBAAuB,EAC3B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;YACrC,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,4BAA4B,CAAC;gBACtD,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS;gBAChD,KAAK;gBACL,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACnC,cAAc,EACZ,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC9D,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;aAC9B,CAAC,CAAC;YACH,OAAO;gBACL,YAAY,EAAE,8BAA8B,CAAC,YAAY,CAAC;aAC3D,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,4BAA4B,EAChC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,aAAa,GAAG,MAAM,mCAAmC,CAAC;gBAC9D,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,eAAe,KAAK,MAAM;gBAC3D,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;YACH,OAAO;gBACL,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,8BAA8B,CAAC;aACjE,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,yBAAyB,EAC7B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC7C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChE,MAAM,OAAO,GAAG,MAAM,wCAAwC,CAAC;gBAC7D,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC1D,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;aAC9B,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;YAC7C,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACtB,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,4BAA4B,EAChC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,KAAK,WAAW;gBAC5B,KAAK,CAAC,MAAM,KAAK,QAAQ;gBACzB,KAAK,CAAC,MAAM,KAAK,SAAS;gBACxB,CAAC,CAAC,KAAK,CAAC,MAAM;gBACd,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,aAAa,GAAG,MAAM,mCAAmC,CAAC;gBAC9D,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM;gBACN,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE;aACvC,CAAC,CAAC;YACH,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,cAAc,EAClB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;gBAChD,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;iBAC9D,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACtC,MAAM,GAAG,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,CACL,OAAO,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,EAAE,EAAE,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,KAAK,KAAK,CAClE,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;YACpC,CAAC;YACD,MAAM,GAAG,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;YAE7C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;gBAC9B,MAAM,WAAW,GACf,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;oBACtB,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;oBACnB,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvB,MAAM,MAAM,GAAG,WAAW;oBACxB,CAAC,CAAC,MAAM,mBAAmB,CAAC;wBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,WAAW;wBACX,KAAK,EAAE,IAAI;qBACZ,CAAC;oBACJ,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO;oBACL,GAAG;oBACH,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;iBAC3C,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YACvC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAChC,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,4BAA4B,EAChC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;YACnE,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;gBAChC,CAAC;gBACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxD,OAAO;oBACL,SAAS,EAAE,MAAM,6BAA6B,CAAC;wBAC7C,UAAU,EAAE,GAAG,CAAC,UAAU;wBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;wBACpC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;wBAChC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;wBAC9B,MAAM;wBACN,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,GAAG;qBACzC,CAAC;iBACH,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChE,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9D,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;oBACxD,CAAC,CAAC,IAAI,CAAC,QAAQ;oBACf,CAAC,CAAC,IAAI,CAAC;gBACX,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC/C,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC7B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;gBACvD,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC;oBAC5C,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAChC,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,UAAU;oBACV,QAAQ;oBACR,SAAS,EAAE,GAAG,CAAC,UAAU;oBACzB,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;iBAChC,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;gBAC9D,CAAC;gBACD,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAChC,CAAC;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;YACrD,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,6BAA6B,CAAC;oBACnD,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,QAAQ;oBACR,QAAQ,EAAE,IAAI,CAAC,QAAmC;iBACnD,CAAC,CAAC;gBACH,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,2BAA2B,EAC/B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;YACrD,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;oBAC3C,QAAQ;oBACR,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,QAAQ,EAAE,IAAI,CAAC,QAAmC;oBAClD,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACpC,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,iBAAiB,EACrB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAUlC,CAAC;YACF,MAAM,SAAS,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,oBAAoB,CAAC;oBAC1B,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;oBAC7B,OAAO,EAAE,SAAS;oBAClB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI;wBACrB,QAAQ,EACN,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;wBAC9D,gBAAgB,EACd,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;4BACvC,CAAC,CAAC,IAAI,CAAC,gBAAgB;4BACvB,CAAC,CAAC,QAAQ;qBACf;iBACF,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC/D,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;YAC3C,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;gBAC3C,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACjB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;YACvC,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;YACrC,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC;gBAC5C,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;gBACzB,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;gBAClE,gBAAgB,EACd,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;oBACvC,CAAC,CAAC,IAAI,CAAC,gBAAgB;oBACvB,CAAC,CAAC,IAAI;aACX,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,cAAc,EAClB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,IAAI,GACR,MAAM,KAAK,MAAM;gBACf,CAAC,CAAE,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAGrB;gBACJ,CAAC,CAAC,EAAE,CAAC;YACT,IAAI,aAAa,GAAG,MAAM,CAAC;YAC3B,IACE,MAAM,KAAK,MAAM;gBACjB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAClE,CAAC;gBACD,MAAM,oBAAoB,GAAG,wBAAwB,CACnD,IAAI,CAAC,oBAAoB,CAC1B,CAAC;gBACF,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;oBAC9C,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,QAAQ,EAAE;wBACR,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;wBAC1B,oBAAoB;qBACrB;iBACF,CAAC,CAAC;gBACH,IAAI,OAAO;oBAAE,aAAa,GAAG,OAAO,CAAC;YACvC,CAAC;YACD,MAAM,aAAa,GACjB,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;YAErC,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,gBAAgB,GACpB,kCAAkC,CAAC,aAAa,CAAC,CAAC;gBACpD,MAAM,eAAe,GACnB,gBAAgB,CAAC,MAAM,GAAG,CAAC;oBACzB,CAAC,CAAC,MAAM,wBAAwB,CAAC;wBAC7B,QAAQ,EAAE,aAAa,CAAC,EAAE;wBAC1B,UAAU,EAAE,aAAa,CAAC,UAAU;wBACpC,KAAK,EAAE,aAAa,CAAC,KAAK;wBAC1B,gBAAgB;qBACjB,CAAC;oBACJ,CAAC,CAAC,IAAI,CAAC;gBACX,MAAM,OAAO,GACX,eAAe,IAAI,CAAC,MAAM,sBAAsB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtE,IAAI,OAAO;oBAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACxC,IAAI,SAAS,IAAI,CAAC;oBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC7C,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,gBAAgB,EACpB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAKlC,CAAC;YACF,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,IACE,IAAI,CAAC,MAAM,KAAK,SAAS;gBACzB,IAAI,CAAC,MAAM,KAAK,WAAW;gBAC3B,IAAI,CAAC,MAAM,KAAK,QAAQ,EACxB,CAAC;gBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;YAC7C,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;gBAC9C,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,YAAY,EACV,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;aACnE,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;YACxC,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAClE,MAAM,4BAA4B,CAAC;oBACjC,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,wBAAwB,CAAC,OAAO,CAAC;iBAC3C,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,oBAAoB,EACxB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAIlC,CAAC;YACF,MAAM,WAAW,GACf,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;gBAC7D,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;gBACzB,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBACnD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBACnB,CAAC,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;YACtC,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;iBACvB,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;iBACd,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACpB,MAAM,KAAK,GAAG,KAA2C,CAAC;gBAC1D,MAAM,QAAQ,GACZ,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK;oBACpD,CAAC,CAAC,KAAK,CAAC,KAAK;oBACb,CAAC,CAAC,KAAK,CAAC;gBACZ,OAAO;oBACL,GAAG,EACD,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,KAAK;wBAClD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;wBACnB,CAAC,CAAC,KAAK;oBACX,KAAK,EAAE,QAAQ,IAAI,IAAI;iBACxB,CAAC;YACJ,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACpE,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACzC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;YAC7C,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;gBACzC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,WAAW;gBACX,MAAM;aACP,CAAC,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,CACH,CAAC;QAEF,gEAAgE;QAChE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,oBAAoB,EACxB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAGlC,CAAC;YACF,IAAI,IAAI,EAAE,MAAM,KAAK,qCAAqC,EAAE,CAAC;gBAC3D,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;YAC5C,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC5B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,gDAAgD,EAAE,CAAC;YACrE,CAAC;YACD,MAAM,KAAK,GAAG,kBAAkB,CAC9B,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,CACzC,CAAC;YACF,IACE,CAAC,KAAK;gBACN,CAAC,mBAAmB,CAAC,qCAAqC,EAAE,KAAK,CAAC,EAClE,CAAC;gBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;YACxD,CAAC;YACD,IAAI,CAAC,sCAAsC,EAAE,EAAE,CAAC;gBAC9C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACtC,CAAC;YACD,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACpE,sBAAsB,CAAC;oBACrB,cAAc;oBACd,KAAK,EAAE,EAAE;oBACT,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBACjB,OAAO,CAAC,KAAK,CACX,8CAA8C,EAC9C,KAAK,CACN,CAAC;oBACF,OAAO,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;gBACnD,CAAC,CAAC;gBACF,8BAA8B,CAAC;oBAC7B,KAAK;oBACL,cAAc;oBACd,KAAK,EAAE,EAAE;iBACV,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBACjB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;oBACjE,OAAO,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;gBAC/C,CAAC,CAAC;gBACF,0BAA0B,CAAC;oBACzB,cAAc;oBACd,KAAK,EAAE,EAAE;iBACV,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBACjB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;oBAC5D,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;gBAC1C,CAAC,CAAC;aACH,CAAC,CAAC;YACH,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,YAAY;gBACZ,SAAS;gBACT,gBAAgB;aACjB,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,gEAAgE;QAChE,gDAAgD;QAChD,2EAA2E;QAC3E,yEAAyE;QACzE,4CAA4C;QAC5C,qEAAqE;QACrE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,eAAe,EACnB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAIlC,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;YACtC,CAAC;YAED,yCAAyC;YACzC,EAAE;YACF,iEAAiE;YACjE,kEAAkE;YAClE,qEAAqE;YACrE,kEAAkE;YAClE,oCAAoC;YACpC,EAAE;YACF,iEAAiE;YACjE,6DAA6D;YAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO;wBACL,KAAK,EACH,4GAA4G;qBAC/G,CAAC;gBACJ,CAAC;gBACD,+EAA+E;YACjF,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,kBAAkB,CAC5B,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,CACzC,CAAC;gBACF,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC9C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC;YAED,8DAA8D;YAC9D,MAAM,eAAe,GACnB,IAAI,CAAC,gCAAgC,CAAC;gBACtC,sCAAsC;gBACpC,CAAC,CAAC,yBAAyB;gBAC3B,CAAC,CAAC,sBAAsB,CAAC;YAC7B,MAAM,oBAAoB,GACxB,IAAI,CAAC,oCAAoC,CAAC,KAAK,IAAI,CAAC;YACtD,MAAM,IAAI,GAAG,oBAAoB;gBAC/B,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,CAAC;gBAC9B,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;YAC7D,CAAC;YACD,IAAI,oBAAoB,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBACzD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;YAC/D,CAAC;YACD,IAAI,WAGoB,CAAC;YACzB,IAAI,CAAC;gBACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAuB,CAAC;YAC/D,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,kCAAkC,CAAC,CAAC;gBAClE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;YACvD,CAAC;YACD,MAAM,sBAAsB,GAC1B,0CAA0C,CAAC;gBACzC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,eAAe,EAAE,IAAI,CAAC,aAAa;oBACjC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE;oBACnC,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;YACL,MAAM,wBAAwB,GAC5B,WAAW,CAAC,IAAI,KAAK,mBAAmB;gBACxC,WAAW,CAAC,eAAe,EAAE,MAAM,KAAK,WAAW,CAAC;YACtD,IACE,oBAAoB;gBACpB,CAAC,sBAAsB;gBACvB,CAAC,wBAAwB,EACzB,CAAC;gBACD,MAAM,mCAAmC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnD,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAChD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,gBAAgB,CACtB,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,8BAA8B,CAAC;wBACnC,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,IAAI,EAAE;4BACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;4BACvC,eAAe,EAAE,QAAQ,CAAC,aAAa;gCACrC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,EAAE;gCACvC,CAAC,CAAC,SAAS;yBACd;wBACD,KAAK;wBACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;gBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;YACnD,CAAC;YAED,IAAI,8BAA8B,GAAG,KAAK,CAAC;YAC3C,IAAI,qBAES,CAAC;YACd,IAAI,6BAAiD,CAAC;YACtD,IAAI,qBAOS,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,cAAc,CAAC,MAAM,EAAE,qBAAqB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACnE,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;gBACvC,CAAC;gBACD,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAClD;oBACE,SAAS,EAAE,IAAI,CAAC,UAAU;oBAC1B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,mBAAmB,EAAE,IAAI;iBAC1B,EACD,KAAK,IAAI,EAAE;oBACT,IACE,CAAC,oBAAoB;wBACrB,WAAW,CAAC,IAAI,KAAK,eAAe,EACpC,CAAC;wBACD,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;4BAC9B,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,CAAC,QAAQ,gCAAgC,CAC1D,CAAC;wBACJ,CAAC;wBACD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACzD,MAAM,iBAAiB,GACrB,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;wBACtD,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAClD,OAAO,CAAC,gBAAiB,CACvB,WAAW,CAAC,QAAQ,EACpB,WAAW,CAAC,IAAI,EAChB;4BACE,GAAG,CAAC,WAAW,CAAC,SAAS;gCACvB,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE;gCACtC,CAAC,CAAC,EAAE,CAAC;4BACP,GAAG,CAAC,WAAW,CAAC,WAAW;gCACzB,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE;gCAC1C,CAAC,CAAC,EAAE,CAAC;yBACR,CACF,CACF,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,IAAI,WAAW,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;wBAC7C,IAAI,OAAO,GACT,WAAW,CAAC,eAAe,CAAC;wBAC9B,IAAI,aAES,CAAC;wBACd,IAAI,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC;4BACrC,MAAM,KAAK,GAAG,wBAAwB,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;4BAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;4BACvC,MAAM,aAAa,GACjB,MAAM,uCAAuC,CAAC,IAAI,CAAC,EAAE,EAAE;gCACrD,KAAK;gCACL,UAAU;gCACV,eAAe,EAAE,6BAA6B;6BAC/C,CAAC,CAAC;4BACL,IAAI,CAAC,aAAa;gCAAE,OAAO,iBAA0B,CAAC;4BACtD,aAAa,GAAG;gCACd,UAAU,EAAE,aAAa,CAAC,EAAE;gCAC5B,KAAK;gCACL,UAAU;6BACX,CAAC;4BACF,qBAAqB,GAAG;gCACtB,GAAG,aAAa;gCAChB,cAAc,EACZ,WAAW,CAAC,sBAAsB;oCAClC,CAAC,WAAW,CAAC,qBAAqB;wCAChC,CAAC,CAAC,aAAa;wCACf,CAAC,CAAC,WAAW,CAAC;6BACnB,CAAC;wBACJ,CAAC;wBACD,IAAI,CAAC,OAAO,EAAE,CAAC;4BACb,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAClC,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,QAAQ,EACpB;gCACE,GAAG,CAAC,WAAW,CAAC,cAAc;oCAC5B,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,EAAE;oCAChD,CAAC,CAAC,EAAE,CAAC;6BACR,CACF,CAAC;wBACJ,CAAC;wBACD,IAAI,OAAO,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;4BACpC,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,QAAQ,4CAA4C,CAC7D,CAAC;wBACJ,CAAC;wBACD,MAAM,gBAAgB,GAAG,WAAW,CAAC,eAAe;4BAClD,CAAC,CAAC,WAAW;4BACb,CAAC,CAAC;gCACE,GAAG,WAAW;gCACd,eAAe,EAAE,OAAO;gCACxB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;6BACtC,CAAC;wBACN,6BAA6B;4BAC3B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;wBACnC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;4BACjC,qBAAqB,GAAG;gCACtB,OAAO,EAAE,6BAA6B;gCACtC,YAAY,EACV,mEAAmE;6BACtE,CAAC;4BACF,MAAM,wBAAwB,CAC5B,IAAI,CAAC,EAAE,EACP,qBAAqB,CAAC,OAAO,CAC9B,CAAC;4BACF,qBAAqB,GAAG,SAAS,CAAC;wBACpC,CAAC;wBACD,MAAM,iCAAiC,CACrC,gBAAgB,EAChB,OAAO,CACR,CAAC;wBACF,MAAM,sBAAsB,GAC1B,WAAW,CAAC,sBAAsB,CAAC;wBACrC,IAAI,sBAAsB,EAAE,CAAC;4BAC3B,MAAM,YAAY,GAChB,uDAAuD,CAAC;4BAC1D,MAAM,YAAY,GAAG,aAAa;gCAChC,CAAC,CAAC,sBAAsB,KAAK,QAAQ;oCACnC,CAAC,CAAC,MAAM,uBAAuB,CAC3B,aAAa,CAAC,UAAU,EACxB;wCACE,KAAK,EAAE,aAAa,CAAC,KAAK;wCAC1B,UAAU,EAAE,aAAa,CAAC,UAAU;wCACpC,YAAY;qCACb,CACF;oCACH,CAAC,CAAC,MAAM,+BAA+B,CACnC,aAAa,CAAC,UAAU,EACxB;wCACE,iBAAiB,EAAE,IAAI,CAAC,EAAE;wCAC1B,KAAK,EAAE,aAAa,CAAC,KAAK;wCAC1B,UAAU,EAAE,aAAa,CAAC,UAAU;qCACrC,CACF;gCACL,CAAC,CAAC,MAAM,qCAAqC,CAAC,IAAI,CAAC,EAAE,EAAE;oCACnD,MAAM,EAAE,sBAAsB;oCAC9B,GAAG,CAAC,sBAAsB,KAAK,QAAQ;wCACrC,CAAC,CAAC,EAAE,YAAY,EAAE;wCAClB,CAAC,CAAC,EAAE,CAAC;iCACR,CAAC,CAAC;4BACP,IAAI,aAAa,IAAI,CAAC,YAAY,EAAE,CAAC;gCACnC,OAAO,iBAA0B,CAAC;4BACpC,CAAC;4BACD,OAAO,sBAAsB,KAAK,QAAQ;gCACxC,CAAC,CAAE,iBAA2B;gCAC9B,CAAC,CAAE,WAAqB,CAAC;wBAC7B,CAAC;wBACD,IAAI,WAAW,CAAC,qBAAqB,EAAE,CAAC;4BACtC,IAAI,aAAa,EAAE,CAAC;gCAClB,MAAM,OAAO,GAAG,MAAM,6BAA6B,CACjD,aAAa,CAAC,UAAU,EACxB;oCACE,KAAK,EAAE,aAAa,CAAC,KAAK;oCAC1B,UAAU,EAAE,aAAa,CAAC,UAAU;oCACpC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;iCAC/B,CACF,CAAC;gCACF,IAAI,CAAC,OAAO;oCAAE,OAAO,iBAA0B,CAAC;4BAClD,CAAC;4BACD,IACE,CAAC,CAAC,MAAM,2CAA2C,CACjD,IAAI,CAAC,EAAE,CACR,CAAC,EACF,CAAC;gCACD,MAAM,SAAS,GACb,MAAM,uCAAuC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gCACzD,OAAO,SAAS;oCACd,CAAC,CAAE,WAAqB;oCACxB,CAAC,CAAE,iBAA2B,CAAC;4BACnC,CAAC;4BACD,OAAO,iBAA0B,CAAC;wBACpC,CAAC;wBACD,IAAI,oBAAoB,EAAE,CAAC;4BACzB,OAAO,iBAA0B,CAAC;wBACpC,CAAC;wBACD,OAAO;oBACT,CAAC;oBACD,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAC5C,IAAI,CAAC,UAAU,EACf,IAAI,EACJ,OAAO,EAAE,KAAK,EACd,IAAI,CAAC,KAAK,CACX,CAAC;oBACF,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,IAAI,EACJ;wBACE,OAAO;wBACP,YAAY,EAAE,gBAAgB,GAAG,SAAS;wBAC1C,OAAO;wBACP,gBAAgB;wBAChB,KAAK;wBACL,MAAM,EAAE,SAAS,EAAE;wBACnB,MAAM,EAAE,OAAO,EAAE,MAAM;wBACvB,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,KAAK,EAAE,OAAO,EAAE,KAAK;qBACtB,EACD;wBACE,OAAO,EAAE,sBAAsB;wBAC/B,sBAAsB,EAAE,oBAAoB;qBAC7C,CACF,CAAC;oBACF,IAAI,MAAM,EAAE,MAAM,KAAK,kBAAkB,EAAE,CAAC;wBAC1C,8BAA8B,GAAG,IAAI,CAAC;wBACtC,MAAM,UAAU,GAAG,MAAM,kCAAkC,CACzD,IAAI,EACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,MAAM,CAAC,YAAY,EACnB,KAAK,EACL,MAAM,CAAC,aAAa,CACrB,CAAC;wBACF,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;4BAChC,OAAO,iBAA0B,CAAC;wBACpC,CAAC;wBACD,OAAO,gBAAyB,CAAC;oBACnC,CAAC;oBACD,IACE,MAAM,EAAE,MAAM,KAAK,kBAAkB;wBACrC,MAAM,EAAE,MAAM,KAAK,iBAAiB,EACpC,CAAC;wBACD,OAAO,iBAA0B,CAAC;oBACpC,CAAC;oBACD,IAAI,MAAM,EAAE,MAAM,KAAK,iBAAiB,EAAE,CAAC;wBACzC,OAAO,iBAA0B,CAAC;oBACpC,CAAC;oBACD,OAAO,WAAoB,CAAC;gBAC9B,CAAC,CACF,CAAC;gBACF,IAAI,gBAAgB,KAAK,gBAAgB,EAAE,CAAC;oBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;gBAC7D,CAAC;gBACD,IAAI,gBAAgB,KAAK,iBAAiB,EAAE,CAAC;oBAC3C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;gBAChD,CAAC;gBACD,IAAI,gBAAgB,KAAK,iBAAiB,EAAE,CAAC;oBAC3C,MAAM,cAAc,CAClB,MAAM,EACN,uDAAuD,CACxD,CAAC;oBACF,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAChD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,gBAAgB,CACtB,CAAC;oBACF,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM,8BAA8B,CAAC;4BACnC,MAAM,EAAE,QAAQ,CAAC,EAAE;4BACnB,IAAI,EAAE;gCACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;gCACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gCACvC,eAAe,EAAE,QAAQ,CAAC,aAAa;oCACrC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,EAAE;oCACvC,CAAC,CAAC,SAAS;6BACd;4BACD,KAAK;4BACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;yBAC3B,CAAC,CAAC;oBACL,CAAC;oBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;gBAC5D,CAAC;gBACD,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAChC,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAChD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,gBAAgB,CACtB,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,8BAA8B,CAAC;wBACnC,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,IAAI,EAAE;4BACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;4BACvC,eAAe,EAAE,QAAQ,CAAC,aAAa;gCACrC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,EAAE;gCACvC,CAAC,CAAC,SAAS;yBACd;wBACD,KAAK;wBACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,0BAA0B,CAAC;oBAC/B,QAAQ,EAAE,UAAU;oBACpB,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACf,OAAO,CAAC,KAAK,CACX,6DAA6D,EAC7D,GAAG,CACJ,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC9B,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,YAAY,GAAG,GAAG,EAAE,OAAO;oBAC/B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;oBACpC,CAAC,CAAC,kBAAkB,CAAC;gBACvB,IAAI,qBAAqB,EAAE,CAAC;oBAC1B,IAAI,CAAC;wBACH,MAAM,UAAU,GAAG,MAAM,kCAAkC,CACzD,IAAI,EACJ,qBAAqB,CAAC,OAAO,EAC7B,GAAG,qBAAqB,CAAC,YAAY,KAAK,YAAY,EAAE,EACxD,KAAK,EACL,qBAAqB,CACtB,CAAC;wBACF,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;4BAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;wBAChD,CAAC;wBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;oBAC7D,CAAC;oBAAC,OAAO,eAAe,EAAE,CAAC;wBACzB,MAAM,iBAAiB,GACrB,eAAe,YAAY,KAAK;4BAC9B,CAAC,CAAC,eAAe,CAAC,OAAO;4BACzB,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;wBAC9B,MAAM,+BAA+B,CACnC,IAAI,EACJ,qDAAqD,iBAAiB,EAAE,EACxE,KAAK,CACN,CAAC,KAAK,CAAC,CAAC,sBAAsB,EAAE,EAAE;4BACjC,OAAO,CAAC,KAAK,CACX,uEAAuE,EACvE,sBAAsB,CACvB,CAAC;wBACJ,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,IAAI,6BAA6B,EAAE,CAAC;oBACzC,IAAI,CAAC;wBACH,MAAM,UAAU,GAAG,MAAM,kCAAkC,CACzD,IAAI,EACJ,6BAA6B,EAC7B,mEAAmE,YAAY,EAAE,EACjF,KAAK,EACL,qBAAqB,CACtB,CAAC;wBACF,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;4BAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;wBAChD,CAAC;wBACD,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;wBAC3D,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;oBAC7D,CAAC;oBAAC,OAAO,eAAe,EAAE,CAAC;wBACzB,MAAM,iBAAiB,GACrB,eAAe,YAAY,KAAK;4BAC9B,CAAC,CAAC,eAAe,CAAC,OAAO;4BACzB,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;wBAC9B,OAAO,CAAC,KAAK,CACX,8DAA8D,EAC9D,eAAe,CAChB,CAAC;wBACF,MAAM,+BAA+B,CACnC,IAAI,EACJ,2DAA2D,iBAAiB,EAAE,EAC9E,KAAK,CACN,CAAC,KAAK,CAAC,CAAC,sBAAsB,EAAE,EAAE;4BACjC,OAAO,CAAC,KAAK,CACX,iFAAiF,EACjF,sBAAsB,CACvB,CAAC;wBACJ,CAAC,CAAC,CAAC;wBACH,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;wBAC3D,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;oBAC3C,CAAC;gBACH,CAAC;qBAAM,IAAI,8BAA8B,EAAE,CAAC;oBAC1C,MAAM,+BAA+B,CACnC,IAAI,EACJ,mDAAmD,YAAY,EAAE,EACjE,KAAK,CACN,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,EAAE;wBAC1B,OAAO,CAAC,KAAK,CACX,qEAAqE,EACrE,eAAe,CAChB,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,yBAAyB,EAAE,CAAC;oBACtD,MAAM,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,MAAM,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBAChD,CAAC;gBACD,iEAAiE;gBACjE,iEAAiE;gBACjE,iEAAiE;gBACjE,2DAA2D;gBAC3D,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;gBAC3D,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,mEAAmE;QACnE,4DAA4D;QAC5D,gEAAgE;QAChE,8DAA8D;QAC9D,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,2BAA2B,EAC/B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAgC,CAAC;YACpE,MAAM,cAAc,GAAG,IAAI,EAAE,cAAc,CAAC;YAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;YAC9C,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO;wBACL,KAAK,EACH,4GAA4G;qBAC/G,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,kBAAkB,CAC5B,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,CACzC,CAAC;gBACF,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC;oBACtD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,0BAA0B,CAAC,cAAc,EAAE;oBAC/C,QAAQ,EAAE,UAAU;iBACrB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,sEAAsE;gBACtE,iEAAiE;gBACjE,MAAM,mBAAmB,CACvB,cAAc,EACd,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,gCAAgC,CAChE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CACX,kDAAkD,EAClD,GAAG,CACJ,CAAC;gBACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;YACzD,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QACtC,CAAC,CAAC,CACH,CAAC;QAEF,iEAAiE;QACjE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,qBAAqB,EACzB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,qEAAqE;YACrE,qEAAqE;YACrE,8BAA8B;YAC9B,MAAM,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;YAChD,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;gBACnD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrD,MAAM,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,UAAU,GACd,MAAM,EAAE,SAAS,KAAK,sBAAsB;oBAC1C,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,MAAM,EAAE,SAAS,KAAK,mBAAmB;wBACzC,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,MAAM,EAAE,SAAS,KAAK,qBAAqB;4BAC3C,CAAC,CAAC,QAAQ;4BACV,CAAC,CAAC,IAAI,CAAC;gBACf,IAAI,CAAC,UAAU,IAAI,OAAO,MAAM,EAAE,KAAK,KAAK,QAAQ;oBAAE,OAAO,IAAI,CAAC;gBAClE,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;gBAC3D,MAAM,SAAS,GACb,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;gBACzD,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;gBACjD,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;oBACxD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC;oBAC5C,EAAE,EAAE,MAAM,CAAC,KAAK;oBAChB,MAAM,EAAE,UAAU;oBAClB,WAAW;oBACX,MAAM;oBACN,QAAQ,EACN,OAAO,OAAO,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBACnE,SAAS;oBACT,SAAS;iBACV,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC;gBAC1B,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;oBAC5B,IAAI,OAAO,CAAC,KAAK;wBAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;oBAC3D,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,UAAU,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,WAAW;oBAAE,OAAO,IAAI,CAAC;gBAEtC,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9E,MAAM,QAAQ,GAAG;oBACf,GAAG,OAAO,CAAC,QAAQ;oBACnB,IAAI,EAAE,+DAA+D;oBACrE,iBAAiB,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;oBACxC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,eAAe,EAAE;wBACf,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe;wBACnC,OAAO,EAAE,WAAW,OAAO,CAAC,EAAE,EAAE;qBACjC;iBACF,CAAC;gBACF,MAAM,iBAAiB,CAAC;oBACtB,EAAE,EAAE,MAAM;oBACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;oBAC3C,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;oBACrC,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,gBAAgB,EAAE,WAAW,OAAO,CAAC,EAAE,EAAE;oBACzC,aAAa,EAAE,6BAA6B,CAAC;wBAC3C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;wBAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;qBAC1C,CAAC;iBACH,CAAC,CAAC;gBACH,MAAM,8BAA8B,CAAC;oBACnC,MAAM;oBACN,IAAI,EAAE;wBACJ,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;wBAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;qBAC1C;oBACD,KAAK;oBACL,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;iBAC3B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CACH,CAAC;QAEF,gEAAgE;QAChE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,gBAAgB,EACpB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YACnC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG;gBACZ,SAAS,EAAE,OAAO,CAAC,KAAK;gBACxB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;gBAC1C,UAAU,EAAE,GAAG,EAAE,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO;aAC3D,CAAC;YACF,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,OAAO;oBACL,aAAa,EAAE,MAAM,4BAA4B,CAC/C,KAAK,EACL,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAChE;iBACF,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAGlC,CAAC;YACF,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;YAC/C,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBACjC,OAAO;oBACL,YAAY,EAAE,MAAM,iCAAiC,CAAC,EAAE,EAAE,KAAK,CAAC;iBACjE,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,YAAY,GAAG,CACnB,MAAM,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC,CACnD,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;gBAC7C,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAChD,YAAY,CAAC,QAAQ,EACrB,YAAY,CAAC,eAAe,CAC7B,CAAC;gBACF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,EAAE,EAAE,KAAK,EAAE;wBAC7D,MAAM,EAAE,SAAS;wBACjB,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,mBAAmB;wBAC9B,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;qBAC5B,CAAC,CAAC;oBACH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;gBACnC,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,EAAE,EAAE,KAAK,EAAE;oBAC7D,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;oBAC7D,SAAS,EAAE,MAAM,CAAC,KAAK;oBACvB,eAAe,EAAE,MAAM,CAAC,SAAS;oBACjC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1D,CAAC,CAAC;gBACH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;YACnC,CAAC;YACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;QACtD,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,SAAS,EACb,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAChE,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,OAAO;oBACL,MAAM,EAAE,MAAM,qBAAqB,CAAC,MAAM,EAAE;wBAC1C,QAAQ,EACN,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;wBACjE,QAAQ,EACN,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;qBAClE,CAAC;iBACH,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAE/B,CAAC;gBACL,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO;oBACL,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAC5D,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,UAAU,EACd,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAChE,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;YAChE,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAE/B,CAAC;gBACL,OAAO;oBACL,MAAM,EAAE,MAAM,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC;iBACvD,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO;oBACL,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB;iBAC7D,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,SAAS,EACb,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,IAAI,GACR,MAAM,KAAK,MAAM;gBACf,CAAC,CAAE,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAA6B;gBACtD,CAAC,CAAC,IAAI,CAAC;YACX,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBAC/B,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ;oBACjC,CAAC,CAAC,IAAI,CAAC,OAAO;oBACd,CAAC,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,CAAC,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACtD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAC9B,CAAC;YACF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;YAClD,CAAC;YACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7D,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,IAAI,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO;oBACL,MAAM,EAAE,MAAM,2BAA2B,CACvC;wBACE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;wBAC7B,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;wBAC3C,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;qBACpC,EACD,KAAK,CAAC,EAAE,CACT;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO;oBACL,MAAM,EAAE,MAAM,uBAAuB,CACnC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EACjC,KAAK,CAAC,EAAE,CACT;iBACF,CAAC;YACJ,CAAC;YACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;QAChD,CAAC,CAAC,CACH,CAAC;QAEF,iEAAiE;QACjE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,iBAAiB,EACrB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,gBAAgB,GAAG,uBAAuB,CAC9C,KAAK,EACL,GAAG,CAAC,uBAAuB,CAC5B,CAAC;YACF,MAAM,gBAAgB,GAAG,uBAAuB,CAC9C,KAAK,EACL,GAAG,CAAC,gBAAgB,CACrB,CAAC;YACF,MAAM,uBAAuB,GAAG,uBAAuB,CACrD,KAAK,EACL,GAAG,CAAC,qBAAqB,CAC1B,CAAC;YACF,IACE,CAAC,gBAAgB;gBACjB,CAAC,gBAAgB;gBACjB,CAAC,uBAAuB,EACxB,CAAC;gBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC;YAC3D,CAAC;YACD,iBAAiB,CACf,KAAK,EACL,qBAAqB,EACrB,yDAAyD,CAC1D,CAAC;YACF,OAAO,uBAAuB,CAAC;gBAC7B,gBAAgB;gBAChB,gBAAgB;gBAChB,uBAAuB;aACxB,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,sBAAsB,EAC1B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;YACvD,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC;gBACH,wBAAwB,CAAC;oBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;oBAC1C,OAAO,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI;iBAC3B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO;oBACL,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;iBAClE,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,qBAAqB,CAChC;gBACE,SAAS,EAAE,OAAO,CAAC,KAAK;gBACxB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;aAChD,EACD,KAAK,IAAI,EAAE;gBACT,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAAC,CAAC;gBACxD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,qBAAqB,CAAC,CAAC;gBAChE,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,sBAAsB,CAAC,CAAC;gBAClE,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;oBACjD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO;wBACL,KAAK,EACH,kGAAkG;qBACrG,CAAC;gBACJ,CAAC;gBACD,MAAM,WAAW,GAAG,uBAAuB,CACzC,KAAK,EACL,GAAG,CAAC,uBAAuB,CAC5B,CAAC;gBACF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC;gBAC/D,CAAC;gBACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,gBAAgB,CAAC;oBAC7B,WAAW;oBACX,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;oBAC/C,GAAG,EAAE,oBAAoB;oBACzB,UAAU,EAAE,IAAI;oBAChB,SAAS,EACP,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY;iBACjE,CAAC,CAAC;gBACH,OAAO,YAAY,CACjB,KAAK,EACL,sBAAsB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EACxD,GAAG,CACJ,CAAC;YACJ,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,uBAAuB,EAC3B,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;YACzC,CAAC;YACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACpC,OAAO,cAAc,CAAC,6CAA6C,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,gBAAgB,GAAG,uBAAuB,CAC9C,KAAK,EACL,GAAG,CAAC,uBAAuB,CAC5B,CAAC;YACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,cAAc,CAAC,0CAA0C,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,KAAK,GAAG,gBAAgB,CAC5B,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EACzD,gBAAgB,CACjB,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACzD,IACE,KAAK,CAAC,GAAG,KAAK,oBAAoB;gBAClC,CAAC,OAAO,EAAE,KAAK;gBACf,CAAC,KAAK,CAAC,KAAK;gBACZ,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;gBACzD,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,EAC/D,CAAC;gBACD,OAAO,cAAc,CACnB,yEAAyE,CAC1E,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAChE,IAAI,CAAC,IAAI;gBAAE,OAAO,cAAc,CAAC,qCAAqC,CAAC,CAAC;YACxE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,wBAAwB,CAAC;oBACtC,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;oBAC1C,OAAO,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI;iBAC3B,CAAC,CAAC;gBACH,OAAO,MAAM,qBAAqB,CAChC;oBACE,SAAS,EAAE,MAAM,CAAC,UAAU;oBAC5B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS;iBACjC,EACD,KAAK,IAAI,EAAE;oBACT,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAAC,CAAC;oBACxD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,qBAAqB,CAAC,CAAC;oBAChE,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;wBAC/B,OAAO,cAAc,CAAC,gCAAgC,CAAC,CAAC;oBAC1D,CAAC;oBACD,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC;wBACzC,IAAI;wBACJ,QAAQ;wBACR,YAAY;wBACZ,WAAW,EAAE,KAAK,CAAC,WAAW;qBAC/B,CAAC,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;oBAC7D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;wBACf,OAAO,cAAc,CACnB,yEAAyE,CAC1E,CAAC;oBACJ,CAAC;oBACD,IACE,KAAK,CAAC,IAAI,EAAE,EAAE;wBACd,MAAM,CAAC,MAAM;wBACb,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,EAC/B,CAAC;wBACD,OAAO,cAAc,CACnB,8DAA8D,CAC/D,CAAC;oBACJ,CAAC;oBACD,MAAM,KAAK,GAAG,gCAAgC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC9D,MAAM,YAAY,GAAG,MAAM,6BAA6B,CAAC;wBACvD,GAAG,KAAK;wBACR,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,eAAe,EAAE,MAAM,CAAC,SAAS;wBACjC,aAAa,EAAE,MAAM,CAAC,SAAS;qBAChC,CAAC,CAAC;oBACH,MAAM,qBAAqB,CACzB,OAAO,EACP,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EACrC,SAAS,EACT,MAAM,CAAC,UAAU,CAClB,CAAC;oBACF,OAAO,qBAAqB,CAC1B,KAAK,EACL,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,cAAc,IAAI,OAAO,EAC/D;wBACE,UAAU,EAAE,IAAI;wBAChB,OAAO,EAAE,cAAc;wBACvB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,YAAY;qBAC3C,CACF,CAAC;gBACJ,CAAC,CACF,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;gBACrD,OAAO,cAAc,CAAC,4CAA4C,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,iEAAiE;QACjE,qEAAqE;QACrE,EAAE,CAAC,GAAG,CACJ,GAAG,CAAC,EAAE,EACN,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,iEAAiE;YACjE,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE7C,uDAAuD;YACvD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACxD,kEAAkE;YAClE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY;gBAAE,OAAO;YACtC,0DAA0D;YAC1D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,OAAO;YAClC,6DAA6D;YAC7D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,cAAc;gBAAE,OAAO;YACxC,6DAA6D;YAC7D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,mBAAmB;gBAAE,OAAO;YAC7C,yEAAyE;YACzE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,0BAA0B;gBAAE,OAAO;YACpD,kEAAkE;YAClE,qEAAqE;YACrE,sEAAsE;YACtE,sEAAsE;YACtE,yDAAyD;YACzD,IACE,KAAK,CAAC,CAAC,CAAC,KAAK,eAAe;gBAC5B,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;gBACrB,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;gBACtB,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EACrB,CAAC;gBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAChC,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,0CAA0C;YAEnE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;YACxC,CAAC;YAED,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,qBAAqB,QAAQ,EAAE,EAAE,CAAC;YACpD,CAAC;YAED,yCAAyC;YACzC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG;oBACrB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM;oBACvB,QAAQ;iBACT,CAAC;YACJ,CAAC;YAED,0DAA0D;YAC1D,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5C,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;gBAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC,mBAAmB,CAAC,GAAG,CAAC,EACxB,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CACjC,CAAC;gBACF,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;gBAC/C,MAAM,CAAC,UAAU,GAAG,GAAG,OAAO,GAAG,CAAC,IAAI,QAAQ,UAAU,CAAC;gBACzD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;oBACxD,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,0DAA0D;YAC1D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9C,kEAAkE;gBAClE,kEAAkE;gBAClE,iEAAiE;gBACjE,iEAAiE;gBACjE,sCAAsC;gBACtC,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;oBACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;4BAC1C,6DAA6D;4BAC7D,qDAAqD;4BACrD,gCAAgC;4BAChC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BAC9B,OAAO;gCACL,EAAE,EAAE,KAAK;gCACT,KAAK,EACH,8DAA8D;6BACjE,CAAC;wBACJ,CAAC;wBACD,gEAAgE;wBAChE,mDAAmD;wBACnD,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;4BACrC,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;wBAC1D,CAAC,CAAC,CAAC;wBACH,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;oBAClE,IAAI,CAAC;wBACH,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;oBAC9C,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,OAAO,CAAC,IAAI,CACV,qCAAqC,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CACnE,CAAC;wBACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;oBAC9C,CAAC;oBACD,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;wBACrC,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;oBAC1D,CAAC,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,iBAAiB,GACrB,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;gBAEtD,2DAA2D;gBAC3D,8DAA8D;gBAC9D,wCAAwC;gBACxC,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAC9C,iBAAiB,EACjB,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CACxC,CAAC;gBAEF,gEAAgE;gBAChE,kEAAkE;gBAClE,gEAAgE;gBAChE,+DAA+D;gBAC/D,oDAAoD;gBACpD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAClE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAC7B,CAAC;gBACF,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;gBAChD,CAAC;gBACD,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBACzB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,YAAY,CAAC,QAAQ,IAAI,IAAI,CAAC;gBACvC,CAAC;gBAED,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;oBACjC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,EAAE,KAAK,EAAE,eAAe,QAAQ,iBAAiB,EAAE,CAAC;gBAC7D,CAAC;gBAED,IAAI,QAAQ,GAAG,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CACjE,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CACpC,CAAC;gBACF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;oBACpC,IAAI,CAAC;wBACH,QAAQ,GAAG,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAC7D,OAAO,CAAC,uBAAwB,CAAC,QAAS,CAAC,CAC5C,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,+DAA+D;wBAC/D,gEAAgE;wBAChE,+DAA+D;wBAC/D,OAAO,CAAC,IAAI,CACV,oCAAoC,QAAQ,mBAAmB,EAC/D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,IAAI,uBAAuB,GACzB,IAAI,CAAC;gBACP,IACE,QAAQ,CAAC,QAAQ,KAAK,OAAO;oBAC7B,QAAQ,CAAC,gBAAgB,KAAK,IAAI;oBAClC,CAAC,OAAO,EAAE,uBAAuB,EACjC,CAAC;oBACD,IAAI,CAAC;wBACH,uBAAuB,GAAG,MAAM,qBAAqB,CACnD,iBAAiB,EACjB,GAAG,EAAE,CAAC,yCAAyC,CAAC,QAAS,CAAC,CAC3D,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,+DAA+D;wBAC/D,8DAA8D;wBAC9D,iEAAiE;wBACjE,gEAAgE;wBAChE,gEAAgE;wBAChE,MAAM,QAAQ,GACZ,GAAG,YAAY,gCAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC/D,IAAI,QAAQ,EAAE,CAAC;4BACb,OAAO,CAAC,IAAI,CACV,4DAA4D,EAC5D,QAAQ,CAAC,OAAO,CACjB,CAAC;4BACF,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gCAC7B,IAAI,CAAC;oCACH,MAAM,mBAAmB,CACvB,KAAK,EACL,QAAS,EACT,QAAQ,CAAC,iBAAiB,EAC1B;wCACE,SAAS,EAAE,WAAW,QAAS,CAAC,QAAQ,IAAI,SAAS,IAAI,QAAS,CAAC,QAAQ,IAAI,SAAS,IAAI,QAAQ,CAAC,MAAM,EAAE;wCAC7G,WAAW,EAAE,4BAA4B;qCAC1C,CACF,CAAC;gCACJ,CAAC;gCAAC,OAAO,SAAS,EAAE,CAAC;oCACnB,OAAO,CAAC,IAAI,CACV,kDAAkD,EAClD,SAAS,YAAY,KAAK;wCACxB,CAAC,CAAC,SAAS,CAAC,OAAO;wCACnB,CAAC,CAAC,SAAS,CACd,CAAC;oCACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oCAC9B,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;gCAC5C,CAAC;4BACH,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,KAAK,CACX,0DAA0D,EAC1D,GAAG,CACJ,CAAC;wBACJ,CAAC;wBACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,IAAI,gBAAgB,GAAgC;oBAClD,UAAU,EAAE,eAAe,QAAQ,EAAE;oBACrC,KAAK,EAAE,IAAqB;oBAC5B,aAAa,EAAE,SAAkB;iBAClC,CAAC;gBACF,IAAI,OAAO,EAAE,uBAAuB,EAAE,CAAC;oBACrC,IAAI,CAAC;wBACH,gBAAgB,GAAG,MAAM,qBAAqB,CAC5C,iBAAiB,EACjB,GAAG,EAAE,CACH,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAwB,CAAC,QAAQ,CAAC,CAAC,CAC9D,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CACX,wDAAwD,EACxD,GAAG,CACJ,CAAC;wBACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;qBAAM,IAAI,uBAAuB,EAAE,CAAC;oBACnC,gBAAgB,GAAG,uBAAuB,CAAC;oBAC3C,IAAI,uBAAuB,CAAC,eAAe,EAAE,CAAC;wBAC5C,IAAI,CAAC,OAAO,EAAE,8BAA8B,EAAE,CAAC;4BAC7C,MAAM,WAAW,GACf,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ;gCACxC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;gCACzB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;gCAC7B,CAAC,CAAC,IAAI,CAAC;4BACX,MAAM,UAAU,GAAG,WAAW;gCAC5B,CAAC,CAAC,gIAAgI,WAAW,mBAAmB;gCAChK,CAAC,CAAC,wKAAwK,CAAC;4BAC7K,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gCAC7B,IAAI,CAAC;oCACH,MAAM,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;wCACrD,SAAS,EAAE,2BAA2B,QAAQ,CAAC,QAAQ,IAAI,SAAS,IAAI,QAAQ,CAAC,QAAQ,IAAI,SAAS,EAAE;qCACzG,CAAC,CAAC;gCACL,CAAC;gCAAC,OAAO,SAAS,EAAE,CAAC;oCACnB,OAAO,CAAC,IAAI,CACV,0DAA0D,EAC1D,SAAS,YAAY,KAAK;wCACxB,CAAC,CAAC,SAAS,CAAC,OAAO;wCACnB,CAAC,CAAC,SAAS,CACd,CAAC;oCACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oCAC9B,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;gCAC5C,CAAC;4BACH,CAAC;4BACD,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BAC9B,OAAO,IAAI,CAAC;wBACd,CAAC;wBACD,6DAA6D;wBAC7D,8DAA8D;wBAC9D,sDAAsD;wBACtD,QAAQ,CAAC,YAAY;4BACnB,ySAAyS,CAAC;wBAC5S,2DAA2D;wBAC3D,+DAA+D;wBAC/D,6DAA6D;wBAC7D,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;4BAC7B,MAAM,WAAW,GACf,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ;gCACxC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;gCACzB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;gCAC7B,CAAC,CAAC,IAAI,CAAC;4BACX,MAAM,UAAU,GAAG,WAAW;gCAC5B,CAAC,CAAC,iIAAiI,WAAW,2CAA2C;gCACzL,CAAC,CAAC,2LAA2L,CAAC;4BAChM,IAAI,CAAC;gCACH,MAAM,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;oCACrD,SAAS,EAAE,kBAAkB,QAAQ,CAAC,QAAQ,IAAI,SAAS,IAAI,QAAQ,CAAC,QAAQ,IAAI,SAAS,EAAE;iCAChG,CAAC,CAAC;4BACL,CAAC;4BAAC,OAAO,SAAS,EAAE,CAAC;gCACnB,OAAO,CAAC,IAAI,CACV,yDAAyD,EACzD,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAC3D,CAAC;gCACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gCAC9B,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;4BAC5C,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;oBACjC,IAAI,CAAC;wBACH,gBAAgB,CAAC,UAAU,GAAG,MAAM,qBAAqB,CACvD,iBAAiB,EACjB,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAa,CAAC,QAAQ,CAAC,CAAC,CACvD,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CACX,oDAAoD,EACpD,GAAG,CACJ,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC;wBACH,gBAAgB,GAAG,MAAM,qBAAqB,CAC5C,iBAAiB,EACjB,GAAG,EAAE,CAAC,yCAAyC,CAAC,QAAS,CAAC,CAC3D,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CACX,2DAA2D,EAC3D,GAAG,CACJ,CAAC;wBACF,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;oBAC7B,QAAQ,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,OAAO,CAAC;gBACzD,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE;oBACxC,OAAO;oBACP,gEAAgE;oBAChE,gEAAgE;oBAChE,+DAA+D;oBAC/D,YAAY,EAAE,gBAAgB;oBAC9B,OAAO;oBACP,gBAAgB;oBAChB,KAAK;oBACL,MAAM,EAAE,SAAS,EAAE;oBACnB,MAAM,EAAE,OAAO,EAAE,MAAM;oBACvB,KAAK,EAAE,OAAO,EAAE,KAAK;oBACrB,UAAU,EAAE,gBAAgB,CAAC,UAAU;oBACvC,KAAK,EAAE,gBAAgB,CAAC,KAAK;oBAC7B,aAAa,EAAE,gBAAgB,CAAC,aAAa;oBAC7C,aAAa,EAAE,OAAO,EAAE,aAAa;oBACrC,QAAQ;iBACT,CAAC,CAAC;gBACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxC,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;YAED,0DAA0D;YAC1D,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,UAAU,CAAC,EAAE,KAAK,KAAK;oBAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;gBAChE,8DAA8D;gBAC9D,8DAA8D;gBAC9D,0CAA0C;gBAC1C,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC1D,MAAM,qBAAqB,CACzB,QAAQ,EACR,EAAE,OAAO,EAAE,IAAI,EAAE,EACjB,SAAS,EACT,OAAO,EAAE,KAAK,CACf,CAAC;gBACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/C,CAAC;YAED,0DAA0D;YAC1D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,UAAU,CAAC,EAAE,KAAK,KAAK;oBAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;gBAChE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC1D,MAAM,qBAAqB,CACzB,QAAQ,EACR,EAAE,OAAO,EAAE,KAAK,EAAE,EAClB,SAAS,EACT,OAAO,EAAE,KAAK,CACf,CAAC;gBACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAChD,CAAC;YAED,0DAA0D;YAC1D,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC5C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,UAAU,CAAC,EAAE,KAAK,KAAK;oBAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;gBAChE,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;oBAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;oBAClC,MAAM,UAAU,GAAG,GAAG,OAAO,GAAG,CAAC,mBAAmB,CAAC;oBACrD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;oBAC/C,IAAI,CAAC,GAAG;wBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;oBAC3C,MAAM,KAAK,GAAG,MAAM,qBAAqB,CACvC,mBAAmB,CAAC,GAAG,CAAC,EACxB,GAAG,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAC1C,CAAC;oBACF,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAC/C,mBAAmB,CAAC,GAAG,CAAC,EACxB,GAAG,EAAE,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAC/C,CAAC;oBACF,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;wBAC7B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO;4BACL,KAAK,EACH,yFAAyF;yBAC5F,CAAC;oBACJ,CAAC;oBACD,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,+BAA+B,KAAK,aAAa,EACjD;4BACE,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;4BAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,GAAG,EAAE,UAAU;gCACf,YAAY,EAAE,aAAa;6BAC5B,CAAC;yBACH,CACF,CAAC;wBACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;wBAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;oBAC1D,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC9B,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChC,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;YAC9D,CAAC;YAED,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAChC,CAAC,CAAC,CACH,CAAC;QAEF,iEAAiE;QACjE,wEAAwE;QACxE,mEAAmE;QACnE,qEAAqE;QACrE,8CAA8C;QAC9C,yBAAyB,CAAC;YACxB,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;SAC7C,CAAC,CAAC;QACH,4BAA4B,CAAC,UAAU,CAAC,CAAC;QACzC,2BAA2B,EAAE,CAAC;QAC9B,0BAA0B,EAAE,CAAC;QAE7B,iEAAiE;QACjE,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,sDAAsD;YACtD,UAAU,CAAC,GAAG,EAAE;gBACd,iEAAiE;gBACjE,mEAAmE;gBACnE,oEAAoE;gBACpE,mEAAmE;gBACnE,8CAA8C;gBAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAC7C,MAAM,UAAU,GAAG,OAAO;oBACxB,CAAC,CAAC,GAAG,yBAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB;oBACjE,CAAC,CAAC,SAAS,CAAC;gBAEd,KAAK,qBAAqB,CAAC;oBACzB,YAAY,EAAE,gBAAgB;oBAC9B,OAAO;oBACP,gBAAgB;oBAChB,KAAK,EAAE,KAAK,IAAI,EAAE;oBAClB,MAAM,EAAE,SAAS,EAAE;oBACnB,UAAU,EAAE,yBAAyB;oBACrC,UAAU;iBACX,CAAC,CAAC;YACL,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK;YACnB,OAAO,CAAC,GAAG,CACT,kDAAkD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/F,CAAC;IACN,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,wBAAwB,EAAE,CAAC;AAEpE,wCAAwC;AACxC,SAAS,UAAU,CAAC,KAAU;IAC5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QAChE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CACjC,OAAO,OAAO,CAAC,GAAG,KAAK,UAAU;YAC/B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACnB,CAAC,CAAE,OAAkC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC;QACvD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC;QACnD,OAAO,yBAAyB,CAAC,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI;YAChC,GAAG,CAAC,OAAO;gBACT,CAAC,CAAC;oBACE,aAAa,EAAE,MAAM,CAAC,aAAa,KAAK,IAAI;oBAC5C,aAAa,EAAE,MAAM,CAAC,aAAa,KAAK,IAAI;iBAC7C;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI;YAC7C,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;SAC5C,CAAC;IACJ,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;QACpC,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CACzC,MAAsC;IAEtC,MAAM,YAAY,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,OAAO,GAA6B,EAAE,CAAC;IAC7C,IAAI,YAAY,EAAE,OAAO,EAAE,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,IAAI,YAAY,EAAE,OAAO,EAAE,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,IAAI,YAAY,EAAE,OAAO,EAAE,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,IAAI,YAAY,EAAE,OAAO,EAAE,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,OAAO,KAAK,KAAK,SAAS;QACxB,KAAK,KAAK,UAAU;QACpB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,UAAU;QACpB,KAAK,KAAK,SAAS;QACnB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAU,EAAE,KAAc;IAC/D,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;QAC9C,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,eAAe;YAC5B,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;gBACvB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB;oBAChC,KAAK,CAAC,IAAI,KAAK,iBAAiB;oBAClC,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,GAAG,CAAC;QACd,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,KAAK,CAAC;AACd,CAAC","sourcesContent":["import {\n defineEventHandler,\n setResponseStatus,\n setResponseHeader,\n getMethod,\n getQuery,\n sendRedirect,\n} from \"h3\";\nimport { getRequestHeader } from \"h3\";\nimport { createRemoteJWKSet, jwtVerify } from \"jose\";\n\nimport {\n AGENT_BACKGROUND_PROCESSOR_FIELD,\n AGENT_BACKGROUND_PROCESSOR_INTEGRATION,\n} from \"../agent/durable-background.js\";\nimport { abortRun } from \"../agent/run-manager.js\";\nimport { getOrgContext, resolveOrgIdForEmail } from \"../org/context.js\";\nimport { loadResourcesForPrompt } from \"../server/agent-chat-plugin.js\";\nimport { withConfiguredAppBasePath } from \"../server/app-base-path.js\";\nimport { getSession } from \"../server/auth.js\";\nimport { FRAMEWORK_ROUTE_PREFIX } from \"../server/core-routes-plugin.js\";\nimport { resolveSecret } from \"../server/credential-provider.js\";\nimport {\n getH3App,\n markDefaultPluginProvided,\n} from \"../server/framework-request-handler.js\";\nimport {\n decodeOAuthState,\n encodeOAuthState,\n oauthCallbackResponse,\n oauthErrorPage,\n resolveOAuthRedirectUri,\n} from \"../server/google-oauth.js\";\nimport { readBody } from \"../server/h3-helpers.js\";\nimport { runWithRequestContext } from \"../server/request-context.js\";\nimport {\n processA2AContinuationById,\n processDueA2AContinuations,\n recoverDueA2AContinuations,\n} from \"./a2a-continuation-processor.js\";\nimport {\n failA2AContinuation,\n hasActiveA2AContinuationsForIntegrationTask,\n} from \"./a2a-continuations-store.js\";\nimport { mergeIntegrationAdapters } from \"./adapter-overrides.js\";\nimport { discordAdapter } from \"./adapters/discord.js\";\nimport { emailAdapter } from \"./adapters/email.js\";\nimport { googleDocsAdapter } from \"./adapters/google-docs.js\";\nimport { microsoftTeamsAdapter } from \"./adapters/microsoft-teams.js\";\nimport { slackAdapter } from \"./adapters/slack.js\";\nimport { telegramAdapter } from \"./adapters/telegram.js\";\nimport { whatsappAdapter } from \"./adapters/whatsapp.js\";\nimport {\n createComputerApprovalRequest,\n decideComputerApproval,\n listComputerApprovalsForOwner,\n} from \"./computer-supervision-store.js\";\nimport { ComputerSupervisionError } from \"./computer-supervision.js\";\nimport { getIntegrationConfig, saveIntegrationConfig } from \"./config-store.js\";\nimport { claimIntegrationControl } from \"./controls-store.js\";\nimport {\n startGoogleDocsPoller,\n handlePushNotification,\n} from \"./google-docs-poller.js\";\nimport {\n IntegrationIdentityDeclinedError,\n resolveDefaultIntegrationExecutionContext,\n} from \"./identity.js\";\nimport {\n disconnectIntegrationInstallation,\n listIntegrationInstallations,\n resolveIntegrationTokenBundle,\n updateIntegrationInstallation,\n upsertIntegrationInstallation,\n} from \"./installations-store.js\";\nimport { recoverDueIntegrationCampaigns } from \"./integration-campaign-recovery.js\";\nimport {\n claimIntegrationCampaignDeliveryForTask,\n completeIntegrationCampaignTaskAfterA2A,\n completeIntegrationCampaignTask,\n failIntegrationCampaignTaskDeliveryContainment,\n failDisabledIntegrationCampaignTask,\n failIntegrationCampaign,\n refreshIntegrationCampaignTaskA2AReceiptRetry,\n terminalizeIntegrationCampaignForTask,\n transitionIntegrationCampaignTaskToA2AReceiptRetry,\n transitionIntegrationCampaignTaskToDeliveryRetry,\n waitForA2AIntegrationCampaign,\n} from \"./integration-campaigns-store.js\";\nimport {\n dispatchPendingIntegrationTask,\n INTEGRATION_CAMPAIGN_PROCESSOR_FIELD,\n INTEGRATION_RETRY_SWEEP_TOKEN_SUBJECT,\n integrationDispatchScopeValue,\n isIntegrationDurableDispatchConfigured,\n isIntegrationDurableDispatchEnabledForTask,\n} from \"./integration-durable-dispatch.js\";\nimport {\n forgetIntegrationMemory,\n integrationMemoryActions,\n listIntegrationMemory,\n rememberForIntegrationScope,\n} from \"./integration-memory.js\";\nimport { extractBearerToken, verifyInternalToken } from \"./internal-token.js\";\nimport {\n retryStuckPendingTasks,\n startPendingTasksRetryJob,\n} from \"./pending-tasks-retry-job.js\";\nimport {\n claimPendingTask,\n getNextPendingTaskForThread,\n getPendingTask,\n insertPendingTask,\n isDuplicateEventError,\n MAX_PENDING_TASK_ATTEMPTS,\n markTaskCompleted,\n markTaskDeliveryRetryable,\n markTaskFailed,\n markTaskRetryable,\n stageTaskDeliveryPayload,\n type PendingTask,\n} from \"./pending-tasks-store.js\";\nimport {\n claimNextComputerCommand,\n claimNextRemoteCommand,\n enqueueComputerCommand,\n enqueueRemoteCommand as enqueueRemoteCommandRow,\n isRemoteCommandKind,\n listRemoteCommandsForOwner,\n updateRemoteCommandResult,\n} from \"./remote-commands-store.js\";\nimport {\n authenticateRemoteDeviceToken,\n createRemoteDevice,\n getRemoteComputerCapabilities,\n getRemoteDeviceForOwner,\n listRemoteDevicesForOwner,\n revokeRemoteDeviceForOwner,\n toPublicRemoteDevice,\n unregisterRemoteDevice,\n updateRemoteDeviceDetails,\n} from \"./remote-devices-store.js\";\nimport { startRemotePushDeliveryJob } from \"./remote-push-delivery-job.js\";\nimport {\n listRemotePushNotificationsForOwner,\n listRemotePushRegistrationsForOwner,\n queueRemotePushNotifications,\n toPublicRemotePushRegistration,\n unregisterRemotePushRegistrationForOwner,\n upsertRemotePushRegistration,\n} from \"./remote-push-store.js\";\nimport { startRemoteCommandsRetryJob } from \"./remote-retry-job.js\";\nimport {\n insertRemoteRunEvents,\n listRemoteRunEvents,\n} from \"./remote-run-events-store.js\";\nimport type {\n ComputerCommandEnvelope,\n ComputerOperationClass,\n RemoteCommand,\n RemoteCommandKind,\n RemoteDevice,\n} from \"./remote-types.js\";\nimport { listIntegrationScopes, saveIntegrationScope } from \"./scope-store.js\";\nimport { buildSlackAgentManifest } from \"./slack-manifest.js\";\nimport {\n assertSlackInstallAccess,\n buildSlackAuthorizeUrl,\n exchangeSlackOAuthCode,\n slackOAuthResponseToInstallation,\n testSlackAuth,\n} from \"./slack-oauth.js\";\nimport { getTaskQueueStats } from \"./task-queue-stats.js\";\nimport type {\n PlatformAdapter,\n IntegrationsPluginOptions,\n IntegrationStatus,\n IntegrationExecutionContext,\n IncomingMessage,\n PlatformDeliveryReceipt,\n} from \"./types.js\";\nimport {\n listIntegrationUsageBudgets,\n saveIntegrationUsageBudget,\n} from \"./usage-budget-store.js\";\nimport {\n handleWebhook,\n processIntegrationTask,\n recordIntegrationResponseDelivery,\n type IntegrationResponseDeliveryTaskPayload,\n} from \"./webhook-handler.js\";\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nlet a2aContinuationRetryInterval: ReturnType<typeof setInterval> | null = null;\nconst INTEGRATION_DELIVERY_LEASE_MS = 2 * 60_000;\n\nasync function checkpointIntegrationDeliveryRetry(\n task: PendingTask,\n payload: string,\n errorMessage: string,\n event: unknown,\n campaignLease?: {\n campaignId: string;\n runId: string;\n leaseToken: string;\n campaignStatus: \"completed\" | \"failed\" | \"waiting-a2a\";\n },\n): Promise<\"requeued\" | \"superseded\"> {\n let terminalStatus: \"completed\" | \"failed\" | undefined;\n let confirmedReceipt = false;\n let awaitingA2ACompletion = false;\n try {\n const parsed = JSON.parse(\n payload,\n ) as Partial<IntegrationResponseDeliveryTaskPayload>;\n terminalStatus = parsed.campaignTerminalStatus;\n confirmedReceipt = parsed.deliveryReceipt?.status === \"delivered\";\n awaitingA2ACompletion = parsed.awaitingA2ACompletion === true;\n } catch {}\n if (awaitingA2ACompletion) {\n if (campaignLease && campaignLease.campaignStatus !== \"waiting-a2a\") {\n throw new Error(\"A2A receipt retry lease has the wrong custody mode\");\n }\n const transitioned = campaignLease\n ? await transitionIntegrationCampaignTaskToA2AReceiptRetry(task.id, {\n payload,\n errorMessage,\n campaignId: campaignLease.campaignId,\n runId: campaignLease.runId,\n leaseToken: campaignLease.leaseToken,\n nextRunAt: Date.now() + 15_000,\n })\n : await refreshIntegrationCampaignTaskA2AReceiptRetry(task.id, {\n payload,\n errorMessage,\n });\n if (!transitioned) return \"superseded\";\n await dispatchPendingIntegrationTask({\n taskId: task.id,\n task: {\n platform: task.platform,\n externalThreadId: task.externalThreadId,\n platformContext: task.dispatchScope\n ? { channelId: task.dispatchScope }\n : undefined,\n },\n event,\n baseUrl: getBaseUrl(event),\n campaignContinuation: true,\n allowPortableConfirmedReceiptReconciliation: confirmedReceipt,\n });\n return \"requeued\";\n }\n if (terminalStatus && !campaignLease && !confirmedReceipt) {\n throw new Error(\"Campaign delivery retry is missing its lease\");\n }\n if (terminalStatus && campaignLease) {\n if (terminalStatus !== campaignLease.campaignStatus) {\n throw new Error(\n \"Campaign delivery retry status does not match its lease\",\n );\n }\n const transitioned = await transitionIntegrationCampaignTaskToDeliveryRetry(\n task.id,\n {\n payload,\n errorMessage,\n campaignStatus: campaignLease.campaignStatus,\n campaignId: campaignLease.campaignId,\n runId: campaignLease.runId,\n leaseToken: campaignLease.leaseToken,\n },\n );\n if (!transitioned) {\n return \"superseded\";\n }\n } else {\n await markTaskDeliveryRetryable(task.id, payload, errorMessage);\n }\n await dispatchPendingIntegrationTask({\n taskId: task.id,\n task: {\n platform: task.platform,\n externalThreadId: task.externalThreadId,\n platformContext: task.dispatchScope\n ? { channelId: task.dispatchScope }\n : undefined,\n },\n event,\n baseUrl: getBaseUrl(event),\n });\n return \"requeued\";\n}\n\nasync function containFailedDeliveryTransition(\n task: PendingTask,\n errorMessage: string,\n event: unknown,\n): Promise<void> {\n const contained = await failIntegrationCampaignTaskDeliveryContainment(\n task.id,\n errorMessage,\n );\n if (!contained) {\n throw new Error(\"Delivery containment lost pending-task custody\");\n }\n const nextTask = await getNextPendingTaskForThread(\n task.platform,\n task.externalThreadId,\n );\n if (!nextTask) return;\n await dispatchPendingIntegrationTask({\n taskId: nextTask.id,\n task: {\n platform: task.platform,\n externalThreadId: task.externalThreadId,\n platformContext: nextTask.dispatchScope\n ? { channelId: nextTask.dispatchScope }\n : undefined,\n },\n event,\n baseUrl: getBaseUrl(event),\n });\n}\n\nfunction startA2AContinuationRetryJob(\n adapters: Map<string, PlatformAdapter>,\n): void {\n if (a2aContinuationRetryInterval) return;\n const initialTimer = setTimeout(() => {\n processDueA2AContinuations({ adapters }).catch((err) => {\n console.error(\"[integrations] A2A continuation retry job failed:\", err);\n });\n }, 10_000);\n unrefTimer(initialTimer);\n a2aContinuationRetryInterval = setInterval(() => {\n processDueA2AContinuations({ adapters }).catch((err) => {\n console.error(\"[integrations] A2A continuation retry job failed:\", err);\n });\n }, 60_000);\n unrefTimer(a2aContinuationRetryInterval);\n}\n\nfunction unrefTimer(timer: ReturnType<typeof setInterval>): void {\n (timer as unknown as { unref?: () => void }).unref?.();\n}\n\n// ─── Google Pub/Sub OIDC verifier (for Drive changes.watch push) ────────────\n// Cache Google's public keys for OIDC verification. jose handles TTL +\n// refresh internally — same pattern as templates/mail/.../gmail/push.post.ts.\n// Used to verify Google Pub/Sub push notifications carry a valid bearer token\n// signed by a configured service account. Without this, the webhook is wide\n// open to anonymous callers who can force a Drive sync (H7 in the audit).\nconst GOOGLE_JWKS = createRemoteJWKSet(\n new URL(\"https://www.googleapis.com/oauth2/v3/certs\"),\n);\nconst GOOGLE_ISSUERS = [\"https://accounts.google.com\", \"accounts.google.com\"];\n\n/**\n * Verify a Pub/Sub OIDC bearer token. Throws on any verification failure.\n * Requires GOOGLE_DOCS_PUSH_AUDIENCE and GOOGLE_DOCS_PUSH_SIGNER_EMAIL to be\n * set; if either is missing in production, the webhook handler refuses the\n * request entirely (so a misconfigured deployment fails closed, surfacing in\n * Pub/Sub's delivery metrics).\n */\nasync function verifyGoogleDocsPushToken(authHeader: string): Promise<void> {\n if (!authHeader.startsWith(\"Bearer \")) {\n throw new Error(\"missing bearer token\");\n }\n const token = authHeader.slice(7);\n const audience = process.env.GOOGLE_DOCS_PUSH_AUDIENCE;\n if (!audience) {\n throw new Error(\"GOOGLE_DOCS_PUSH_AUDIENCE not configured\");\n }\n const { payload } = await jwtVerify(token, GOOGLE_JWKS, {\n issuer: GOOGLE_ISSUERS,\n audience,\n });\n if (payload.email_verified !== true) {\n throw new Error(\"email_verified claim is not true\");\n }\n // Pin to a specific service account — without this, any Google-issued\n // token with the right audience could trigger a Drive sync.\n const expectedSigner = process.env.GOOGLE_DOCS_PUSH_SIGNER_EMAIL;\n if (!expectedSigner) {\n throw new Error(\"GOOGLE_DOCS_PUSH_SIGNER_EMAIL not configured\");\n }\n if (payload.email !== expectedSigner) {\n throw new Error(`unexpected signer: ${String(payload.email)}`);\n }\n}\n\nexport const BUILT_IN_INTEGRATION_ADAPTER_FACTORIES = Object.freeze([\n { platform: \"slack\", create: slackAdapter },\n { platform: \"telegram\", create: telegramAdapter },\n { platform: \"whatsapp\", create: whatsappAdapter },\n { platform: \"microsoft-teams\", create: microsoftTeamsAdapter },\n { platform: \"discord\", create: discordAdapter },\n { platform: \"google-docs\", create: googleDocsAdapter },\n { platform: \"email\", create: emailAdapter },\n] as const satisfies ReadonlyArray<{\n platform: string;\n create: () => PlatformAdapter;\n}>);\n\nexport const BUILT_IN_INTEGRATION_ADAPTER_IDS = Object.freeze(\n BUILT_IN_INTEGRATION_ADAPTER_FACTORIES.map(({ platform }) => platform),\n);\n\nexport function createBuiltInIntegrationAdapters(): PlatformAdapter[] {\n return BUILT_IN_INTEGRATION_ADAPTER_FACTORIES.map(({ create }) => create());\n}\n\nconst INTEGRATION_SYSTEM_PROMPT = `You are an AI agent responding via a messaging platform integration (Slack, Microsoft Teams, Discord interactions, Telegram, WhatsApp, etc.).\n\nYou have the same capabilities as the web chat agent. Use your tools to help the user.\n\nKeep responses concise — messaging platforms have character limits and users expect shorter replies than in a web interface. Use markdown sparingly (bold and lists are fine, but avoid complex formatting that may not render well on all platforms).\n\nIf a task requires many steps, summarize what you did rather than streaming every detail.`;\n\ntype RemoteCodeCommandEnvelope = {\n kind?: unknown;\n ownerEmail?: unknown;\n orgId?: unknown;\n command?: unknown;\n source?: unknown;\n};\n\ntype IntegrationCredentialContext = {\n userEmail: string;\n orgId?: string;\n isIntegrationCaller?: boolean;\n};\n\nconst REMOTE_DEVICE_ONLINE_MS = 90_000;\n\n// One decline reply per sender + decline reason per window: during a Slack\n// API outage every message would otherwise get another identical \"try again\"\n// reply. Short enough that a persistent condition still reminds the sender.\nconst DECLINE_NOTICE_DEDUPE_TTL_MS = 5 * 60 * 1_000;\nconst SYSTEM_NOTICE_DEDUPE_TTL_MS = 24 * 60 * 60 * 1_000;\n\ntype IntegrationSystemNoticeTaskPayload = {\n kind: \"system-notice\";\n incoming: IncomingMessage;\n text: string;\n dedupeKey?: string;\n dedupeTtlMs?: number;\n};\n\nfunction systemNoticeEventKey(\n dedupeKey: string,\n ttlMs: number,\n now = Date.now(),\n): string {\n return `system-notice:${dedupeKey}:${Math.floor(now / ttlMs)}`;\n}\n\nexport async function enqueueRemoteCommand(\n envelope: RemoteCodeCommandEnvelope,\n): Promise<Record<string, unknown>> {\n const ownerEmail = readString(envelope.ownerEmail);\n if (!ownerEmail) throw new Error(\"ownerEmail is required\");\n const hasOrgId = Object.prototype.hasOwnProperty.call(envelope, \"orgId\");\n const orgId = hasOrgId ? (readString(envelope.orgId) ?? null) : undefined;\n const command = readObject(envelope.command);\n if (!command) throw new Error(\"command is required\");\n const commandType = readString(command.type);\n const commands = await listRemoteCommandsForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n limit: 50,\n });\n\n if (commandType === \"list\") {\n return {\n ok: true,\n runs: commands.map(remoteCommandToRunSummary).filter(Boolean),\n hostOnline: await hasOnlineRemoteDevice(ownerEmail, orgId),\n };\n }\n\n if (commandType === \"status\") {\n const runRef = readString(command.runRef);\n const run = runRef\n ? commands.map(remoteCommandToRunSummary).find((item) => {\n const candidate = item as Record<string, unknown>;\n return candidate.id === runRef || candidate.runId === runRef;\n })\n : undefined;\n const hostOnline = await hasOnlineRemoteDevice(ownerEmail, orgId);\n return {\n ok: true,\n hostOnline,\n hostStatus: hostOnline ? \"online\" : \"offline\",\n ...(run ? { run } : {}),\n };\n }\n\n const devices = await listRemoteDevicesForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n status: \"active\",\n limit: 10,\n });\n const requestedDeviceId =\n readString(command.hostId) ?? readString(command.deviceId);\n const device =\n (requestedDeviceId\n ? devices.find((candidate) => candidate.id === requestedDeviceId)\n : undefined) ?? devices[0];\n if (!device) {\n return {\n ok: false,\n hostOnline: false,\n hostStatus: \"offline\",\n error: \"No paired computer is available for code-agent commands.\",\n };\n }\n\n const source = readObject(envelope.source);\n const kind = remoteCodeCommandKind(commandType);\n if (!kind) throw new Error(`Unsupported code-agent command: ${commandType}`);\n const row = await enqueueRemoteCommandRow({\n deviceId: device.id,\n ownerEmail,\n orgId: device.orgId ?? orgId ?? null,\n kind,\n params: remoteCodeCommandParams(command),\n platform: readString(source?.platform) ?? null,\n externalThreadId: readString(source?.externalThreadId) ?? null,\n });\n const hostOnline = isRemoteDeviceOnline(device);\n return {\n ok: true,\n commandId: row.id,\n requestId: row.id,\n hostOnline,\n hostStatus: hostOnline ? \"online\" : \"offline\",\n message:\n commandType === \"create\"\n ? hostOnline\n ? `Queued code run (${row.id}).`\n : `Queued code run (${row.id}). Your computer looks offline or asleep, so it will pick this up when it wakes.`\n : undefined,\n };\n}\n\nfunction remoteCodeCommandKind(\n commandType: string | undefined,\n): RemoteCommandKind | null {\n switch (commandType) {\n case \"create\":\n return \"create-run\";\n case \"continue\":\n return \"append-followup\";\n case \"approve\":\n return \"approve\";\n case \"deny\":\n return \"deny\";\n case \"stop\":\n return \"stop\";\n default:\n return null;\n }\n}\n\nfunction remoteCodeCommandParams(\n command: Record<string, unknown>,\n): Record<string, unknown> {\n const type = readString(command.type);\n if (type === \"create\") {\n return {\n prompt: readString(command.prompt) ?? \"\",\n title: readString(command.title),\n cwd: readString(command.cwd),\n goalId: readString(command.goalId) ?? \"task\",\n permissionMode: readString(command.permissionMode),\n };\n }\n if (type === \"continue\") {\n return {\n runId: readString(command.runRef) ?? readString(command.runId),\n prompt: readString(command.text) ?? readString(command.prompt),\n permissionMode: readString(command.permissionMode),\n };\n }\n if (type === \"approve\" || type === \"deny\") {\n const id = readString(command.approvalId) ?? readString(command.runId);\n return { runId: id, approvalId: id };\n }\n if (type === \"stop\") {\n return { runId: readString(command.runRef) ?? readString(command.runId) };\n }\n return {};\n}\n\nfunction enqueueBodyToRemoteCodeCommand(\n body: Record<string, unknown>,\n): Record<string, unknown> | null {\n const direct = readObject(body.command);\n if (body.kind === \"code-agent\" && direct) return direct;\n\n const operation = readString(body.operation) ?? readString(body.type);\n const payload = readObject(body.payload) ?? body;\n if (!operation?.startsWith(\"code-agent.\")) return null;\n\n if (operation === \"code-agent.run.create\") {\n return {\n type: \"create\",\n prompt: payload.prompt,\n title: payload.title,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n cwd: payload.cwd,\n goalId: payload.goalId,\n permissionMode: payload.permissionMode,\n };\n }\n if (operation === \"code-agent.run.follow-up\") {\n return {\n type: \"continue\",\n runRef: payload.runId,\n text: payload.prompt ?? payload.message,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n permissionMode: payload.permissionMode,\n };\n }\n if (operation === \"code-agent.pending-command.decide\") {\n return {\n type: payload.decision === \"deny\" ? \"deny\" : \"approve\",\n approvalId: payload.commandId ?? payload.runId,\n runId: payload.runId,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n };\n }\n if (operation === \"code-agent.run.stop\") {\n return {\n type: \"stop\",\n runRef: payload.runId,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n };\n }\n return null;\n}\n\nfunction remoteCommandToRunSummary(\n command: RemoteCommand,\n): Record<string, unknown> | null {\n const result = readObject(command.result);\n const nestedResult = readObject(result?.result) ?? result;\n const run = readObject(nestedResult?.run);\n if (run) {\n return {\n ...run,\n commandId: command.id,\n hostId: command.deviceId,\n status: readString(run.status) ?? command.status,\n updatedAt: readString(run.updatedAt) ?? command.updatedAt,\n };\n }\n if (command.kind !== \"create-run\") return null;\n const params = readObject(command.params) ?? {};\n return {\n id: command.id,\n runId: command.id,\n hostId: command.deviceId,\n title:\n readString(params.title) ?? readString(params.prompt) ?? \"Queued run\",\n prompt: readString(params.prompt),\n status: command.status === \"failed\" ? \"errored\" : \"queued\",\n createdAt: command.createdAt,\n updatedAt: command.updatedAt,\n metadata: { remoteCommandId: command.id },\n };\n}\n\nfunction readObject(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction isRemoteDeviceOnline(device: { lastSeenAt: number | null }): boolean {\n return typeof device.lastSeenAt === \"number\"\n ? Date.now() - device.lastSeenAt <= REMOTE_DEVICE_ONLINE_MS\n : false;\n}\n\nasync function hasOnlineRemoteDevice(\n ownerEmail: string,\n orgId: string | null | undefined,\n): Promise<boolean> {\n const hasOrgId = orgId !== undefined;\n const devices = await listRemoteDevicesForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n status: \"active\",\n limit: 10,\n });\n return devices.some(isRemoteDeviceOnline);\n}\n\nfunction remoteDeviceToHost(device: RemoteDevice): Record<string, unknown> {\n const online = device.status === \"active\" && isRemoteDeviceOnline(device);\n return {\n id: device.id,\n name: device.label,\n label: device.label,\n status:\n device.status === \"active\" ? (online ? \"online\" : \"offline\") : \"revoked\",\n lastSeenAt: device.lastSeenAt\n ? new Date(device.lastSeenAt).toISOString()\n : undefined,\n platform: device.platform ?? \"desktop\",\n appVersion: device.appVersion ?? undefined,\n hostName: device.hostName ?? undefined,\n metadata: device.metadata ?? undefined,\n device: toPublicRemoteDevice(device),\n };\n}\n\nfunction mountedPathParts(event: any, mountSuffix: string): string[] {\n const rawPath = String(\n event.path ?? event.url?.pathname ?? event.node?.req?.url ?? \"/\",\n ).split(\"?\")[0];\n const normalized = rawPath.replace(/^\\/+/, \"\");\n const marker = mountSuffix.replace(/^\\/+/, \"\");\n const markerIndex = normalized.indexOf(marker);\n const suffix =\n markerIndex >= 0\n ? normalized.slice(markerIndex + marker.length)\n : normalized;\n return suffix\n .split(\"/\")\n .filter(Boolean)\n .map((part) => decodeURIComponent(part));\n}\n\nfunction remoteCommandPushPayload(\n command: RemoteCommand,\n): Record<string, unknown> {\n const status = command.status;\n const title =\n status === \"completed\"\n ? \"Remote run completed\"\n : status === \"failed\"\n ? \"Remote run failed\"\n : \"Remote run updated\";\n const body =\n status === \"completed\"\n ? \"Open Agent Native to review the result.\"\n : status === \"failed\"\n ? \"Open Agent Native to review the failure.\"\n : \"Open Agent Native to review the latest status.\";\n return {\n title,\n body,\n commandId: command.id,\n hostId: command.deviceId,\n kind: command.kind,\n status,\n updatedAt: command.updatedAt,\n };\n}\n\n/**\n * Creates a Nitro plugin that mounts messaging platform integration webhook routes.\n *\n * Routes:\n * POST /_agent-native/integrations/:platform/webhook — receive platform webhooks\n * GET /_agent-native/integrations/status — all integrations status\n * GET /_agent-native/integrations/:platform/status — single platform status\n * POST /_agent-native/integrations/:platform/enable — enable integration\n * POST /_agent-native/integrations/:platform/disable — disable integration\n * POST /_agent-native/integrations/:platform/setup — platform-specific setup\n */\nexport function createIntegrationsPlugin(\n options?: IntegrationsPluginOptions,\n): NitroPluginDef {\n if (\n options?.adapters !== undefined &&\n options.adapterOverrides !== undefined\n ) {\n throw new Error(\n \"Choose either adapters for full replacement or adapterOverrides for per-platform customization.\",\n );\n }\n return async (nitroApp: any) => {\n markDefaultPluginProvided(nitroApp, \"integrations\");\n const adapters =\n options?.adapters ??\n mergeIntegrationAdapters(\n createBuiltInIntegrationAdapters(),\n options?.adapterOverrides,\n );\n const adapterMap = new Map<string, PlatformAdapter>();\n for (const adapter of adapters) {\n adapterMap.set(adapter.platform, adapter);\n }\n\n const model = options?.model;\n // Read the API key at REQUEST time, not plugin-init time. On Netlify\n // Lambda the plugin module loads in a context where env vars from the\n // site's runtime config may not yet be populated, so capturing at\n // init can leave us with an empty string forever. The getter\n // re-resolves on every webhook so freshly-set secrets work without\n // a redeploy.\n const getApiKey = () => options?.apiKey ?? \"\";\n\n // Build the system prompt\n const baseSystemPrompt = options?.systemPrompt ?? INTEGRATION_SYSTEM_PROMPT;\n\n // Resolve actions — auto-include call-agent so the integration agent can\n // delegate to other A2A apps, matching the behavior of the agent-chat plugin.\n const localActions = options?.actions ?? {};\n let callAgentEntry: Record<string, unknown> = {};\n try {\n const mod = await import(\"../scripts/call-agent.js\");\n callAgentEntry = {\n \"call-agent\": {\n tool: mod.tool,\n run: (args: Record<string, string>, context: unknown) =>\n mod.run(args, context as any, options?.appId),\n },\n };\n } catch {\n // call-agent script not available — skip\n }\n const actions = {\n ...integrationMemoryActions(),\n ...localActions,\n ...callAgentEntry,\n } as typeof localActions;\n // Keep the app's own actions visible on the first request to the model;\n // defer the framework additions merged in above (integration memory,\n // call-agent) behind the tool-search entry `handleWebhook` /\n // `startGoogleDocsPoller` attach to `actions`. The run loop's mid-run\n // tool expansion still lets the model discover and call them after a\n // search — see `filterInitialEngineTools` / `expandActiveTools`.\n const initialToolNames = Object.keys(localActions);\n\n const h3 = getH3App(nitroApp);\n const P = `${FRAMEWORK_ROUTE_PREFIX}/integrations`;\n\n async function enqueueSystemNotice(\n event: any,\n incoming: IncomingMessage,\n text: string,\n opts?: { dedupeKey?: string; dedupeTtlMs?: number },\n ): Promise<void> {\n if (!text.trim()) return;\n const taskId = `notice-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n const dedupeTtlMs = Math.max(\n 1,\n opts?.dedupeTtlMs ?? SYSTEM_NOTICE_DEDUPE_TTL_MS,\n );\n const noticeThreadId = `system-notice:${taskId}`;\n const payload: IntegrationSystemNoticeTaskPayload = {\n kind: \"system-notice\",\n incoming,\n text,\n ...(opts?.dedupeKey ? { dedupeKey: opts.dedupeKey } : {}),\n ...(opts?.dedupeTtlMs ? { dedupeTtlMs: opts.dedupeTtlMs } : {}),\n };\n try {\n await insertPendingTask({\n id: taskId,\n platform: incoming.platform,\n // System notices are auxiliary delivery work, not the user's agent\n // run. Give each notice its own queue lane so a retrying notice cannot\n // block the real message task for this Slack/Telegram thread.\n externalThreadId: noticeThreadId,\n payload: JSON.stringify(payload),\n ownerEmail: `integration@${incoming.platform}`,\n externalEventKey: opts?.dedupeKey\n ? systemNoticeEventKey(opts.dedupeKey, dedupeTtlMs)\n : undefined,\n dispatchScope: integrationDispatchScopeValue({\n platform: incoming.platform,\n externalThreadId: noticeThreadId,\n platformContext: incoming.platformContext,\n }),\n });\n } catch (err) {\n if (isDuplicateEventError(err)) return;\n throw err;\n }\n\n await dispatchPendingIntegrationTask({\n taskId,\n task: {\n platform: incoming.platform,\n externalThreadId: noticeThreadId,\n platformContext: incoming.platformContext,\n },\n event,\n baseUrl: getBaseUrl(event),\n });\n }\n\n async function requireSessionContext(\n event: any,\n ): Promise<{ ownerEmail: string; orgId: string | null } | null> {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return null;\n }\n const orgCtx = await getOrgContext(event).catch(() => null);\n return {\n ownerEmail: session.email,\n orgId: orgCtx?.orgId ?? session.orgId ?? null,\n };\n }\n\n function toCredentialContext(\n ctx: { ownerEmail: string; orgId: string | null },\n opts?: { isIntegrationCaller?: boolean },\n ): IntegrationCredentialContext {\n return {\n userEmail: ctx.ownerEmail,\n ...(ctx.orgId ? { orgId: ctx.orgId } : {}),\n ...(opts?.isIntegrationCaller ? { isIntegrationCaller: true } : {}),\n };\n }\n\n async function credentialContextForIntegrationConfig(\n config: Awaited<ReturnType<typeof getIntegrationConfig>>,\n ): Promise<IntegrationCredentialContext | null> {\n const ownerEmail =\n typeof config?.owner === \"string\" ? config.owner.trim() : \"\";\n if (!ownerEmail) return null;\n const orgId = await resolveOrgIdForEmail(ownerEmail).catch(() => null);\n return {\n userEmail: ownerEmail,\n ...(orgId ? { orgId } : {}),\n isIntegrationCaller: true,\n };\n }\n\n async function withCredentialContext<T>(\n context: IntegrationCredentialContext | null,\n fn: () => Promise<T>,\n ): Promise<T> {\n if (!context) return fn();\n return runWithRequestContext(context, fn);\n }\n\n async function requireRemoteDevice(event: any) {\n const token = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n const device = await authenticateRemoteDeviceToken(token);\n if (device) return device;\n setResponseStatus(event, 401);\n return null;\n }\n\n /**\n * Gate destructive integration writes (enable/disable, setup,\n * setIntegrationConfig…) behind an org-owner/admin check.\n *\n * `integration_configs` is keyed `(platform, config_key)` with no\n * owner column in the PRIMARY KEY — so this row is effectively\n * deployment-wide. Any signed-in user toggling /enable or /disable\n * would otherwise affect every other user (a regular org member could\n * disable Slack/email org-wide, write a malicious allowlist for\n * inbound email, etc.). This check enforces that only owners and\n * admins of the user's active org may mutate integration config.\n *\n * Solo / no-org sessions (i.e. ctx.orgId == null) are allowed — that's\n * the local-dev / single-user case where there's no privilege gradient\n * to enforce. The deployment is single-tenant by definition there.\n *\n * Returns an `{ ok: true }` on pass, or `{ ok: false, error }` with the\n * status already set on the event. The error string lines up with the\n * status code (401 → \"unauthorized\"; 403 → admin-required message).\n */\n async function checkOrgAdmin(\n event: any,\n ): Promise<{ ok: true } | { ok: false; error: string }> {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { ok: false, error: \"unauthorized\" };\n }\n const ctx = await getOrgContext(event).catch(() => null);\n // Solo (no org membership) — single-tenant flow, allow.\n if (!ctx?.orgId) return { ok: true };\n if (ctx.role === \"owner\" || ctx.role === \"admin\") return { ok: true };\n setResponseStatus(event, 403);\n return {\n ok: false,\n error:\n \"Only organization owners and admins can mutate integration config\",\n };\n }\n\n // ─── Status endpoint (all integrations) ───────────────────────\n h3.use(\n `${P}/status`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const baseUrl = getBaseUrl(event);\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const credentialContext = toCredentialContext(ctx);\n const statuses: IntegrationStatus[] = [];\n for (const adapter of adapters) {\n const status = await withCredentialContext(credentialContext, () =>\n adapter.getStatus(baseUrl),\n );\n const config = await getIntegrationConfig(adapter.platform);\n status.enabled = !!config?.configData?.enabled;\n status.webhookUrl = `${baseUrl}${P}/${adapter.platform}/webhook`;\n if (!status.requiredEnvKeys) {\n try {\n status.requiredEnvKeys = adapter.getRequiredEnvKeys();\n } catch {\n status.requiredEnvKeys = [];\n }\n }\n statuses.push(status);\n }\n return statuses;\n }),\n );\n\n // ─── Task queue status (observability) ───────────────────────\n // GET /_agent-native/integrations/task-queue/status\n // Returns counts + recent failures for the integration_pending_tasks\n // queue. Requires a normal session — this exposes operational data, not\n // platform secrets. If the queue table doesn't exist yet (no inbound\n // webhook has been processed), returns zeroed stats rather than 500.\n h3.use(\n `${P}/task-queue/status`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const scope = await requireSessionContext(event);\n if (!scope) return { error: \"unauthorized\" };\n try {\n return await getTaskQueueStats(scope);\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err?.message ?? String(err) };\n }\n }),\n );\n\n // ─── Remote relay endpoints ──────────────────────────────────\n // These routes allow a signed-in browser session to enqueue work for a\n // registered remote device, and the device to claim/complete that work\n // using its one-time-issued bearer token. State lives entirely in SQL so\n // long polling can safely degrade to short polling on serverless hosts.\n h3.use(\n `${P}/remote/register`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n label?: unknown;\n platform?: unknown;\n appVersion?: unknown;\n version?: unknown;\n hostName?: unknown;\n hostname?: unknown;\n metadata?: unknown;\n };\n const label =\n typeof body.label === \"string\" && body.label.trim()\n ? body.label.trim().slice(0, 200)\n : \"Remote device\";\n const { device, token } = await createRemoteDevice({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n label,\n platform: readString(body.platform),\n appVersion: readString(body.appVersion) ?? readString(body.version),\n hostName: readString(body.hostName) ?? readString(body.hostname),\n metadata: readObject(body.metadata),\n });\n return { device: toPublicRemoteDevice(device), token };\n }),\n );\n\n h3.use(\n `${P}/remote/hosts`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const devices = await listRemoteDevicesForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 50,\n });\n const hosts = devices.map(remoteDeviceToHost);\n const parts = mountedPathParts(event, \"remote/hosts\");\n if (parts[0]) {\n const host = hosts.find((candidate) => candidate.id === parts[0]);\n if (!host) {\n setResponseStatus(event, 404);\n return { error: \"host not found\" };\n }\n return { host, device: host.device };\n }\n return { hosts, devices: hosts };\n }),\n );\n\n h3.use(\n `${P}/remote/devices`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"DELETE\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const parts = mountedPathParts(event, \"remote/devices\");\n\n if (method === \"GET\") {\n if (!parts[0]) {\n const devices = await listRemoteDevicesForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 100,\n });\n return {\n devices: devices.map(toPublicRemoteDevice),\n hosts: devices.map(remoteDeviceToHost),\n };\n }\n const device = await getRemoteDeviceForOwner({\n id: parts[0],\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n return {\n device: toPublicRemoteDevice(device),\n host: remoteDeviceToHost(device),\n };\n }\n\n const id = parts[0];\n const action = parts[1];\n if (!id || (method === \"POST\" && action !== \"revoke\")) {\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }\n const device = await revokeRemoteDeviceForOwner({\n id,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n return { ok: true, device: toPublicRemoteDevice(device) };\n }),\n );\n\n h3.use(\n `${P}/remote/unregister`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\" && getMethod(event) !== \"DELETE\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n await unregisterRemoteDevice(device.id);\n return { ok: true, deviceId: device.id };\n }),\n );\n\n h3.use(\n `${P}/remote/heartbeat`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const updated = await updateRemoteDeviceDetails({\n id: device.id,\n label: readString(body.label),\n platform: readString(body.platform),\n appVersion: readString(body.appVersion) ?? readString(body.version),\n hostName: readString(body.hostName) ?? readString(body.hostname),\n metadata: readObject(body.metadata),\n });\n return {\n ok: true,\n device: updated ? toPublicRemoteDevice(updated) : null,\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/register`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const token = readString(body.token);\n if (!token) {\n setResponseStatus(event, 400);\n return { error: \"token required\" };\n }\n const registration = await upsertRemotePushRegistration({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n provider: readString(body.provider) ?? \"unknown\",\n token,\n platform: readString(body.platform),\n clientDeviceId:\n readString(body.clientDeviceId) ?? readString(body.deviceId),\n label: readString(body.label),\n });\n return {\n registration: toPublicRemotePushRegistration(registration),\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/registrations`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const registrations = await listRemotePushRegistrationsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n includeInactive: getQuery(event).includeInactive === \"true\",\n limit: 100,\n });\n return {\n registrations: registrations.map(toPublicRemotePushRegistration),\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/unregister`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"POST\" && method !== \"DELETE\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const removed = await unregisterRemotePushRegistrationForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n id: readString(body.id) ?? readString(body.registrationId),\n token: readString(body.token),\n });\n if (!removed) {\n setResponseStatus(event, 404);\n return { error: \"registration not found\" };\n }\n return { ok: true };\n }),\n );\n\n h3.use(\n `${P}/remote/push/notifications`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const query = getQuery(event);\n const status =\n query.status === \"delivered\" ||\n query.status === \"failed\" ||\n query.status === \"pending\"\n ? query.status\n : undefined;\n const notifications = await listRemotePushNotificationsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n status,\n limit: Number(query.limit ?? 50) || 50,\n });\n return { notifications };\n }),\n );\n\n h3.use(\n `${P}/remote/runs`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const parts = mountedPathParts(event, \"remote/runs\");\n const commands = await listRemoteCommandsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 100,\n });\n\n if (parts.length === 0) {\n return {\n runs: commands.map(remoteCommandToRunSummary).filter(Boolean),\n };\n }\n\n const runId = decodeURIComponent(parts[0] ?? \"\");\n const match = commands.find((command) => {\n const run = remoteCommandToRunSummary(command);\n return (\n command.id === runId || run?.id === runId || run?.runId === runId\n );\n });\n if (!match) {\n setResponseStatus(event, 404);\n return { error: \"run not found\" };\n }\n const run = remoteCommandToRunSummary(match);\n\n if (parts[1] === \"transcript\") {\n const remoteRunId =\n readString(run?.runId) ??\n readString(run?.id) ??\n readString(match.id);\n const events = remoteRunId\n ? await listRemoteRunEvents({\n deviceId: match.deviceId,\n remoteRunId,\n limit: 1000,\n })\n : [];\n return {\n run,\n events: events.map((event) => event.event),\n };\n }\n\n if (parts.length === 1) return { run };\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }),\n );\n\n h3.use(\n `${P}/remote/computer/approvals`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const parts = mountedPathParts(event, \"remote/computer/approvals\");\n if (method === \"GET\") {\n if (parts.length > 0) {\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }\n const query = getQuery(event);\n const status = readComputerApprovalStatus(query.status);\n return {\n approvals: await listComputerApprovalsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n deviceId: readString(query.deviceId),\n taskId: readString(query.taskId),\n runId: readString(query.runId),\n status,\n limit: Number(query.limit ?? 100) || 100,\n }),\n };\n }\n const body = (await readBody(event)) as Record<string, unknown>;\n if (parts[0] && parts[1] === \"decision\" && parts.length === 2) {\n const decision =\n body.decision === \"approved\" || body.decision === \"denied\"\n ? body.decision\n : null;\n const actionHash = readString(body.actionHash);\n if (!decision || !actionHash) {\n setResponseStatus(event, 400);\n return { error: \"decision and actionHash required\" };\n }\n const approval = await decideComputerApproval({\n id: decodeURIComponent(parts[0]),\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n actionHash,\n decision,\n decidedBy: ctx.ownerEmail,\n result: readObject(body.result),\n });\n if (!approval) {\n setResponseStatus(event, 404);\n return { error: \"approval not found or no longer pending\" };\n }\n return { approval };\n }\n if (parts.length > 0) {\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }\n const deviceId = readString(body.deviceId);\n if (!deviceId || !body.envelope) {\n setResponseStatus(event, 400);\n return { error: \"deviceId and envelope required\" };\n }\n try {\n const approval = await createComputerApprovalRequest({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n deviceId,\n envelope: body.envelope as ComputerCommandEnvelope,\n });\n return { approval };\n } catch (error) {\n return computerSupervisionRouteError(event, error);\n }\n }),\n );\n\n h3.use(\n `${P}/remote/computer/commands`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const deviceId = readString(body.deviceId);\n if (!deviceId || !body.envelope) {\n setResponseStatus(event, 400);\n return { error: \"deviceId and envelope required\" };\n }\n try {\n const command = await enqueueComputerCommand({\n deviceId,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n envelope: body.envelope as ComputerCommandEnvelope,\n platform: readString(body.platform),\n });\n return { command };\n } catch (error) {\n return computerSupervisionRouteError(event, error);\n }\n }),\n );\n\n h3.use(\n `${P}/remote/enqueue`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n deviceId?: unknown;\n kind?: unknown;\n params?: unknown;\n platform?: unknown;\n externalThreadId?: unknown;\n operation?: unknown;\n payload?: unknown;\n command?: unknown;\n source?: unknown;\n };\n const highLevel = enqueueBodyToRemoteCodeCommand(body);\n if (highLevel) {\n return enqueueRemoteCommand({\n kind: \"code-agent\",\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId ?? undefined,\n command: highLevel,\n source: body.source ?? {\n platform:\n typeof body.platform === \"string\" ? body.platform : \"mobile\",\n externalThreadId:\n typeof body.externalThreadId === \"string\"\n ? body.externalThreadId\n : \"mobile\",\n },\n });\n }\n if (typeof body.deviceId !== \"string\" || !body.deviceId.trim()) {\n setResponseStatus(event, 400);\n return { error: \"deviceId required\" };\n }\n if (!isRemoteCommandKind(body.kind)) {\n setResponseStatus(event, 400);\n return { error: \"invalid command kind\" };\n }\n const device = await getRemoteDeviceForOwner({\n id: body.deviceId,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n if (device.status !== \"active\") {\n setResponseStatus(event, 410);\n return { error: \"device revoked\" };\n }\n const command = await enqueueRemoteCommandRow({\n deviceId: device.id,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n kind: body.kind,\n params: body.params ?? {},\n platform: typeof body.platform === \"string\" ? body.platform : null,\n externalThreadId:\n typeof body.externalThreadId === \"string\"\n ? body.externalThreadId\n : null,\n });\n return { command };\n }),\n );\n\n h3.use(\n `${P}/remote/poll`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"POST\" && method !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const query = getQuery(event);\n const body =\n method === \"POST\"\n ? ((await readBody(event)) as {\n waitMs?: unknown;\n computerCapabilities?: unknown;\n })\n : {};\n let pollingDevice = device;\n if (\n method === \"POST\" &&\n Object.prototype.hasOwnProperty.call(body, \"computerCapabilities\")\n ) {\n const computerCapabilities = readComputerCapabilities(\n body.computerCapabilities,\n );\n const updated = await updateRemoteDeviceDetails({\n id: device.id,\n metadata: {\n ...(device.metadata ?? {}),\n computerCapabilities,\n },\n });\n if (updated) pollingDevice = updated;\n }\n const requestedWait =\n Number(body.waitMs ?? query.waitMs ?? query.wait_ms ?? 25_000) || 0;\n const waitMs = Math.max(0, Math.min(25_000, requestedWait));\n const deadline = Date.now() + waitMs;\n\n while (true) {\n const operationClasses =\n advertisedComputerOperationClasses(pollingDevice);\n const computerCommand =\n operationClasses.length > 0\n ? await claimNextComputerCommand({\n deviceId: pollingDevice.id,\n ownerEmail: pollingDevice.ownerEmail,\n orgId: pollingDevice.orgId,\n operationClasses,\n })\n : null;\n const command =\n computerCommand ?? (await claimNextRemoteCommand(pollingDevice.id));\n if (command) return { command };\n const remaining = deadline - Date.now();\n if (remaining <= 0) return { command: null };\n await sleep(Math.min(1000, remaining));\n }\n }),\n );\n\n h3.use(\n `${P}/remote/result`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n commandId?: unknown;\n status?: unknown;\n result?: unknown;\n errorMessage?: unknown;\n };\n if (typeof body.commandId !== \"string\" || !body.commandId.trim()) {\n setResponseStatus(event, 400);\n return { error: \"commandId required\" };\n }\n if (\n body.status !== \"running\" &&\n body.status !== \"completed\" &&\n body.status !== \"failed\"\n ) {\n setResponseStatus(event, 400);\n return { error: \"invalid command status\" };\n }\n const command = await updateRemoteCommandResult({\n deviceId: device.id,\n commandId: body.commandId,\n status: body.status,\n result: body.result,\n errorMessage:\n typeof body.errorMessage === \"string\" ? body.errorMessage : null,\n });\n if (!command) {\n setResponseStatus(event, 404);\n return { error: \"command not found\" };\n }\n if (command.status === \"completed\" || command.status === \"failed\") {\n await queueRemotePushNotifications({\n ownerEmail: device.ownerEmail,\n orgId: device.orgId,\n payload: remoteCommandPushPayload(command),\n }).catch((err) => {\n console.error(\"[integrations] remote push queue failed:\", err);\n });\n }\n return { command };\n }),\n );\n\n h3.use(\n `${P}/remote/run-events`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n remoteRunId?: unknown;\n runId?: unknown;\n events?: unknown;\n };\n const remoteRunId =\n typeof body.remoteRunId === \"string\" && body.remoteRunId.trim()\n ? body.remoteRunId.trim()\n : typeof body.runId === \"string\" && body.runId.trim()\n ? body.runId.trim()\n : \"\";\n if (!remoteRunId) {\n setResponseStatus(event, 400);\n return { error: \"remoteRunId required\" };\n }\n if (!Array.isArray(body.events)) {\n setResponseStatus(event, 400);\n return { error: \"events required\" };\n }\n const events = body.events\n .slice(0, 1000)\n .map((entry, index) => {\n const value = entry as { seq?: unknown; event?: unknown };\n const rawEvent =\n value && typeof value === \"object\" && \"event\" in value\n ? value.event\n : entry;\n return {\n seq:\n value && typeof value === \"object\" && \"seq\" in value\n ? Number(value.seq)\n : index,\n event: rawEvent ?? null,\n };\n })\n .filter((entry) => Number.isInteger(entry.seq) && entry.seq >= 0);\n if (events.length !== body.events.length) {\n setResponseStatus(event, 400);\n return { error: \"invalid event sequence\" };\n }\n const result = await insertRemoteRunEvents({\n deviceId: device.id,\n remoteRunId,\n events,\n });\n return { ok: true, ...result };\n }),\n );\n\n // ─── Durable pending-task recovery sweep ─────────────────────\n h3.use(\n `${P}/retry-stuck-tasks`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const body = (await readBody(event)) as {\n taskId?: string;\n [AGENT_BACKGROUND_PROCESSOR_FIELD]?: string;\n };\n if (body?.taskId !== INTEGRATION_RETRY_SWEEP_TOKEN_SUBJECT) {\n setResponseStatus(event, 400);\n return { error: \"invalid sweep subject\" };\n }\n if (!process.env.A2A_SECRET) {\n setResponseStatus(event, 503);\n return { error: \"durable integration recovery is not configured\" };\n }\n const token = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n if (\n !token ||\n !verifyInternalToken(INTEGRATION_RETRY_SWEEP_TOKEN_SUBJECT, token)\n ) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired internal token\" };\n }\n if (!isIntegrationDurableDispatchConfigured()) {\n return { ok: true, disabled: true };\n }\n const webhookBaseUrl = getBaseUrl(event);\n const [pendingTasks, campaigns, a2aContinuations] = await Promise.all([\n retryStuckPendingTasks({\n webhookBaseUrl,\n limit: 20,\n durableOnly: true,\n }).catch((error) => {\n console.error(\n \"[integrations] Pending-task recovery failed:\",\n error,\n );\n return { error: \"pending-task-recovery-failed\" };\n }),\n recoverDueIntegrationCampaigns({\n event,\n webhookBaseUrl,\n limit: 20,\n }).catch((error) => {\n console.error(\"[integrations] Campaign recovery failed:\", error);\n return { error: \"campaign-recovery-failed\" };\n }),\n recoverDueA2AContinuations({\n webhookBaseUrl,\n limit: 10,\n }).catch((error) => {\n console.error(\"[integrations] A2A recovery failed:\", error);\n return { error: \"a2a-recovery-failed\" };\n }),\n ]);\n return {\n ok: true,\n pendingTasks,\n campaigns,\n a2aContinuations,\n };\n }),\n );\n\n // ─── Process pending task (cross-platform task queue) ────────\n // POST /_agent-native/integrations/process-task\n // Internal endpoint invoked from the public webhook handler through either\n // the portable self-dispatch path or an acknowledged background handoff.\n // Auth: HMAC bearer signed with A2A_SECRET.\n // Each invocation runs the agent loop in a fresh function execution.\n h3.use(\n `${P}/process-task`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const body = (await readBody(event)) as {\n taskId?: string;\n [AGENT_BACKGROUND_PROCESSOR_FIELD]?: string;\n [INTEGRATION_CAMPAIGN_PROCESSOR_FIELD]?: boolean;\n };\n const taskId = body?.taskId;\n if (!taskId) {\n setResponseStatus(event, 400);\n return { error: \"taskId required\" };\n }\n\n // Auth: HMAC token bound to the task id.\n //\n // In production we MUST require A2A_SECRET — a publicly-callable\n // process-task endpoint lets attackers re-trigger any queued task\n // by guessing or sniffing its id (C3 in the webhook security audit).\n // The atomic SQL claim only prevents *double*-processing, not the\n // first attacker-driven processing.\n //\n // In dev we keep the loose posture so contributors don't have to\n // configure A2A_SECRET to play with the integration locally.\n if (!process.env.A2A_SECRET) {\n if (process.env.NODE_ENV === \"production\") {\n setResponseStatus(event, 503);\n return {\n error:\n \"A2A_SECRET not configured — internal token signing is required to process integration tasks in production.\",\n };\n }\n // Dev: fall through unsigned (the atomic claim still gates double-processing).\n } else {\n const tok = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n if (!tok || !verifyInternalToken(taskId, tok)) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired internal token\" };\n }\n }\n\n // Atomic claim: only one invocation gets to process this task\n const dispatchOutcome =\n body[AGENT_BACKGROUND_PROCESSOR_FIELD] ===\n AGENT_BACKGROUND_PROCESSOR_INTEGRATION\n ? \"background-acknowledged\"\n : \"portable-unconfirmed\";\n const campaignContinuation =\n body[INTEGRATION_CAMPAIGN_PROCESSOR_FIELD] === true;\n const task = campaignContinuation\n ? await getPendingTask(taskId)\n : await claimPendingTask(taskId, { dispatchOutcome });\n if (!task) {\n setResponseStatus(event, 200);\n return { ok: true, skipped: \"already-claimed-or-missing\" };\n }\n if (campaignContinuation && task.status !== \"processing\") {\n setResponseStatus(event, 200);\n return { ok: true, skipped: \"campaign-task-not-processing\" };\n }\n let taskPayload:\n | IntegrationSystemNoticeTaskPayload\n | IntegrationResponseDeliveryTaskPayload\n | { kind?: undefined };\n try {\n taskPayload = JSON.parse(task.payload) as typeof taskPayload;\n } catch {\n await markTaskFailed(task.id, \"Invalid integration task payload\");\n setResponseStatus(event, 400);\n return { error: \"Invalid integration task payload\" };\n }\n const durableCampaignEnabled =\n isIntegrationDurableDispatchEnabledForTask({\n platform: task.platform,\n externalThreadId: task.externalThreadId,\n platformContext: task.dispatchScope\n ? { channelId: task.dispatchScope }\n : undefined,\n });\n const confirmedDeliveryReceipt =\n taskPayload.kind === \"response-delivery\" &&\n taskPayload.deliveryReceipt?.status === \"delivered\";\n if (\n campaignContinuation &&\n !durableCampaignEnabled &&\n !confirmedDeliveryReceipt\n ) {\n await failDisabledIntegrationCampaignTask(task.id);\n const nextTask = await getNextPendingTaskForThread(\n task.platform,\n task.externalThreadId,\n );\n if (nextTask) {\n await dispatchPendingIntegrationTask({\n taskId: nextTask.id,\n task: {\n platform: task.platform,\n externalThreadId: task.externalThreadId,\n platformContext: nextTask.dispatchScope\n ? { channelId: nextTask.dispatchScope }\n : undefined,\n },\n event,\n baseUrl: getBaseUrl(event),\n });\n }\n setResponseStatus(event, 200);\n return { ok: true, failed: \"campaign-disabled\" };\n }\n\n let deliveryRetryTransitionStarted = false;\n let deliveryRetryRecovery:\n | { payload: string; errorMessage: string }\n | undefined;\n let confirmedDeliveryRetryPayload: string | undefined;\n let campaignDeliveryLease:\n | {\n campaignId: string;\n runId: string;\n leaseToken: string;\n campaignStatus: \"completed\" | \"failed\" | \"waiting-a2a\";\n }\n | undefined;\n try {\n const adapter = adapterMap.get(task.platform);\n if (!adapter) {\n await markTaskFailed(taskId, `Unknown platform: ${task.platform}`);\n setResponseStatus(event, 404);\n return { error: \"Unknown platform\" };\n }\n const processingResult = await runWithRequestContext(\n {\n userEmail: task.ownerEmail,\n ...(task.orgId ? { orgId: task.orgId } : {}),\n isIntegrationCaller: true,\n },\n async () => {\n if (\n !campaignContinuation &&\n taskPayload.kind === \"system-notice\"\n ) {\n if (!adapter.sendSystemNotice) {\n throw new Error(\n `Platform ${task.platform} cannot deliver system notices`,\n );\n }\n const config = await getIntegrationConfig(task.platform);\n const credentialContext =\n await credentialContextForIntegrationConfig(config);\n await withCredentialContext(credentialContext, () =>\n adapter.sendSystemNotice!(\n taskPayload.incoming,\n taskPayload.text,\n {\n ...(taskPayload.dedupeKey\n ? { dedupeKey: taskPayload.dedupeKey }\n : {}),\n ...(taskPayload.dedupeTtlMs\n ? { dedupeTtlMs: taskPayload.dedupeTtlMs }\n : {}),\n },\n ),\n );\n return;\n }\n if (taskPayload.kind === \"response-delivery\") {\n let receipt: void | PlatformDeliveryReceipt =\n taskPayload.deliveryReceipt;\n let deliveryLease:\n | { campaignId: string; runId: string; leaseToken: string }\n | undefined;\n if (campaignContinuation && !receipt) {\n const runId = `integration-delivery-${crypto.randomUUID()}`;\n const leaseToken = crypto.randomUUID();\n const deliveryClaim =\n await claimIntegrationCampaignDeliveryForTask(task.id, {\n runId,\n leaseToken,\n leaseDurationMs: INTEGRATION_DELIVERY_LEASE_MS,\n });\n if (!deliveryClaim) return \"campaign-active\" as const;\n deliveryLease = {\n campaignId: deliveryClaim.id,\n runId,\n leaseToken,\n };\n campaignDeliveryLease = {\n ...deliveryLease,\n campaignStatus:\n taskPayload.campaignTerminalStatus ??\n (taskPayload.awaitingA2ACompletion\n ? \"waiting-a2a\"\n : \"completed\"),\n };\n }\n if (!receipt) {\n receipt = await adapter.sendResponse(\n taskPayload.message,\n taskPayload.incoming,\n {\n ...(taskPayload.placeholderRef\n ? { placeholderRef: taskPayload.placeholderRef }\n : {}),\n },\n );\n }\n if (receipt?.status !== \"delivered\") {\n throw new Error(\n `${task.platform} response completed without delivery proof`,\n );\n }\n const deliveredPayload = taskPayload.deliveryReceipt\n ? taskPayload\n : {\n ...taskPayload,\n deliveryReceipt: receipt,\n deliveredAt: new Date().toISOString(),\n };\n confirmedDeliveryRetryPayload =\n JSON.stringify(deliveredPayload);\n if (!taskPayload.deliveryReceipt) {\n deliveryRetryRecovery = {\n payload: confirmedDeliveryRetryPayload,\n errorMessage:\n \"Provider delivery was confirmed but its receipt checkpoint failed\",\n };\n await stageTaskDeliveryPayload(\n task.id,\n deliveryRetryRecovery.payload,\n );\n deliveryRetryRecovery = undefined;\n }\n await recordIntegrationResponseDelivery(\n deliveredPayload,\n receipt,\n );\n const campaignTerminalStatus =\n taskPayload.campaignTerminalStatus;\n if (campaignTerminalStatus) {\n const errorMessage =\n \"Integration campaign exhausted its continuation limit\";\n const terminalized = deliveryLease\n ? campaignTerminalStatus === \"failed\"\n ? await failIntegrationCampaign(\n deliveryLease.campaignId,\n {\n runId: deliveryLease.runId,\n leaseToken: deliveryLease.leaseToken,\n errorMessage,\n },\n )\n : await completeIntegrationCampaignTask(\n deliveryLease.campaignId,\n {\n integrationTaskId: task.id,\n runId: deliveryLease.runId,\n leaseToken: deliveryLease.leaseToken,\n },\n )\n : await terminalizeIntegrationCampaignForTask(task.id, {\n status: campaignTerminalStatus,\n ...(campaignTerminalStatus === \"failed\"\n ? { errorMessage }\n : {}),\n });\n if (deliveryLease && !terminalized) {\n return \"campaign-active\" as const;\n }\n return campaignTerminalStatus === \"failed\"\n ? (\"campaign-failed\" as const)\n : (\"completed\" as const);\n }\n if (taskPayload.awaitingA2ACompletion) {\n if (deliveryLease) {\n const waiting = await waitForA2AIntegrationCampaign(\n deliveryLease.campaignId,\n {\n runId: deliveryLease.runId,\n leaseToken: deliveryLease.leaseToken,\n nextRunAt: Date.now() + 15_000,\n },\n );\n if (!waiting) return \"campaign-active\" as const;\n }\n if (\n !(await hasActiveA2AContinuationsForIntegrationTask(\n task.id,\n ))\n ) {\n const completed =\n await completeIntegrationCampaignTaskAfterA2A(task.id);\n return completed\n ? (\"completed\" as const)\n : (\"campaign-active\" as const);\n }\n return \"campaign-active\" as const;\n }\n if (campaignContinuation) {\n return \"campaign-active\" as const;\n }\n return;\n }\n const resources = await loadResourcesForPrompt(\n task.ownerEmail,\n true,\n options?.appId,\n task.orgId,\n );\n const result = await processIntegrationTask(\n task,\n {\n adapter,\n systemPrompt: baseSystemPrompt + resources,\n actions,\n initialToolNames,\n model,\n apiKey: getApiKey(),\n engine: options?.engine,\n ownerEmail: task.ownerEmail,\n appId: options?.appId,\n },\n {\n enabled: durableCampaignEnabled,\n continuationInvocation: campaignContinuation,\n },\n );\n if (result?.status === \"delivery-pending\") {\n deliveryRetryTransitionStarted = true;\n const checkpoint = await checkpointIntegrationDeliveryRetry(\n task,\n JSON.stringify(result.payload),\n result.errorMessage,\n event,\n result.campaignLease,\n );\n if (checkpoint === \"superseded\") {\n return \"campaign-active\" as const;\n }\n return \"delivery-retry\" as const;\n }\n if (\n result?.status === \"campaign-pending\" ||\n result?.status === \"campaign-active\"\n ) {\n return \"campaign-active\" as const;\n }\n if (result?.status === \"campaign-failed\") {\n return \"campaign-failed\" as const;\n }\n return \"completed\" as const;\n },\n );\n if (processingResult === \"delivery-retry\") {\n setResponseStatus(event, 202);\n return { ok: true, taskId, retrying: \"response-delivery\" };\n }\n if (processingResult === \"campaign-active\") {\n setResponseStatus(event, 202);\n return { ok: true, taskId, continuing: true };\n }\n if (processingResult === \"campaign-failed\") {\n await markTaskFailed(\n taskId,\n \"Integration campaign exhausted its continuation limit\",\n );\n const nextTask = await getNextPendingTaskForThread(\n task.platform,\n task.externalThreadId,\n );\n if (nextTask) {\n await dispatchPendingIntegrationTask({\n taskId: nextTask.id,\n task: {\n platform: task.platform,\n externalThreadId: task.externalThreadId,\n platformContext: nextTask.dispatchScope\n ? { channelId: nextTask.dispatchScope }\n : undefined,\n },\n event,\n baseUrl: getBaseUrl(event),\n });\n }\n setResponseStatus(event, 200);\n return { ok: true, taskId, failed: \"campaign-exhausted\" };\n }\n await markTaskCompleted(taskId);\n const nextTask = await getNextPendingTaskForThread(\n task.platform,\n task.externalThreadId,\n );\n if (nextTask) {\n await dispatchPendingIntegrationTask({\n taskId: nextTask.id,\n task: {\n platform: task.platform,\n externalThreadId: task.externalThreadId,\n platformContext: nextTask.dispatchScope\n ? { channelId: nextTask.dispatchScope }\n : undefined,\n },\n event,\n baseUrl: getBaseUrl(event),\n });\n }\n await processDueA2AContinuations({\n adapters: adapterMap,\n limit: 2,\n }).catch((err) => {\n console.error(\n \"[integrations] A2A continuation opportunistic sweep failed:\",\n err,\n );\n });\n return { ok: true, taskId };\n } catch (err: any) {\n const errorMessage = err?.message\n ? String(err.message).slice(0, 1000)\n : \"processor failed\";\n if (deliveryRetryRecovery) {\n try {\n const checkpoint = await checkpointIntegrationDeliveryRetry(\n task,\n deliveryRetryRecovery.payload,\n `${deliveryRetryRecovery.errorMessage}: ${errorMessage}`,\n event,\n campaignDeliveryLease,\n );\n if (checkpoint === \"superseded\") {\n setResponseStatus(event, 202);\n return { ok: true, taskId, continuing: true };\n }\n setResponseStatus(event, 202);\n return { ok: true, taskId, retrying: \"response-delivery\" };\n } catch (transitionError) {\n const transitionMessage =\n transitionError instanceof Error\n ? transitionError.message\n : String(transitionError);\n await containFailedDeliveryTransition(\n task,\n `Could not safely checkpoint the delivery receipt: ${transitionMessage}`,\n event,\n ).catch((failureTransitionError) => {\n console.error(\n \"[integrations] Failed to contain delivery receipt transition failure:\",\n failureTransitionError,\n );\n });\n }\n } else if (confirmedDeliveryRetryPayload) {\n try {\n const checkpoint = await checkpointIntegrationDeliveryRetry(\n task,\n confirmedDeliveryRetryPayload,\n `Provider delivery was confirmed but history persistence failed: ${errorMessage}`,\n event,\n campaignDeliveryLease,\n );\n if (checkpoint === \"superseded\") {\n setResponseStatus(event, 202);\n return { ok: true, taskId, continuing: true };\n }\n console.error(\"[integrations] process-task failure:\", err);\n setResponseStatus(event, 202);\n return { ok: true, taskId, retrying: \"response-delivery\" };\n } catch (transitionError) {\n const transitionMessage =\n transitionError instanceof Error\n ? transitionError.message\n : String(transitionError);\n console.error(\n \"[integrations] Failed to requeue confirmed delivery history:\",\n transitionError,\n );\n await containFailedDeliveryTransition(\n task,\n `Could not safely checkpoint confirmed delivery history: ${transitionMessage}`,\n event,\n ).catch((failureTransitionError) => {\n console.error(\n \"[integrations] Failed to contain confirmed delivery history transition failure:\",\n failureTransitionError,\n );\n });\n console.error(\"[integrations] process-task failure:\", err);\n setResponseStatus(event, 500);\n return { error: \"Internal task failed\" };\n }\n } else if (deliveryRetryTransitionStarted) {\n await containFailedDeliveryTransition(\n task,\n `Could not safely checkpoint the delivery retry: ${errorMessage}`,\n event,\n ).catch((transitionError) => {\n console.error(\n \"[integrations] Failed to contain delivery retry transition failure:\",\n transitionError,\n );\n });\n } else if (task.attempts >= MAX_PENDING_TASK_ATTEMPTS) {\n await markTaskFailed(taskId, errorMessage);\n } else {\n await markTaskRetryable(taskId, errorMessage);\n }\n // Log the detail server-side; never return the raw error message\n // to the caller. Raw messages have leaked DB error codes, schema\n // names, and stack hints in the past (L3 in the webhook security\n // audit). Sentry / log providers still see the full error.\n console.error(\"[integrations] process-task failure:\", err);\n setResponseStatus(event, 500);\n return { error: \"Internal task failed\" };\n }\n }),\n );\n\n // ─── Process deferred A2A continuation ──────────────────────────\n // POST /_agent-native/integrations/process-a2a-continuation\n // Internal endpoint invoked when call-agent timed out inside an\n // integration processor but the remote A2A task kept running.\n h3.use(\n `${P}/process-a2a-continuation`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const body = (await readBody(event)) as { continuationId?: string };\n const continuationId = body?.continuationId;\n if (!continuationId) {\n setResponseStatus(event, 400);\n return { error: \"continuationId required\" };\n }\n\n if (!process.env.A2A_SECRET) {\n if (process.env.NODE_ENV === \"production\") {\n setResponseStatus(event, 503);\n return {\n error:\n \"A2A_SECRET not configured — internal token signing is required to process A2A continuations in production.\",\n };\n }\n } else {\n const tok = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n if (!tok || !verifyInternalToken(continuationId, tok)) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired internal token\" };\n }\n }\n\n try {\n await processA2AContinuationById(continuationId, {\n adapters: adapterMap,\n });\n } catch (err: any) {\n // Mark the continuation failed so it isn't left dangling, and surface\n // a 500 to the caller instead of leaking an unhandled rejection.\n await failA2AContinuation(\n continuationId,\n err?.message?.slice(0, 500) || \"continuation processing failed\",\n ).catch(() => {});\n console.error(\n \"[integrations] process-a2a-continuation failure:\",\n err,\n );\n setResponseStatus(event, 500);\n return { error: \"Failed to process A2A continuation\" };\n }\n return { ok: true, continuationId };\n }),\n );\n\n // ─── Slack native action controls ─────────────────────────────\n h3.use(\n `${P}/slack/interactions`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const adapter = adapterMap.get(\"slack\");\n if (!adapter) {\n setResponseStatus(event, 404);\n return \"ok\";\n }\n // handleVerification caches the exact raw form bytes even though the\n // body is not JSON; verifyWebhook then validates Slack's HMAC before\n // any action value is parsed.\n await adapter.handleVerification(event);\n if (!(await adapter.verifyWebhook(event))) {\n setResponseStatus(event, 401);\n return { error: \"Invalid webhook signature\" };\n }\n try {\n const raw = String(event.context?.__rawBody ?? \"\");\n const encoded = new URLSearchParams(raw).get(\"payload\");\n const payload = encoded ? JSON.parse(encoded) : null;\n const action = payload?.actions?.[0];\n const actionKind =\n action?.action_id === \"agent_native_approve\"\n ? \"approve\"\n : action?.action_id === \"agent_native_deny\"\n ? \"deny\"\n : action?.action_id === \"agent_native_cancel\"\n ? \"cancel\"\n : null;\n if (!actionKind || typeof action?.value !== \"string\") return \"ok\";\n const requesterId = payload?.user?.id;\n const teamId = payload?.team?.id ?? payload?.user?.team_id;\n const channelId =\n payload?.channel?.id ?? payload?.container?.channel_id;\n const messageTs = payload?.container?.message_ts;\n if (!requesterId || !teamId || !channelId || !messageTs) {\n return \"ok\";\n }\n const control = await claimIntegrationControl({\n id: action.value,\n action: actionKind,\n requesterId,\n teamId,\n apiAppId:\n typeof payload?.api_app_id === \"string\" ? payload.api_app_id : \"\",\n channelId,\n messageTs,\n });\n if (!control) return \"ok\";\n if (actionKind === \"cancel\") {\n if (control.runId) abortRun(control.runId, \"slack_cancel\");\n return \"ok\";\n }\n if (actionKind === \"deny\") return \"ok\";\n if (!control.approvalKey) return \"ok\";\n\n const taskId = `task-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n const incoming = {\n ...control.incoming,\n text: \"The requester approved the pending action. Continue the task.\",\n approvedToolCalls: [control.approvalKey],\n timestamp: Date.now(),\n platformContext: {\n ...control.incoming.platformContext,\n eventId: `control:${control.id}`,\n },\n };\n await insertPendingTask({\n id: taskId,\n platform: incoming.platform,\n externalThreadId: incoming.externalThreadId,\n payload: JSON.stringify({ incoming }),\n ownerEmail: control.ownerEmail,\n orgId: control.orgId,\n externalEventKey: `control:${control.id}`,\n dispatchScope: integrationDispatchScopeValue({\n platform: incoming.platform,\n externalThreadId: incoming.externalThreadId,\n platformContext: incoming.platformContext,\n }),\n });\n await dispatchPendingIntegrationTask({\n taskId,\n task: {\n platform: incoming.platform,\n externalThreadId: incoming.externalThreadId,\n platformContext: incoming.platformContext,\n },\n event,\n baseUrl: getBaseUrl(event),\n });\n } catch (err) {\n console.error(\"[slack] Interaction handling failed:\", err);\n }\n return \"ok\";\n }),\n );\n\n // ─── Managed integration installations ───────────────────────\n h3.use(\n `${P}/installations`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n const org = await getOrgContext(event).catch(() => null);\n const actor = {\n userEmail: session.email,\n orgId: org?.orgId ?? session.orgId ?? null,\n isOrgAdmin: org?.role === \"owner\" || org?.role === \"admin\",\n };\n if (method === \"GET\") {\n const query = getQuery(event);\n return {\n installations: await listIntegrationInstallations(\n actor,\n typeof query.platform === \"string\" ? query.platform : undefined,\n ),\n };\n }\n const body = (await readBody(event)) as {\n id?: unknown;\n action?: unknown;\n };\n const id = typeof body.id === \"string\" ? body.id : \"\";\n if (!id) {\n setResponseStatus(event, 400);\n return { error: \"installation id required\" };\n }\n if (body.action === \"disconnect\") {\n return {\n installation: await disconnectIntegrationInstallation(id, actor),\n };\n }\n if (body.action === \"test\") {\n const installation = (\n await listIntegrationInstallations(actor, \"slack\")\n ).find((item) => item.id === id);\n if (!installation) {\n setResponseStatus(event, 404);\n return { error: \"installation not found\" };\n }\n const bundle = await resolveIntegrationTokenBundle(\n installation.platform,\n installation.installationKey,\n );\n if (!bundle) {\n const updated = await updateIntegrationInstallation(id, actor, {\n health: \"revoked\",\n status: \"revoked\",\n lastError: \"token_unavailable\",\n healthCheckedAt: Date.now(),\n });\n return { installation: updated };\n }\n const health = await testSlackAuth(bundle.accessToken);\n const updated = await updateIntegrationInstallation(id, actor, {\n health: health.health,\n status: health.health === \"revoked\" ? \"revoked\" : \"connected\",\n lastError: health.error,\n healthCheckedAt: health.checkedAt,\n ...(health.ok ? { lastHealthyAt: health.checkedAt } : {}),\n });\n return { installation: updated };\n }\n setResponseStatus(event, 400);\n return { error: \"unsupported installation action\" };\n }),\n );\n\n h3.use(\n `${P}/scopes`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const access = { ownerEmail: ctx.ownerEmail, orgId: ctx.orgId };\n if (method === \"GET\") {\n const query = getQuery(event);\n return {\n scopes: await listIntegrationScopes(access, {\n platform:\n typeof query.platform === \"string\" ? query.platform : undefined,\n tenantId:\n typeof query.tenantId === \"string\" ? query.tenantId : undefined,\n }),\n };\n }\n const admin = await checkOrgAdmin(event);\n if (!admin.ok) return { error: admin.error };\n try {\n const body = (await readBody(event)) as Parameters<\n typeof saveIntegrationScope\n >[0];\n return { scope: await saveIntegrationScope(body, access) };\n } catch (err) {\n setResponseStatus(event, 400);\n return {\n error: err instanceof Error ? err.message : \"invalid scope\",\n };\n }\n }),\n );\n\n h3.use(\n `${P}/budgets`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const access = { ownerEmail: ctx.ownerEmail, orgId: ctx.orgId };\n if (method === \"GET\") {\n return { budgets: await listIntegrationUsageBudgets(access) };\n }\n const admin = await checkOrgAdmin(event);\n if (!admin.ok) return { error: admin.error };\n try {\n const body = (await readBody(event)) as Parameters<\n typeof saveIntegrationUsageBudget\n >[0];\n return {\n budget: await saveIntegrationUsageBudget(body, access),\n };\n } catch (err) {\n setResponseStatus(event, 400);\n return {\n error: err instanceof Error ? err.message : \"invalid budget\",\n };\n }\n }),\n );\n\n h3.use(\n `${P}/memory`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const access = { ownerEmail: ctx.ownerEmail, orgId: ctx.orgId };\n const query = getQuery(event);\n const body =\n method === \"POST\"\n ? ((await readBody(event)) as Record<string, unknown>)\n : null;\n const scopeId =\n typeof query.scopeId === \"string\"\n ? query.scopeId\n : typeof body?.scopeId === \"string\"\n ? body.scopeId\n : \"\";\n const scope = (await listIntegrationScopes(access)).find(\n (item) => item.id === scopeId,\n );\n if (!scope) {\n setResponseStatus(event, 404);\n return { error: \"integration scope not found\" };\n }\n if (method === \"GET\") {\n return { memories: await listIntegrationMemory(scope.id) };\n }\n const admin = await checkOrgAdmin(event);\n if (!admin.ok) return { error: admin.error };\n if (body?.action === \"remember\") {\n return {\n memory: await rememberForIntegrationScope(\n {\n name: String(body.name ?? \"\"),\n description: String(body.description ?? \"\"),\n content: String(body.content ?? \"\"),\n },\n scope.id,\n ),\n };\n }\n if (body?.action === \"forget\") {\n return {\n memory: await forgetIntegrationMemory(\n { name: String(body.name ?? \"\") },\n scope.id,\n ),\n };\n }\n setResponseStatus(event, 400);\n return { error: \"unsupported memory action\" };\n }),\n );\n\n // ─── Managed Slack OAuth ──────────────────────────────────────\n h3.use(\n `${P}/slack/manifest`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const oauthRedirectUrl = resolveOAuthRedirectUri(\n event,\n `${P}/slack/oauth/callback`,\n );\n const eventsRequestUrl = resolveOAuthRedirectUri(\n event,\n `${P}/slack/webhook`,\n );\n const interactivityRequestUrl = resolveOAuthRedirectUri(\n event,\n `${P}/slack/interactions`,\n );\n if (\n !oauthRedirectUrl ||\n !eventsRequestUrl ||\n !interactivityRequestUrl\n ) {\n setResponseStatus(event, 400);\n return { error: \"Slack manifest URLs are not allowed.\" };\n }\n setResponseHeader(\n event,\n \"content-disposition\",\n 'attachment; filename=\"agent-native-slack-manifest.json\"',\n );\n return buildSlackAgentManifest({\n oauthRedirectUrl,\n eventsRequestUrl,\n interactivityRequestUrl,\n });\n }),\n );\n\n h3.use(\n `${P}/slack/oauth/install`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Sign in before connecting Slack.\" };\n }\n const org = await getOrgContext(event).catch(() => null);\n try {\n assertSlackInstallAccess({\n email: session.email,\n orgId: org?.orgId ?? session.orgId ?? null,\n orgRole: org?.role ?? null,\n });\n } catch (err) {\n setResponseStatus(event, 403);\n return {\n error: err instanceof Error ? err.message : \"Slack access denied\",\n };\n }\n return await runWithRequestContext(\n {\n userEmail: session.email,\n orgId: org?.orgId ?? session.orgId ?? undefined,\n },\n async () => {\n const clientId = await resolveSecret(\"SLACK_CLIENT_ID\");\n const clientSecret = await resolveSecret(\"SLACK_CLIENT_SECRET\");\n const signingSecret = await resolveSecret(\"SLACK_SIGNING_SECRET\");\n if (!clientId || !clientSecret || !signingSecret) {\n setResponseStatus(event, 503);\n return {\n error:\n \"Slack OAuth is not configured. Add the Slack client id, client secret, and signing secret first.\",\n };\n }\n const redirectUri = resolveOAuthRedirectUri(\n event,\n `${P}/slack/oauth/callback`,\n );\n if (!redirectUri) {\n setResponseStatus(event, 400);\n return { error: \"Slack OAuth redirect URL is not allowed.\" };\n }\n const query = getQuery(event);\n const state = encodeOAuthState({\n redirectUri,\n owner: session.email,\n orgId: org?.orgId ?? session.orgId ?? undefined,\n app: \"agent-native:slack\",\n addAccount: true,\n returnUrl:\n typeof query.return === \"string\" ? query.return : \"/messaging\",\n });\n return sendRedirect(\n event,\n buildSlackAuthorizeUrl({ clientId, redirectUri, state }),\n 302,\n );\n },\n );\n }),\n );\n\n h3.use(\n `${P}/slack/oauth/callback`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const query = getQuery(event);\n if (typeof query.error === \"string\") {\n return oauthErrorPage(\"Slack authorization was canceled or denied.\");\n }\n const fallbackRedirect = resolveOAuthRedirectUri(\n event,\n `${P}/slack/oauth/callback`,\n );\n if (!fallbackRedirect) {\n return oauthErrorPage(\"Slack OAuth redirect URL is not allowed.\");\n }\n const state = decodeOAuthState(\n typeof query.state === \"string\" ? query.state : undefined,\n fallbackRedirect,\n );\n const session = await getSession(event).catch(() => null);\n const org = await getOrgContext(event).catch(() => null);\n if (\n state.app !== \"agent-native:slack\" ||\n !session?.email ||\n !state.owner ||\n session.email.toLowerCase() !== state.owner.toLowerCase() ||\n (state.orgId ?? null) !== (org?.orgId ?? session.orgId ?? null)\n ) {\n return oauthErrorPage(\n \"Your Slack install session expired or changed. Sign in and start again.\",\n );\n }\n const code = typeof query.code === \"string\" ? query.code : null;\n if (!code) return oauthErrorPage(\"Slack did not return an OAuth code.\");\n try {\n const access = assertSlackInstallAccess({\n email: session.email,\n orgId: org?.orgId ?? session.orgId ?? null,\n orgRole: org?.role ?? null,\n });\n return await runWithRequestContext(\n {\n userEmail: access.ownerEmail,\n orgId: access.orgId ?? undefined,\n },\n async () => {\n const clientId = await resolveSecret(\"SLACK_CLIENT_ID\");\n const clientSecret = await resolveSecret(\"SLACK_CLIENT_SECRET\");\n if (!clientId || !clientSecret) {\n return oauthErrorPage(\"Slack OAuth is not configured.\");\n }\n const oauth = await exchangeSlackOAuthCode({\n code,\n clientId,\n clientSecret,\n redirectUri: state.redirectUri,\n });\n const health = await testSlackAuth(oauth.access_token || \"\");\n if (!health.ok) {\n return oauthErrorPage(\n \"Slack connected, but the bot token could not be verified. Please retry.\",\n );\n }\n if (\n oauth.team?.id &&\n health.teamId &&\n oauth.team.id !== health.teamId\n ) {\n return oauthErrorPage(\n \"Slack returned inconsistent workspace details. Please retry.\",\n );\n }\n const input = slackOAuthResponseToInstallation(oauth, access);\n const installation = await upsertIntegrationInstallation({\n ...input,\n health: health.health,\n healthCheckedAt: health.checkedAt,\n lastHealthyAt: health.checkedAt,\n });\n await saveIntegrationConfig(\n \"slack\",\n { enabled: true, managedOAuth: true },\n \"default\",\n access.ownerEmail,\n );\n return oauthCallbackResponse(\n event,\n installation.teamName || installation.enterpriseName || \"Slack\",\n {\n addAccount: true,\n appName: \"Agent Native\",\n returnUrl: state.returnUrl || \"/messaging\",\n },\n );\n },\n );\n } catch (err) {\n console.error(\"[slack] OAuth callback failed:\", err);\n return oauthErrorPage(\"Slack connection failed. Please try again.\");\n }\n }),\n );\n\n // ─── Per-platform catch-all ───────────────────────────────────\n // Handles: webhook, status, enable, disable, setup for each platform\n h3.use(\n `${P}`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n // event.path is stripped to the remainder after the mount prefix\n const raw = (event.path || \"/\").split(\"?\")[0].replace(/^\\//, \"\");\n const parts = raw.split(\"/\").filter(Boolean);\n\n // Already handled by the dedicated /status route above\n if (parts[0] === \"status\" && parts.length === 1) return;\n // Already handled by the dedicated /task-queue/status route above\n if (parts[0] === \"task-queue\") return;\n // Already handled by the dedicated /remote/* routes above\n if (parts[0] === \"remote\") return;\n // Already handled by the dedicated /process-task route above\n if (parts[0] === \"process-task\") return;\n // Already handled by the signed durable recovery route above\n if (parts[0] === \"retry-stuck-tasks\") return;\n // Already handled by the dedicated /process-a2a-continuation route above\n if (parts[0] === \"process-a2a-continuation\") return;\n // These are framework-owned control-plane routes, not integration\n // platforms. The dedicated handlers above normally return a response\n // before this catch-all runs, but keeping them reserved here prevents\n // an unexpected mount fall-through from turning a valid control-plane\n // request into a misleading \"Unknown platform\" response.\n if (\n parts[0] === \"installations\" ||\n parts[0] === \"scopes\" ||\n parts[0] === \"budgets\" ||\n parts[0] === \"memory\"\n ) {\n setResponseStatus(event, 404);\n return { error: \"Not found\" };\n }\n\n const platform = parts[0];\n const action = parts[1]; // webhook, status, enable, disable, setup\n\n if (!platform) {\n setResponseStatus(event, 404);\n return { error: \"Platform required\" };\n }\n\n const adapter = adapterMap.get(platform);\n if (!adapter) {\n setResponseStatus(event, 404);\n return { error: `Unknown platform: ${platform}` };\n }\n\n // Set params for handlers that read them\n if (event.context) {\n event.context.params = {\n ...event.context.params,\n platform,\n };\n }\n\n // ─── GET /:platform/status ─────────────────────────────\n if (action === \"status\" && method === \"GET\") {\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const baseUrl = getBaseUrl(event);\n const status = await withCredentialContext(\n toCredentialContext(ctx),\n () => adapter.getStatus(baseUrl),\n );\n const config = await getIntegrationConfig(platform);\n status.enabled = !!config?.configData?.enabled;\n status.webhookUrl = `${baseUrl}${P}/${platform}/webhook`;\n if (!status.requiredEnvKeys) {\n try {\n status.requiredEnvKeys = adapter.getRequiredEnvKeys();\n } catch {\n status.requiredEnvKeys = [];\n }\n }\n return status;\n }\n\n // ─── POST /:platform/webhook ───────────────────────────\n if (action === \"webhook\" && method === \"POST\") {\n // Google Docs push notifications bypass the normal webhook flow —\n // they're opaque \"something changed\" pings, not message payloads.\n // We MUST verify the Pub/Sub OIDC token here. Without it, anyone\n // could POST any body to this URL and force a Drive changes pull\n // (H7 in the webhook security audit).\n if (platform === \"google-docs\") {\n const audience = process.env.GOOGLE_DOCS_PUSH_AUDIENCE;\n if (!audience) {\n if (process.env.NODE_ENV === \"production\") {\n // Fail closed in prod so a misconfigured deployment surfaces\n // in Pub/Sub's delivery metrics rather than silently\n // accepting anonymous requests.\n setResponseStatus(event, 503);\n return {\n ok: false,\n error:\n \"google-docs push endpoint disabled (audience not configured)\",\n };\n }\n // Dev: keep the loose posture so contributors can play with the\n // integration locally without configuring Pub/Sub.\n handlePushNotification().catch((err) => {\n console.error(\"[google-docs] Push handler error:\", err);\n });\n return \"ok\";\n }\n const authHeader = getRequestHeader(event, \"authorization\") || \"\";\n try {\n await verifyGoogleDocsPushToken(authHeader);\n } catch (err: any) {\n console.warn(\n `[google-docs] OIDC verify failed: ${err?.message ?? String(err)}`,\n );\n setResponseStatus(event, 401);\n return { ok: false, error: \"unauthorized\" };\n }\n handlePushNotification().catch((err) => {\n console.error(\"[google-docs] Push handler error:\", err);\n });\n return \"ok\";\n }\n\n const config = await getIntegrationConfig(platform);\n const credentialContext =\n await credentialContextForIntegrationConfig(config);\n\n // Let the adapter cache the raw request and identify setup\n // challenges, but never return a challenge response until the\n // provider signature has been verified.\n const verification = await withCredentialContext(\n credentialContext,\n () => adapter.handleVerification(event),\n );\n\n // Verify the webhook signature BEFORE parsing. We pre-parse the\n // body here (so handleWebhook can skip its second readBody, which\n // hangs on streaming providers), and that means handleWebhook's\n // own verifyWebhook step is bypassed. Without this call anyone\n // could POST a forged Slack/Telegram/email payload.\n const isValid = await withCredentialContext(credentialContext, () =>\n adapter.verifyWebhook(event),\n );\n if (!isValid) {\n setResponseStatus(event, 401);\n return { error: \"Invalid webhook signature\" };\n }\n if (verification.handled) {\n setResponseStatus(event, 200);\n return verification.response ?? \"ok\";\n }\n\n if (!config?.configData?.enabled) {\n setResponseStatus(event, 404);\n return { error: `Integration ${platform} is not enabled` };\n }\n\n let incoming = await withCredentialContext(credentialContext, () =>\n adapter.parseIncomingMessage(event),\n );\n if (!incoming) {\n setResponseStatus(event, 200);\n return \"ok\";\n }\n if (adapter.hydrateIncomingIdentity) {\n try {\n incoming = await withCredentialContext(credentialContext, () =>\n adapter.hydrateIncomingIdentity!(incoming!),\n );\n } catch (err) {\n // Identity hydration is best-effort for platforms that have an\n // app-specific resolver. Slack's default DM resolver below will\n // still fail closed when the identity is absent or unverified.\n console.warn(\n `[integrations] Could not hydrate ${platform} sender identity:`,\n err instanceof Error ? err.message : err,\n );\n }\n }\n let defaultExecutionContext: IntegrationExecutionContext | null =\n null;\n if (\n incoming.platform === \"slack\" &&\n incoming.conversationType === \"dm\" &&\n !options?.resolveExecutionContext\n ) {\n try {\n defaultExecutionContext = await withCredentialContext(\n credentialContext,\n () => resolveDefaultIntegrationExecutionContext(incoming!),\n );\n } catch (err) {\n // The legacy owner-only resolver predates org-bound identities\n // and must not turn a rejected Slack DM into an authenticated\n // owner run. Custom resolveExecutionContext is checked above and\n // skips this default ladder entirely so apps can fully own auth\n // without framework membership checks or identity side effects.\n const declined =\n err instanceof IntegrationIdentityDeclinedError ? err : null;\n if (declined) {\n console.warn(\n `[integrations] default Slack DM identity declined message:`,\n declined.message,\n );\n if (adapter.sendSystemNotice) {\n try {\n await enqueueSystemNotice(\n event,\n incoming!,\n declined.userFacingMessage,\n {\n dedupeKey: `decline:${incoming!.tenantId ?? \"unknown\"}:${incoming!.senderId ?? \"unknown\"}:${declined.reason}`,\n dedupeTtlMs: DECLINE_NOTICE_DEDUPE_TTL_MS,\n },\n );\n } catch (noticeErr) {\n console.warn(\n `[integrations] could not persist decline notice:`,\n noticeErr instanceof Error\n ? noticeErr.message\n : noticeErr,\n );\n setResponseStatus(event, 500);\n return { error: \"notice enqueue failed\" };\n }\n }\n } else {\n console.error(\n `[integrations] default Slack DM identity denied message:`,\n err,\n );\n }\n setResponseStatus(event, 200);\n return \"ok\";\n }\n }\n let executionContext: IntegrationExecutionContext = {\n ownerEmail: `integration@${platform}`,\n orgId: null as string | null,\n principalType: \"service\" as const,\n };\n if (options?.resolveExecutionContext) {\n try {\n executionContext = await withCredentialContext(\n credentialContext,\n () =>\n Promise.resolve(options.resolveExecutionContext!(incoming)),\n );\n } catch (err) {\n console.error(\n `[integrations] resolveExecutionContext denied message:`,\n err,\n );\n setResponseStatus(event, 200);\n return \"ok\";\n }\n } else if (defaultExecutionContext) {\n executionContext = defaultExecutionContext;\n if (defaultExecutionContext.anonymousMember) {\n if (!options?.allowAnonymousOrgScopedSlackDm) {\n const senderEmail =\n typeof incoming.senderEmail === \"string\" &&\n incoming.senderEmail.trim()\n ? incoming.senderEmail.trim()\n : null;\n const noticeText = senderEmail\n ? `I couldn't match your Slack account to an organization member, so I can't run this request. Ask an organization admin to add ${senderEmail}, then try again.`\n : \"I couldn't verify your Slack account email, so I can't run this request. Ask an organization admin to reconnect Slack with the users:read.email scope, then try again.\";\n if (adapter.sendSystemNotice) {\n try {\n await enqueueSystemNotice(event, incoming, noticeText, {\n dedupeKey: `anonymous-tier-disabled:${incoming.tenantId ?? \"unknown\"}:${incoming.senderId ?? \"unknown\"}`,\n });\n } catch (noticeErr) {\n console.warn(\n `[integrations] could not persist unlinked-member notice:`,\n noticeErr instanceof Error\n ? noticeErr.message\n : noticeErr,\n );\n setResponseStatus(event, 500);\n return { error: \"notice enqueue failed\" };\n }\n }\n setResponseStatus(event, 200);\n return \"ok\";\n }\n // The anonymous tier must never be silent. (1) The agent run\n // can tell: the note rides the serialized `incoming` into the\n // queued task and surfaces via <integration-context>.\n incoming.identityNote =\n \"Caller is an unlinked Slack workspace member running with organization-wide visibility only; personal or privately-shared data is not accessible. They can get personal access by having an admin add their Slack email to the organization (or by reconnecting Slack with the users:read.email scope).\";\n // (2) The sender gets a one-time heads-up through the same\n // durable SQL queue as agent work. The self-dispatch is only a\n // latency optimization; the retry sweep guarantees delivery.\n if (adapter.sendSystemNotice) {\n const senderEmail =\n typeof incoming.senderEmail === \"string\" &&\n incoming.senderEmail.trim()\n ? incoming.senderEmail.trim()\n : null;\n const noticeText = senderEmail\n ? `Heads up: I couldn't match your Slack account to an organization member, so I can only use org-wide data. Ask an admin to add ${senderEmail} to the organization for personal access.`\n : \"Heads up: I couldn't verify your Slack account's email, so I can only use org-wide data. Ask an admin to update the Slack connection with the users:read.email scope for personal access.\";\n try {\n await enqueueSystemNotice(event, incoming, noticeText, {\n dedupeKey: `anonymous-tier:${incoming.tenantId ?? \"unknown\"}:${incoming.senderId ?? \"unknown\"}`,\n });\n } catch (noticeErr) {\n console.warn(\n `[integrations] could not persist anonymous-tier notice:`,\n noticeErr instanceof Error ? noticeErr.message : noticeErr,\n );\n setResponseStatus(event, 500);\n return { error: \"notice enqueue failed\" };\n }\n }\n }\n } else if (options?.resolveOwner) {\n try {\n executionContext.ownerEmail = await withCredentialContext(\n credentialContext,\n () => Promise.resolve(options.resolveOwner!(incoming)),\n );\n } catch (err) {\n console.error(\n `[integrations] resolveOwner failed, using default:`,\n err,\n );\n }\n } else {\n try {\n executionContext = await withCredentialContext(\n credentialContext,\n () => resolveDefaultIntegrationExecutionContext(incoming!),\n );\n } catch (err) {\n console.error(\n `[integrations] default execution identity denied message:`,\n err,\n );\n setResponseStatus(event, 200);\n return \"ok\";\n }\n }\n if (executionContext.scopeId) {\n incoming.integrationScopeId = executionContext.scopeId;\n }\n const result = await handleWebhook(event, {\n adapter,\n // The processor reloads scoped resources immediately before the\n // agent run. Avoid doing that work on the acknowledgement path,\n // where providers such as Discord enforce a 3-second deadline.\n systemPrompt: baseSystemPrompt,\n actions,\n initialToolNames,\n model,\n apiKey: getApiKey(),\n engine: options?.engine,\n appId: options?.appId,\n ownerEmail: executionContext.ownerEmail,\n orgId: executionContext.orgId,\n principalType: executionContext.principalType,\n beforeProcess: options?.beforeProcess,\n incoming,\n });\n setResponseStatus(event, result.status);\n return result.body;\n }\n\n // ─── POST /:platform/enable ────────────────────────────\n if (action === \"enable\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n // Stamp the org-admin who toggled this so downstream code can\n // tell who is responsible — useful for audit logs even though\n // the row itself remains deployment-wide.\n const session = await getSession(event).catch(() => null);\n await saveIntegrationConfig(\n platform,\n { enabled: true },\n \"default\",\n session?.email,\n );\n return { ok: true, platform, enabled: true };\n }\n\n // ─── POST /:platform/disable ───────────────────────────\n if (action === \"disable\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n const session = await getSession(event).catch(() => null);\n await saveIntegrationConfig(\n platform,\n { enabled: false },\n \"default\",\n session?.email,\n );\n return { ok: true, platform, enabled: false };\n }\n\n // ─── POST /:platform/setup ─────────────────────────────\n if (action === \"setup\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n if (platform === \"telegram\") {\n const baseUrl = getBaseUrl(event);\n const webhookUrl = `${baseUrl}${P}/telegram/webhook`;\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const token = await withCredentialContext(\n toCredentialContext(ctx),\n () => resolveSecret(\"TELEGRAM_BOT_TOKEN\"),\n );\n const webhookSecret = await withCredentialContext(\n toCredentialContext(ctx),\n () => resolveSecret(\"TELEGRAM_WEBHOOK_SECRET\"),\n );\n if (!token || !webhookSecret) {\n setResponseStatus(event, 400);\n return {\n error:\n \"TELEGRAM_BOT_TOKEN and TELEGRAM_WEBHOOK_SECRET must be configured before webhook setup.\",\n };\n }\n try {\n const res = await fetch(\n `https://api.telegram.org/bot${token}/setWebhook`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n url: webhookUrl,\n secret_token: webhookSecret,\n }),\n },\n );\n const data = await res.json();\n return { ok: true, platform, webhookUrl, result: data };\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err.message };\n }\n }\n return { ok: true, platform, message: \"No setup required\" };\n }\n\n setResponseStatus(event, 404);\n return { error: \"Not found\" };\n }),\n );\n\n // ─── Start pending-tasks retry sweeper ────────────────────────\n // Sweeps the integration_pending_tasks queue every 60s and re-fires the\n // processor for any tasks that got stuck (initial dispatch lost or\n // processor killed mid-flight). No-ops gracefully if the queue table\n // hasn't been created yet on this deployment.\n startPendingTasksRetryJob({\n webhookBaseUrl: process.env.WEBHOOK_BASE_URL,\n });\n startA2AContinuationRetryJob(adapterMap);\n startRemoteCommandsRetryJob();\n startRemotePushDeliveryJob();\n\n // ─── Start Google Docs poller/push ────────────────────────────\n if (adapterMap.has(\"google-docs\")) {\n // Defer startup slightly so the server is fully ready\n setTimeout(() => {\n // We don't know the base URL at plugin init time — it depends on\n // the incoming request. For push mode, the webhook URL needs to be\n // resolved. We pass it as a special option; the poller will attempt\n // to register a watch when the first request reveals the base URL,\n // or use the WEBHOOK_BASE_URL env var if set.\n const baseUrl = process.env.WEBHOOK_BASE_URL;\n const webhookUrl = baseUrl\n ? `${withConfiguredAppBasePath(baseUrl)}${P}/google-docs/webhook`\n : undefined;\n\n void startGoogleDocsPoller({\n systemPrompt: baseSystemPrompt,\n actions,\n initialToolNames,\n model: model ?? \"\",\n apiKey: getApiKey(),\n ownerEmail: \"integration@google-docs\",\n webhookUrl,\n });\n }, 2000);\n }\n\n if (process.env.DEBUG)\n console.log(\n `[integrations] Mounted integration routes for: ${adapters.map((a) => a.platform).join(\", \")}`,\n );\n };\n}\n\n/**\n * Default integrations plugin — auto-mounts all adapters.\n */\nexport const defaultIntegrationsPlugin = createIntegrationsPlugin();\n\n/** Extract base URL from the request */\nfunction getBaseUrl(event: any): string {\n try {\n const headers = event.node?.req?.headers || event.headers || {};\n const getHeader = (name: string) =>\n typeof headers.get === \"function\"\n ? headers.get(name)\n : (headers as Record<string, string>)[name];\n const proto = getHeader(\"x-forwarded-proto\") || \"http\";\n const host = getHeader(\"host\") || \"localhost:3000\";\n return withConfiguredAppBasePath(`${proto}://${host}`);\n } catch {\n return withConfiguredAppBasePath(\"http://localhost:3000\");\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction readComputerCapabilities(value: unknown) {\n const input = readObject(value);\n const readSurface = (surface: unknown, desktop = false) => {\n const record = readObject(surface);\n if (!record) return undefined;\n return {\n observe: record.observe === true,\n control: record.control === true,\n ...(desktop\n ? {\n accessibility: record.accessibility === true,\n screenCapture: record.screenCapture === true,\n }\n : {}),\n provider: readString(record.provider) ?? null,\n version: readString(record.version) ?? null,\n };\n };\n return {\n browser: readSurface(input?.browser),\n desktop: readSurface(input?.desktop, true),\n };\n}\n\nfunction advertisedComputerOperationClasses(\n device: Pick<RemoteDevice, \"metadata\">,\n): ComputerOperationClass[] {\n const capabilities = getRemoteComputerCapabilities(device);\n const classes: ComputerOperationClass[] = [];\n if (capabilities?.browser?.observe) classes.push(\"browser.observe\");\n if (capabilities?.browser?.control) classes.push(\"browser.control\");\n if (capabilities?.desktop?.observe) classes.push(\"desktop.observe\");\n if (capabilities?.desktop?.control) classes.push(\"desktop.control\");\n return classes;\n}\n\nfunction readComputerApprovalStatus(value: unknown) {\n return value === \"pending\" ||\n value === \"approved\" ||\n value === \"denied\" ||\n value === \"consumed\" ||\n value === \"expired\"\n ? value\n : undefined;\n}\n\nfunction computerSupervisionRouteError(event: any, error: unknown) {\n if (error instanceof ComputerSupervisionError) {\n const status =\n error.code === \"expired-lease\"\n ? 410\n : error.code === \"replay\"\n ? 409\n : error.code === \"approval-required\" ||\n error.code === \"approval-denied\"\n ? 403\n : 400;\n setResponseStatus(event, status);\n return { error: error.message, code: error.code };\n }\n throw error;\n}\n"]}
|