@jantstack/adonis-authz 2.4.0-alpha.1 → 2.4.0-alpha.2

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 (105) hide show
  1. package/README.md +248 -18
  2. package/build/commands/authz_relations_reconcile.d.ts +25 -1
  3. package/build/commands/authz_relations_reconcile.d.ts.map +1 -1
  4. package/build/commands/authz_relations_reconcile.js +94 -6
  5. package/build/commands/authz_relations_reconcile.js.map +1 -1
  6. package/build/index.d.ts +12 -1
  7. package/build/index.d.ts.map +1 -1
  8. package/build/index.js +10 -0
  9. package/build/index.js.map +1 -1
  10. package/build/providers/authz_provider.d.ts.map +1 -1
  11. package/build/providers/authz_provider.js +7 -0
  12. package/build/providers/authz_provider.js.map +1 -1
  13. package/build/src/define_config.d.ts +36 -0
  14. package/build/src/define_config.d.ts.map +1 -1
  15. package/build/src/define_config.js.map +1 -1
  16. package/build/src/drivers/database_driver.d.ts +53 -14
  17. package/build/src/drivers/database_driver.d.ts.map +1 -1
  18. package/build/src/drivers/database_driver.js +104 -32
  19. package/build/src/drivers/database_driver.js.map +1 -1
  20. package/build/src/drivers/database_relations_driver.d.ts +47 -9
  21. package/build/src/drivers/database_relations_driver.d.ts.map +1 -1
  22. package/build/src/drivers/database_relations_driver.js +318 -89
  23. package/build/src/drivers/database_relations_driver.js.map +1 -1
  24. package/build/src/drivers/openfga_driver.d.ts +17 -4
  25. package/build/src/drivers/openfga_driver.d.ts.map +1 -1
  26. package/build/src/drivers/openfga_driver.js +38 -3
  27. package/build/src/drivers/openfga_driver.js.map +1 -1
  28. package/build/src/drivers/openfga_facts.d.ts +15 -0
  29. package/build/src/drivers/openfga_facts.d.ts.map +1 -1
  30. package/build/src/drivers/openfga_facts.js +25 -2
  31. package/build/src/drivers/openfga_facts.js.map +1 -1
  32. package/build/src/drivers/openfga_relations_driver.d.ts +27 -6
  33. package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -1
  34. package/build/src/drivers/openfga_relations_driver.js +140 -16
  35. package/build/src/drivers/openfga_relations_driver.js.map +1 -1
  36. package/build/src/errors.d.ts +35 -3
  37. package/build/src/errors.d.ts.map +1 -1
  38. package/build/src/errors.js +61 -3
  39. package/build/src/errors.js.map +1 -1
  40. package/build/src/freeze.d.ts +37 -16
  41. package/build/src/freeze.d.ts.map +1 -1
  42. package/build/src/freeze.js +53 -8
  43. package/build/src/freeze.js.map +1 -1
  44. package/build/src/manager.d.ts +16 -1
  45. package/build/src/manager.d.ts.map +1 -1
  46. package/build/src/manager.js +116 -25
  47. package/build/src/manager.js.map +1 -1
  48. package/build/src/models/authz_assignment.d.ts +2 -2
  49. package/build/src/models/authz_assignment.d.ts.map +1 -1
  50. package/build/src/models/authz_deny.d.ts +2 -2
  51. package/build/src/models/authz_deny.d.ts.map +1 -1
  52. package/build/src/models/authz_permission.d.ts +2 -2
  53. package/build/src/models/authz_permission.d.ts.map +1 -1
  54. package/build/src/models/authz_role.d.ts +2 -2
  55. package/build/src/models/authz_role.d.ts.map +1 -1
  56. package/build/src/models/authz_role_permission.d.ts +2 -2
  57. package/build/src/models/authz_role_permission.d.ts.map +1 -1
  58. package/build/src/relation_partition_trigger.d.ts.map +1 -1
  59. package/build/src/relation_partition_trigger.js +11 -3
  60. package/build/src/relation_partition_trigger.js.map +1 -1
  61. package/build/src/relations/define_relations_config.d.ts +17 -0
  62. package/build/src/relations/define_relations_config.d.ts.map +1 -1
  63. package/build/src/relations/define_relations_config.js +30 -1
  64. package/build/src/relations/define_relations_config.js.map +1 -1
  65. package/build/src/relations/manager.d.ts +25 -3
  66. package/build/src/relations/manager.d.ts.map +1 -1
  67. package/build/src/relations/manager.js +76 -19
  68. package/build/src/relations/manager.js.map +1 -1
  69. package/build/src/relations/reconcile.d.ts +53 -4
  70. package/build/src/relations/reconcile.d.ts.map +1 -1
  71. package/build/src/relations/reconcile.js +92 -30
  72. package/build/src/relations/reconcile.js.map +1 -1
  73. package/build/src/scope_outbox.d.ts.map +1 -1
  74. package/build/src/scope_outbox.js +17 -10
  75. package/build/src/scope_outbox.js.map +1 -1
  76. package/build/src/shared/backend_guard.d.ts +28 -0
  77. package/build/src/shared/backend_guard.d.ts.map +1 -1
  78. package/build/src/shared/backend_guard.js +52 -0
  79. package/build/src/shared/backend_guard.js.map +1 -1
  80. package/build/src/shared/transaction_guard.d.ts +50 -0
  81. package/build/src/shared/transaction_guard.d.ts.map +1 -0
  82. package/build/src/shared/transaction_guard.js +60 -0
  83. package/build/src/shared/transaction_guard.js.map +1 -0
  84. package/build/src/testing/contract.d.ts +55 -4
  85. package/build/src/testing/contract.d.ts.map +1 -1
  86. package/build/src/testing/contract.js +240 -8
  87. package/build/src/testing/contract.js.map +1 -1
  88. package/build/src/testing/main.d.ts +4 -4
  89. package/build/src/testing/main.d.ts.map +1 -1
  90. package/build/src/testing/main.js +2 -2
  91. package/build/src/testing/main.js.map +1 -1
  92. package/build/src/testing/relations_contract.d.ts +23 -1
  93. package/build/src/testing/relations_contract.d.ts.map +1 -1
  94. package/build/src/testing/relations_contract.js +432 -17
  95. package/build/src/testing/relations_contract.js.map +1 -1
  96. package/build/src/testing/relations_reconcile_contract.d.ts.map +1 -1
  97. package/build/src/testing/relations_reconcile_contract.js +49 -1
  98. package/build/src/testing/relations_reconcile_contract.js.map +1 -1
  99. package/build/src/traits/has_uuid.d.ts +2 -2
  100. package/build/src/traits/has_uuid.d.ts.map +1 -1
  101. package/build/src/types.d.ts +197 -10
  102. package/build/src/types.d.ts.map +1 -1
  103. package/build/src/types.js.map +1 -1
  104. package/build/stubs/migration.stub +20 -10
  105. package/package.json +1 -1
@@ -6,14 +6,14 @@
6
6
  * Requiere Japa en el proyecto consumidor (es donde vive la base de datos
7
7
  * real contra la que tiene sentido ejecutarla).
8
8
  */
9
- export { runAuthorizationDriverContract } from './contract.js';
10
- export type { DriverContractHarness, DriverCapabilities, ContractLevel } from './contract.js';
9
+ export { runAuthorizationDriverContract, lucidContractTransactions } from './contract.js';
10
+ export type { DriverContractHarness, DriverCapabilities, ContractLevel, ContractTransactions } from './contract.js';
11
11
  export { memoryScopeTree, resolveChainFrom, descendantsFrom } from './scope_tree.js';
12
12
  export { runMigrationContract, registerMigrationContract, runMigrationDirection, makeMigrationSeed, migrationQuestions, plantMigrationFacts, plantMigrationTree, MIGRATION_CATALOG, MIGRATION_PERMISSIONS, MIGRATION_ROLES, MIGRATION_QUESTION_COUNT, } from './migration_contract.js';
13
13
  export type { MigrationContractHarness, MigrationDirection, MigrationQuestion, MigrationSeed, MigrationVerdict, ExpectedLoss, } from './migration_contract.js';
14
14
  export type { ContractScopeTree } from './scope_tree.js';
15
- export { runRelationsDriverContract, registerRelationsDriverContract, makeRelationsDriver, contractRelationsConfig, RELATIONS_HOLDER_TYPES, } from './relations_contract.js';
16
- export type { RelationsDriverContractHarness, MakeRelationsDriverOptions, } from './relations_contract.js';
15
+ export { runRelationsDriverContract, registerRelationsDriverContract, makeRelationsDriver, contractRelationsConfig, RELATIONS_HOLDER_TYPES, lucidRelationsContractTransactions, } from './relations_contract.js';
16
+ export type { RelationsDriverContractHarness, RelationsContractTransactions, MakeRelationsDriverOptions, } from './relations_contract.js';
17
17
  export { runRelationsReconcileContract, registerRelationsReconcileContract, } from './relations_reconcile_contract.js';
18
18
  export type { RelationsReconcileHarness } from './relations_reconcile_contract.js';
19
19
  //# sourceMappingURL=main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/testing/main.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAA;AAC9D,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACpF,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAChC,YAAY,EACV,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,yBAAyB,CAAA;AAChC,YAAY,EACV,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,mCAAmC,CAAA;AAC1C,YAAY,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/testing/main.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AACzF,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACnH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACpF,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAChC,YAAY,EACV,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,yBAAyB,CAAA;AAChC,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,mCAAmC,CAAA;AAC1C,YAAY,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA"}
@@ -6,9 +6,9 @@
6
6
  * Requiere Japa en el proyecto consumidor (es donde vive la base de datos
7
7
  * real contra la que tiene sentido ejecutarla).
8
8
  */
9
- export { runAuthorizationDriverContract } from './contract.js';
9
+ export { runAuthorizationDriverContract, lucidContractTransactions } from './contract.js';
10
10
  export { memoryScopeTree, resolveChainFrom, descendantsFrom } from './scope_tree.js';
11
11
  export { runMigrationContract, registerMigrationContract, runMigrationDirection, makeMigrationSeed, migrationQuestions, plantMigrationFacts, plantMigrationTree, MIGRATION_CATALOG, MIGRATION_PERMISSIONS, MIGRATION_ROLES, MIGRATION_QUESTION_COUNT, } from './migration_contract.js';
12
- export { runRelationsDriverContract, registerRelationsDriverContract, makeRelationsDriver, contractRelationsConfig, RELATIONS_HOLDER_TYPES, } from './relations_contract.js';
12
+ export { runRelationsDriverContract, registerRelationsDriverContract, makeRelationsDriver, contractRelationsConfig, RELATIONS_HOLDER_TYPES, lucidRelationsContractTransactions, } from './relations_contract.js';
13
13
  export { runRelationsReconcileContract, registerRelationsReconcileContract, } from './relations_reconcile_contract.js';
14
14
  //# sourceMappingURL=main.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/testing/main.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACpF,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAUhC,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,yBAAyB,CAAA;AAKhC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,mCAAmC,CAAA"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/testing/main.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAEzF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACpF,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAUhC,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,yBAAyB,CAAA;AAMhC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,mCAAmC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { RelationsConfig } from '../relations/define_relations_config.js';
2
- import type { RelationsDriver, RelationsDriverCapabilities } from '../types.js';
2
+ import type { RelationsDriver, RelationsDriverCapabilities, ScopeRef } from '../types.js';
3
3
  import type { ContractTestApi } from './contract.js';
4
4
  /** Los holder types del contrato de relaciones. */
5
5
  export declare const RELATIONS_HOLDER_TYPES: readonly ["user", "admin", "integration"];
@@ -18,7 +18,29 @@ export interface RelationsDriverContractHarness {
18
18
  limits?: {
19
19
  listMaxResults?: number;
20
20
  };
21
+ /**
22
+ * Solo con `transactionalWrites: true` (L-4, paridad con el hook
23
+ * `transactions` del runner de roles): cómo abre el juez una transacción de
24
+ * LA CONEXIÓN DEL DRIVER y cómo cuenta las tuplas de una partición en el
25
+ * backend — el CENSO: el rollback se juzga por filas, no solo por la
26
+ * respuesta de `check`. Default: `db.transaction()` de Lucid (conexión
27
+ * primaria) y `authz_relations`, lo que vale para el driver `database`. Un
28
+ * driver de terceros con otra conexión u otra tabla trae el suyo.
29
+ */
30
+ transactions?: RelationsContractTransactions;
21
31
  }
32
+ /** Ver `RelationsDriverContractHarness.transactions`. */
33
+ export interface RelationsContractTransactions {
34
+ begin(): Promise<{
35
+ client: unknown;
36
+ commit(): Promise<unknown>;
37
+ rollback(): Promise<unknown>;
38
+ }>;
39
+ /** Cuántas tuplas hay en la partición, por la conexión del motor (fuera de toda transacción). */
40
+ census(partition: ScopeRef): Promise<number>;
41
+ }
42
+ /** El default de `RelationsDriverContractHarness.transactions`: Lucid + `authz_relations`. */
43
+ export declare function lucidRelationsContractTransactions(): RelationsContractTransactions;
22
44
  export interface MakeRelationsDriverOptions {
23
45
  config: RelationsConfig;
24
46
  capabilities: RelationsDriverCapabilities;
@@ -1 +1 @@
1
- {"version":3,"file":"relations_contract.d.ts","sourceRoot":"","sources":["../../../src/testing/relations_contract.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAC9E,OAAO,KAAK,EAGV,eAAe,EACf,2BAA2B,EAO5B,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAIpD,mDAAmD;AACnD,eAAO,MAAM,sBAAsB,2CAA4C,CAAA;AAE/E;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,eAAe,CAezD;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,YAAY,EAAE,2BAA2B,CAAA;IACzC,0EAA0E;IAC1E,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC/E,+EAA+E;IAC/E,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACrC;AAsBD,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,EAAE,2BAA2B,CAAA;IACzC,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACrC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,eAAe,CAqNxF;AAuCD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,8BAA8B;gBAgBjE,MAAM;aAAW,GAAG,CAAC,MAAM,2BAA2B,CAAC;EAVvE;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,8BAA8B,EACvC,GAAG,EAAE;IAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;CAAE,GACtE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,2BAA2B,CAAC,CAAA;CAAE,CA0ZzE"}
1
+ {"version":3,"file":"relations_contract.d.ts","sourceRoot":"","sources":["../../../src/testing/relations_contract.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAC9E,OAAO,KAAK,EAGV,eAAe,EACf,2BAA2B,EAK3B,QAAQ,EAET,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAIpD,mDAAmD;AACnD,eAAO,MAAM,sBAAsB,2CAA4C,CAAA;AAE/E;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,eAAe,CAezD;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,YAAY,EAAE,2BAA2B,CAAA;IACzC,0EAA0E;IAC1E,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC/E,+EAA+E;IAC/E,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,6BAA6B,CAAA;CAC7C;AAED,yDAAyD;AACzD,MAAM,WAAW,6BAA6B;IAC5C,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,CAAA;IAC/F,iGAAiG;IACjG,MAAM,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC7C;AAED,8FAA8F;AAC9F,wBAAgB,kCAAkC,IAAI,6BAA6B,CAWlF;AAwBD,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,EAAE,2BAA2B,CAAA;IACzC,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACrC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,eAAe,CAExF;AAsSD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,8BAA8B;gBAgBjE,MAAM;aAAW,GAAG,CAAC,MAAM,2BAA2B,CAAC;EAVvE;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,8BAA8B,EACvC,GAAG,EAAE;IAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;CAAE,GACtE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,2BAA2B,CAAC,CAAA;CAAE,CAyyBzE"}