@sparkleideas/swarm 3.0.0-alpha.7
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/MIGRATION.md +472 -0
- package/README.md +634 -0
- package/__tests__/consensus.test.ts +577 -0
- package/__tests__/coordinator.test.ts +501 -0
- package/__tests__/queen-coordinator.test.ts +1335 -0
- package/__tests__/topology.test.ts +621 -0
- package/package.json +32 -0
- package/src/agent-pool.ts +476 -0
- package/src/application/commands/create-task.command.ts +124 -0
- package/src/application/commands/spawn-agent.command.ts +122 -0
- package/src/application/index.ts +30 -0
- package/src/application/services/swarm-application-service.ts +200 -0
- package/src/attention-coordinator.ts +1000 -0
- package/src/consensus/byzantine.ts +431 -0
- package/src/consensus/gossip.ts +513 -0
- package/src/consensus/index.ts +267 -0
- package/src/consensus/raft.ts +443 -0
- package/src/coordination/agent-registry.ts +544 -0
- package/src/coordination/index.ts +23 -0
- package/src/coordination/swarm-hub.ts +776 -0
- package/src/coordination/task-orchestrator.ts +605 -0
- package/src/domain/entities/agent.d.ts +151 -0
- package/src/domain/entities/agent.d.ts.map +1 -0
- package/src/domain/entities/agent.js +280 -0
- package/src/domain/entities/agent.js.map +1 -0
- package/src/domain/entities/agent.ts +370 -0
- package/src/domain/entities/task.d.ts +133 -0
- package/src/domain/entities/task.d.ts.map +1 -0
- package/src/domain/entities/task.js +261 -0
- package/src/domain/entities/task.js.map +1 -0
- package/src/domain/entities/task.ts +319 -0
- package/src/domain/index.ts +41 -0
- package/src/domain/repositories/agent-repository.interface.d.ts +57 -0
- package/src/domain/repositories/agent-repository.interface.d.ts.map +1 -0
- package/src/domain/repositories/agent-repository.interface.js +9 -0
- package/src/domain/repositories/agent-repository.interface.js.map +1 -0
- package/src/domain/repositories/agent-repository.interface.ts +69 -0
- package/src/domain/repositories/task-repository.interface.d.ts +61 -0
- package/src/domain/repositories/task-repository.interface.d.ts.map +1 -0
- package/src/domain/repositories/task-repository.interface.js +9 -0
- package/src/domain/repositories/task-repository.interface.js.map +1 -0
- package/src/domain/repositories/task-repository.interface.ts +75 -0
- package/src/domain/services/coordination-service.ts +320 -0
- package/src/federation-hub.d.ts +284 -0
- package/src/federation-hub.d.ts.map +1 -0
- package/src/federation-hub.js +692 -0
- package/src/federation-hub.js.map +1 -0
- package/src/federation-hub.ts +979 -0
- package/src/index.ts +348 -0
- package/src/message-bus.ts +607 -0
- package/src/queen-coordinator.ts +2025 -0
- package/src/shared/events.ts +285 -0
- package/src/shared/types.ts +389 -0
- package/src/topology-manager.ts +656 -0
- package/src/types.ts +545 -0
- package/src/unified-coordinator.ts +1844 -0
- package/src/workers/index.ts +65 -0
- package/src/workers/worker-dispatch.d.ts +234 -0
- package/src/workers/worker-dispatch.d.ts.map +1 -0
- package/src/workers/worker-dispatch.js +842 -0
- package/src/workers/worker-dispatch.js.map +1 -0
- package/src/workers/worker-dispatch.ts +1076 -0
- package/tmp.json +0 -0
- package/tsconfig.json +9 -0
- package/vitest.config.ts +20 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Entity - Domain Layer
|
|
3
|
+
*
|
|
4
|
+
* Core domain entity representing an AI agent in the swarm.
|
|
5
|
+
* Implements DDD aggregate root pattern with encapsulated business logic.
|
|
6
|
+
*
|
|
7
|
+
* @module v3/swarm/domain/entities
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Agent status types
|
|
11
|
+
*/
|
|
12
|
+
export type AgentStatus = 'idle' | 'active' | 'busy' | 'paused' | 'terminated' | 'error';
|
|
13
|
+
/**
|
|
14
|
+
* Agent role types - following 15-agent hierarchy
|
|
15
|
+
*/
|
|
16
|
+
export type AgentRole = 'queen-coordinator' | 'security-architect' | 'security-auditor' | 'memory-specialist' | 'swarm-specialist' | 'integration-architect' | 'performance-engineer' | 'core-architect' | 'test-architect' | 'project-coordinator' | 'coder' | 'reviewer' | 'tester' | 'planner' | 'researcher' | 'custom';
|
|
17
|
+
/**
|
|
18
|
+
* Agent properties
|
|
19
|
+
*/
|
|
20
|
+
export interface AgentProps {
|
|
21
|
+
id?: string;
|
|
22
|
+
name: string;
|
|
23
|
+
role: AgentRole;
|
|
24
|
+
domain: string;
|
|
25
|
+
capabilities: string[];
|
|
26
|
+
status?: AgentStatus;
|
|
27
|
+
parentId?: string;
|
|
28
|
+
metadata?: Record<string, unknown>;
|
|
29
|
+
maxConcurrentTasks?: number;
|
|
30
|
+
currentTaskIds?: string[];
|
|
31
|
+
completedTaskCount?: number;
|
|
32
|
+
createdAt?: Date;
|
|
33
|
+
updatedAt?: Date;
|
|
34
|
+
lastActiveAt?: Date;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Agent - Aggregate Root
|
|
38
|
+
*
|
|
39
|
+
* Represents an individual agent with lifecycle management,
|
|
40
|
+
* task tracking, and hierarchical relationships.
|
|
41
|
+
*/
|
|
42
|
+
export declare class Agent {
|
|
43
|
+
private _id;
|
|
44
|
+
private _name;
|
|
45
|
+
private _role;
|
|
46
|
+
private _domain;
|
|
47
|
+
private _capabilities;
|
|
48
|
+
private _status;
|
|
49
|
+
private _parentId?;
|
|
50
|
+
private _metadata;
|
|
51
|
+
private _maxConcurrentTasks;
|
|
52
|
+
private _currentTaskIds;
|
|
53
|
+
private _completedTaskCount;
|
|
54
|
+
private _createdAt;
|
|
55
|
+
private _updatedAt;
|
|
56
|
+
private _lastActiveAt;
|
|
57
|
+
private constructor();
|
|
58
|
+
/**
|
|
59
|
+
* Factory method - Create new agent
|
|
60
|
+
*/
|
|
61
|
+
static create(props: AgentProps): Agent;
|
|
62
|
+
/**
|
|
63
|
+
* Factory method - Reconstruct from persistence
|
|
64
|
+
*/
|
|
65
|
+
static fromPersistence(props: AgentProps): Agent;
|
|
66
|
+
get id(): string;
|
|
67
|
+
get name(): string;
|
|
68
|
+
get role(): AgentRole;
|
|
69
|
+
get domain(): string;
|
|
70
|
+
get capabilities(): string[];
|
|
71
|
+
get status(): AgentStatus;
|
|
72
|
+
get parentId(): string | undefined;
|
|
73
|
+
get metadata(): Record<string, unknown>;
|
|
74
|
+
get maxConcurrentTasks(): number;
|
|
75
|
+
get currentTaskIds(): string[];
|
|
76
|
+
get currentTaskCount(): number;
|
|
77
|
+
get completedTaskCount(): number;
|
|
78
|
+
get createdAt(): Date;
|
|
79
|
+
get updatedAt(): Date;
|
|
80
|
+
get lastActiveAt(): Date;
|
|
81
|
+
/**
|
|
82
|
+
* Start the agent (transition to active)
|
|
83
|
+
*/
|
|
84
|
+
start(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Pause the agent
|
|
87
|
+
*/
|
|
88
|
+
pause(): void;
|
|
89
|
+
/**
|
|
90
|
+
* Resume paused agent
|
|
91
|
+
*/
|
|
92
|
+
resume(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Terminate the agent
|
|
95
|
+
*/
|
|
96
|
+
terminate(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Mark agent as having an error
|
|
99
|
+
*/
|
|
100
|
+
setError(errorMessage?: string): void;
|
|
101
|
+
/**
|
|
102
|
+
* Recover from error state
|
|
103
|
+
*/
|
|
104
|
+
recover(): void;
|
|
105
|
+
/**
|
|
106
|
+
* Assign a task to this agent
|
|
107
|
+
*/
|
|
108
|
+
assignTask(taskId: string): void;
|
|
109
|
+
/**
|
|
110
|
+
* Complete a task
|
|
111
|
+
*/
|
|
112
|
+
completeTask(taskId: string): void;
|
|
113
|
+
/**
|
|
114
|
+
* Check if agent can accept more tasks
|
|
115
|
+
*/
|
|
116
|
+
canAcceptTask(): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Check if agent has a specific capability
|
|
119
|
+
*/
|
|
120
|
+
hasCapability(capability: string): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Add a capability
|
|
123
|
+
*/
|
|
124
|
+
addCapability(capability: string): void;
|
|
125
|
+
/**
|
|
126
|
+
* Remove a capability
|
|
127
|
+
*/
|
|
128
|
+
removeCapability(capability: string): void;
|
|
129
|
+
/**
|
|
130
|
+
* Update metadata
|
|
131
|
+
*/
|
|
132
|
+
setMetadata(key: string, value: unknown): void;
|
|
133
|
+
/**
|
|
134
|
+
* Check if agent is a child of given parent
|
|
135
|
+
*/
|
|
136
|
+
isChildOf(parentId: string): boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Calculate agent utilization (0-1)
|
|
139
|
+
*/
|
|
140
|
+
getUtilization(): number;
|
|
141
|
+
/**
|
|
142
|
+
* Check if agent is available for work
|
|
143
|
+
*/
|
|
144
|
+
isAvailable(): boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Convert to plain object for persistence
|
|
147
|
+
*/
|
|
148
|
+
toPersistence(): Record<string, unknown>;
|
|
149
|
+
toJSON(): Record<string, unknown>;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Entity - Domain Layer
|
|
3
|
+
*
|
|
4
|
+
* Core domain entity representing an AI agent in the swarm.
|
|
5
|
+
* Implements DDD aggregate root pattern with encapsulated business logic.
|
|
6
|
+
*
|
|
7
|
+
* @module v3/swarm/domain/entities
|
|
8
|
+
*/
|
|
9
|
+
import { randomUUID } from 'crypto';
|
|
10
|
+
/**
|
|
11
|
+
* Agent - Aggregate Root
|
|
12
|
+
*
|
|
13
|
+
* Represents an individual agent with lifecycle management,
|
|
14
|
+
* task tracking, and hierarchical relationships.
|
|
15
|
+
*/
|
|
16
|
+
export class Agent {
|
|
17
|
+
_id;
|
|
18
|
+
_name;
|
|
19
|
+
_role;
|
|
20
|
+
_domain;
|
|
21
|
+
_capabilities;
|
|
22
|
+
_status;
|
|
23
|
+
_parentId;
|
|
24
|
+
_metadata;
|
|
25
|
+
_maxConcurrentTasks;
|
|
26
|
+
_currentTaskIds;
|
|
27
|
+
_completedTaskCount;
|
|
28
|
+
_createdAt;
|
|
29
|
+
_updatedAt;
|
|
30
|
+
_lastActiveAt;
|
|
31
|
+
constructor(props) {
|
|
32
|
+
const now = new Date();
|
|
33
|
+
this._id = props.id ?? randomUUID();
|
|
34
|
+
this._name = props.name;
|
|
35
|
+
this._role = props.role;
|
|
36
|
+
this._domain = props.domain;
|
|
37
|
+
this._capabilities = new Set(props.capabilities);
|
|
38
|
+
this._status = props.status ?? 'idle';
|
|
39
|
+
this._parentId = props.parentId;
|
|
40
|
+
this._metadata = props.metadata ?? {};
|
|
41
|
+
this._maxConcurrentTasks = props.maxConcurrentTasks ?? 3;
|
|
42
|
+
this._currentTaskIds = new Set(props.currentTaskIds ?? []);
|
|
43
|
+
this._completedTaskCount = props.completedTaskCount ?? 0;
|
|
44
|
+
this._createdAt = props.createdAt ?? now;
|
|
45
|
+
this._updatedAt = props.updatedAt ?? now;
|
|
46
|
+
this._lastActiveAt = props.lastActiveAt ?? now;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Factory method - Create new agent
|
|
50
|
+
*/
|
|
51
|
+
static create(props) {
|
|
52
|
+
return new Agent(props);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Factory method - Reconstruct from persistence
|
|
56
|
+
*/
|
|
57
|
+
static fromPersistence(props) {
|
|
58
|
+
return new Agent(props);
|
|
59
|
+
}
|
|
60
|
+
// Getters
|
|
61
|
+
get id() {
|
|
62
|
+
return this._id;
|
|
63
|
+
}
|
|
64
|
+
get name() {
|
|
65
|
+
return this._name;
|
|
66
|
+
}
|
|
67
|
+
get role() {
|
|
68
|
+
return this._role;
|
|
69
|
+
}
|
|
70
|
+
get domain() {
|
|
71
|
+
return this._domain;
|
|
72
|
+
}
|
|
73
|
+
get capabilities() {
|
|
74
|
+
return Array.from(this._capabilities);
|
|
75
|
+
}
|
|
76
|
+
get status() {
|
|
77
|
+
return this._status;
|
|
78
|
+
}
|
|
79
|
+
get parentId() {
|
|
80
|
+
return this._parentId;
|
|
81
|
+
}
|
|
82
|
+
get metadata() {
|
|
83
|
+
return { ...this._metadata };
|
|
84
|
+
}
|
|
85
|
+
get maxConcurrentTasks() {
|
|
86
|
+
return this._maxConcurrentTasks;
|
|
87
|
+
}
|
|
88
|
+
get currentTaskIds() {
|
|
89
|
+
return Array.from(this._currentTaskIds);
|
|
90
|
+
}
|
|
91
|
+
get currentTaskCount() {
|
|
92
|
+
return this._currentTaskIds.size;
|
|
93
|
+
}
|
|
94
|
+
get completedTaskCount() {
|
|
95
|
+
return this._completedTaskCount;
|
|
96
|
+
}
|
|
97
|
+
get createdAt() {
|
|
98
|
+
return new Date(this._createdAt);
|
|
99
|
+
}
|
|
100
|
+
get updatedAt() {
|
|
101
|
+
return new Date(this._updatedAt);
|
|
102
|
+
}
|
|
103
|
+
get lastActiveAt() {
|
|
104
|
+
return new Date(this._lastActiveAt);
|
|
105
|
+
}
|
|
106
|
+
// ============================================================================
|
|
107
|
+
// Business Logic Methods
|
|
108
|
+
// ============================================================================
|
|
109
|
+
/**
|
|
110
|
+
* Start the agent (transition to active)
|
|
111
|
+
*/
|
|
112
|
+
start() {
|
|
113
|
+
if (this._status === 'terminated') {
|
|
114
|
+
throw new Error('Cannot start terminated agent');
|
|
115
|
+
}
|
|
116
|
+
this._status = 'active';
|
|
117
|
+
this._lastActiveAt = new Date();
|
|
118
|
+
this._updatedAt = new Date();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Pause the agent
|
|
122
|
+
*/
|
|
123
|
+
pause() {
|
|
124
|
+
if (this._status !== 'active' && this._status !== 'busy') {
|
|
125
|
+
throw new Error('Can only pause active or busy agent');
|
|
126
|
+
}
|
|
127
|
+
this._status = 'paused';
|
|
128
|
+
this._updatedAt = new Date();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Resume paused agent
|
|
132
|
+
*/
|
|
133
|
+
resume() {
|
|
134
|
+
if (this._status !== 'paused') {
|
|
135
|
+
throw new Error('Can only resume paused agent');
|
|
136
|
+
}
|
|
137
|
+
this._status = this._currentTaskIds.size > 0 ? 'busy' : 'active';
|
|
138
|
+
this._lastActiveAt = new Date();
|
|
139
|
+
this._updatedAt = new Date();
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Terminate the agent
|
|
143
|
+
*/
|
|
144
|
+
terminate() {
|
|
145
|
+
this._status = 'terminated';
|
|
146
|
+
this._currentTaskIds.clear();
|
|
147
|
+
this._updatedAt = new Date();
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Mark agent as having an error
|
|
151
|
+
*/
|
|
152
|
+
setError(errorMessage) {
|
|
153
|
+
this._status = 'error';
|
|
154
|
+
if (errorMessage) {
|
|
155
|
+
this._metadata['lastError'] = errorMessage;
|
|
156
|
+
this._metadata['lastErrorAt'] = new Date().toISOString();
|
|
157
|
+
}
|
|
158
|
+
this._updatedAt = new Date();
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Recover from error state
|
|
162
|
+
*/
|
|
163
|
+
recover() {
|
|
164
|
+
if (this._status !== 'error') {
|
|
165
|
+
throw new Error('Can only recover from error state');
|
|
166
|
+
}
|
|
167
|
+
this._status = 'idle';
|
|
168
|
+
delete this._metadata['lastError'];
|
|
169
|
+
this._updatedAt = new Date();
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Assign a task to this agent
|
|
173
|
+
*/
|
|
174
|
+
assignTask(taskId) {
|
|
175
|
+
if (this._status === 'terminated') {
|
|
176
|
+
throw new Error('Cannot assign task to terminated agent');
|
|
177
|
+
}
|
|
178
|
+
if (this._currentTaskIds.size >= this._maxConcurrentTasks) {
|
|
179
|
+
throw new Error('Agent at maximum concurrent task capacity');
|
|
180
|
+
}
|
|
181
|
+
this._currentTaskIds.add(taskId);
|
|
182
|
+
this._status = 'busy';
|
|
183
|
+
this._lastActiveAt = new Date();
|
|
184
|
+
this._updatedAt = new Date();
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Complete a task
|
|
188
|
+
*/
|
|
189
|
+
completeTask(taskId) {
|
|
190
|
+
if (!this._currentTaskIds.has(taskId)) {
|
|
191
|
+
throw new Error(`Task ${taskId} not assigned to this agent`);
|
|
192
|
+
}
|
|
193
|
+
this._currentTaskIds.delete(taskId);
|
|
194
|
+
this._completedTaskCount++;
|
|
195
|
+
if (this._currentTaskIds.size === 0) {
|
|
196
|
+
this._status = 'active';
|
|
197
|
+
}
|
|
198
|
+
this._lastActiveAt = new Date();
|
|
199
|
+
this._updatedAt = new Date();
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Check if agent can accept more tasks
|
|
203
|
+
*/
|
|
204
|
+
canAcceptTask() {
|
|
205
|
+
return (this._status !== 'terminated' &&
|
|
206
|
+
this._status !== 'error' &&
|
|
207
|
+
this._status !== 'paused' &&
|
|
208
|
+
this._currentTaskIds.size < this._maxConcurrentTasks);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Check if agent has a specific capability
|
|
212
|
+
*/
|
|
213
|
+
hasCapability(capability) {
|
|
214
|
+
return this._capabilities.has(capability);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Add a capability
|
|
218
|
+
*/
|
|
219
|
+
addCapability(capability) {
|
|
220
|
+
this._capabilities.add(capability);
|
|
221
|
+
this._updatedAt = new Date();
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Remove a capability
|
|
225
|
+
*/
|
|
226
|
+
removeCapability(capability) {
|
|
227
|
+
this._capabilities.delete(capability);
|
|
228
|
+
this._updatedAt = new Date();
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Update metadata
|
|
232
|
+
*/
|
|
233
|
+
setMetadata(key, value) {
|
|
234
|
+
this._metadata[key] = value;
|
|
235
|
+
this._updatedAt = new Date();
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Check if agent is a child of given parent
|
|
239
|
+
*/
|
|
240
|
+
isChildOf(parentId) {
|
|
241
|
+
return this._parentId === parentId;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Calculate agent utilization (0-1)
|
|
245
|
+
*/
|
|
246
|
+
getUtilization() {
|
|
247
|
+
return this._currentTaskIds.size / this._maxConcurrentTasks;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Check if agent is available for work
|
|
251
|
+
*/
|
|
252
|
+
isAvailable() {
|
|
253
|
+
return this._status === 'idle' || (this._status === 'active' && this.canAcceptTask());
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Convert to plain object for persistence
|
|
257
|
+
*/
|
|
258
|
+
toPersistence() {
|
|
259
|
+
return {
|
|
260
|
+
id: this._id,
|
|
261
|
+
name: this._name,
|
|
262
|
+
role: this._role,
|
|
263
|
+
domain: this._domain,
|
|
264
|
+
capabilities: Array.from(this._capabilities),
|
|
265
|
+
status: this._status,
|
|
266
|
+
parentId: this._parentId,
|
|
267
|
+
metadata: this._metadata,
|
|
268
|
+
maxConcurrentTasks: this._maxConcurrentTasks,
|
|
269
|
+
currentTaskIds: Array.from(this._currentTaskIds),
|
|
270
|
+
completedTaskCount: this._completedTaskCount,
|
|
271
|
+
createdAt: this._createdAt.toISOString(),
|
|
272
|
+
updatedAt: this._updatedAt.toISOString(),
|
|
273
|
+
lastActiveAt: this._lastActiveAt.toISOString(),
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
toJSON() {
|
|
277
|
+
return this.toPersistence();
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["agent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAgDpC;;;;;GAKG;AACH,MAAM,OAAO,KAAK;IACR,GAAG,CAAS;IACZ,KAAK,CAAS;IACd,KAAK,CAAY;IACjB,OAAO,CAAS;IAChB,aAAa,CAAc;IAC3B,OAAO,CAAc;IACrB,SAAS,CAAU;IACnB,SAAS,CAA0B;IACnC,mBAAmB,CAAS;IAC5B,eAAe,CAAc;IAC7B,mBAAmB,CAAS;IAC5B,UAAU,CAAO;IACjB,UAAU,CAAO;IACjB,aAAa,CAAO;IAE5B,YAAoB,KAAiB;QACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,IAAI,GAAG,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,IAAI,GAAG,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,KAAiB;QAC7B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAiB;QACtC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;IACV,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAED,+EAA+E;IAC/E,yBAAyB;IACzB,+EAA+E;IAE/E;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,YAAqB;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;YAC3C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAc;QACvB,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc;QACzB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,6BAA6B,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,CACL,IAAI,CAAC,OAAO,KAAK,YAAY;YAC7B,IAAI,CAAC,OAAO,KAAK,OAAO;YACxB,IAAI,CAAC,OAAO,KAAK,QAAQ;YACzB,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,mBAAmB,CACrD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,UAAkB;QAC9B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,UAAkB;QAC9B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,UAAkB;QACjC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAW,EAAE,KAAc;QACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACxF,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;YAC5C,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,kBAAkB,EAAE,IAAI,CAAC,mBAAmB;YAC5C,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;YAChD,kBAAkB,EAAE,IAAI,CAAC,mBAAmB;YAC5C,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YACxC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YACxC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;SAC/C,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;CACF"}
|