@planara/core 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/core/editor-renderer.d.ts +34 -2
  2. package/dist/core/editor-renderer.d.ts.map +1 -1
  3. package/dist/events/editor-events.d.ts +6 -0
  4. package/dist/events/editor-events.d.ts.map +1 -1
  5. package/dist/events/event-topics.d.ts +3 -1
  6. package/dist/events/event-topics.d.ts.map +1 -1
  7. package/dist/extensions/symmetric-axes-helper.d.ts.map +1 -0
  8. package/dist/handlers/display/wireframe-handler.d.ts +3 -4
  9. package/dist/handlers/display/wireframe-handler.d.ts.map +1 -1
  10. package/dist/handlers/select/mesh-select-handler.d.ts +1 -0
  11. package/dist/handlers/select/mesh-select-handler.d.ts.map +1 -1
  12. package/dist/handlers/tool/base-tool-handler.d.ts +25 -0
  13. package/dist/handlers/tool/base-tool-handler.d.ts.map +1 -0
  14. package/dist/handlers/tool/rotate-tool-handler.d.ts +19 -0
  15. package/dist/handlers/tool/rotate-tool-handler.d.ts.map +1 -0
  16. package/dist/handlers/tool/scale-tool-handler.d.ts +19 -0
  17. package/dist/handlers/tool/scale-tool-handler.d.ts.map +1 -0
  18. package/dist/handlers/tool/translate-tool-handler.d.ts +19 -0
  19. package/dist/handlers/tool/translate-tool-handler.d.ts.map +1 -0
  20. package/dist/hub/editor-hub.d.ts +5 -2
  21. package/dist/hub/editor-hub.d.ts.map +1 -1
  22. package/dist/index.cjs.js +180 -180
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.es.js +6231 -5157
  26. package/dist/index.full.d.ts +52 -3
  27. package/dist/index.public.d.ts +38 -3
  28. package/dist/index.umd.js +147 -147
  29. package/dist/interfaces/api/transform-helpers-api.d.ts +25 -0
  30. package/dist/interfaces/api/transform-helpers-api.d.ts.map +1 -0
  31. package/dist/interfaces/handler/display-handler.d.ts +1 -0
  32. package/dist/interfaces/handler/display-handler.d.ts.map +1 -1
  33. package/dist/interfaces/handler/select-handler.d.ts +1 -0
  34. package/dist/interfaces/handler/select-handler.d.ts.map +1 -1
  35. package/dist/interfaces/handler/tool-handler.d.ts +14 -0
  36. package/dist/interfaces/handler/tool-handler.d.ts.map +1 -0
  37. package/dist/interfaces/manager/tool-manager.d.ts +8 -0
  38. package/dist/interfaces/manager/tool-manager.d.ts.map +1 -0
  39. package/dist/ioc/container.d.ts.map +1 -1
  40. package/dist/managers/display/display-manager.d.ts.map +1 -1
  41. package/dist/managers/select/select-manager.d.ts.map +1 -1
  42. package/dist/managers/tool/tool-manager.d.ts +18 -0
  43. package/dist/managers/tool/tool-manager.d.ts.map +1 -0
  44. package/dist/utils/renderer-api.d.ts +6 -1
  45. package/dist/utils/renderer-api.d.ts.map +1 -1
  46. package/package.json +2 -2
  47. package/dist/helpers/symmetric-axes-helper.d.ts.map +0 -1
  48. /package/dist/{helpers → extensions}/symmetric-axes-helper.d.ts +0 -0
@@ -0,0 +1,25 @@
1
+ import { ToolType } from '@planara/types';
2
+ import * as THREE from 'three';
3
+ /**
4
+ * Интерфейс для управления transform helper внутри рендерера.
5
+ * @internal
6
+ */
7
+ export interface ITransformHelpersApi {
8
+ /**
9
+ * Меняет режим transform helper.
10
+ *
11
+ * @param tool - Режим, который необходимо выбрать.
12
+ */
13
+ setMode(tool: ToolType): void;
14
+ /**
15
+ * Прикрепление transform helper к определенному объекту.
16
+ *
17
+ * @param obj - Объект, к которому необходимо прикрепить transform helper.
18
+ */
19
+ attach(obj: THREE.Object3D): void;
20
+ /**
21
+ * Открепление transform helper от объекта.
22
+ */
23
+ detach(): void;
24
+ }
25
+ //# sourceMappingURL=transform-helpers-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-helpers-api.d.ts","sourceRoot":"","sources":["../../../src/interfaces/api/transform-helpers-api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IAE9B;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IAElC;;OAEG;IACH,MAAM,IAAI,IAAI,CAAC;CAChB"}
@@ -8,6 +8,7 @@ import { DisplayMode } from '@planara/types';
8
8
  * @internal
9
9
  */
10
10
  export interface IDisplayHandler extends IHandler {
11
+ /** Режим отображения, за который отвечает хендлер */
11
12
  mode: DisplayMode;
12
13
  }
13
14
  //# sourceMappingURL=display-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"display-handler.d.ts","sourceRoot":"","sources":["../../../src/interfaces/handler/display-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,EAAE,WAAW,CAAC;CACnB"}
1
+ {"version":3,"file":"display-handler.d.ts","sourceRoot":"","sources":["../../../src/interfaces/handler/display-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,qDAAqD;IACrD,IAAI,EAAE,WAAW,CAAC;CACnB"}
@@ -8,6 +8,7 @@ import { SelectMode } from '@planara/types';
8
8
  * @internal
9
9
  */
10
10
  export interface ISelectHandler extends IHandler {
11
+ /** Режим выборки, за который отвечает хендлер */
11
12
  mode: SelectMode;
12
13
  }
13
14
  //# sourceMappingURL=select-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-handler.d.ts","sourceRoot":"","sources":["../../../src/interfaces/handler/select-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,UAAU,CAAC;CAClB"}
1
+ {"version":3,"file":"select-handler.d.ts","sourceRoot":"","sources":["../../../src/interfaces/handler/select-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,iDAAiD;IACjD,IAAI,EAAE,UAAU,CAAC;CAClB"}
@@ -0,0 +1,14 @@
1
+ import { IHandler } from './handler';
2
+ import { ToolType } from '@planara/types';
3
+ /**
4
+ * Маркерный интерфейс для всех Tool-хендлеров.
5
+ * Используется только для DI.
6
+ *
7
+ * Расширяет {@link IHandler} и добавляет поле `mode`
8
+ * @internal
9
+ */
10
+ export interface IToolHandler extends IHandler {
11
+ /** Инструмент, за который отвечает хендлер */
12
+ mode: ToolType;
13
+ }
14
+ //# sourceMappingURL=tool-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-handler.d.ts","sourceRoot":"","sources":["../../../src/interfaces/handler/tool-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,8CAA8C;IAC9C,IAAI,EAAE,QAAQ,CAAC;CAChB"}
@@ -0,0 +1,8 @@
1
+ import { IManager } from './manager';
2
+ /**
3
+ * Маркерный интерфейс для менеджеров инструментов.
4
+ * @public
5
+ */
6
+ export interface IToolManager extends IManager {
7
+ }
8
+ //# sourceMappingURL=tool-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-manager.d.ts","sourceRoot":"","sources":["../../../src/interfaces/manager/tool-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,QAAQ;CAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/ioc/container.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAgC,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAsBlF,QAAA,MAAM,SAAS,qBAAyC,CAAC;AAEzD,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,mBAAmB,CA2B9E;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/ioc/container.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAgC,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AA4BlF,QAAA,MAAM,SAAS,qBAAyC,CAAC;AAEzD,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,mBAAmB,CA+B9E;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"display-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/display/display-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAGhF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAEhF;;;GAGG;AACH,qBACa,cAAe,YAAW,eAAe;IACpD,gCAAgC;IAChC,OAAO,CAAC,YAAY,CAAkC;IAEtD,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;gBAEb,QAAQ,EAAE,eAAe,EAAE;IAKrE,mCAAmC;IACnC,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAc/B,4BAA4B;IAC5B,OAAO,IAAI,IAAI;CAOhB"}
1
+ {"version":3,"file":"display-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/display/display-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAGhF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAEhF;;;GAGG;AACH,qBACa,cAAe,YAAW,eAAe;IACpD,gCAAgC;IAChC,OAAO,CAAC,YAAY,CAAkC;IAEtD,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;gBAEN,QAAQ,EAAE,eAAe,EAAE;IAI5E,mCAAmC;IAC5B,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IActC,4BAA4B;IACrB,OAAO,IAAI,IAAI;CASvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"select-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/select/select-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAK9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAKvD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,qBACa,aAAc,YAAW,cAAc;IAQ5B,OAAO,CAAC,SAAS;IAPvC,4BAA4B;IAC5B,OAAO,CAAC,YAAY,CAA+B;IAEnD,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;gBAGxB,SAAS,EAAE,QAAQ,EAClB,QAAQ,EAAE,cAAc,EAAE;IAUzD,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAU9B,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAMd;IAEF,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAMd;IAEF,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"select-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/select/select-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAK9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAKvD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,qBACa,aAAc,YAAW,cAAc;IAQ5B,OAAO,CAAC,SAAS;IAPvC,4BAA4B;IAC5B,OAAO,CAAC,YAAY,CAA+B;IAEnD,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;gBAGxB,SAAS,EAAE,QAAQ,EAClB,QAAQ,EAAE,cAAc,EAAE;IAUlD,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAUrC,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAMd;IAEF,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAUd;IAEK,OAAO,IAAI,IAAI;CASvB"}
@@ -0,0 +1,18 @@
1
+ import { IToolHandler } from '../../interfaces/handler/tool-handler';
2
+ import { IToolManager } from '../../interfaces/manager/tool-manager';
3
+ import { ToolType } from '@planara/types';
4
+ import { EventBus } from '../../events/event-bus';
5
+ export declare class ToolManager implements IToolManager {
6
+ private _eventBus;
7
+ /** Текущий выбранный инструмент */
8
+ private _currentTool;
9
+ /** Хендлеры, которые управляют инструментами */
10
+ private readonly _handlers;
11
+ /** Объект, с которым взаимодействует инструмент */
12
+ private _currentObject;
13
+ constructor(_eventBus: EventBus, handlers: IToolHandler[]);
14
+ manage(tool: ToolType): void;
15
+ private _onSelect;
16
+ destroy(): void;
17
+ }
18
+ //# sourceMappingURL=tool-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/tool/tool-manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAI1E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,qBACa,WAAY,YAAW,YAAY;IAWxB,OAAO,CAAC,SAAS;IAVvC,mCAAmC;IACnC,OAAO,CAAC,YAAY,CAAgC;IAEpD,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IAEpD,mDAAmD;IACnD,OAAO,CAAC,cAAc,CAAwB;gBAGhB,SAAS,EAAE,QAAQ,EACpB,QAAQ,EAAE,YAAY,EAAE;IAY9C,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAanC,OAAO,CAAC,SAAS,CAgBf;IAEK,OAAO,IAAI,IAAI;CASvB"}
@@ -1,11 +1,13 @@
1
1
  import { IMeshApi } from '../interfaces/api/mesh-api';
2
+ import { ITransformHelpersApi } from '../interfaces/api/transform-helpers-api';
2
3
  import { EditorRenderer } from '../core/editor-renderer';
4
+ import { ToolType } from '@planara/types';
3
5
  import * as THREE from 'three';
4
6
  /**
5
7
  * API для EditorRenderer
6
8
  * @internal
7
9
  */
8
- export declare class RendererApi implements IMeshApi {
10
+ export declare class RendererApi implements IMeshApi, ITransformHelpersApi {
9
11
  private _renderer;
10
12
  constructor(_renderer: EditorRenderer);
11
13
  addMesh(mesh: THREE.Mesh): void;
@@ -13,5 +15,8 @@ export declare class RendererApi implements IMeshApi {
13
15
  removeMesh(mesh: THREE.Mesh): void;
14
16
  removeMeshes(meshes: THREE.Mesh[]): void;
15
17
  getMeshes(): THREE.Mesh[];
18
+ setMode(tool: ToolType): void;
19
+ attach(obj: THREE.Object3D): void;
20
+ detach(): void;
16
21
  }
17
22
  //# sourceMappingURL=renderer-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-api.d.ts","sourceRoot":"","sources":["../../src/utils/renderer-api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAI3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;GAGG;AACH,qBACa,WAAY,YAAW,QAAQ;IACJ,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,cAAc;IAEhE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI;IAI/B,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI;IAMrC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI;IAIlC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI;IAMxC,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE;CAGjC"}
1
+ {"version":3,"file":"renderer-api.d.ts","sourceRoot":"","sources":["../../src/utils/renderer-api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAIpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;GAGG;AACH,qBACa,WAAY,YAAW,QAAQ,EAAE,oBAAoB;IAC1B,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,cAAc;IAEhE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI;IAI/B,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI;IAMrC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI;IAIlC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI;IAMxC,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE;IAIzB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAI7B,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI;IAIjC,MAAM,IAAI,IAAI;CAGtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planara/core",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org/"
@@ -54,7 +54,7 @@
54
54
  "vite-tsconfig-paths": "^5.1.4"
55
55
  },
56
56
  "dependencies": {
57
- "@planara/types": "^1.3.1",
57
+ "@planara/types": "^1.4.0",
58
58
  "events": "^3.3.0",
59
59
  "reflect-metadata": "^0.2.2",
60
60
  "three": "^0.180.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"symmetric-axes-helper.d.ts","sourceRoot":"","sources":["../../src/helpers/symmetric-axes-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,qBAAa,mBAAoB,SAAQ,KAAK,CAAC,KAAK;gBACtC,IAAI,SAAI;CAsBrB"}