@esengine/ecs-framework-math 1.0.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.
Files changed (45) hide show
  1. package/bin/Animation/Easing.d.ts +244 -0
  2. package/bin/Animation/Easing.d.ts.map +1 -0
  3. package/bin/Animation/Easing.js +407 -0
  4. package/bin/Animation/Easing.js.map +1 -0
  5. package/bin/Animation/Interpolation.d.ts +172 -0
  6. package/bin/Animation/Interpolation.d.ts.map +1 -0
  7. package/bin/Animation/Interpolation.js +327 -0
  8. package/bin/Animation/Interpolation.js.map +1 -0
  9. package/bin/Animation/index.d.ts +8 -0
  10. package/bin/Animation/index.d.ts.map +1 -0
  11. package/bin/Animation/index.js +8 -0
  12. package/bin/Animation/index.js.map +1 -0
  13. package/bin/Circle.d.ts +277 -0
  14. package/bin/Circle.d.ts.map +1 -0
  15. package/bin/Circle.js +496 -0
  16. package/bin/Circle.js.map +1 -0
  17. package/bin/Collision/CollisionDetector.d.ts +114 -0
  18. package/bin/Collision/CollisionDetector.d.ts.map +1 -0
  19. package/bin/Collision/CollisionDetector.js +353 -0
  20. package/bin/Collision/CollisionDetector.js.map +1 -0
  21. package/bin/Collision/index.d.ts +7 -0
  22. package/bin/Collision/index.d.ts.map +1 -0
  23. package/bin/Collision/index.js +7 -0
  24. package/bin/Collision/index.js.map +1 -0
  25. package/bin/MathUtils.d.ts +312 -0
  26. package/bin/MathUtils.d.ts.map +1 -0
  27. package/bin/MathUtils.js +500 -0
  28. package/bin/MathUtils.js.map +1 -0
  29. package/bin/Matrix3.d.ts +269 -0
  30. package/bin/Matrix3.d.ts.map +1 -0
  31. package/bin/Matrix3.js +514 -0
  32. package/bin/Matrix3.js.map +1 -0
  33. package/bin/Rectangle.d.ts +266 -0
  34. package/bin/Rectangle.d.ts.map +1 -0
  35. package/bin/Rectangle.js +437 -0
  36. package/bin/Rectangle.js.map +1 -0
  37. package/bin/Vector2.d.ts +317 -0
  38. package/bin/Vector2.d.ts.map +1 -0
  39. package/bin/Vector2.js +474 -0
  40. package/bin/Vector2.js.map +1 -0
  41. package/bin/index.d.ts +17 -0
  42. package/bin/index.d.ts.map +1 -0
  43. package/bin/index.js +21 -0
  44. package/bin/index.js.map +1 -0
  45. package/package.json +66 -0
package/bin/Matrix3.js ADDED
@@ -0,0 +1,514 @@
1
+ import { Vector2 } from './Vector2';
2
+ /**
3
+ * 3x3变换矩阵类
4
+ *
5
+ * 用于2D变换(平移、旋转、缩放)的3x3矩阵
6
+ * 矩阵布局:
7
+ * [m00, m01, m02] [scaleX * cos, -scaleY * sin, translateX]
8
+ * [m10, m11, m12] = [scaleX * sin, scaleY * cos, translateY]
9
+ * [m20, m21, m22] [0, 0, 1]
10
+ */
11
+ export class Matrix3 {
12
+ /**
13
+ * 创建3x3矩阵
14
+ * @param elements 矩阵元素数组(可选),默认为单位矩阵
15
+ */
16
+ constructor(elements) {
17
+ this.elements = new Float32Array(9);
18
+ if (elements) {
19
+ this.elements.set(elements);
20
+ }
21
+ else {
22
+ this.identity();
23
+ }
24
+ }
25
+ // 元素访问器
26
+ /** 获取矩阵元素 */
27
+ get(row, col) {
28
+ return this.elements[row * 3 + col];
29
+ }
30
+ /** 设置矩阵元素 */
31
+ set(row, col, value) {
32
+ this.elements[row * 3 + col] = value;
33
+ return this;
34
+ }
35
+ // 快速访问器
36
+ get m00() { return this.elements[0]; }
37
+ set m00(value) { this.elements[0] = value; }
38
+ get m01() { return this.elements[1]; }
39
+ set m01(value) { this.elements[1] = value; }
40
+ get m02() { return this.elements[2]; }
41
+ set m02(value) { this.elements[2] = value; }
42
+ get m10() { return this.elements[3]; }
43
+ set m10(value) { this.elements[3] = value; }
44
+ get m11() { return this.elements[4]; }
45
+ set m11(value) { this.elements[4] = value; }
46
+ get m12() { return this.elements[5]; }
47
+ set m12(value) { this.elements[5] = value; }
48
+ get m20() { return this.elements[6]; }
49
+ set m20(value) { this.elements[6] = value; }
50
+ get m21() { return this.elements[7]; }
51
+ set m21(value) { this.elements[7] = value; }
52
+ get m22() { return this.elements[8]; }
53
+ set m22(value) { this.elements[8] = value; }
54
+ // 基础操作
55
+ /**
56
+ * 设置矩阵为单位矩阵
57
+ * @returns 当前矩阵实例(链式调用)
58
+ */
59
+ identity() {
60
+ this.elements.set([
61
+ 1, 0, 0,
62
+ 0, 1, 0,
63
+ 0, 0, 1
64
+ ]);
65
+ return this;
66
+ }
67
+ /**
68
+ * 设置矩阵为零矩阵
69
+ * @returns 当前矩阵实例(链式调用)
70
+ */
71
+ zero() {
72
+ this.elements.fill(0);
73
+ return this;
74
+ }
75
+ /**
76
+ * 复制另一个矩阵的值
77
+ * @param other 源矩阵
78
+ * @returns 当前矩阵实例(链式调用)
79
+ */
80
+ copy(other) {
81
+ this.elements.set(other.elements);
82
+ return this;
83
+ }
84
+ /**
85
+ * 克隆当前矩阵
86
+ * @returns 新的矩阵实例
87
+ */
88
+ clone() {
89
+ return new Matrix3(this.elements);
90
+ }
91
+ /**
92
+ * 从数组设置矩阵元素
93
+ * @param elements 矩阵元素数组
94
+ * @returns 当前矩阵实例(链式调用)
95
+ */
96
+ fromArray(elements) {
97
+ this.elements.set(elements);
98
+ return this;
99
+ }
100
+ // 矩阵运算
101
+ /**
102
+ * 矩阵加法
103
+ * @param other 另一个矩阵
104
+ * @returns 当前矩阵实例(链式调用)
105
+ */
106
+ add(other) {
107
+ for (let i = 0; i < 9; i++) {
108
+ this.elements[i] += other.elements[i];
109
+ }
110
+ return this;
111
+ }
112
+ /**
113
+ * 矩阵减法
114
+ * @param other 另一个矩阵
115
+ * @returns 当前矩阵实例(链式调用)
116
+ */
117
+ subtract(other) {
118
+ for (let i = 0; i < 9; i++) {
119
+ this.elements[i] -= other.elements[i];
120
+ }
121
+ return this;
122
+ }
123
+ /**
124
+ * 矩阵标量乘法
125
+ * @param scalar 标量
126
+ * @returns 当前矩阵实例(链式调用)
127
+ */
128
+ multiplyScalar(scalar) {
129
+ for (let i = 0; i < 9; i++) {
130
+ this.elements[i] *= scalar;
131
+ }
132
+ return this;
133
+ }
134
+ /**
135
+ * 矩阵乘法
136
+ * @param other 另一个矩阵
137
+ * @returns 当前矩阵实例(链式调用)
138
+ */
139
+ multiply(other) {
140
+ const a = this.elements;
141
+ const b = other.elements;
142
+ const result = new Float32Array(9);
143
+ result[0] = a[0] * b[0] + a[1] * b[3] + a[2] * b[6];
144
+ result[1] = a[0] * b[1] + a[1] * b[4] + a[2] * b[7];
145
+ result[2] = a[0] * b[2] + a[1] * b[5] + a[2] * b[8];
146
+ result[3] = a[3] * b[0] + a[4] * b[3] + a[5] * b[6];
147
+ result[4] = a[3] * b[1] + a[4] * b[4] + a[5] * b[7];
148
+ result[5] = a[3] * b[2] + a[4] * b[5] + a[5] * b[8];
149
+ result[6] = a[6] * b[0] + a[7] * b[3] + a[8] * b[6];
150
+ result[7] = a[6] * b[1] + a[7] * b[4] + a[8] * b[7];
151
+ result[8] = a[6] * b[2] + a[7] * b[5] + a[8] * b[8];
152
+ this.elements.set(result);
153
+ return this;
154
+ }
155
+ /**
156
+ * 左乘另一个矩阵(other * this)
157
+ * @param other 左乘矩阵
158
+ * @returns 当前矩阵实例(链式调用)
159
+ */
160
+ premultiply(other) {
161
+ const a = other.elements;
162
+ const b = this.elements;
163
+ const result = new Float32Array(9);
164
+ result[0] = a[0] * b[0] + a[1] * b[3] + a[2] * b[6];
165
+ result[1] = a[0] * b[1] + a[1] * b[4] + a[2] * b[7];
166
+ result[2] = a[0] * b[2] + a[1] * b[5] + a[2] * b[8];
167
+ result[3] = a[3] * b[0] + a[4] * b[3] + a[5] * b[6];
168
+ result[4] = a[3] * b[1] + a[4] * b[4] + a[5] * b[7];
169
+ result[5] = a[3] * b[2] + a[4] * b[5] + a[5] * b[8];
170
+ result[6] = a[6] * b[0] + a[7] * b[3] + a[8] * b[6];
171
+ result[7] = a[6] * b[1] + a[7] * b[4] + a[8] * b[7];
172
+ result[8] = a[6] * b[2] + a[7] * b[5] + a[8] * b[8];
173
+ this.elements.set(result);
174
+ return this;
175
+ }
176
+ // 变换操作
177
+ /**
178
+ * 设置为平移矩阵
179
+ * @param x X方向平移
180
+ * @param y Y方向平移
181
+ * @returns 当前矩阵实例(链式调用)
182
+ */
183
+ makeTranslation(x, y) {
184
+ this.elements.set([
185
+ 1, 0, x,
186
+ 0, 1, y,
187
+ 0, 0, 1
188
+ ]);
189
+ return this;
190
+ }
191
+ /**
192
+ * 设置为旋转矩阵
193
+ * @param angle 旋转角度(弧度)
194
+ * @returns 当前矩阵实例(链式调用)
195
+ */
196
+ makeRotation(angle) {
197
+ const cos = Math.cos(angle);
198
+ const sin = Math.sin(angle);
199
+ this.elements.set([
200
+ cos, -sin, 0,
201
+ sin, cos, 0,
202
+ 0, 0, 1
203
+ ]);
204
+ return this;
205
+ }
206
+ /**
207
+ * 设置为缩放矩阵
208
+ * @param scaleX X方向缩放
209
+ * @param scaleY Y方向缩放
210
+ * @returns 当前矩阵实例(链式调用)
211
+ */
212
+ makeScale(scaleX, scaleY) {
213
+ this.elements.set([
214
+ scaleX, 0, 0,
215
+ 0, scaleY, 0,
216
+ 0, 0, 1
217
+ ]);
218
+ return this;
219
+ }
220
+ /**
221
+ * 复合平移
222
+ * @param x X方向平移
223
+ * @param y Y方向平移
224
+ * @returns 当前矩阵实例(链式调用)
225
+ */
226
+ translate(x, y) {
227
+ this.m02 += this.m00 * x + this.m01 * y;
228
+ this.m12 += this.m10 * x + this.m11 * y;
229
+ return this;
230
+ }
231
+ /**
232
+ * 复合旋转
233
+ * @param angle 旋转角度(弧度)
234
+ * @returns 当前矩阵实例(链式调用)
235
+ */
236
+ rotate(angle) {
237
+ const cos = Math.cos(angle);
238
+ const sin = Math.sin(angle);
239
+ const m00 = this.m00 * cos + this.m01 * sin;
240
+ const m01 = this.m00 * -sin + this.m01 * cos;
241
+ const m10 = this.m10 * cos + this.m11 * sin;
242
+ const m11 = this.m10 * -sin + this.m11 * cos;
243
+ this.m00 = m00;
244
+ this.m01 = m01;
245
+ this.m10 = m10;
246
+ this.m11 = m11;
247
+ return this;
248
+ }
249
+ /**
250
+ * 复合缩放
251
+ * @param scaleX X方向缩放
252
+ * @param scaleY Y方向缩放
253
+ * @returns 当前矩阵实例(链式调用)
254
+ */
255
+ scale(scaleX, scaleY) {
256
+ this.m00 *= scaleX;
257
+ this.m01 *= scaleY;
258
+ this.m10 *= scaleX;
259
+ this.m11 *= scaleY;
260
+ return this;
261
+ }
262
+ // 矩阵变换
263
+ /**
264
+ * 矩阵转置
265
+ * @returns 当前矩阵实例(链式调用)
266
+ */
267
+ transpose() {
268
+ const elements = this.elements;
269
+ let tmp;
270
+ tmp = elements[1];
271
+ elements[1] = elements[3];
272
+ elements[3] = tmp;
273
+ tmp = elements[2];
274
+ elements[2] = elements[6];
275
+ elements[6] = tmp;
276
+ tmp = elements[5];
277
+ elements[5] = elements[7];
278
+ elements[7] = tmp;
279
+ return this;
280
+ }
281
+ /**
282
+ * 计算矩阵行列式
283
+ * @returns 行列式值
284
+ */
285
+ determinant() {
286
+ const e = this.elements;
287
+ return e[0] * (e[4] * e[8] - e[5] * e[7]) -
288
+ e[1] * (e[3] * e[8] - e[5] * e[6]) +
289
+ e[2] * (e[3] * e[7] - e[4] * e[6]);
290
+ }
291
+ /**
292
+ * 矩阵求逆
293
+ * @returns 当前矩阵实例(链式调用),如果矩阵不可逆则保持不变
294
+ */
295
+ invert() {
296
+ const e = this.elements;
297
+ const det = this.determinant();
298
+ if (Math.abs(det) < Number.EPSILON) {
299
+ console.warn('Matrix3: 矩阵不可逆');
300
+ return this;
301
+ }
302
+ const invDet = 1 / det;
303
+ const result = new Float32Array(9);
304
+ result[0] = (e[4] * e[8] - e[5] * e[7]) * invDet;
305
+ result[1] = (e[2] * e[7] - e[1] * e[8]) * invDet;
306
+ result[2] = (e[1] * e[5] - e[2] * e[4]) * invDet;
307
+ result[3] = (e[5] * e[6] - e[3] * e[8]) * invDet;
308
+ result[4] = (e[0] * e[8] - e[2] * e[6]) * invDet;
309
+ result[5] = (e[2] * e[3] - e[0] * e[5]) * invDet;
310
+ result[6] = (e[3] * e[7] - e[4] * e[6]) * invDet;
311
+ result[7] = (e[1] * e[6] - e[0] * e[7]) * invDet;
312
+ result[8] = (e[0] * e[4] - e[1] * e[3]) * invDet;
313
+ this.elements.set(result);
314
+ return this;
315
+ }
316
+ // 向量变换
317
+ /**
318
+ * 变换向量(应用完整的3x3变换)
319
+ * @param vector 向量
320
+ * @returns 新的变换后的向量
321
+ */
322
+ transformVector(vector) {
323
+ const x = vector.x;
324
+ const y = vector.y;
325
+ const w = this.m20 * x + this.m21 * y + this.m22;
326
+ return new Vector2((this.m00 * x + this.m01 * y + this.m02) / w, (this.m10 * x + this.m11 * y + this.m12) / w);
327
+ }
328
+ /**
329
+ * 变换向量(仅应用旋转和缩放,忽略平移)
330
+ * @param vector 向量
331
+ * @returns 新的变换后的向量
332
+ */
333
+ transformDirection(vector) {
334
+ return new Vector2(this.m00 * vector.x + this.m01 * vector.y, this.m10 * vector.x + this.m11 * vector.y);
335
+ }
336
+ /**
337
+ * 批量变换向量数组
338
+ * @param vectors 向量数组
339
+ * @returns 变换后的向量数组
340
+ */
341
+ transformVectors(vectors) {
342
+ return vectors.map(v => this.transformVector(v));
343
+ }
344
+ // 属性提取
345
+ /**
346
+ * 获取平移分量
347
+ * @returns 平移向量
348
+ */
349
+ getTranslation() {
350
+ return new Vector2(this.m02, this.m12);
351
+ }
352
+ /**
353
+ * 获取旋转角度
354
+ * @returns 旋转角度(弧度)
355
+ */
356
+ getRotation() {
357
+ return Math.atan2(this.m10, this.m00);
358
+ }
359
+ /**
360
+ * 获取缩放分量
361
+ * @returns 缩放向量
362
+ */
363
+ getScale() {
364
+ const scaleX = Math.sqrt(this.m00 * this.m00 + this.m10 * this.m10);
365
+ const scaleY = Math.sqrt(this.m01 * this.m01 + this.m11 * this.m11);
366
+ // 检查是否有反转
367
+ const det = this.determinant();
368
+ if (det < 0) {
369
+ return new Vector2(-scaleX, scaleY);
370
+ }
371
+ return new Vector2(scaleX, scaleY);
372
+ }
373
+ /**
374
+ * 分解变换矩阵为平移、旋转、缩放分量
375
+ * @returns {translation, rotation, scale}
376
+ */
377
+ decompose() {
378
+ return {
379
+ translation: this.getTranslation(),
380
+ rotation: this.getRotation(),
381
+ scale: this.getScale()
382
+ };
383
+ }
384
+ // 比较操作
385
+ /**
386
+ * 检查两个矩阵是否相等
387
+ * @param other 另一个矩阵
388
+ * @param epsilon 容差,默认为Number.EPSILON
389
+ * @returns 是否相等
390
+ */
391
+ equals(other, epsilon = Number.EPSILON) {
392
+ for (let i = 0; i < 9; i++) {
393
+ if (Math.abs(this.elements[i] - other.elements[i]) >= epsilon) {
394
+ return false;
395
+ }
396
+ }
397
+ return true;
398
+ }
399
+ /**
400
+ * 检查两个矩阵是否完全相等
401
+ * @param other 另一个矩阵
402
+ * @returns 是否完全相等
403
+ */
404
+ exactEquals(other) {
405
+ for (let i = 0; i < 9; i++) {
406
+ if (this.elements[i] !== other.elements[i]) {
407
+ return false;
408
+ }
409
+ }
410
+ return true;
411
+ }
412
+ /**
413
+ * 检查是否为单位矩阵
414
+ * @param epsilon 容差,默认为Number.EPSILON
415
+ * @returns 是否为单位矩阵
416
+ */
417
+ isIdentity(epsilon = Number.EPSILON) {
418
+ return this.equals(Matrix3.IDENTITY, epsilon);
419
+ }
420
+ // 静态方法
421
+ /**
422
+ * 矩阵乘法(静态方法)
423
+ * @param a 矩阵a
424
+ * @param b 矩阵b
425
+ * @returns 新的结果矩阵
426
+ */
427
+ static multiply(a, b) {
428
+ return a.clone().multiply(b);
429
+ }
430
+ /**
431
+ * 创建平移矩阵(静态方法)
432
+ * @param x X方向平移
433
+ * @param y Y方向平移
434
+ * @returns 新的平移矩阵
435
+ */
436
+ static translation(x, y) {
437
+ return new Matrix3().makeTranslation(x, y);
438
+ }
439
+ /**
440
+ * 创建旋转矩阵(静态方法)
441
+ * @param angle 旋转角度(弧度)
442
+ * @returns 新的旋转矩阵
443
+ */
444
+ static rotation(angle) {
445
+ return new Matrix3().makeRotation(angle);
446
+ }
447
+ /**
448
+ * 创建缩放矩阵(静态方法)
449
+ * @param scaleX X方向缩放
450
+ * @param scaleY Y方向缩放
451
+ * @returns 新的缩放矩阵
452
+ */
453
+ static scale(scaleX, scaleY) {
454
+ return new Matrix3().makeScale(scaleX, scaleY);
455
+ }
456
+ /**
457
+ * 创建TRS(平移-旋转-缩放)变换矩阵
458
+ * @param translation 平移向量
459
+ * @param rotation 旋转角度(弧度)
460
+ * @param scale 缩放向量
461
+ * @returns 新的TRS矩阵
462
+ */
463
+ static TRS(translation, rotation, scale) {
464
+ const cos = Math.cos(rotation);
465
+ const sin = Math.sin(rotation);
466
+ return new Matrix3([
467
+ scale.x * cos, -scale.y * sin, translation.x,
468
+ scale.x * sin, scale.y * cos, translation.y,
469
+ 0, 0, 1
470
+ ]);
471
+ }
472
+ // 字符串转换
473
+ /**
474
+ * 转换为字符串
475
+ * @returns 字符串表示
476
+ */
477
+ toString() {
478
+ const e = this.elements;
479
+ return `Matrix3(\n` +
480
+ ` ${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}\n` +
481
+ ` ${e[3].toFixed(3)}, ${e[4].toFixed(3)}, ${e[5].toFixed(3)}\n` +
482
+ ` ${e[6].toFixed(3)}, ${e[7].toFixed(3)}, ${e[8].toFixed(3)}\n` +
483
+ `)`;
484
+ }
485
+ /**
486
+ * 转换为数组
487
+ * @returns 矩阵元素数组
488
+ */
489
+ toArray() {
490
+ return Array.from(this.elements);
491
+ }
492
+ /**
493
+ * 转换为CSS transform字符串
494
+ * @returns CSS transform字符串
495
+ */
496
+ toCSSTransform() {
497
+ const e = this.elements;
498
+ return `matrix(${e[0]}, ${e[3]}, ${e[1]}, ${e[4]}, ${e[2]}, ${e[5]})`;
499
+ }
500
+ }
501
+ // 静态常量
502
+ /** 单位矩阵 */
503
+ Matrix3.IDENTITY = new Matrix3([
504
+ 1, 0, 0,
505
+ 0, 1, 0,
506
+ 0, 0, 1
507
+ ]);
508
+ /** 零矩阵 */
509
+ Matrix3.ZERO = new Matrix3([
510
+ 0, 0, 0,
511
+ 0, 0, 0,
512
+ 0, 0, 0
513
+ ]);
514
+ //# sourceMappingURL=Matrix3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Matrix3.js","sourceRoot":"","sources":["../src/Matrix3.ts"],"names":[],"mappings":"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AAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC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"}