couchloop-eq-mcp 1.0.4 → 1.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 (282) hide show
  1. package/README.md +24 -11
  2. package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
  3. package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
  4. package/dist/developer/analyzers/bloat-detector.js +483 -0
  5. package/dist/developer/analyzers/bloat-detector.js.map +1 -0
  6. package/dist/developer/backup/auto-backup.d.ts +96 -0
  7. package/dist/developer/backup/auto-backup.d.ts.map +1 -0
  8. package/dist/developer/backup/auto-backup.js +346 -0
  9. package/dist/developer/backup/auto-backup.js.map +1 -0
  10. package/dist/developer/blockers/package-blocker.d.ts +33 -0
  11. package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
  12. package/dist/developer/blockers/package-blocker.js +224 -0
  13. package/dist/developer/blockers/package-blocker.js.map +1 -0
  14. package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
  15. package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
  16. package/dist/developer/evaluators/ai-error-preventer.js +270 -0
  17. package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
  18. package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
  19. package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
  20. package/dist/developer/evaluators/build-context-detector.js +258 -0
  21. package/dist/developer/evaluators/build-context-detector.js.map +1 -0
  22. package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
  23. package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
  24. package/dist/developer/evaluators/package-evaluator.js +278 -0
  25. package/dist/developer/evaluators/package-evaluator.js.map +1 -0
  26. package/dist/developer/guards/file-guardian.d.ts +79 -0
  27. package/dist/developer/guards/file-guardian.d.ts.map +1 -0
  28. package/dist/developer/guards/file-guardian.js +309 -0
  29. package/dist/developer/guards/file-guardian.js.map +1 -0
  30. package/dist/developer/managers/context-manager.d.ts +61 -0
  31. package/dist/developer/managers/context-manager.d.ts.map +1 -0
  32. package/dist/developer/managers/context-manager.js +302 -0
  33. package/dist/developer/managers/context-manager.js.map +1 -0
  34. package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
  35. package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
  36. package/dist/developer/metrics/complexity-calculator.js +259 -0
  37. package/dist/developer/metrics/complexity-calculator.js.map +1 -0
  38. package/dist/developer/reports/review-summary.d.ts +49 -0
  39. package/dist/developer/reports/review-summary.d.ts.map +1 -0
  40. package/dist/developer/reports/review-summary.js +249 -0
  41. package/dist/developer/reports/review-summary.js.map +1 -0
  42. package/dist/developer/scanners/review-assistant.d.ts +41 -0
  43. package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
  44. package/dist/developer/scanners/review-assistant.js +374 -0
  45. package/dist/developer/scanners/review-assistant.js.map +1 -0
  46. package/dist/developer/scanners/secret-scanner.d.ts +66 -0
  47. package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
  48. package/dist/developer/scanners/secret-scanner.js +287 -0
  49. package/dist/developer/scanners/secret-scanner.js.map +1 -0
  50. package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
  51. package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
  52. package/dist/developer/scanners/sql-injection-detector.js +174 -0
  53. package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
  54. package/dist/developer/scanners/xss-detector.d.ts +60 -0
  55. package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
  56. package/dist/developer/scanners/xss-detector.js +229 -0
  57. package/dist/developer/scanners/xss-detector.js.map +1 -0
  58. package/dist/developer/types/ai-errors.d.ts +34 -0
  59. package/dist/developer/types/ai-errors.d.ts.map +1 -0
  60. package/dist/developer/types/ai-errors.js +271 -0
  61. package/dist/developer/types/ai-errors.js.map +1 -0
  62. package/dist/developer/types/package.d.ts +32 -0
  63. package/dist/developer/types/package.d.ts.map +1 -0
  64. package/dist/developer/types/package.js +5 -0
  65. package/dist/developer/types/package.js.map +1 -0
  66. package/dist/developer/updaters/dependency-updater.d.ts +102 -0
  67. package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
  68. package/dist/developer/updaters/dependency-updater.js +472 -0
  69. package/dist/developer/updaters/dependency-updater.js.map +1 -0
  70. package/dist/developer/validators/cargo.d.ts +14 -0
  71. package/dist/developer/validators/cargo.d.ts.map +1 -0
  72. package/dist/developer/validators/cargo.js +132 -0
  73. package/dist/developer/validators/cargo.js.map +1 -0
  74. package/dist/developer/validators/gem.d.ts +14 -0
  75. package/dist/developer/validators/gem.d.ts.map +1 -0
  76. package/dist/developer/validators/gem.js +85 -0
  77. package/dist/developer/validators/gem.js.map +1 -0
  78. package/dist/developer/validators/go.d.ts +14 -0
  79. package/dist/developer/validators/go.d.ts.map +1 -0
  80. package/dist/developer/validators/go.js +138 -0
  81. package/dist/developer/validators/go.js.map +1 -0
  82. package/dist/developer/validators/maven.d.ts +14 -0
  83. package/dist/developer/validators/maven.d.ts.map +1 -0
  84. package/dist/developer/validators/maven.js +99 -0
  85. package/dist/developer/validators/maven.js.map +1 -0
  86. package/dist/developer/validators/npm.d.ts +14 -0
  87. package/dist/developer/validators/npm.d.ts.map +1 -0
  88. package/dist/developer/validators/npm.js +96 -0
  89. package/dist/developer/validators/npm.js.map +1 -0
  90. package/dist/developer/validators/nuget.d.ts +15 -0
  91. package/dist/developer/validators/nuget.d.ts.map +1 -0
  92. package/dist/developer/validators/nuget.js +107 -0
  93. package/dist/developer/validators/nuget.js.map +1 -0
  94. package/dist/developer/validators/pypi.d.ts +14 -0
  95. package/dist/developer/validators/pypi.d.ts.map +1 -0
  96. package/dist/developer/validators/pypi.js +118 -0
  97. package/dist/developer/validators/pypi.js.map +1 -0
  98. package/dist/developer/validators/registry-manager.d.ts +37 -0
  99. package/dist/developer/validators/registry-manager.d.ts.map +1 -0
  100. package/dist/developer/validators/registry-manager.js +89 -0
  101. package/dist/developer/validators/registry-manager.js.map +1 -0
  102. package/dist/developer/validators/version-checker.d.ts +145 -0
  103. package/dist/developer/validators/version-checker.d.ts.map +1 -0
  104. package/dist/developer/validators/version-checker.js +529 -0
  105. package/dist/developer/validators/version-checker.js.map +1 -0
  106. package/dist/server/index.js.map +1 -1
  107. package/dist/server/middleware/auth.d.ts +7 -9
  108. package/dist/server/middleware/auth.d.ts.map +1 -1
  109. package/dist/server/middleware/auth.js.map +1 -1
  110. package/dist/tools/check-versions.d.ts +100 -0
  111. package/dist/tools/check-versions.d.ts.map +1 -0
  112. package/dist/tools/check-versions.js +328 -0
  113. package/dist/tools/check-versions.js.map +1 -0
  114. package/dist/tools/detect-code-smell.d.ts +9 -0
  115. package/dist/tools/detect-code-smell.d.ts.map +1 -0
  116. package/dist/tools/detect-code-smell.js +231 -0
  117. package/dist/tools/detect-code-smell.js.map +1 -0
  118. package/dist/tools/index.d.ts +471 -0
  119. package/dist/tools/index.d.ts.map +1 -1
  120. package/dist/tools/index.js +178 -0
  121. package/dist/tools/index.js.map +1 -1
  122. package/dist/tools/journey.js +1 -1
  123. package/dist/tools/journey.js.map +1 -1
  124. package/dist/tools/pre-review-code.d.ts +71 -0
  125. package/dist/tools/pre-review-code.d.ts.map +1 -0
  126. package/dist/tools/pre-review-code.js +159 -0
  127. package/dist/tools/pre-review-code.js.map +1 -0
  128. package/dist/tools/preserve-context.d.ts +27 -0
  129. package/dist/tools/preserve-context.d.ts.map +1 -0
  130. package/dist/tools/preserve-context.js +98 -0
  131. package/dist/tools/preserve-context.js.map +1 -0
  132. package/dist/tools/protect-files.d.ts +224 -0
  133. package/dist/tools/protect-files.d.ts.map +1 -0
  134. package/dist/tools/protect-files.js +286 -0
  135. package/dist/tools/protect-files.js.map +1 -0
  136. package/dist/tools/scan-security.d.ts +38 -0
  137. package/dist/tools/scan-security.d.ts.map +1 -0
  138. package/dist/tools/scan-security.js +237 -0
  139. package/dist/tools/scan-security.js.map +1 -0
  140. package/dist/tools/validate_packages.d.ts +8 -0
  141. package/dist/tools/validate_packages.d.ts.map +1 -0
  142. package/dist/tools/validate_packages.js +159 -0
  143. package/dist/tools/validate_packages.js.map +1 -0
  144. package/dist/types/auth.d.ts.map +1 -1
  145. package/dist/types/auth.js +1 -2
  146. package/dist/types/auth.js.map +1 -1
  147. package/dist/types/context.d.ts +46 -0
  148. package/dist/types/context.d.ts.map +1 -0
  149. package/dist/types/context.js +17 -0
  150. package/dist/types/context.js.map +1 -0
  151. package/dist/types/file-protection.d.ts +50 -0
  152. package/dist/types/file-protection.d.ts.map +1 -0
  153. package/dist/types/file-protection.js +9 -0
  154. package/dist/types/file-protection.js.map +1 -0
  155. package/dist/utils/errorHandler.d.ts.map +1 -1
  156. package/dist/utils/errorHandler.js +2 -1
  157. package/dist/utils/errorHandler.js.map +1 -1
  158. package/package.json +30 -4
  159. package/dist/db/migrate.d.ts +0 -4
  160. package/dist/db/migrate.d.ts.map +0 -1
  161. package/dist/db/migrate.js +0 -34
  162. package/dist/db/migrate.js.map +0 -1
  163. package/dist/db/migrations/schema.d.ts +0 -1074
  164. package/dist/db/migrations/schema.d.ts.map +0 -1
  165. package/dist/db/migrations/schema.js +0 -160
  166. package/dist/db/migrations/schema.js.map +0 -1
  167. package/dist/db/schema.d.ts +0 -1576
  168. package/dist/db/schema.d.ts.map +0 -1
  169. package/dist/db/schema.js +0 -204
  170. package/dist/db/schema.js.map +0 -1
  171. package/dist/db/seed.d.ts +0 -4
  172. package/dist/db/seed.d.ts.map +0 -1
  173. package/dist/db/seed.js +0 -57
  174. package/dist/db/seed.js.map +0 -1
  175. package/dist/db/seedOAuth.d.ts +0 -4
  176. package/dist/db/seedOAuth.d.ts.map +0 -1
  177. package/dist/db/seedOAuth.js +0 -76
  178. package/dist/db/seedOAuth.js.map +0 -1
  179. package/dist/governance/config.d.ts +0 -66
  180. package/dist/governance/config.d.ts.map +0 -1
  181. package/dist/governance/config.js +0 -238
  182. package/dist/governance/config.js.map +0 -1
  183. package/dist/governance/detectors/hallucination.d.ts +0 -61
  184. package/dist/governance/detectors/hallucination.d.ts.map +0 -1
  185. package/dist/governance/detectors/hallucination.js +0 -338
  186. package/dist/governance/detectors/hallucination.js.map +0 -1
  187. package/dist/governance/detectors/inconsistency.d.ts +0 -99
  188. package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
  189. package/dist/governance/detectors/inconsistency.js +0 -548
  190. package/dist/governance/detectors/inconsistency.js.map +0 -1
  191. package/dist/governance/detectors/toneDrift.d.ts +0 -63
  192. package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
  193. package/dist/governance/detectors/toneDrift.js +0 -421
  194. package/dist/governance/detectors/toneDrift.js.map +0 -1
  195. package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
  196. package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
  197. package/dist/governance/detectors/unsafeReasoning.js +0 -473
  198. package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
  199. package/dist/governance/evaluationEngine.d.ts +0 -112
  200. package/dist/governance/evaluationEngine.d.ts.map +0 -1
  201. package/dist/governance/evaluationEngine.js +0 -265
  202. package/dist/governance/evaluationEngine.js.map +0 -1
  203. package/dist/governance/intervention.d.ts +0 -81
  204. package/dist/governance/intervention.d.ts.map +0 -1
  205. package/dist/governance/intervention.js +0 -405
  206. package/dist/governance/intervention.js.map +0 -1
  207. package/dist/server/oauth/anomalyDetection.d.ts +0 -146
  208. package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
  209. package/dist/server/oauth/anomalyDetection.js +0 -405
  210. package/dist/server/oauth/anomalyDetection.js.map +0 -1
  211. package/dist/server/oauth/authServer.d.ts +0 -61
  212. package/dist/server/oauth/authServer.d.ts.map +0 -1
  213. package/dist/server/oauth/authServer.js +0 -283
  214. package/dist/server/oauth/authServer.js.map +0 -1
  215. package/dist/server/oauth/dpop.d.ts +0 -135
  216. package/dist/server/oauth/dpop.d.ts.map +0 -1
  217. package/dist/server/oauth/dpop.js +0 -338
  218. package/dist/server/oauth/dpop.js.map +0 -1
  219. package/dist/server/oauth/gdpr/consent.d.ts +0 -173
  220. package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
  221. package/dist/server/oauth/gdpr/consent.js +0 -388
  222. package/dist/server/oauth/gdpr/consent.js.map +0 -1
  223. package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
  224. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
  225. package/dist/server/oauth/gdpr/dataPortability.js +0 -486
  226. package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
  227. package/dist/server/oauth/gdpr/index.d.ts +0 -103
  228. package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
  229. package/dist/server/oauth/gdpr/index.js +0 -273
  230. package/dist/server/oauth/gdpr/index.js.map +0 -1
  231. package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
  232. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
  233. package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
  234. package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
  235. package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
  236. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
  237. package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
  238. package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
  239. package/dist/server/oauth/pkce.d.ts +0 -61
  240. package/dist/server/oauth/pkce.d.ts.map +0 -1
  241. package/dist/server/oauth/pkce.js +0 -157
  242. package/dist/server/oauth/pkce.js.map +0 -1
  243. package/dist/server/oauth/providers/base.d.ts +0 -147
  244. package/dist/server/oauth/providers/base.d.ts.map +0 -1
  245. package/dist/server/oauth/providers/base.js +0 -312
  246. package/dist/server/oauth/providers/base.js.map +0 -1
  247. package/dist/server/oauth/providers/github.d.ts +0 -55
  248. package/dist/server/oauth/providers/github.d.ts.map +0 -1
  249. package/dist/server/oauth/providers/github.js +0 -225
  250. package/dist/server/oauth/providers/github.js.map +0 -1
  251. package/dist/server/oauth/providers/google.d.ts +0 -49
  252. package/dist/server/oauth/providers/google.d.ts.map +0 -1
  253. package/dist/server/oauth/providers/google.js +0 -153
  254. package/dist/server/oauth/providers/google.js.map +0 -1
  255. package/dist/server/oauth/providers/index.d.ts +0 -9
  256. package/dist/server/oauth/providers/index.d.ts.map +0 -1
  257. package/dist/server/oauth/providers/index.js +0 -24
  258. package/dist/server/oauth/providers/index.js.map +0 -1
  259. package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
  260. package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
  261. package/dist/server/oauth/refreshTokenRotation.js +0 -344
  262. package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
  263. package/dist/server/oauth/security.d.ts +0 -101
  264. package/dist/server/oauth/security.d.ts.map +0 -1
  265. package/dist/server/oauth/security.js +0 -268
  266. package/dist/server/oauth/security.js.map +0 -1
  267. package/dist/server/oauth/tokenEncryption.d.ts +0 -80
  268. package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
  269. package/dist/server/oauth/tokenEncryption.js +0 -218
  270. package/dist/server/oauth/tokenEncryption.js.map +0 -1
  271. package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
  272. package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
  273. package/dist/tools/sendMessage-complex-backup.js +0 -545
  274. package/dist/tools/sendMessage-complex-backup.js.map +0 -1
  275. package/dist/tools/sendMessage-revised.d.ts +0 -11
  276. package/dist/tools/sendMessage-revised.d.ts.map +0 -1
  277. package/dist/tools/sendMessage-revised.js +0 -429
  278. package/dist/tools/sendMessage-revised.js.map +0 -1
  279. package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
  280. package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
  281. package/dist/tools/sendMessage-truly-simple.js +0 -299
  282. package/dist/tools/sendMessage-truly-simple.js.map +0 -1
@@ -1,527 +0,0 @@
1
- import { logger } from '../../../utils/logger.js';
2
- import { getDb } from '../../../db/client.js';
3
- import { createHash, randomBytes } from 'crypto';
4
- /**
5
- * Deletion scope options
6
- */
7
- export var DeletionScope;
8
- (function (DeletionScope) {
9
- DeletionScope["FULL"] = "full";
10
- DeletionScope["PARTIAL"] = "partial";
11
- DeletionScope["ANONYMIZE"] = "anonymize";
12
- DeletionScope["PSEUDONYMIZE"] = "pseudonymize";
13
- DeletionScope["ARCHIVE"] = "archive";
14
- })(DeletionScope || (DeletionScope = {}));
15
- /**
16
- * Data retention reasons (lawful basis to refuse deletion)
17
- */
18
- export var RetentionReason;
19
- (function (RetentionReason) {
20
- RetentionReason["LEGAL_OBLIGATION"] = "legal_obligation";
21
- RetentionReason["CONTRACT_FULFILLMENT"] = "contract";
22
- RetentionReason["VITAL_INTERESTS"] = "vital_interests";
23
- RetentionReason["PUBLIC_INTEREST"] = "public_interest";
24
- RetentionReason["LEGAL_CLAIMS"] = "legal_claims";
25
- RetentionReason["FREEDOM_OF_EXPRESSION"] = "expression";
26
- RetentionReason["COMPLIANCE"] = "compliance";
27
- RetentionReason["FINANCIAL_RECORDS"] = "financial";
28
- RetentionReason["FRAUD_PREVENTION"] = "fraud";
29
- })(RetentionReason || (RetentionReason = {}));
30
- /**
31
- * Deletion request status
32
- */
33
- export var DeletionStatus;
34
- (function (DeletionStatus) {
35
- DeletionStatus["PENDING"] = "pending";
36
- DeletionStatus["REVIEWING"] = "reviewing";
37
- DeletionStatus["APPROVED"] = "approved";
38
- DeletionStatus["IN_PROGRESS"] = "in_progress";
39
- DeletionStatus["COMPLETED"] = "completed";
40
- DeletionStatus["PARTIALLY_COMPLETED"] = "partially_completed";
41
- DeletionStatus["REJECTED"] = "rejected";
42
- DeletionStatus["CANCELLED"] = "cancelled";
43
- })(DeletionStatus || (DeletionStatus = {}));
44
- /**
45
- * GDPR Right to Erasure Manager
46
- * Implements GDPR Article 17 - Right to be forgotten
47
- */
48
- export class RightToErasureManager {
49
- VERIFICATION_EXPIRY = 3600000; // 1 hour
50
- DELETION_DELAY_DAYS = 30; // Grace period
51
- MAX_RETRY_ATTEMPTS = 3;
52
- deletionQueue = new Map();
53
- verificationTokens = new Map();
54
- // Data categories and their deletion rules
55
- dataCategories = [
56
- {
57
- name: 'profile',
58
- table: 'users',
59
- userIdColumn: 'id',
60
- deletable: true,
61
- anonymizable: true,
62
- criticalData: true,
63
- },
64
- {
65
- name: 'sessions',
66
- table: 'sessions',
67
- userIdColumn: 'user_id',
68
- deletable: true,
69
- retentionPeriod: 90, // Keep for 90 days for security
70
- anonymizable: false,
71
- criticalData: false,
72
- },
73
- {
74
- name: 'insights',
75
- table: 'insights',
76
- userIdColumn: 'user_id',
77
- deletable: true,
78
- anonymizable: true,
79
- criticalData: false,
80
- },
81
- {
82
- name: 'oauth_tokens',
83
- table: 'oauth_tokens',
84
- userIdColumn: 'user_id',
85
- deletable: true,
86
- anonymizable: false,
87
- criticalData: true,
88
- },
89
- {
90
- name: 'audit_logs',
91
- table: 'audit_logs',
92
- userIdColumn: 'user_id',
93
- deletable: false, // Keep for compliance
94
- retentionPeriod: 2555, // 7 years
95
- anonymizable: true,
96
- criticalData: true,
97
- },
98
- {
99
- name: 'financial_records',
100
- table: 'transactions',
101
- userIdColumn: 'user_id',
102
- deletable: false, // Legal requirement
103
- retentionPeriod: 2555, // 7 years
104
- anonymizable: true,
105
- criticalData: true,
106
- },
107
- ];
108
- /**
109
- * Request account deletion
110
- */
111
- async requestDeletion(userId, scope = DeletionScope.FULL, options) {
112
- // Check for existing request
113
- const existing = await this.getActiveDeletionRequest(userId);
114
- if (existing) {
115
- logger.warn(`Deletion request already exists for user ${userId}`);
116
- return existing;
117
- }
118
- // Check for retention requirements
119
- const retentionRequirements = await this.checkRetentionRequirements(userId);
120
- if (retentionRequirements.mustRetain && scope === DeletionScope.FULL) {
121
- throw new Error(`Cannot delete user data: ${retentionRequirements.reasons.join(', ')}`);
122
- }
123
- const requestId = this.generateRequestId(userId);
124
- const now = new Date();
125
- const request = {
126
- id: requestId,
127
- userId,
128
- requestedAt: now,
129
- requestedBy: options?.requestedBy || userId,
130
- scope,
131
- status: DeletionStatus.PENDING,
132
- reason: options?.reason,
133
- scheduledFor: options?.immediate
134
- ? now
135
- : new Date(now.getTime() + this.DELETION_DELAY_DAYS * 86400000),
136
- metadata: {
137
- ipAddress: options?.ipAddress || '',
138
- userAgent: options?.userAgent || '',
139
- verified: options?.skipVerification || false,
140
- notificationsSent: [],
141
- },
142
- };
143
- // Generate verification token if needed
144
- if (!options?.skipVerification) {
145
- request.verificationToken = await this.generateVerificationToken(userId);
146
- await this.sendVerificationEmail(userId, request.verificationToken);
147
- }
148
- // Store request
149
- await this.storeDeletionRequest(request);
150
- this.deletionQueue.set(requestId, request);
151
- // If immediate and verified, start processing
152
- if (options?.immediate && options?.skipVerification) {
153
- await this.processDeletion(request);
154
- }
155
- logger.info(`Deletion request created for user ${userId}: ${requestId}`);
156
- return request;
157
- }
158
- /**
159
- * Verify deletion request
160
- */
161
- async verifyDeletion(requestId, verificationToken) {
162
- const request = await this.getDeletionRequest(requestId);
163
- if (!request) {
164
- throw new Error('Deletion request not found');
165
- }
166
- if (request.status !== DeletionStatus.PENDING) {
167
- throw new Error('Request already processed');
168
- }
169
- // Verify token
170
- const tokenData = this.verificationTokens.get(verificationToken);
171
- if (!tokenData || tokenData.userId !== request.userId) {
172
- throw new Error('Invalid verification token');
173
- }
174
- if (new Date() > tokenData.expires) {
175
- throw new Error('Verification token expired');
176
- }
177
- // Update request
178
- request.status = DeletionStatus.APPROVED;
179
- request.metadata.verified = true;
180
- await this.updateDeletionRequest(request);
181
- // Clean up token
182
- this.verificationTokens.delete(verificationToken);
183
- // Schedule deletion
184
- if (request.scheduledFor && request.scheduledFor > new Date()) {
185
- logger.info(`Deletion scheduled for ${request.scheduledFor}`);
186
- }
187
- else {
188
- await this.processDeletion(request);
189
- }
190
- return true;
191
- }
192
- /**
193
- * Process deletion request
194
- */
195
- async processDeletion(request) {
196
- try {
197
- request.status = DeletionStatus.IN_PROGRESS;
198
- await this.updateDeletionRequest(request);
199
- const report = {
200
- deletedCategories: [],
201
- deletedRecords: 0,
202
- retainedCategories: [],
203
- thirdPartyNotifications: [],
204
- };
205
- // Create backup if configured
206
- if (request.scope === DeletionScope.ARCHIVE) {
207
- report.backupReference = await this.createBackup(request.userId);
208
- }
209
- // Notify third-party services first
210
- const thirdPartyResults = await this.notifyThirdParties(request.userId);
211
- report.thirdPartyNotifications = thirdPartyResults;
212
- // Process each data category
213
- for (const category of this.dataCategories) {
214
- try {
215
- const result = await this.processDataCategory(request.userId, category, request.scope);
216
- if (result.deleted) {
217
- report.deletedCategories.push(category.name);
218
- report.deletedRecords += result.count;
219
- }
220
- else if (result.retained) {
221
- report.retainedCategories?.push(category.name);
222
- if (!request.retainedData) {
223
- request.retainedData = [];
224
- }
225
- request.retainedData.push({
226
- category: category.name,
227
- reason: result.reason,
228
- retentionPeriod: category.retentionPeriod,
229
- legalBasis: this.getLegalBasis(result.reason),
230
- });
231
- }
232
- if (result.anonymized) {
233
- report.anonymizedRecords = (report.anonymizedRecords || 0) + result.count;
234
- }
235
- if (result.pseudonymized) {
236
- report.pseudonymizedRecords = (report.pseudonymizedRecords || 0) + result.count;
237
- }
238
- }
239
- catch (error) {
240
- logger.error(`Failed to delete category ${category.name}:`, error);
241
- // Continue with other categories
242
- }
243
- }
244
- // Generate completion certificate
245
- report.completionCertificate = await this.generateCompletionCertificate(request, report);
246
- // Update request
247
- request.status = report.retainedCategories?.length
248
- ? DeletionStatus.PARTIALLY_COMPLETED
249
- : DeletionStatus.COMPLETED;
250
- request.completedAt = new Date();
251
- request.deletionReport = report;
252
- await this.updateDeletionRequest(request);
253
- // Send confirmation
254
- await this.sendDeletionConfirmation(request.userId, report);
255
- logger.info(`Deletion completed for user ${request.userId}: ${report.deletedRecords} records deleted`);
256
- return report;
257
- }
258
- catch (error) {
259
- logger.error(`Deletion failed for user ${request.userId}:`, error);
260
- request.status = DeletionStatus.REJECTED;
261
- request.rejectionReason = [RetentionReason.COMPLIANCE];
262
- await this.updateDeletionRequest(request);
263
- throw error;
264
- }
265
- }
266
- /**
267
- * Process individual data category
268
- */
269
- async processDataCategory(userId, category, scope) {
270
- const result = {
271
- deleted: false,
272
- retained: false,
273
- anonymized: false,
274
- pseudonymized: false,
275
- count: 0,
276
- reason: undefined,
277
- };
278
- // Check if category can be deleted
279
- if (!category.deletable) {
280
- result.retained = true;
281
- result.reason = RetentionReason.LEGAL_OBLIGATION;
282
- // Anonymize if possible
283
- if (category.anonymizable && scope !== DeletionScope.PARTIAL) {
284
- result.count = await this.anonymizeData(userId, category);
285
- result.anonymized = true;
286
- }
287
- return result;
288
- }
289
- // Check retention period
290
- if (category.retentionPeriod) {
291
- const canDelete = await this.checkRetentionPeriod(userId, category);
292
- if (!canDelete) {
293
- result.retained = true;
294
- result.reason = RetentionReason.COMPLIANCE;
295
- return result;
296
- }
297
- }
298
- // Process based on scope
299
- switch (scope) {
300
- case DeletionScope.FULL:
301
- result.count = await this.deleteData(userId, category);
302
- result.deleted = true;
303
- break;
304
- case DeletionScope.ANONYMIZE:
305
- result.count = await this.anonymizeData(userId, category);
306
- result.anonymized = true;
307
- break;
308
- case DeletionScope.PSEUDONYMIZE:
309
- result.count = await this.pseudonymizeData(userId, category);
310
- result.pseudonymized = true;
311
- break;
312
- case DeletionScope.ARCHIVE:
313
- // Archive before deletion
314
- await this.archiveData(userId, category);
315
- result.count = await this.deleteData(userId, category);
316
- result.deleted = true;
317
- break;
318
- case DeletionScope.PARTIAL:
319
- // Selective deletion based on user preferences
320
- result.count = await this.partialDeleteData(userId, category);
321
- result.deleted = true;
322
- break;
323
- }
324
- return result;
325
- }
326
- /**
327
- * Delete user data from category
328
- */
329
- async deleteData(userId, category) {
330
- const db = getDb();
331
- // In production, this would execute actual DELETE queries
332
- logger.info(`Deleting ${category.name} for user ${userId}`);
333
- // Return mock count
334
- return Math.floor(Math.random() * 100);
335
- }
336
- /**
337
- * Anonymize user data
338
- */
339
- async anonymizeData(userId, category) {
340
- const anonymousId = `anon_${createHash('sha256').update(userId).digest('hex').substring(0, 16)}`;
341
- // Replace identifiable data with anonymous values
342
- logger.info(`Anonymizing ${category.name} for user ${userId} -> ${anonymousId}`);
343
- return Math.floor(Math.random() * 50);
344
- }
345
- /**
346
- * Pseudonymize user data
347
- */
348
- async pseudonymizeData(userId, category) {
349
- const pseudonym = `user_${randomBytes(16).toString('hex')}`;
350
- // Replace with pseudonym (reversible with key)
351
- logger.info(`Pseudonymizing ${category.name} for user ${userId} -> ${pseudonym}`);
352
- return Math.floor(Math.random() * 50);
353
- }
354
- /**
355
- * Archive user data before deletion
356
- */
357
- async archiveData(userId, category) {
358
- // Create encrypted archive
359
- const archiveId = `archive_${userId}_${category.name}_${Date.now()}`;
360
- logger.info(`Archiving ${category.name} for user ${userId}: ${archiveId}`);
361
- return archiveId;
362
- }
363
- /**
364
- * Partial deletion based on preferences
365
- */
366
- async partialDeleteData(userId, category) {
367
- // Delete only non-essential data
368
- logger.info(`Partial deletion of ${category.name} for user ${userId}`);
369
- return Math.floor(Math.random() * 30);
370
- }
371
- /**
372
- * Cancel deletion request
373
- */
374
- async cancelDeletion(requestId, userId, reason) {
375
- const request = await this.getDeletionRequest(requestId);
376
- if (!request) {
377
- throw new Error('Deletion request not found');
378
- }
379
- if (request.userId !== userId) {
380
- throw new Error('Unauthorized to cancel this request');
381
- }
382
- if (request.status === DeletionStatus.COMPLETED ||
383
- request.status === DeletionStatus.IN_PROGRESS) {
384
- throw new Error('Cannot cancel request in this state');
385
- }
386
- request.status = DeletionStatus.CANCELLED;
387
- await this.updateDeletionRequest(request);
388
- logger.info(`Deletion cancelled for user ${userId}: ${reason || 'User request'}`);
389
- return true;
390
- }
391
- /**
392
- * Check retention requirements
393
- */
394
- async checkRetentionRequirements(userId) {
395
- const requirements = {
396
- mustRetain: false,
397
- reasons: [],
398
- categories: [],
399
- };
400
- // Check for active legal holds
401
- const hasLegalHold = await this.checkLegalHold(userId);
402
- if (hasLegalHold) {
403
- requirements.mustRetain = true;
404
- requirements.reasons.push(RetentionReason.LEGAL_CLAIMS);
405
- requirements.categories.push('all');
406
- }
407
- // Check for financial obligations
408
- const hasFinancialObligations = await this.checkFinancialObligations(userId);
409
- if (hasFinancialObligations) {
410
- requirements.reasons.push(RetentionReason.FINANCIAL_RECORDS);
411
- requirements.categories.push('financial_records');
412
- }
413
- // Check for fraud investigations
414
- const underInvestigation = await this.checkFraudInvestigation(userId);
415
- if (underInvestigation) {
416
- requirements.mustRetain = true;
417
- requirements.reasons.push(RetentionReason.FRAUD_PREVENTION);
418
- requirements.categories.push('audit_logs', 'sessions');
419
- }
420
- return requirements;
421
- }
422
- /**
423
- * Notify third-party services
424
- */
425
- async notifyThirdParties(userId) {
426
- const notifications = [];
427
- // Notify Google
428
- notifications.push({
429
- provider: 'Google',
430
- notified: true,
431
- response: 'Deletion request acknowledged',
432
- });
433
- // Notify GitHub
434
- notifications.push({
435
- provider: 'GitHub',
436
- notified: true,
437
- response: 'User data queued for deletion',
438
- });
439
- return notifications;
440
- }
441
- /**
442
- * Generate completion certificate
443
- */
444
- async generateCompletionCertificate(request, report) {
445
- const certificate = {
446
- requestId: request.id,
447
- userId: request.userId,
448
- completedAt: new Date(),
449
- deletedCategories: report.deletedCategories,
450
- deletedRecords: report.deletedRecords,
451
- retainedData: request.retainedData,
452
- signature: '',
453
- };
454
- // Generate cryptographic signature
455
- certificate.signature = createHash('sha256')
456
- .update(JSON.stringify(certificate))
457
- .digest('hex');
458
- return Buffer.from(JSON.stringify(certificate)).toString('base64');
459
- }
460
- // Helper methods
461
- generateRequestId(userId) {
462
- return `del_${userId}_${Date.now()}_${randomBytes(4).toString('hex')}`;
463
- }
464
- async generateVerificationToken(userId) {
465
- const token = randomBytes(32).toString('hex');
466
- const expires = new Date(Date.now() + this.VERIFICATION_EXPIRY);
467
- this.verificationTokens.set(token, { userId, expires });
468
- return token;
469
- }
470
- getLegalBasis(reason) {
471
- const legalBasis = {
472
- [RetentionReason.LEGAL_OBLIGATION]: 'GDPR Article 17(3)(b) - Legal obligation',
473
- [RetentionReason.CONTRACT_FULFILLMENT]: 'GDPR Article 17(3)(a) - Contract fulfillment',
474
- [RetentionReason.VITAL_INTERESTS]: 'GDPR Article 17(3)(d) - Vital interests',
475
- [RetentionReason.PUBLIC_INTEREST]: 'GDPR Article 17(3)(c) - Public interest',
476
- [RetentionReason.LEGAL_CLAIMS]: 'GDPR Article 17(3)(e) - Legal claims',
477
- [RetentionReason.FREEDOM_OF_EXPRESSION]: 'GDPR Article 17(3)(a) - Freedom of expression',
478
- [RetentionReason.COMPLIANCE]: 'GDPR Article 17(3)(b) - Compliance',
479
- [RetentionReason.FINANCIAL_RECORDS]: 'GDPR Article 17(3)(b) - Financial regulations',
480
- [RetentionReason.FRAUD_PREVENTION]: 'GDPR Article 17(3)(e) - Fraud prevention',
481
- };
482
- return legalBasis[reason] || 'GDPR Article 17(3)';
483
- }
484
- // Database operations (mocked)
485
- async getDeletionRequest(requestId) {
486
- return this.deletionQueue.get(requestId) || null;
487
- }
488
- async getActiveDeletionRequest(userId) {
489
- // Check database for active requests
490
- return null;
491
- }
492
- async storeDeletionRequest(request) {
493
- // Store in database
494
- }
495
- async updateDeletionRequest(request) {
496
- // Update in database
497
- }
498
- async checkRetentionPeriod(userId, category) {
499
- // Check if retention period has passed
500
- return true;
501
- }
502
- async checkLegalHold(userId) {
503
- // Check for legal holds
504
- return false;
505
- }
506
- async checkFinancialObligations(userId) {
507
- // Check for outstanding financial obligations
508
- return false;
509
- }
510
- async checkFraudInvestigation(userId) {
511
- // Check if user is under investigation
512
- return false;
513
- }
514
- async createBackup(userId) {
515
- // Create encrypted backup
516
- return `backup_${userId}_${Date.now()}`;
517
- }
518
- async sendVerificationEmail(userId, token) {
519
- logger.info(`Verification email sent to user ${userId}`);
520
- }
521
- async sendDeletionConfirmation(userId, report) {
522
- logger.info(`Deletion confirmation sent to user ${userId}`);
523
- }
524
- }
525
- // Export singleton instance
526
- export const rightToErasureManager = new RightToErasureManager();
527
- //# sourceMappingURL=rightToErasure.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rightToErasure.js","sourceRoot":"","sources":["../../../../src/server/oauth/gdpr/rightToErasure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,oCAAmB,CAAA;IACnB,wCAAuB,CAAA;IACvB,8CAA6B,CAAA;IAC7B,oCAAmB,CAAA;AACrB,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,eAUX;AAVD,WAAY,eAAe;IACzB,wDAAqC,CAAA;IACrC,oDAAiC,CAAA;IACjC,sDAAmC,CAAA;IACnC,sDAAmC,CAAA;IACnC,gDAA6B,CAAA;IAC7B,uDAAoC,CAAA;IACpC,4CAAyB,CAAA;IACzB,kDAA+B,CAAA;IAC/B,6CAA0B,CAAA;AAC5B,CAAC,EAVW,eAAe,KAAf,eAAe,QAU1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cASX;AATD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,yCAAuB,CAAA;IACvB,uCAAqB,CAAA;IACrB,6CAA2B,CAAA;IAC3B,yCAAuB,CAAA;IACvB,6DAA2C,CAAA;IAC3C,uCAAqB,CAAA;IACrB,yCAAuB,CAAA;AACzB,CAAC,EATW,cAAc,KAAd,cAAc,QASzB;AAiED;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IACf,mBAAmB,GAAG,OAAO,CAAC,CAAC,SAAS;IACxC,mBAAmB,GAAG,EAAE,CAAC,CAAM,eAAe;IAC9C,kBAAkB,GAAG,CAAC,CAAC;IAEhC,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;IACnD,kBAAkB,GAAG,IAAI,GAAG,EAA6C,CAAC;IAElF,2CAA2C;IAC1B,cAAc,GAAmB;QAChD;YACE,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO;YACd,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,IAAI;SACnB;QACD;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,UAAU;YACjB,YAAY,EAAE,SAAS;YACvB,SAAS,EAAE,IAAI;YACf,eAAe,EAAE,EAAE,EAAW,gCAAgC;YAC9D,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,KAAK;SACpB;QACD;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,UAAU;YACjB,YAAY,EAAE,SAAS;YACvB,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,KAAK;SACpB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,cAAc;YACrB,YAAY,EAAE,SAAS;YACvB,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,IAAI;SACnB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,YAAY;YACnB,YAAY,EAAE,SAAS;YACvB,SAAS,EAAE,KAAK,EAAe,sBAAsB;YACrD,eAAe,EAAE,IAAI,EAAU,UAAU;YACzC,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,IAAI;SACnB;QACD;YACE,IAAI,EAAE,mBAAmB;YACzB,KAAK,EAAE,cAAc;YACrB,YAAY,EAAE,SAAS;YACvB,SAAS,EAAE,KAAK,EAAe,oBAAoB;YACnD,eAAe,EAAE,IAAI,EAAU,UAAU;YACzC,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,IAAI;SACnB;KACF,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,QAAuB,aAAa,CAAC,IAAI,EACzC,OAOC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,4CAA4C,MAAM,EAAE,CAAC,CAAC;YAClE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,mCAAmC;QACnC,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,qBAAqB,CAAC,UAAU,IAAI,KAAK,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,4BAA4B,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvE,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAoB;YAC/B,EAAE,EAAE,SAAS;YACb,MAAM;YACN,WAAW,EAAE,GAAG;YAChB,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,MAAM;YAC3C,KAAK;YACL,MAAM,EAAE,cAAc,CAAC,OAAO;YAC9B,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,YAAY,EAAE,OAAO,EAAE,SAAS;gBAC9B,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;YACjE,QAAQ,EAAE;gBACR,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;gBACnC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;gBACnC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,IAAI,KAAK;gBAC5C,iBAAiB,EAAE,EAAE;aACtB;SACF,CAAC;QAEF,wCAAwC;QACxC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC;YAC/B,OAAO,CAAC,iBAAiB,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;YACzE,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACtE,CAAC;QAED,gBAAgB;QAChB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE3C,8CAA8C;QAC9C,IAAI,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;YACpD,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,qCAAqC,MAAM,KAAK,SAAS,EAAE,CAAC,CAAC;QACzE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,SAAiB,EACjB,iBAAyB;QAEzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,eAAe;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,IAAI,IAAI,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,iBAAiB;QACjB,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;QACzC,OAAO,CAAC,QAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;QAClC,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAE1C,iBAAiB;QACjB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAElD,oBAAoB;QACpB,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,0BAA0B,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,OAAwB;QAC5C,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC;YAC5C,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,MAAM,GAAmB;gBAC7B,iBAAiB,EAAE,EAAE;gBACrB,cAAc,EAAE,CAAC;gBACjB,kBAAkB,EAAE,EAAE;gBACtB,uBAAuB,EAAE,EAAE;aAC5B,CAAC;YAEF,8BAA8B;YAC9B,IAAI,OAAO,CAAC,KAAK,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC5C,MAAM,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACnE,CAAC;YAED,oCAAoC;YACpC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxE,MAAM,CAAC,uBAAuB,GAAG,iBAAiB,CAAC;YAEnD,6BAA6B;YAC7B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC3C,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC3C,OAAO,CAAC,MAAM,EACd,QAAQ,EACR,OAAO,CAAC,KAAK,CACd,CAAC;oBAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnB,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAC7C,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,KAAK,CAAC;oBACxC,CAAC;yBAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;wBAC3B,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAC/C,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;4BAC1B,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC;wBAC5B,CAAC;wBACD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;4BACxB,QAAQ,EAAE,QAAQ,CAAC,IAAI;4BACvB,MAAM,EAAE,MAAM,CAAC,MAAO;4BACtB,eAAe,EAAE,QAAQ,CAAC,eAAe;4BACzC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAO,CAAC;yBAC/C,CAAC,CAAC;oBACL,CAAC;oBAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;wBACtB,MAAM,CAAC,iBAAiB,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC5E,CAAC;oBAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;wBACzB,MAAM,CAAC,oBAAoB,GAAG,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;oBAClF,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,QAAQ,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;oBACnE,iCAAiC;gBACnC,CAAC;YACH,CAAC;YAED,kCAAkC;YAClC,MAAM,CAAC,qBAAqB,GAAG,MAAM,IAAI,CAAC,6BAA6B,CACrE,OAAO,EACP,MAAM,CACP,CAAC;YAEF,iBAAiB;YACjB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,kBAAkB,EAAE,MAAM;gBAChD,CAAC,CAAC,cAAc,CAAC,mBAAmB;gBACpC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC;YAC7B,OAAO,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;YACjC,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC;YAChC,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAE1C,oBAAoB;YACpB,MAAM,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAE5D,MAAM,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,cAAc,kBAAkB,CAAC,CAAC;YACvG,OAAO,MAAM,CAAC;QAEhB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;YAEnE,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;YACzC,OAAO,CAAC,eAAe,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACvD,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,MAAc,EACd,QAAsB,EACtB,KAAoB;QASpB,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,aAAa,EAAE,KAAK;YACpB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,SAAwC;SACjD,CAAC;QAEF,mCAAmC;QACnC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,gBAAgB,CAAC;YAEjD,wBAAwB;YACxB,IAAI,QAAQ,CAAC,YAAY,IAAI,KAAK,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC7D,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC1D,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;YAC3B,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,yBAAyB;QACzB,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAC/C,MAAM,EACN,QAAQ,CACT,CAAC;YAEF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACvB,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC;gBAC3C,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,aAAa,CAAC,IAAI;gBACrB,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACvD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,MAAM;YAER,KAAK,aAAa,CAAC,SAAS;gBAC1B,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC1D,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;gBACzB,MAAM;YAER,KAAK,aAAa,CAAC,YAAY;gBAC7B,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC7D,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC5B,MAAM;YAER,KAAK,aAAa,CAAC,OAAO;gBACxB,0BAA0B;gBAC1B,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACzC,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACvD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,MAAM;YAER,KAAK,aAAa,CAAC,OAAO;gBACxB,+CAA+C;gBAC/C,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC9D,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,MAAM;QACV,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CACtB,MAAc,EACd,QAAsB;QAEtB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QAEnB,0DAA0D;QAC1D,MAAM,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,IAAI,aAAa,MAAM,EAAE,CAAC,CAAC;QAE5D,oBAAoB;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,MAAc,EACd,QAAsB;QAEtB,MAAM,WAAW,GAAG,QAAQ,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAEjG,kDAAkD;QAClD,MAAM,CAAC,IAAI,CAAC,eAAe,QAAQ,CAAC,IAAI,aAAa,MAAM,OAAO,WAAW,EAAE,CAAC,CAAC;QAEjF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAC5B,MAAc,EACd,QAAsB;QAEtB,MAAM,SAAS,GAAG,QAAQ,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAE5D,+CAA+C;QAC/C,MAAM,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,IAAI,aAAa,MAAM,OAAO,SAAS,EAAE,CAAC,CAAC;QAElF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CACvB,MAAc,EACd,QAAsB;QAEtB,2BAA2B;QAC3B,MAAM,SAAS,GAAG,WAAW,MAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAErE,MAAM,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,IAAI,aAAa,MAAM,KAAK,SAAS,EAAE,CAAC,CAAC;QAC3E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC7B,MAAc,EACd,QAAsB;QAEtB,iCAAiC;QACjC,MAAM,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,IAAI,aAAa,MAAM,EAAE,CAAC,CAAC;QAEvE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,SAAiB,EACjB,MAAc,EACd,MAAe;QAEf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC,SAAS;YAC3C,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC;QAC1C,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAE1C,MAAM,CAAC,IAAI,CAAC,+BAA+B,MAAM,KAAK,MAAM,IAAI,cAAc,EAAE,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,0BAA0B,CACtC,MAAc;QAMd,MAAM,YAAY,GAAG;YACnB,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,EAAuB;YAChC,UAAU,EAAE,EAAc;SAC3B,CAAC;QAEF,+BAA+B;QAC/B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC;YAC/B,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACxD,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,kCAAkC;QAClC,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;QAC7E,IAAI,uBAAuB,EAAE,CAAC;YAC5B,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YAC7D,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACpD,CAAC;QAED,iCAAiC;QACjC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACtE,IAAI,kBAAkB,EAAE,CAAC;YACvB,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC;YAC/B,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAC5D,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAC9B,MAAc;QAEd,MAAM,aAAa,GAAG,EAAE,CAAC;QAEzB,gBAAgB;QAChB,aAAa,CAAC,IAAI,CAAC;YACjB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,+BAA+B;SAC1C,CAAC,CAAC;QAEH,gBAAgB;QAChB,aAAa,CAAC,IAAI,CAAC;YACjB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,+BAA+B;SAC1C,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,6BAA6B,CACzC,OAAwB,EACxB,MAAsB;QAEtB,MAAM,WAAW,GAAG;YAClB,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,IAAI,IAAI,EAAE;YACvB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,SAAS,EAAE,EAAE;SACd,CAAC;QAEF,mCAAmC;QACnC,WAAW,CAAC,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC;aACzC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;aACnC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,iBAAiB;IAET,iBAAiB,CAAC,MAAc;QACtC,OAAO,OAAO,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IACzE,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,MAAc;QACpD,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEhE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,aAAa,CAAC,MAAuB;QAC3C,MAAM,UAAU,GAAoC;YAClD,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,0CAA0C;YAC9E,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,8CAA8C;YACtF,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,yCAAyC;YAC5E,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,yCAAyC;YAC5E,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,sCAAsC;YACtE,CAAC,eAAe,CAAC,qBAAqB,CAAC,EAAE,+CAA+C;YACxF,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,oCAAoC;YAClE,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,+CAA+C;YACpF,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,0CAA0C;SAC/E,CAAC;QAEF,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC;IACpD,CAAC;IAED,+BAA+B;IACvB,KAAK,CAAC,kBAAkB,CAAC,SAAiB;QAChD,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,MAAc;QACnD,qCAAqC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,OAAwB;QACzD,oBAAoB;IACtB,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,OAAwB;QAC1D,qBAAqB;IACvB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,MAAc,EAAE,QAAsB;QACvE,uCAAuC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAAc;QACzC,wBAAwB;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,MAAc;QACpD,8CAA8C;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,MAAc;QAClD,uCAAuC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAc;QACvC,0BAA0B;QAC1B,OAAO,UAAU,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,MAAc,EAAE,KAAa;QAC/D,MAAM,CAAC,IAAI,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,MAAc,EAAE,MAAsB;QAC3E,MAAM,CAAC,IAAI,CAAC,sCAAsC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC"}