@circuit-forge/eda-core 1.0.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.
- package/LICENSE +21 -0
- package/README.md +50 -0
- package/dist/erc/checker.d.ts +15 -0
- package/dist/erc/checker.d.ts.map +1 -0
- package/dist/erc/checker.js +267 -0
- package/dist/erc/checker.js.map +1 -0
- package/dist/erc/codes.d.ts +15 -0
- package/dist/erc/codes.d.ts.map +1 -0
- package/dist/erc/codes.js +48 -0
- package/dist/erc/codes.js.map +1 -0
- package/dist/erc/index.d.ts +7 -0
- package/dist/erc/index.d.ts.map +1 -0
- package/dist/erc/index.js +14 -0
- package/dist/erc/index.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/netlist/generator.d.ts +32 -0
- package/dist/netlist/generator.d.ts.map +1 -0
- package/dist/netlist/generator.js +183 -0
- package/dist/netlist/generator.js.map +1 -0
- package/dist/netlist/index.d.ts +6 -0
- package/dist/netlist/index.d.ts.map +1 -0
- package/dist/netlist/index.js +20 -0
- package/dist/netlist/index.js.map +1 -0
- package/dist/netlist/sanitizer.d.ts +45 -0
- package/dist/netlist/sanitizer.d.ts.map +1 -0
- package/dist/netlist/sanitizer.js +145 -0
- package/dist/netlist/sanitizer.js.map +1 -0
- package/dist/parser/csv-parser.d.ts +27 -0
- package/dist/parser/csv-parser.d.ts.map +1 -0
- package/dist/parser/csv-parser.js +198 -0
- package/dist/parser/csv-parser.js.map +1 -0
- package/dist/parser/index.d.ts +6 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +15 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/netlist-parser.d.ts +25 -0
- package/dist/parser/netlist-parser.d.ts.map +1 -0
- package/dist/parser/netlist-parser.js +260 -0
- package/dist/parser/netlist-parser.js.map +1 -0
- package/dist/schemas/analysis.schema.d.ts +298 -0
- package/dist/schemas/analysis.schema.d.ts.map +1 -0
- package/dist/schemas/analysis.schema.js +91 -0
- package/dist/schemas/analysis.schema.js.map +1 -0
- package/dist/schemas/circuit.schema.d.ts +405 -0
- package/dist/schemas/circuit.schema.d.ts.map +1 -0
- package/dist/schemas/circuit.schema.js +121 -0
- package/dist/schemas/circuit.schema.js.map +1 -0
- package/dist/types/analysis.d.ts +61 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +119 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/circuit.d.ts +94 -0
- package/dist/types/circuit.d.ts.map +1 -0
- package/dist/types/circuit.js +32 -0
- package/dist/types/circuit.js.map +1 -0
- package/dist/types/erc.d.ts +68 -0
- package/dist/types/erc.d.ts.map +1 -0
- package/dist/types/erc.js +33 -0
- package/dist/types/erc.js.map +1 -0
- package/dist/types/simulation.d.ts +61 -0
- package/dist/types/simulation.d.ts.map +1 -0
- package/dist/types/simulation.js +43 -0
- package/dist/types/simulation.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +14 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/unit-parser.d.ts +47 -0
- package/dist/utils/unit-parser.d.ts.map +1 -0
- package/dist/utils/unit-parser.js +229 -0
- package/dist/utils/unit-parser.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/types/analysis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,IAAI,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAuB9D;AAWD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA0CrD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBtD"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Analysis configuration types for SPICE simulations
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getAnalysisType = getAnalysisType;
|
|
7
|
+
exports.analysisToSpice = analysisToSpice;
|
|
8
|
+
exports.parseSpiceValue = parseSpiceValue;
|
|
9
|
+
exports.formatSpiceValue = formatSpiceValue;
|
|
10
|
+
/**
|
|
11
|
+
* Get the analysis type string
|
|
12
|
+
*/
|
|
13
|
+
function getAnalysisType(config) {
|
|
14
|
+
return config.type;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Convert analysis config to SPICE command
|
|
18
|
+
*/
|
|
19
|
+
function analysisToSpice(config) {
|
|
20
|
+
switch (config.type) {
|
|
21
|
+
case 'tran': {
|
|
22
|
+
const step = config.stepTime || calculateDefaultStep(config.stopTime);
|
|
23
|
+
const start = config.startTime || '0';
|
|
24
|
+
let cmd = `.tran ${step} ${config.stopTime} ${start}`;
|
|
25
|
+
if (config.maxStep) {
|
|
26
|
+
cmd += ` ${config.maxStep}`;
|
|
27
|
+
}
|
|
28
|
+
if (config.uic) {
|
|
29
|
+
cmd += ' uic';
|
|
30
|
+
}
|
|
31
|
+
return cmd;
|
|
32
|
+
}
|
|
33
|
+
case 'ac':
|
|
34
|
+
return `.ac ${config.variation} ${config.points} ${config.startFreq} ${config.stopFreq}`;
|
|
35
|
+
case 'dc':
|
|
36
|
+
return `.dc ${config.source} ${config.startVal} ${config.stopVal} ${config.increment}`;
|
|
37
|
+
case 'op':
|
|
38
|
+
return '.op';
|
|
39
|
+
default:
|
|
40
|
+
throw new Error(`Unknown analysis type: ${config.type}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Calculate a reasonable default step time based on stop time
|
|
45
|
+
*/
|
|
46
|
+
function calculateDefaultStep(stopTime) {
|
|
47
|
+
// Parse the stop time and return 1/1000th as default step
|
|
48
|
+
const parsed = parseSpiceValue(stopTime);
|
|
49
|
+
return formatSpiceValue(parsed / 1000);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Parse a SPICE value string to a number
|
|
53
|
+
*/
|
|
54
|
+
function parseSpiceValue(value) {
|
|
55
|
+
const suffixes = {
|
|
56
|
+
T: 1e12,
|
|
57
|
+
G: 1e9,
|
|
58
|
+
MEG: 1e6,
|
|
59
|
+
K: 1e3,
|
|
60
|
+
k: 1e3,
|
|
61
|
+
M: 1e-3, // Note: M alone usually means milli in SPICE
|
|
62
|
+
m: 1e-3,
|
|
63
|
+
U: 1e-6,
|
|
64
|
+
u: 1e-6,
|
|
65
|
+
N: 1e-9,
|
|
66
|
+
n: 1e-9,
|
|
67
|
+
P: 1e-12,
|
|
68
|
+
p: 1e-12,
|
|
69
|
+
F: 1e-15,
|
|
70
|
+
f: 1e-15,
|
|
71
|
+
};
|
|
72
|
+
const match = value.match(/^([+-]?\d*\.?\d+(?:[eE][+-]?\d+)?)\s*([a-zA-Z]*)/);
|
|
73
|
+
if (!match) {
|
|
74
|
+
throw new Error(`Invalid SPICE value: ${value}`);
|
|
75
|
+
}
|
|
76
|
+
const numericPart = parseFloat(match[1] || '0');
|
|
77
|
+
const suffix = match[2] || '';
|
|
78
|
+
if (suffix === '') {
|
|
79
|
+
return numericPart;
|
|
80
|
+
}
|
|
81
|
+
// Check for MEG first (case insensitive)
|
|
82
|
+
if (suffix.toUpperCase() === 'MEG') {
|
|
83
|
+
return numericPart * 1e6;
|
|
84
|
+
}
|
|
85
|
+
const multiplier = suffixes[suffix] || suffixes[suffix.toUpperCase()];
|
|
86
|
+
if (multiplier === undefined) {
|
|
87
|
+
throw new Error(`Unknown SPICE suffix: ${suffix}`);
|
|
88
|
+
}
|
|
89
|
+
return numericPart * multiplier;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Format a number as a SPICE value string
|
|
93
|
+
*/
|
|
94
|
+
function formatSpiceValue(value) {
|
|
95
|
+
const absValue = Math.abs(value);
|
|
96
|
+
const sign = value < 0 ? '-' : '';
|
|
97
|
+
if (absValue >= 1e12)
|
|
98
|
+
return `${sign}${absValue / 1e12}T`;
|
|
99
|
+
if (absValue >= 1e9)
|
|
100
|
+
return `${sign}${absValue / 1e9}G`;
|
|
101
|
+
if (absValue >= 1e6)
|
|
102
|
+
return `${sign}${absValue / 1e6}MEG`;
|
|
103
|
+
if (absValue >= 1e3)
|
|
104
|
+
return `${sign}${absValue / 1e3}k`;
|
|
105
|
+
if (absValue >= 1)
|
|
106
|
+
return `${sign}${absValue}`;
|
|
107
|
+
if (absValue >= 1e-3)
|
|
108
|
+
return `${sign}${absValue * 1e3}m`;
|
|
109
|
+
if (absValue >= 1e-6)
|
|
110
|
+
return `${sign}${absValue * 1e6}u`;
|
|
111
|
+
if (absValue >= 1e-9)
|
|
112
|
+
return `${sign}${absValue * 1e9}n`;
|
|
113
|
+
if (absValue >= 1e-12)
|
|
114
|
+
return `${sign}${absValue * 1e12}p`;
|
|
115
|
+
if (absValue >= 1e-15)
|
|
116
|
+
return `${sign}${absValue * 1e15}f`;
|
|
117
|
+
return `${sign}${absValue}`;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/types/analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circuit representation types
|
|
3
|
+
* These types define the canonical format for circuit data
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Main circuit JSON structure - the canonical representation
|
|
7
|
+
*/
|
|
8
|
+
export interface CircuitJson {
|
|
9
|
+
version: string;
|
|
10
|
+
components: Component[];
|
|
11
|
+
nets: Net[];
|
|
12
|
+
metadata?: CircuitMetadata;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Circuit metadata
|
|
16
|
+
*/
|
|
17
|
+
export interface CircuitMetadata {
|
|
18
|
+
name?: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
author?: string;
|
|
21
|
+
createdAt?: string;
|
|
22
|
+
updatedAt?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Component types supported in MVP
|
|
26
|
+
*/
|
|
27
|
+
export type ComponentType = 'resistor' | 'capacitor' | 'inductor' | 'voltage_source' | 'current_source' | 'diode' | 'ground';
|
|
28
|
+
/**
|
|
29
|
+
* Component definition
|
|
30
|
+
*/
|
|
31
|
+
export interface Component {
|
|
32
|
+
id: string;
|
|
33
|
+
type: ComponentType;
|
|
34
|
+
designator: string;
|
|
35
|
+
value?: string;
|
|
36
|
+
model?: string;
|
|
37
|
+
pins: PinConnection[];
|
|
38
|
+
properties?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Pin connection - maps a component pin to a net
|
|
42
|
+
*/
|
|
43
|
+
export interface PinConnection {
|
|
44
|
+
pinId: string;
|
|
45
|
+
netId: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Net (electrical connection)
|
|
49
|
+
*/
|
|
50
|
+
export interface Net {
|
|
51
|
+
id: string;
|
|
52
|
+
name: string;
|
|
53
|
+
isGround?: boolean;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* UI JSON structure for layout information
|
|
57
|
+
*/
|
|
58
|
+
export interface UiJson {
|
|
59
|
+
viewport?: Viewport;
|
|
60
|
+
positions?: Record<string, Position>;
|
|
61
|
+
wires?: Wire[];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Viewport state
|
|
65
|
+
*/
|
|
66
|
+
export interface Viewport {
|
|
67
|
+
x: number;
|
|
68
|
+
y: number;
|
|
69
|
+
zoom: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Component position
|
|
73
|
+
*/
|
|
74
|
+
export interface Position {
|
|
75
|
+
x: number;
|
|
76
|
+
y: number;
|
|
77
|
+
rotation?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Wire path for visual routing
|
|
81
|
+
*/
|
|
82
|
+
export interface Wire {
|
|
83
|
+
netId: string;
|
|
84
|
+
points: Position[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Component pin definitions for each component type
|
|
88
|
+
*/
|
|
89
|
+
export declare const COMPONENT_PINS: Record<ComponentType, string[]>;
|
|
90
|
+
/**
|
|
91
|
+
* SPICE element prefixes for each component type
|
|
92
|
+
*/
|
|
93
|
+
export declare const SPICE_PREFIXES: Record<ComponentType, string>;
|
|
94
|
+
//# sourceMappingURL=circuit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit.d.ts","sourceRoot":"","sources":["../../src/types/circuit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GACnB,UAAU,GACV,WAAW,GACX,UAAU,GACV,gBAAgB,GAChB,gBAAgB,GAChB,OAAO,GACP,QAAQ,CAAC;AAEf;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,GAAG;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAQ1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAQxD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Circuit representation types
|
|
4
|
+
* These types define the canonical format for circuit data
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SPICE_PREFIXES = exports.COMPONENT_PINS = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Component pin definitions for each component type
|
|
10
|
+
*/
|
|
11
|
+
exports.COMPONENT_PINS = {
|
|
12
|
+
resistor: ['1', '2'],
|
|
13
|
+
capacitor: ['1', '2'],
|
|
14
|
+
inductor: ['1', '2'],
|
|
15
|
+
voltage_source: ['+', '-'],
|
|
16
|
+
current_source: ['+', '-'],
|
|
17
|
+
diode: ['anode', 'cathode'],
|
|
18
|
+
ground: ['1'],
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* SPICE element prefixes for each component type
|
|
22
|
+
*/
|
|
23
|
+
exports.SPICE_PREFIXES = {
|
|
24
|
+
resistor: 'R',
|
|
25
|
+
capacitor: 'C',
|
|
26
|
+
inductor: 'L',
|
|
27
|
+
voltage_source: 'V',
|
|
28
|
+
current_source: 'I',
|
|
29
|
+
diode: 'D',
|
|
30
|
+
ground: '', // Ground is a special case (node 0)
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=circuit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit.js","sourceRoot":"","sources":["../../src/types/circuit.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAoGH;;GAEG;AACU,QAAA,cAAc,GAAoC;IAC3D,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACpB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACrB,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACpB,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IAC1B,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IAC1B,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;IAC3B,MAAM,EAAE,CAAC,GAAG,CAAC;CAChB,CAAC;AAEF;;GAEG;AACU,QAAA,cAAc,GAAkC;IACzD,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,GAAG;IACb,cAAc,EAAE,GAAG;IACnB,cAAc,EAAE,GAAG;IACnB,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,EAAE,EAAE,oCAAoC;CACnD,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ERC (Electrical Rule Check) Types
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* ERC error codes enumeration
|
|
6
|
+
*/
|
|
7
|
+
export declare enum ErcCode {
|
|
8
|
+
NO_GROUND = "ERC001",
|
|
9
|
+
MULTIPLE_GROUNDS = "ERC002",
|
|
10
|
+
FLOATING_NODE = "ERC010",
|
|
11
|
+
FLOATING_INPUT = "ERC011",
|
|
12
|
+
VOLTAGE_SOURCE_SHORT = "ERC020",
|
|
13
|
+
PARALLEL_VOLTAGE_SOURCES = "ERC021",
|
|
14
|
+
MISSING_VALUE = "ERC030",
|
|
15
|
+
INVALID_VALUE = "ERC031",
|
|
16
|
+
PIN_COUNT_MISMATCH = "ERC032",
|
|
17
|
+
MISSING_MODEL = "ERC033",
|
|
18
|
+
UNCONNECTED_NET = "ERC040",
|
|
19
|
+
NET_HAS_SINGLE_PIN = "ERC041",
|
|
20
|
+
EMPTY_CIRCUIT = "ERC050",
|
|
21
|
+
NO_ACTIVE_COMPONENTS = "ERC051"
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* ERC severity levels
|
|
25
|
+
*/
|
|
26
|
+
export type ErcSeverity = 'error' | 'warning' | 'info';
|
|
27
|
+
/**
|
|
28
|
+
* Individual ERC issue
|
|
29
|
+
*/
|
|
30
|
+
export interface ErcIssue {
|
|
31
|
+
/** ERC error code */
|
|
32
|
+
code: ErcCode;
|
|
33
|
+
/** Severity level */
|
|
34
|
+
severity: ErcSeverity;
|
|
35
|
+
/** Human-readable message */
|
|
36
|
+
message: string;
|
|
37
|
+
/** IDs of related components or nets */
|
|
38
|
+
relatedIds: string[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* ERC check result
|
|
42
|
+
*/
|
|
43
|
+
export interface ErcResult {
|
|
44
|
+
/** Whether the circuit passed all error-level checks */
|
|
45
|
+
passed: boolean;
|
|
46
|
+
/** List of all issues found */
|
|
47
|
+
issues: ErcIssue[];
|
|
48
|
+
/** Summary counts */
|
|
49
|
+
summary: {
|
|
50
|
+
errors: number;
|
|
51
|
+
warnings: number;
|
|
52
|
+
infos: number;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* ERC configuration options
|
|
57
|
+
*/
|
|
58
|
+
export interface ErcConfig {
|
|
59
|
+
/** Whether to check for floating nodes */
|
|
60
|
+
checkFloatingNodes?: boolean;
|
|
61
|
+
/** Whether to require a ground reference */
|
|
62
|
+
requireGround?: boolean;
|
|
63
|
+
/** Whether to check for missing models */
|
|
64
|
+
checkMissingModels?: boolean;
|
|
65
|
+
/** Custom severity overrides */
|
|
66
|
+
severityOverrides?: Partial<Record<ErcCode, ErcSeverity>>;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=erc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc.d.ts","sourceRoot":"","sources":["../../src/types/erc.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,oBAAY,OAAO;IAEf,SAAS,WAAW;IACpB,gBAAgB,WAAW;IAG3B,aAAa,WAAW;IACxB,cAAc,WAAW;IAGzB,oBAAoB,WAAW;IAC/B,wBAAwB,WAAW;IAGnC,aAAa,WAAW;IACxB,aAAa,WAAW;IACxB,kBAAkB,WAAW;IAC7B,aAAa,WAAW;IAGxB,eAAe,WAAW;IAC1B,kBAAkB,WAAW;IAG7B,aAAa,WAAW;IACxB,oBAAoB,WAAW;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,qBAAqB;IACrB,IAAI,EAAE,OAAO,CAAC;IAEd,qBAAqB;IACrB,QAAQ,EAAE,WAAW,CAAC;IAEtB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,wCAAwC;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,wDAAwD;IACxD,MAAM,EAAE,OAAO,CAAC;IAEhB,+BAA+B;IAC/B,MAAM,EAAE,QAAQ,EAAE,CAAC;IAEnB,qBAAqB;IACrB,OAAO,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;CAC7D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ERC (Electrical Rule Check) Types
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ErcCode = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* ERC error codes enumeration
|
|
9
|
+
*/
|
|
10
|
+
var ErcCode;
|
|
11
|
+
(function (ErcCode) {
|
|
12
|
+
// Ground related
|
|
13
|
+
ErcCode["NO_GROUND"] = "ERC001";
|
|
14
|
+
ErcCode["MULTIPLE_GROUNDS"] = "ERC002";
|
|
15
|
+
// Floating nodes
|
|
16
|
+
ErcCode["FLOATING_NODE"] = "ERC010";
|
|
17
|
+
ErcCode["FLOATING_INPUT"] = "ERC011";
|
|
18
|
+
// Short circuits
|
|
19
|
+
ErcCode["VOLTAGE_SOURCE_SHORT"] = "ERC020";
|
|
20
|
+
ErcCode["PARALLEL_VOLTAGE_SOURCES"] = "ERC021";
|
|
21
|
+
// Component issues
|
|
22
|
+
ErcCode["MISSING_VALUE"] = "ERC030";
|
|
23
|
+
ErcCode["INVALID_VALUE"] = "ERC031";
|
|
24
|
+
ErcCode["PIN_COUNT_MISMATCH"] = "ERC032";
|
|
25
|
+
ErcCode["MISSING_MODEL"] = "ERC033";
|
|
26
|
+
// Net issues
|
|
27
|
+
ErcCode["UNCONNECTED_NET"] = "ERC040";
|
|
28
|
+
ErcCode["NET_HAS_SINGLE_PIN"] = "ERC041";
|
|
29
|
+
// General
|
|
30
|
+
ErcCode["EMPTY_CIRCUIT"] = "ERC050";
|
|
31
|
+
ErcCode["NO_ACTIVE_COMPONENTS"] = "ERC051";
|
|
32
|
+
})(ErcCode || (exports.ErcCode = ErcCode = {}));
|
|
33
|
+
//# sourceMappingURL=erc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc.js","sourceRoot":"","sources":["../../src/types/erc.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH;;GAEG;AACH,IAAY,OA0BX;AA1BD,WAAY,OAAO;IACf,iBAAiB;IACjB,+BAAoB,CAAA;IACpB,sCAA2B,CAAA;IAE3B,iBAAiB;IACjB,mCAAwB,CAAA;IACxB,oCAAyB,CAAA;IAEzB,iBAAiB;IACjB,0CAA+B,CAAA;IAC/B,8CAAmC,CAAA;IAEnC,mBAAmB;IACnB,mCAAwB,CAAA;IACxB,mCAAwB,CAAA;IACxB,wCAA6B,CAAA;IAC7B,mCAAwB,CAAA;IAExB,aAAa;IACb,qCAA0B,CAAA;IAC1B,wCAA6B,CAAA;IAE7B,UAAU;IACV,mCAAwB,CAAA;IACxB,0CAA+B,CAAA;AACnC,CAAC,EA1BW,OAAO,uBAAP,OAAO,QA0BlB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simulation result types
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Complete simulation result structure
|
|
6
|
+
*/
|
|
7
|
+
export interface SimulationResult {
|
|
8
|
+
meta: ResultMeta;
|
|
9
|
+
series: DataSeries[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Result metadata
|
|
13
|
+
*/
|
|
14
|
+
export interface ResultMeta {
|
|
15
|
+
analysisType: string;
|
|
16
|
+
xLabel: string;
|
|
17
|
+
xUnit?: string;
|
|
18
|
+
pointsCount: number;
|
|
19
|
+
simulationTime?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Data series for a single signal
|
|
23
|
+
*/
|
|
24
|
+
export interface DataSeries {
|
|
25
|
+
name: string;
|
|
26
|
+
unit?: string;
|
|
27
|
+
points: DataPoint[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Single data point
|
|
31
|
+
*/
|
|
32
|
+
export interface DataPoint {
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Probe specification for output
|
|
38
|
+
*/
|
|
39
|
+
export interface Probe {
|
|
40
|
+
type: 'voltage' | 'current';
|
|
41
|
+
signal: string;
|
|
42
|
+
label?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse a probe string to determine type and signal
|
|
46
|
+
*/
|
|
47
|
+
export declare function parseProbe(probe: string): Probe;
|
|
48
|
+
/**
|
|
49
|
+
* Generate probe signals from circuit for default output
|
|
50
|
+
*/
|
|
51
|
+
export declare function generateDefaultProbes(nodeNames: string[]): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Metrics from simulation run
|
|
54
|
+
*/
|
|
55
|
+
export interface SimulationMetrics {
|
|
56
|
+
runtimeMs: number;
|
|
57
|
+
peakMemBytes?: number;
|
|
58
|
+
pointsCount: number;
|
|
59
|
+
dataSize?: number;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=simulation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulation.d.ts","sourceRoot":"","sources":["../../src/types/simulation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,UAAU,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IAClB,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAyB/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Simulation result types
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parseProbe = parseProbe;
|
|
7
|
+
exports.generateDefaultProbes = generateDefaultProbes;
|
|
8
|
+
/**
|
|
9
|
+
* Parse a probe string to determine type and signal
|
|
10
|
+
*/
|
|
11
|
+
function parseProbe(probe) {
|
|
12
|
+
const voltageMatch = probe.match(/^v\(([^)]+)\)$/i);
|
|
13
|
+
if (voltageMatch) {
|
|
14
|
+
return {
|
|
15
|
+
type: 'voltage',
|
|
16
|
+
signal: probe.toLowerCase(),
|
|
17
|
+
label: voltageMatch[1],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const currentMatch = probe.match(/^i\(([^)]+)\)$/i);
|
|
21
|
+
if (currentMatch) {
|
|
22
|
+
return {
|
|
23
|
+
type: 'current',
|
|
24
|
+
signal: probe.toLowerCase(),
|
|
25
|
+
label: currentMatch[1],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// Default to voltage if no prefix
|
|
29
|
+
return {
|
|
30
|
+
type: 'voltage',
|
|
31
|
+
signal: `v(${probe})`.toLowerCase(),
|
|
32
|
+
label: probe,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Generate probe signals from circuit for default output
|
|
37
|
+
*/
|
|
38
|
+
function generateDefaultProbes(nodeNames) {
|
|
39
|
+
return nodeNames
|
|
40
|
+
.filter((name) => name !== '0') // Exclude ground
|
|
41
|
+
.map((name) => `v(${name})`);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=simulation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulation.js","sourceRoot":"","sources":["../../src/types/simulation.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAkDH,gCAyBC;AAKD,sDAIC;AArCD;;GAEG;AACH,SAAgB,UAAU,CAAC,KAAa;IACpC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpD,IAAI,YAAY,EAAE,CAAC;QACf,OAAO;YACH,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE;YAC3B,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;SACzB,CAAC;IACN,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpD,IAAI,YAAY,EAAE,CAAC;QACf,OAAO;YACH,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE;YAC3B,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;SACzB,CAAC;IACN,CAAC;IAED,kCAAkC;IAClC,OAAO;QACH,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,KAAK,KAAK,GAAG,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,KAAK;KACf,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,SAAmB;IACrD,OAAO,SAAS;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,iBAAiB;SAChD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACH,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,KAAK,WAAW,GACnB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseFrequencyValue = exports.parseTimeValue = exports.valuesEqual = exports.normalizeValue = exports.formatSpiceValue = exports.parseSpiceValue = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Utils Module Exports
|
|
6
|
+
*/
|
|
7
|
+
var unit_parser_1 = require("./unit-parser");
|
|
8
|
+
Object.defineProperty(exports, "parseSpiceValue", { enumerable: true, get: function () { return unit_parser_1.parseSpiceValue; } });
|
|
9
|
+
Object.defineProperty(exports, "formatSpiceValue", { enumerable: true, get: function () { return unit_parser_1.formatSpiceValue; } });
|
|
10
|
+
Object.defineProperty(exports, "normalizeValue", { enumerable: true, get: function () { return unit_parser_1.normalizeValue; } });
|
|
11
|
+
Object.defineProperty(exports, "valuesEqual", { enumerable: true, get: function () { return unit_parser_1.valuesEqual; } });
|
|
12
|
+
Object.defineProperty(exports, "parseTimeValue", { enumerable: true, get: function () { return unit_parser_1.parseTimeValue; } });
|
|
13
|
+
Object.defineProperty(exports, "parseFrequencyValue", { enumerable: true, get: function () { return unit_parser_1.parseFrequencyValue; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,6CAQuB;AAPnB,8GAAA,eAAe,OAAA;AACf,+GAAA,gBAAgB,OAAA;AAChB,6GAAA,cAAc,OAAA;AACd,0GAAA,WAAW,OAAA;AACX,6GAAA,cAAc,OAAA;AACd,kHAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPICE Value Unit Parser
|
|
3
|
+
* Handles parsing and formatting of SPICE-style values with suffixes
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parse result
|
|
7
|
+
*/
|
|
8
|
+
export interface ParsedValue {
|
|
9
|
+
value: number;
|
|
10
|
+
unit?: string;
|
|
11
|
+
original: string;
|
|
12
|
+
isValid: boolean;
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Parse a SPICE-style value string to a number
|
|
17
|
+
* Supports suffixes like K, MEG, M, U, N, P, F
|
|
18
|
+
*
|
|
19
|
+
* Examples:
|
|
20
|
+
* - "1K" -> 1000
|
|
21
|
+
* - "10MEG" -> 10000000
|
|
22
|
+
* - "100n" -> 0.0000001
|
|
23
|
+
* - "1.5u" -> 0.0000015
|
|
24
|
+
* - "47pF" -> 4.7e-11 (with unit 'F')
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseSpiceValue(input: string): ParsedValue;
|
|
27
|
+
/**
|
|
28
|
+
* Format a number as a SPICE value string
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatSpiceValue(value: number, unit?: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Normalize a value to base units
|
|
33
|
+
*/
|
|
34
|
+
export declare function normalizeValue(input: string): number;
|
|
35
|
+
/**
|
|
36
|
+
* Compare two SPICE values for equality (within tolerance)
|
|
37
|
+
*/
|
|
38
|
+
export declare function valuesEqual(a: string, b: string, tolerance?: number): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Parse time value (handles s, ms, us, ns, ps)
|
|
41
|
+
*/
|
|
42
|
+
export declare function parseTimeValue(input: string): number;
|
|
43
|
+
/**
|
|
44
|
+
* Parse frequency value (handles Hz, kHz, MHz, GHz)
|
|
45
|
+
*/
|
|
46
|
+
export declare function parseFrequencyValue(input: string): number;
|
|
47
|
+
//# sourceMappingURL=unit-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unit-parser.d.ts","sourceRoot":"","sources":["../../src/utils/unit-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4CH;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CA0E1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAoDrE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,OAAO,CAgBnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD"}
|