@shiftleftpt/sbd-toe-mcp 0.1.0 → 0.2.16
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.
- package/.env.example +0 -3
- package/README.md +136 -254
- package/dist/config.js +0 -3
- package/dist/config.js.map +1 -1
- package/dist/types.d.ts +0 -3
- package/package.json +18 -2
- package/dist/backend/semantic-index-gateway.test.d.ts +0 -1
- package/dist/backend/semantic-index-gateway.test.js +0 -384
- package/dist/backend/semantic-index-gateway.test.js.map +0 -1
- package/dist/bootstrap/checkout-backend.d.ts +0 -31
- package/dist/bootstrap/checkout-backend.js +0 -136
- package/dist/bootstrap/checkout-backend.js.map +0 -1
- package/dist/bootstrap/checkout-backend.test.d.ts +0 -1
- package/dist/bootstrap/checkout-backend.test.js +0 -158
- package/dist/bootstrap/checkout-backend.test.js.map +0 -1
- package/dist/bootstrap/release-checkout.d.ts +0 -8
- package/dist/bootstrap/release-checkout.js +0 -168
- package/dist/bootstrap/release-checkout.js.map +0 -1
- package/dist/bootstrap/release-checkout.test.d.ts +0 -1
- package/dist/bootstrap/release-checkout.test.js +0 -137
- package/dist/bootstrap/release-checkout.test.js.map +0 -1
- package/dist/resources/sbd-toe-resources.test.d.ts +0 -1
- package/dist/resources/sbd-toe-resources.test.js +0 -134
- package/dist/resources/sbd-toe-resources.test.js.map +0 -1
- package/dist/test-utils.d.ts +0 -153
- package/dist/test-utils.js +0 -176
- package/dist/test-utils.js.map +0 -1
- package/dist/tools/generate-document.test.d.ts +0 -1
- package/dist/tools/generate-document.test.js +0 -189
- package/dist/tools/generate-document.test.js.map +0 -1
- package/dist/tools/map-review-scope.test.d.ts +0 -1
- package/dist/tools/map-review-scope.test.js +0 -204
- package/dist/tools/map-review-scope.test.js.map +0 -1
- package/dist/tools/plan-repo-governance.test.d.ts +0 -1
- package/dist/tools/plan-repo-governance.test.js +0 -237
- package/dist/tools/plan-repo-governance.test.js.map +0 -1
- package/dist/tools/structured-tools.test.d.ts +0 -1
- package/dist/tools/structured-tools.test.js +0 -459
- package/dist/tools/structured-tools.test.js.map +0 -1
- package/dist/validators/ai-disclosure.test.d.ts +0 -1
- package/dist/validators/ai-disclosure.test.js +0 -244
- package/dist/validators/ai-disclosure.test.js.map +0 -1
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { extractDisclosure, validateDisclosure, validateAIDisclosure, ALLOWED_PURPOSES, } from './ai-disclosure.js';
|
|
3
|
-
describe('AI Disclosure Validator', () => {
|
|
4
|
-
describe('YAML Frontmatter Parsing', () => {
|
|
5
|
-
it('should parse valid YAML frontmatter', () => {
|
|
6
|
-
const content = `---
|
|
7
|
-
ai_assisted: true
|
|
8
|
-
model: Claude Haiku 4.5
|
|
9
|
-
date: 2026-03-24
|
|
10
|
-
purpose: governance-doc
|
|
11
|
-
---
|
|
12
|
-
# Content here`;
|
|
13
|
-
const disclosure = extractDisclosure(content);
|
|
14
|
-
expect(disclosure).not.toBeNull();
|
|
15
|
-
expect(disclosure?.ai_assisted).toBe(true);
|
|
16
|
-
expect(disclosure?.model).toBe('Claude Haiku 4.5');
|
|
17
|
-
expect(disclosure?.date).toBe('2026-03-24');
|
|
18
|
-
expect(disclosure?.purpose).toBe('governance-doc');
|
|
19
|
-
});
|
|
20
|
-
it('should parse YAML with optional fields', () => {
|
|
21
|
-
const content = `---
|
|
22
|
-
ai_assisted: true
|
|
23
|
-
model: Claude 3.5 Sonnet
|
|
24
|
-
date: 2026-01-10
|
|
25
|
-
purpose: generated-code
|
|
26
|
-
reasoning: Auto-generated from template
|
|
27
|
-
review_status: pending-human-review
|
|
28
|
-
---
|
|
29
|
-
Code...`;
|
|
30
|
-
const disclosure = extractDisclosure(content);
|
|
31
|
-
expect(disclosure?.reasoning).toBe('Auto-generated from template');
|
|
32
|
-
expect(disclosure?.review_status).toBe('pending-human-review');
|
|
33
|
-
});
|
|
34
|
-
it('should handle YAML with quoted strings', () => {
|
|
35
|
-
const content = `---
|
|
36
|
-
ai_assisted: true
|
|
37
|
-
model: "Claude Haiku 4.5 (pt-BR)"
|
|
38
|
-
date: "2026-03-24"
|
|
39
|
-
purpose: "governance-doc"
|
|
40
|
-
---
|
|
41
|
-
Content`;
|
|
42
|
-
const disclosure = extractDisclosure(content);
|
|
43
|
-
expect(disclosure?.model).toBe('Claude Haiku 4.5 (pt-BR)');
|
|
44
|
-
});
|
|
45
|
-
it('should ignore YAML comments', () => {
|
|
46
|
-
const content = `---
|
|
47
|
-
# This is a comment
|
|
48
|
-
ai_assisted: true
|
|
49
|
-
model: Claude Haiku 4.5
|
|
50
|
-
date: 2026-03-24
|
|
51
|
-
purpose: test-plan
|
|
52
|
-
# Another comment
|
|
53
|
-
---
|
|
54
|
-
Content`;
|
|
55
|
-
const disclosure = extractDisclosure(content);
|
|
56
|
-
expect(disclosure?.purpose).toBe('test-plan');
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
describe('HTML Comment Section Parsing', () => {
|
|
60
|
-
it('should parse HTML comment disclosure', () => {
|
|
61
|
-
const content = `<!-- AI-ASSISTED: true, MODEL: Claude Haiku 4.5, DATE: 2026-03-24, PURPOSE: governance-doc -->
|
|
62
|
-
# Content here`;
|
|
63
|
-
const disclosure = extractDisclosure(content);
|
|
64
|
-
expect(disclosure?.ai_assisted).toBe(true);
|
|
65
|
-
expect(disclosure?.model).toBe('Claude Haiku 4.5');
|
|
66
|
-
expect(disclosure?.date).toBe('2026-03-24');
|
|
67
|
-
expect(disclosure?.purpose).toBe('governance-doc');
|
|
68
|
-
});
|
|
69
|
-
it('should handle HTML comment with special characters', () => {
|
|
70
|
-
const content = `<!-- AI-ASSISTED: true, MODEL: Claude Haiku 4.5 (pt-BR), DATE: 2026-03-24, PURPOSE: governance-doc + compliance -->
|
|
71
|
-
Content`;
|
|
72
|
-
const disclosure = extractDisclosure(content);
|
|
73
|
-
expect(disclosure?.model).toContain('Claude Haiku');
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
describe('Field Validation', () => {
|
|
77
|
-
it('should reject disclosure without AI_ASSISTED true', () => {
|
|
78
|
-
const raw = {
|
|
79
|
-
ai_assisted: false,
|
|
80
|
-
model: 'Claude',
|
|
81
|
-
date: '2026-03-24',
|
|
82
|
-
purpose: 'test-plan',
|
|
83
|
-
};
|
|
84
|
-
expect(() => validateDisclosure(raw)).toThrow('AI_ASSISTED must be true');
|
|
85
|
-
});
|
|
86
|
-
it('should reject disclosure without MODEL', () => {
|
|
87
|
-
const raw = {
|
|
88
|
-
ai_assisted: true,
|
|
89
|
-
date: '2026-03-24',
|
|
90
|
-
purpose: 'test-plan',
|
|
91
|
-
};
|
|
92
|
-
expect(() => validateDisclosure(raw)).toThrow('MODEL is required');
|
|
93
|
-
});
|
|
94
|
-
it('should reject disclosure with empty MODEL', () => {
|
|
95
|
-
const raw = {
|
|
96
|
-
ai_assisted: true,
|
|
97
|
-
model: ' ',
|
|
98
|
-
date: '2026-03-24',
|
|
99
|
-
purpose: 'test-plan',
|
|
100
|
-
};
|
|
101
|
-
expect(() => validateDisclosure(raw)).toThrow('MODEL cannot be empty');
|
|
102
|
-
});
|
|
103
|
-
it('should reject disclosure without DATE', () => {
|
|
104
|
-
const raw = {
|
|
105
|
-
ai_assisted: true,
|
|
106
|
-
model: 'Claude',
|
|
107
|
-
purpose: 'test-plan',
|
|
108
|
-
};
|
|
109
|
-
expect(() => validateDisclosure(raw)).toThrow('DATE is required');
|
|
110
|
-
});
|
|
111
|
-
it('should reject invalid DATE format', () => {
|
|
112
|
-
const raw = {
|
|
113
|
-
ai_assisted: true,
|
|
114
|
-
model: 'Claude',
|
|
115
|
-
date: '2026/03/24',
|
|
116
|
-
purpose: 'test-plan',
|
|
117
|
-
};
|
|
118
|
-
expect(() => validateDisclosure(raw)).toThrow('DATE must be in YYYY-MM-DD format');
|
|
119
|
-
});
|
|
120
|
-
it('should reject disclosure without PURPOSE', () => {
|
|
121
|
-
const raw = {
|
|
122
|
-
ai_assisted: true,
|
|
123
|
-
model: 'Claude',
|
|
124
|
-
date: '2026-03-24',
|
|
125
|
-
};
|
|
126
|
-
expect(() => validateDisclosure(raw)).toThrow('PURPOSE is required');
|
|
127
|
-
});
|
|
128
|
-
it('should reject PURPOSE not in allowlist', () => {
|
|
129
|
-
const raw = {
|
|
130
|
-
ai_assisted: true,
|
|
131
|
-
model: 'Claude',
|
|
132
|
-
date: '2026-03-24',
|
|
133
|
-
purpose: 'invalid-purpose',
|
|
134
|
-
};
|
|
135
|
-
expect(() => validateDisclosure(raw)).toThrow('PURPOSE must be one of');
|
|
136
|
-
});
|
|
137
|
-
it('should accept all allowed PURPOSE values', () => {
|
|
138
|
-
for (const purpose of ALLOWED_PURPOSES) {
|
|
139
|
-
const raw = {
|
|
140
|
-
ai_assisted: true,
|
|
141
|
-
model: 'Claude',
|
|
142
|
-
date: '2026-03-24',
|
|
143
|
-
purpose,
|
|
144
|
-
};
|
|
145
|
-
const result = validateDisclosure(raw);
|
|
146
|
-
expect(result.purpose).toBe(purpose);
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
describe('Full Document Validation', () => {
|
|
151
|
-
it('should validate complete document with YAML disclosure', () => {
|
|
152
|
-
const content = `---
|
|
153
|
-
ai_assisted: true
|
|
154
|
-
model: Claude Haiku 4.5
|
|
155
|
-
date: 2026-03-24
|
|
156
|
-
purpose: governance-doc
|
|
157
|
-
---
|
|
158
|
-
# Document Title
|
|
159
|
-
This is the content.`;
|
|
160
|
-
const disclosure = validateAIDisclosure(content);
|
|
161
|
-
expect(disclosure.ai_assisted).toBe(true);
|
|
162
|
-
expect(disclosure.model).toBe('Claude Haiku 4.5');
|
|
163
|
-
expect(disclosure.date).toBe('2026-03-24');
|
|
164
|
-
expect(disclosure.purpose).toBe('governance-doc');
|
|
165
|
-
});
|
|
166
|
-
it('should validate complete document with HTML comment disclosure', () => {
|
|
167
|
-
const content = `<!-- AI-ASSISTED: true, MODEL: Claude Haiku 4.5, DATE: 2026-03-24, PURPOSE: test-plan -->
|
|
168
|
-
# Test Plan
|
|
169
|
-
This is a test plan.`;
|
|
170
|
-
const disclosure = validateAIDisclosure(content);
|
|
171
|
-
expect(disclosure.purpose).toBe('test-plan');
|
|
172
|
-
});
|
|
173
|
-
it('should throw on missing disclosure', () => {
|
|
174
|
-
const content = `# Content without disclosure
|
|
175
|
-
This document has no AI disclosure.`;
|
|
176
|
-
expect(() => validateAIDisclosure(content)).toThrow('No AI disclosure found in document header');
|
|
177
|
-
});
|
|
178
|
-
it('should throw on malformed disclosure', () => {
|
|
179
|
-
const content = `---
|
|
180
|
-
ai_assisted: true
|
|
181
|
-
model:
|
|
182
|
-
date: 2026-03-24
|
|
183
|
-
purpose: test-plan
|
|
184
|
-
---
|
|
185
|
-
Content`;
|
|
186
|
-
expect(() => validateAIDisclosure(content)).toThrow('MODEL is required');
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe('Edge Cases', () => {
|
|
190
|
-
it('should handle YAML with extra whitespace', () => {
|
|
191
|
-
const content = `---
|
|
192
|
-
ai_assisted: true
|
|
193
|
-
model: Claude Haiku 4.5
|
|
194
|
-
date: 2026-03-24
|
|
195
|
-
purpose: test-plan
|
|
196
|
-
---
|
|
197
|
-
Content`;
|
|
198
|
-
const disclosure = extractDisclosure(content);
|
|
199
|
-
expect(disclosure?.model).toBe('Claude Haiku 4.5');
|
|
200
|
-
});
|
|
201
|
-
it('should handle non-existent disclosure gracefully', () => {
|
|
202
|
-
const content = 'Just plain text without any disclosure markers.';
|
|
203
|
-
const disclosure = extractDisclosure(content);
|
|
204
|
-
expect(disclosure).toBeNull();
|
|
205
|
-
});
|
|
206
|
-
it('should reject invalid dates', () => {
|
|
207
|
-
const raw = {
|
|
208
|
-
ai_assisted: true,
|
|
209
|
-
model: 'Claude',
|
|
210
|
-
date: '2026-13-45', // Invalid month and day
|
|
211
|
-
purpose: 'test-plan',
|
|
212
|
-
};
|
|
213
|
-
expect(() => validateDisclosure(raw)).toThrow('DATE must be in YYYY-MM-DD format');
|
|
214
|
-
});
|
|
215
|
-
it('should handle unicode and special characters in MODEL', () => {
|
|
216
|
-
const raw = {
|
|
217
|
-
ai_assisted: true,
|
|
218
|
-
model: 'Claude Haiku 4.5 (pt-BR) — v2.0',
|
|
219
|
-
date: '2026-03-24',
|
|
220
|
-
purpose: 'documentation',
|
|
221
|
-
};
|
|
222
|
-
const result = validateDisclosure(raw);
|
|
223
|
-
expect(result.model).toContain('pt-BR');
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
describe('Return Type Validation', () => {
|
|
227
|
-
it('should return properly typed AIDisclosure object', () => {
|
|
228
|
-
const raw = {
|
|
229
|
-
ai_assisted: true,
|
|
230
|
-
model: 'Claude',
|
|
231
|
-
date: '2026-03-24',
|
|
232
|
-
purpose: 'test-plan',
|
|
233
|
-
};
|
|
234
|
-
const result = validateDisclosure(raw);
|
|
235
|
-
expect(result).toHaveProperty('ai_assisted');
|
|
236
|
-
expect(result).toHaveProperty('model');
|
|
237
|
-
expect(result).toHaveProperty('date');
|
|
238
|
-
expect(result).toHaveProperty('purpose');
|
|
239
|
-
expect(typeof result.ai_assisted).toBe('boolean');
|
|
240
|
-
expect(typeof result.model).toBe('string');
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
//# sourceMappingURL=ai-disclosure.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-disclosure.test.js","sourceRoot":"","sources":["../../src/validators/ai-disclosure.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,GAEjB,MAAM,oBAAoB,CAAC;AAE5B,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG;;;;;;eAMP,CAAC;YAEV,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACnD,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,OAAO,GAAG;;;;;;;;QAQd,CAAC;YAEH,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YACnE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,OAAO,GAAG;;;;;;QAMd,CAAC;YAEH,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,OAAO,GAAG;;;;;;;;QAQd,CAAC;YAEH,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,OAAO,GAAG;eACP,CAAC;YAEV,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACnD,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,OAAO,GAAG;QACd,CAAC;YAEH,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,GAAG,GAAG;gBACV,WAAW,EAAE,KAAK;gBAClB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,WAAW;aACrB,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,GAAG,GAAG;gBACV,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,WAAW;aACrB,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,GAAG,GAAG;gBACV,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,WAAW;aACrB,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,GAAG,GAAG;gBACV,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,WAAW;aACrB,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,GAAG,GAAG;gBACV,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,WAAW;aACrB,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,GAAG,GAAG;gBACV,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,YAAY;aACnB,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,GAAG,GAAG;gBACV,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,iBAAiB;aAC3B,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;gBACvC,MAAM,GAAG,GAAG;oBACV,WAAW,EAAE,IAAI;oBACjB,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,YAAY;oBAClB,OAAO;iBACR,CAAC;gBACF,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;gBACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,OAAO,GAAG;;;;;;;qBAOD,CAAC;YAEhB,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,OAAO,GAAG;;qBAED,CAAC;YAEhB,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,OAAO,GAAG;oCACc,CAAC;YAE/B,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CACjD,2CAA2C,CAC5C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,OAAO,GAAG;;;;;;QAMd,CAAC;YAEH,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,OAAO,GAAG;;;;;;QAMd,CAAC;YAEH,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,OAAO,GAAG,iDAAiD,CAAC;YAClE,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,GAAG,GAAG;gBACV,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,YAAY,EAAE,wBAAwB;gBAC5C,OAAO,EAAE,WAAW;aACrB,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,GAAG,GAAG;gBACV,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,iCAAiC;gBACxC,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,eAAe;aACzB,CAAC;YACF,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,GAAG,GAAG;gBACV,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,WAAoB;aAC9B,CAAC;YACF,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClD,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|