@powerhousedao/reactor-local 4.1.0-dev.9 → 5.0.0-staging.1

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@powerhousedao/reactor-local",
3
3
  "type": "module",
4
- "version": "4.1.0-dev.9",
4
+ "version": "5.0.0-staging.1",
5
5
  "main": "dist/server.js",
6
6
  "repository": {
7
7
  "type": "git",
@@ -22,7 +22,6 @@
22
22
  "@apollo/subgraph": "^2.9.2",
23
23
  "@electric-sql/pglite": "^0.2.17",
24
24
  "@libsql/client": "^0.14.0",
25
- "@originjs/vite-plugin-commonjs": "^1.0.3",
26
25
  "change-case": "^5.4.4",
27
26
  "commander": "^12.1.0",
28
27
  "dotenv": "^16.4.5",
@@ -34,12 +33,10 @@
34
33
  "nanoevents": "^9.0.0",
35
34
  "sanitize-filename": "^1.6.3",
36
35
  "uuid": "^11.0.2",
37
- "vite": "^6.3.3",
38
- "@powerhousedao/common": "4.1.0-dev.9",
39
- "@powerhousedao/reactor-api": "4.1.0-dev.9",
40
- "@powerhousedao/vetra": "4.1.0-dev.9",
41
- "document-drive": "4.1.0-dev.9",
42
- "document-model": "4.1.0-dev.9"
36
+ "@powerhousedao/common": "5.0.0-staging.1",
37
+ "document-drive": "5.0.0-staging.1",
38
+ "document-model": "5.0.0-staging.1",
39
+ "@powerhousedao/reactor-api": "5.0.0-staging.1"
43
40
  },
44
41
  "devDependencies": {
45
42
  "@types/body-parser": "^1.19.5",
@@ -47,7 +44,7 @@
47
44
  "@types/express": "^5.0.0",
48
45
  "@types/ms": "^0.7.34",
49
46
  "@types/node": "^22.15.17",
50
- "@powerhousedao/config": "4.1.0-dev.9"
47
+ "@powerhousedao/config": "5.0.0-staging.1"
51
48
  },
52
49
  "scripts": {
53
50
  "start": "vite-node src/index.ts",
@@ -1,8 +0,0 @@
1
- import { type Processor } from "@powerhousedao/reactor-api";
2
- declare const PROCESSOR_KEYS: {
3
- readonly CODEGEN: "ph/codegen/processor";
4
- };
5
- export declare const DEFAULT_PROCESSORS: Record<string, Processor>;
6
- export type DefaultProcessors = (typeof PROCESSOR_KEYS)[keyof typeof PROCESSOR_KEYS];
7
- export {};
8
- //# sourceMappingURL=default-processors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-processors.d.ts","sourceRoot":"","sources":["../../src/default-processors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,QAAA,MAAM,cAAc;;CAEV,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAExD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
@@ -1,8 +0,0 @@
1
- import { codegenProcessorFactory } from "@powerhousedao/vetra/processors";
2
- const PROCESSOR_KEYS = {
3
- CODEGEN: "ph/codegen/processor",
4
- };
5
- export const DEFAULT_PROCESSORS = {
6
- [PROCESSOR_KEYS.CODEGEN]: [codegenProcessorFactory],
7
- };
8
- //# sourceMappingURL=default-processors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-processors.js","sourceRoot":"","sources":["../../src/default-processors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,sBAAsB;CACvB,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAA8B;IAC3D,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,uBAAuB,CAAC;CACpD,CAAC"}
@@ -1,20 +0,0 @@
1
- import { type SubgraphClass } from "@powerhousedao/reactor-api";
2
- import { type IProcessorHostModule, type ProcessorFactory } from "document-drive/processors/types";
3
- import { type DocumentModelModule } from "document-model";
4
- import { type ViteDevServer } from "vite";
5
- import { type ISubscribablePackageLoader, type ISubscriptionOptions } from "../../reactor-api/src/packages/types.js";
6
- export declare class VitePackageLoader implements ISubscribablePackageLoader {
7
- private readonly logger;
8
- private readonly vite;
9
- constructor(vite: ViteDevServer);
10
- private getDocumentModelsPath;
11
- private getSubgraphsPath;
12
- private getProcessorsPath;
13
- loadDocumentModels(identifier: string): Promise<DocumentModelModule[]>;
14
- loadSubgraphs(identifier: string): Promise<SubgraphClass[]>;
15
- loadProcessors(identifier: string): Promise<((module: IProcessorHostModule) => ProcessorFactory) | null>;
16
- onDocumentModelsChange(identifier: string, handler: (documentModels: DocumentModelModule[]) => void, options?: ISubscriptionOptions): () => void;
17
- onSubgraphsChange(identifier: string, handler: (subgraphs: SubgraphClass[]) => void, options?: ISubscriptionOptions): () => void;
18
- onProcessorsChange(identifier: string, handler: (processors: ((module: IProcessorHostModule) => ProcessorFactory) | null) => void, options?: ISubscriptionOptions): () => void;
19
- }
20
- //# sourceMappingURL=vite-loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vite-loader.d.ts","sourceRoot":"","sources":["../../src/vite-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EAC1B,MAAM,yCAAyC,CAAC;AAGjD,qBAAa,iBAAkB,YAAW,0BAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiD;IAExE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgB;gBAEzB,IAAI,EAAE,aAAa;IAI/B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB;IAInB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAkCtE,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA+B3D,cAAc,CAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,oBAAoB,KAAK,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAgCvE,sBAAsB,CACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,KAAK,IAAI,EACxD,OAAO,CAAC,EAAE,oBAAoB,GAC7B,MAAM,IAAI;IAiBb,iBAAiB,CACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,IAAI,EAC7C,OAAO,CAAC,EAAE,oBAAoB,GAC7B,MAAM,IAAI;IAeb,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,oBAAoB,KAAK,gBAAgB,CAAC,GAAG,IAAI,KACpE,IAAI,EACT,OAAO,CAAC,EAAE,oBAAoB,GAC7B,MAAM,IAAI;CAcd"}
@@ -1,124 +0,0 @@
1
- import { isSubgraphClass, } from "@powerhousedao/reactor-api";
2
- import { childLogger } from "document-drive";
3
- import { access } from "node:fs/promises";
4
- import path from "node:path";
5
- import { debounce } from "./util.js";
6
- export class VitePackageLoader {
7
- logger = childLogger(["reactor-local", "vite-loader"]);
8
- vite;
9
- constructor(vite) {
10
- this.vite = vite;
11
- }
12
- getDocumentModelsPath(identifier) {
13
- return path.join(identifier, "./document-models");
14
- }
15
- getSubgraphsPath(identifier) {
16
- return path.join(identifier, "./subgraphs");
17
- }
18
- getProcessorsPath(identifier) {
19
- return path.join(identifier, "./processors");
20
- }
21
- async loadDocumentModels(identifier) {
22
- const fullPath = this.getDocumentModelsPath(identifier);
23
- this.logger.verbose("Loading document models from", fullPath);
24
- try {
25
- await access(fullPath);
26
- const localDMs = (await this.vite.ssrLoadModule(fullPath));
27
- const exports = Object.values(localDMs);
28
- // duck type
29
- const documentModels = [];
30
- for (const dm of exports) {
31
- if (dm.documentModel) {
32
- documentModels.push(dm);
33
- }
34
- }
35
- this.logger.verbose(` ➜ Loaded ${documentModels.length} Document Models from: ${identifier}`);
36
- return documentModels;
37
- }
38
- catch (e) {
39
- this.logger.verbose(` ➜ No Document Models found for: ${identifier}`);
40
- }
41
- return [];
42
- }
43
- async loadSubgraphs(identifier) {
44
- const fullPath = this.getSubgraphsPath(identifier);
45
- this.logger.verbose("Loading subgraphs from", fullPath);
46
- let localSubgraphs = {};
47
- try {
48
- await access(fullPath);
49
- localSubgraphs = await this.vite.ssrLoadModule(fullPath);
50
- }
51
- catch (e) {
52
- this.logger.verbose(` ➜ No Subgraphs found for: ${identifier}`);
53
- return [];
54
- }
55
- const subgraphs = [];
56
- for (const [name, subgraph] of Object.entries(localSubgraphs)) {
57
- const SubgraphClass = subgraph[name];
58
- if (isSubgraphClass(SubgraphClass)) {
59
- subgraphs.push(SubgraphClass);
60
- }
61
- }
62
- this.logger.verbose(` ➜ Loaded ${subgraphs.length} Subgraphs from: ${identifier}`);
63
- return subgraphs;
64
- }
65
- async loadProcessors(identifier) {
66
- const fullPath = this.getProcessorsPath(identifier);
67
- this.logger.verbose("Loading processors from", fullPath);
68
- try {
69
- await access(fullPath);
70
- const module = await this.vite.ssrLoadModule(fullPath);
71
- if (module.processorFactory &&
72
- typeof module.processorFactory === "function") {
73
- this.logger.verbose(` ➜ Loaded Processor factory from: ${identifier}`);
74
- return module.processorFactory;
75
- }
76
- }
77
- catch (e) {
78
- //
79
- }
80
- this.logger.verbose(` ➜ No Processor Factory found for: ${identifier}`);
81
- // return empty processor factory
82
- return null;
83
- }
84
- onDocumentModelsChange(identifier, handler, options) {
85
- const documentModelsPath = this.getDocumentModelsPath(identifier);
86
- const listener = debounce(async (changedPath) => {
87
- if (path.matchesGlob(changedPath, path.join(documentModelsPath, "**"))) {
88
- const documentModels = await this.loadDocumentModels(identifier);
89
- handler(documentModels);
90
- }
91
- }, options?.debounce ?? 100);
92
- this.vite.watcher.on("change", listener);
93
- return () => {
94
- this.vite.watcher.off("change", listener);
95
- };
96
- }
97
- onSubgraphsChange(identifier, handler, options) {
98
- const subgraphsPath = this.getSubgraphsPath(identifier);
99
- const listener = debounce(async (changedPath) => {
100
- if (path.matchesGlob(changedPath, path.join(subgraphsPath, "**"))) {
101
- const subgraphs = await this.loadSubgraphs(identifier);
102
- handler(subgraphs);
103
- }
104
- }, options?.debounce ?? 100);
105
- this.vite.watcher.on("change", listener);
106
- return () => {
107
- this.vite.watcher.off("change", listener);
108
- };
109
- }
110
- onProcessorsChange(identifier, handler, options) {
111
- const processorsPath = this.getProcessorsPath(identifier);
112
- const listener = debounce(async (changedPath) => {
113
- if (path.matchesGlob(changedPath, path.join(processorsPath, "**"))) {
114
- const processors = await this.loadProcessors(identifier);
115
- handler(processors);
116
- }
117
- }, options?.debounce ?? 100);
118
- this.vite.watcher.on("change", listener);
119
- return () => {
120
- this.vite.watcher.off("change", listener);
121
- };
122
- }
123
- }
124
- //# sourceMappingURL=vite-loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vite-loader.js","sourceRoot":"","sources":["../../src/vite-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAM7C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,OAAO,iBAAiB;IACX,MAAM,GAAG,WAAW,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IAEvD,IAAI,CAAgB;IAErC,YAAY,IAAmB;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEO,qBAAqB,CAAC,UAAkB;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACpD,CAAC;IAEO,gBAAgB,CAAC,UAAkB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAC9C,CAAC;IAEO,iBAAiB,CAAC,UAAkB;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,UAAkB;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,8BAA8B,EAAE,QAAQ,CAAC,CAAC;QAE9D,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEvB,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAGxD,CAAC;YAEF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAExC,YAAY;YACZ,MAAM,cAAc,GAA0B,EAAE,CAAC;YACjD,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBACzB,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC;oBACrB,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,eAAe,cAAc,CAAC,MAAM,0BAA0B,UAAU,EAAE,CAC3E,CAAC;YAEF,OAAO,cAAc,CAAC;QACxB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;QAExD,IAAI,cAAc,GAAkD,EAAE,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEvB,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;YAElE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,SAAS,GAAoB,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YAC9D,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,eAAe,SAAS,CAAC,MAAM,oBAAoB,UAAU,EAAE,CAChE,CAAC;QAEF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,UAAkB;QAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;QAEzD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAEvD,IACE,MAAM,CAAC,gBAAgB;gBACvB,OAAO,MAAM,CAAC,gBAAgB,KAAK,UAAU,EAC7C,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,uCAAuC,UAAU,EAAE,CACpD,CAAC;gBAEF,OAAO,MAAM,CAAC,gBAEO,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,EAAE;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,wCAAwC,UAAU,EAAE,CAAC,CAAC;QAE1E,iCAAiC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB,CACpB,UAAkB,EAClB,OAAwD,EACxD,OAA8B;QAE9B,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAElE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,WAAmB,EAAE,EAAE;YACtD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBACvE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBACjE,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,EAAE,OAAO,EAAE,QAAQ,IAAI,GAAG,CAAC,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEzC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC;IAED,iBAAiB,CACf,UAAkB,EAClB,OAA6C,EAC7C,OAA8B;QAE9B,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,WAAmB,EAAE,EAAE;YACtD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBAClE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBACvD,OAAO,CAAC,SAAS,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,EAAE,OAAO,EAAE,QAAQ,IAAI,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEzC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC;IAED,kBAAkB,CAChB,UAAkB,EAClB,OAES,EACT,OAA8B;QAE9B,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,WAAmB,EAAE,EAAE;YACtD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBACnE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBACzD,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,EAAE,OAAO,EAAE,QAAQ,IAAI,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEzC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC;CACF"}