github-issue-tower-defence-management 1.128.1 → 1.129.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 (25) hide show
  1. package/.github/workflows/console-ui.yml +1 -1
  2. package/.github/workflows/empty-format-test-job.yml +1 -1
  3. package/.github/workflows/format.yml +1 -1
  4. package/.github/workflows/publish.yml +1 -1
  5. package/.github/workflows/test.yml +1 -1
  6. package/CHANGELOG.md +7 -0
  7. package/README.md +3 -3
  8. package/bin/adapter/entry-points/console/ui-dist/assets/index-Dr5qin37.js +103 -0
  9. package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
  10. package/bin/domain/entities/WorkflowStatus.js +6 -1
  11. package/bin/domain/entities/WorkflowStatus.js.map +1 -1
  12. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js +1 -0
  13. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js.map +1 -1
  14. package/package.json +3 -3
  15. package/src/adapter/entry-points/console/ui-dist/assets/index-Dr5qin37.js +103 -0
  16. package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
  17. package/src/domain/entities/WorkflowStatus.ts +5 -0
  18. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.test.ts +92 -2
  19. package/src/domain/usecases/console/GenerateConsoleListsUseCase.test.ts +2 -0
  20. package/src/domain/usecases/console/GenerateConsoleListsUseCase.ts +1 -0
  21. package/types/domain/entities/WorkflowStatus.d.ts +1 -0
  22. package/types/domain/entities/WorkflowStatus.d.ts.map +1 -1
  23. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts.map +1 -1
  24. package/bin/adapter/entry-points/console/ui-dist/assets/index-CufymFM1.js +0 -103
  25. package/src/adapter/entry-points/console/ui-dist/assets/index-CufymFM1.js +0 -103
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>TDPM Console</title>
7
- <script type="module" crossorigin src="/assets/index-CufymFM1.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-Dr5qin37.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-N9M1qhkw.css">
9
9
  </head>
10
10
  <body>
@@ -6,6 +6,7 @@ export const PREPARATION_STATUS_NAME = 'Preparation';
6
6
  export const FAILED_PREPARATION_STATUS_NAME = 'Failed Preparation';
7
7
  export const AWAITING_QUALITY_CHECK_STATUS_NAME = 'Awaiting Quality Check';
8
8
  export const TODO_STATUS_NAME = 'Todo by human';
9
+ export const TODO_BY_AGENT_STATUS_NAME = 'Todo by agent';
9
10
  export const PC_TODO_STATUS_NAME = 'PC Todo';
10
11
  export const IN_TMUX_STATUS_NAME = 'In Tmux by human';
11
12
  export const IN_TMUX_BY_AGENT_STATUS_NAME = 'In Tmux by agent';
@@ -47,6 +48,10 @@ export const REQUIRED_WORKFLOW_STATUSES: WorkflowStatusDefinition[] = [
47
48
  name: TODO_STATUS_NAME,
48
49
  color: 'PINK',
49
50
  },
51
+ {
52
+ name: TODO_BY_AGENT_STATUS_NAME,
53
+ color: 'BLUE',
54
+ },
50
55
  {
51
56
  name: IN_TMUX_STATUS_NAME,
52
57
  color: 'RED',
@@ -19,6 +19,7 @@ import {
19
19
  PC_TODO_STATUS_NAME,
20
20
  PREPARATION_STATUS_NAME,
21
21
  REQUIRED_WORKFLOW_STATUSES,
22
+ TODO_BY_AGENT_STATUS_NAME,
22
23
  TODO_STATUS_NAME,
23
24
  } from '../entities/WorkflowStatus';
24
25
 
@@ -77,7 +78,7 @@ const buildIssue = (overrides: Partial<Issue>): Issue => ({
77
78
  });
78
79
 
79
80
  describe('SetupTowerDefenceProjectUseCase', () => {
80
- it('should define exactly the 10 required statuses in the documented order with the documented colors and no descriptions', () => {
81
+ it('should define exactly the 11 required statuses in the documented order with the documented colors and no descriptions', () => {
81
82
  expect(REQUIRED_WORKFLOW_STATUSES).toEqual([
82
83
  { name: DEFAULT_STATUS_NAME, color: 'ORANGE' },
83
84
  { name: AWAITING_WORKSPACE_STATUS_NAME, color: 'BLUE' },
@@ -85,6 +86,7 @@ describe('SetupTowerDefenceProjectUseCase', () => {
85
86
  { name: FAILED_PREPARATION_STATUS_NAME, color: 'RED' },
86
87
  { name: AWAITING_QUALITY_CHECK_STATUS_NAME, color: 'GREEN' },
87
88
  { name: TODO_STATUS_NAME, color: 'PINK' },
89
+ { name: TODO_BY_AGENT_STATUS_NAME, color: 'BLUE' },
88
90
  { name: IN_TMUX_STATUS_NAME, color: 'RED' },
89
91
  { name: IN_TMUX_BY_AGENT_STATUS_NAME, color: 'YELLOW' },
90
92
  { name: DONE_STATUS_NAME, color: 'PURPLE' },
@@ -253,6 +255,12 @@ describe('SetupTowerDefenceProjectUseCase', () => {
253
255
  color: 'PINK',
254
256
  description: '',
255
257
  },
258
+ {
259
+ id: null,
260
+ name: TODO_BY_AGENT_STATUS_NAME,
261
+ color: 'BLUE',
262
+ description: '',
263
+ },
256
264
  {
257
265
  id: null,
258
266
  name: IN_TMUX_STATUS_NAME,
@@ -324,6 +332,7 @@ describe('SetupTowerDefenceProjectUseCase', () => {
324
332
  FAILED_PREPARATION_STATUS_NAME,
325
333
  AWAITING_QUALITY_CHECK_STATUS_NAME,
326
334
  TODO_STATUS_NAME,
335
+ TODO_BY_AGENT_STATUS_NAME,
327
336
  IN_TMUX_STATUS_NAME,
328
337
  IN_TMUX_BY_AGENT_STATUS_NAME,
329
338
  DONE_STATUS_NAME,
@@ -432,12 +441,90 @@ describe('SetupTowerDefenceProjectUseCase', () => {
432
441
  const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
433
442
  const inTmuxEntry = payload.find((s) => s.name === IN_TMUX_STATUS_NAME);
434
443
  expect(inTmuxEntry).toBeDefined();
435
- expect(inTmuxEntry?.id).toBe('id-6');
444
+ expect(inTmuxEntry?.id).toBe('id-7');
436
445
  expect(payload.some((s) => s.name === LEGACY_IN_TMUX_STATUS_NAME)).toBe(
437
446
  false,
438
447
  );
439
448
  });
440
449
 
450
+ it('should create the "Todo by agent" status with blue color when it is missing', async () => {
451
+ const mockProjectRepository =
452
+ mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
453
+ const mockIssueRepository =
454
+ mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
455
+ const statuses = buildCanonicalStatuses().filter(
456
+ (s) => s.name !== TODO_BY_AGENT_STATUS_NAME,
457
+ );
458
+ const project = buildProject(statuses);
459
+ mockProjectRepository.getByUrl.mockResolvedValue(project);
460
+ mockProjectRepository.updateStatusList.mockResolvedValue([]);
461
+ mockIssueRepository.getAllIssues.mockResolvedValue({
462
+ project: mock<Project>(),
463
+ issues: [],
464
+ cacheUsed: false,
465
+ });
466
+
467
+ const useCase = new SetupTowerDefenceProjectUseCase(
468
+ mockProjectRepository,
469
+ mockIssueRepository,
470
+ );
471
+ await useCase.run({ projectUrl: project.url });
472
+
473
+ expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
474
+ const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
475
+ const todoByAgentEntry = payload.find(
476
+ (s) => s.name === TODO_BY_AGENT_STATUS_NAME,
477
+ );
478
+ expect(todoByAgentEntry).toBeDefined();
479
+ expect(todoByAgentEntry?.id).toBeNull();
480
+ expect(todoByAgentEntry?.color).toBe('BLUE');
481
+ const names = payload.map((s) => s.name);
482
+ expect(names.indexOf(TODO_BY_AGENT_STATUS_NAME)).toBe(
483
+ names.indexOf(TODO_STATUS_NAME) + 1,
484
+ );
485
+ });
486
+
487
+ it('should leave an already-present "Todo by agent" option unchanged by reusing its existing option ID', async () => {
488
+ const mockProjectRepository =
489
+ mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
490
+ const mockIssueRepository =
491
+ mock<Pick<IssueRepository, 'getAllIssues' | 'updateStatus'>>();
492
+ const statuses = buildCanonicalStatuses().map((s) => {
493
+ if (s.name === TODO_BY_AGENT_STATUS_NAME) {
494
+ return { ...s, id: 'preexisting-todo-agent-id' };
495
+ }
496
+ if (s.name === DEFAULT_STATUS_NAME) {
497
+ return { ...s, description: 'stale description' };
498
+ }
499
+ return s;
500
+ });
501
+ const project = buildProject(statuses);
502
+ mockProjectRepository.getByUrl.mockResolvedValue(project);
503
+ mockProjectRepository.updateStatusList.mockResolvedValue([]);
504
+ mockIssueRepository.getAllIssues.mockResolvedValue({
505
+ project: mock<Project>(),
506
+ issues: [],
507
+ cacheUsed: false,
508
+ });
509
+
510
+ const useCase = new SetupTowerDefenceProjectUseCase(
511
+ mockProjectRepository,
512
+ mockIssueRepository,
513
+ );
514
+ await useCase.run({ projectUrl: project.url });
515
+
516
+ expect(mockProjectRepository.updateStatusList).toHaveBeenCalledTimes(1);
517
+ const [, payload] = mockProjectRepository.updateStatusList.mock.calls[0];
518
+ const todoByAgentEntry = payload.find(
519
+ (s) => s.name === TODO_BY_AGENT_STATUS_NAME,
520
+ );
521
+ expect(todoByAgentEntry?.id).toBe('preexisting-todo-agent-id');
522
+ expect(todoByAgentEntry?.color).toBe('BLUE');
523
+ expect(
524
+ payload.filter((s) => s.name === TODO_BY_AGENT_STATUS_NAME),
525
+ ).toHaveLength(1);
526
+ });
527
+
441
528
  it('should create the "In Tmux by agent" status with yellow color when it is missing', async () => {
442
529
  const mockProjectRepository =
443
530
  mock<Pick<ProjectRepository, 'getByUrl' | 'updateStatusList'>>();
@@ -627,6 +714,7 @@ describe('SetupTowerDefenceProjectUseCase', () => {
627
714
  FAILED_PREPARATION_STATUS_NAME,
628
715
  AWAITING_QUALITY_CHECK_STATUS_NAME,
629
716
  TODO_STATUS_NAME,
717
+ TODO_BY_AGENT_STATUS_NAME,
630
718
  IN_TMUX_STATUS_NAME,
631
719
  IN_TMUX_BY_AGENT_STATUS_NAME,
632
720
  DONE_STATUS_NAME,
@@ -764,6 +852,7 @@ describe('SetupTowerDefenceProjectUseCase', () => {
764
852
  FAILED_PREPARATION_STATUS_NAME,
765
853
  AWAITING_QUALITY_CHECK_STATUS_NAME,
766
854
  TODO_STATUS_NAME,
855
+ TODO_BY_AGENT_STATUS_NAME,
767
856
  IN_TMUX_STATUS_NAME,
768
857
  IN_TMUX_BY_AGENT_STATUS_NAME,
769
858
  DONE_STATUS_NAME,
@@ -917,6 +1006,7 @@ describe('SetupTowerDefenceProjectUseCase', () => {
917
1006
  FAILED_PREPARATION_STATUS_NAME,
918
1007
  AWAITING_QUALITY_CHECK_STATUS_NAME,
919
1008
  TODO_STATUS_NAME,
1009
+ TODO_BY_AGENT_STATUS_NAME,
920
1010
  IN_TMUX_STATUS_NAME,
921
1011
  IN_TMUX_BY_AGENT_STATUS_NAME,
922
1012
  DONE_STATUS_NAME,
@@ -23,6 +23,7 @@ const STATUS_OPTIONS: FieldOption[] = [
23
23
  storyOption('st-failed', 'Failed Preparation', 'RED'),
24
24
  storyOption('st-aqc', 'Awaiting Quality Check', 'GREEN'),
25
25
  storyOption('st-todo', 'Todo by human', 'PINK'),
26
+ storyOption('st-todo-agent', 'Todo by agent', 'BLUE'),
26
27
  storyOption('st-tmux', 'In Tmux by human', 'RED'),
27
28
  storyOption('st-tmux-agent', 'In Tmux by agent', 'YELLOW'),
28
29
  storyOption('st-done', 'Done', 'PURPLE'),
@@ -430,6 +431,7 @@ describe('GenerateConsoleListsUseCase', () => {
430
431
  'Unread',
431
432
  'In Tmux by human',
432
433
  'In Tmux by agent',
434
+ 'Todo by agent',
433
435
  ]) {
434
436
  expect(names).not.toContain(excluded);
435
437
  }
@@ -146,6 +146,7 @@ export class GenerateConsoleListsUseCase {
146
146
  'unread',
147
147
  'in tmux by human',
148
148
  'in tmux by agent',
149
+ 'todo by agent',
149
150
  ],
150
151
  ),
151
152
  'todo-by-human': buildStatusTab(
@@ -5,6 +5,7 @@ export declare const PREPARATION_STATUS_NAME = "Preparation";
5
5
  export declare const FAILED_PREPARATION_STATUS_NAME = "Failed Preparation";
6
6
  export declare const AWAITING_QUALITY_CHECK_STATUS_NAME = "Awaiting Quality Check";
7
7
  export declare const TODO_STATUS_NAME = "Todo by human";
8
+ export declare const TODO_BY_AGENT_STATUS_NAME = "Todo by agent";
8
9
  export declare const PC_TODO_STATUS_NAME = "PC Todo";
9
10
  export declare const IN_TMUX_STATUS_NAME = "In Tmux by human";
10
11
  export declare const IN_TMUX_BY_AGENT_STATUS_NAME = "In Tmux by agent";
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowStatus.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/WorkflowStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,8BAA8B,uBAAuB,CAAC;AACnE,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AACrD,eAAO,MAAM,8BAA8B,uBAAuB,CAAC;AACnE,eAAO,MAAM,kCAAkC,2BAA2B,CAAC;AAC3E,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,4BAA4B,qBAAqB,CAAC;AAC/D,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAC9C,eAAO,MAAM,0BAA0B,YAAY,CAAC;AACpD,eAAO,MAAM,0CAA0C,4BAC5B,CAAC;AAE5B,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,wBAAwB,EAyChE,CAAC"}
1
+ {"version":3,"file":"WorkflowStatus.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/WorkflowStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,8BAA8B,uBAAuB,CAAC;AACnE,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AACrD,eAAO,MAAM,8BAA8B,uBAAuB,CAAC;AACnE,eAAO,MAAM,kCAAkC,2BAA2B,CAAC;AAC3E,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AACzD,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,4BAA4B,qBAAqB,CAAC;AAC/D,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAC9C,eAAO,MAAM,0BAA0B,YAAY,CAAC;AACpD,eAAO,MAAM,0CAA0C,4BAC5B,CAAC;AAE5B,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,wBAAwB,EA6ChE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateConsoleListsUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/console/GenerateConsoleListsUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAO9D,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IACrD,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,oBAAoB,GACpB,eAAe,CAAC;AAEpB,MAAM,MAAM,YAAY,GAAG;IACzB,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,GAAG,EAAE,gBAAgB,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,oBAAoB,EAAE,gBAAgB,CAAC;IACvC,eAAe,EAAE,gBAAgB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC,CAAC;AAIF,qBAAa,2BAA2B;IACtC,GAAG,GAAI,OAAO,yBAAyB,KAAG,YAAY,CA+FpD;IAEF,OAAO,CAAC,YAAY,CAKY;IAEhC,OAAO,CAAC,uBAAuB,CAS7B;IAEF,OAAO,CAAC,WAAW,CAiBhB;IAEH,OAAO,CAAC,iBAAiB,CAYjB;IAER,OAAO,CAAC,sBAAsB,CAQ5B;IAEF,OAAO,CAAC,sBAAsB,CAQ5B;IAEF,OAAO,CAAC,gBAAgB,CAetB;CACH"}
1
+ {"version":3,"file":"GenerateConsoleListsUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/console/GenerateConsoleListsUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAO9D,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IACrD,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,oBAAoB,GACpB,eAAe,CAAC;AAEpB,MAAM,MAAM,YAAY,GAAG;IACzB,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,GAAG,EAAE,gBAAgB,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,oBAAoB,EAAE,gBAAgB,CAAC;IACvC,eAAe,EAAE,gBAAgB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC,CAAC;AAIF,qBAAa,2BAA2B;IACtC,GAAG,GAAI,OAAO,yBAAyB,KAAG,YAAY,CAgGpD;IAEF,OAAO,CAAC,YAAY,CAKY;IAEhC,OAAO,CAAC,uBAAuB,CAS7B;IAEF,OAAO,CAAC,WAAW,CAiBhB;IAEH,OAAO,CAAC,iBAAiB,CAYjB;IAER,OAAO,CAAC,sBAAsB,CAQ5B;IAEF,OAAO,CAAC,sBAAsB,CAQ5B;IAEF,OAAO,CAAC,gBAAgB,CAetB;CACH"}