@tscircuit/core 0.0.1153 → 0.0.1155
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/dist/index.d.ts +15 -1
- package/dist/index.js +146 -23
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -64,6 +64,7 @@ type Obstacle = {
|
|
|
64
64
|
obstacleId?: string;
|
|
65
65
|
type: "rect";
|
|
66
66
|
layers: string[];
|
|
67
|
+
zLayers?: number[];
|
|
67
68
|
center: {
|
|
68
69
|
x: number;
|
|
69
70
|
y: number;
|
|
@@ -71,6 +72,7 @@ type Obstacle = {
|
|
|
71
72
|
width: number;
|
|
72
73
|
height: number;
|
|
73
74
|
connectedTo: string[];
|
|
75
|
+
isCopperPour?: boolean;
|
|
74
76
|
netIsAssignable?: boolean;
|
|
75
77
|
offBoardConnectsTo?: string[];
|
|
76
78
|
};
|
|
@@ -950,6 +952,7 @@ declare class Trace extends PrimitiveComponent<typeof traceProps> implements Tra
|
|
|
950
952
|
name: "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6";
|
|
951
953
|
} | undefined;
|
|
952
954
|
}>, z.ZodString]>, "many">, "many">>;
|
|
955
|
+
routingPhaseIndex: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
953
956
|
pcbStraightLine: z.ZodOptional<z.ZodBoolean>;
|
|
954
957
|
schDisplayLabel: z.ZodOptional<z.ZodString>;
|
|
955
958
|
schStroke: z.ZodOptional<z.ZodString>;
|
|
@@ -972,6 +975,7 @@ declare class Trace extends PrimitiveComponent<typeof traceProps> implements Tra
|
|
|
972
975
|
width?: number | undefined;
|
|
973
976
|
maxLength?: number | undefined;
|
|
974
977
|
connectsTo?: string | string[] | undefined;
|
|
978
|
+
routingPhaseIndex?: number | null | undefined;
|
|
975
979
|
schematicRouteHints?: {
|
|
976
980
|
x: number;
|
|
977
981
|
y: number;
|
|
@@ -1011,6 +1015,7 @@ declare class Trace extends PrimitiveComponent<typeof traceProps> implements Tra
|
|
|
1011
1015
|
width?: string | number | undefined;
|
|
1012
1016
|
maxLength?: string | number | undefined;
|
|
1013
1017
|
connectsTo?: string | string[] | undefined;
|
|
1018
|
+
routingPhaseIndex?: number | null | undefined;
|
|
1014
1019
|
schematicRouteHints?: {
|
|
1015
1020
|
x: string | number;
|
|
1016
1021
|
y: string | number;
|
|
@@ -1206,6 +1211,7 @@ declare class Trace extends PrimitiveComponent<typeof traceProps> implements Tra
|
|
|
1206
1211
|
name: "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6";
|
|
1207
1212
|
} | undefined;
|
|
1208
1213
|
}>, z.ZodString]>, "many">, "many">>;
|
|
1214
|
+
routingPhaseIndex: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1209
1215
|
pcbStraightLine: z.ZodOptional<z.ZodBoolean>;
|
|
1210
1216
|
schDisplayLabel: z.ZodOptional<z.ZodString>;
|
|
1211
1217
|
schStroke: z.ZodOptional<z.ZodString>;
|
|
@@ -1236,6 +1242,7 @@ declare class Trace extends PrimitiveComponent<typeof traceProps> implements Tra
|
|
|
1236
1242
|
width?: number | undefined;
|
|
1237
1243
|
maxLength?: number | undefined;
|
|
1238
1244
|
connectsTo?: string | string[] | undefined;
|
|
1245
|
+
routingPhaseIndex?: number | null | undefined;
|
|
1239
1246
|
schematicRouteHints?: {
|
|
1240
1247
|
x: number;
|
|
1241
1248
|
y: number;
|
|
@@ -1278,6 +1285,7 @@ declare class Trace extends PrimitiveComponent<typeof traceProps> implements Tra
|
|
|
1278
1285
|
width?: string | number | undefined;
|
|
1279
1286
|
maxLength?: string | number | undefined;
|
|
1280
1287
|
connectsTo?: string | string[] | undefined;
|
|
1288
|
+
routingPhaseIndex?: number | null | undefined;
|
|
1281
1289
|
schematicRouteHints?: {
|
|
1282
1290
|
x: string | number;
|
|
1283
1291
|
y: string | number;
|
|
@@ -82901,6 +82909,7 @@ declare class CopperPour extends PrimitiveComponent<typeof copperPourProps> {
|
|
|
82901
82909
|
name: "top" | "bottom" | "inner1" | "inner2" | "inner3" | "inner4" | "inner5" | "inner6";
|
|
82902
82910
|
}>;
|
|
82903
82911
|
connectsTo: zod.ZodString;
|
|
82912
|
+
unbroken: zod.ZodOptional<zod.ZodBoolean>;
|
|
82904
82913
|
padMargin: zod.ZodOptional<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>>;
|
|
82905
82914
|
traceMargin: zod.ZodOptional<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>>;
|
|
82906
82915
|
clearance: zod.ZodOptional<zod.ZodEffects<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, number, string | number>>;
|
|
@@ -82926,6 +82935,7 @@ declare class CopperPour extends PrimitiveComponent<typeof copperPourProps> {
|
|
|
82926
82935
|
x: number;
|
|
82927
82936
|
y: number;
|
|
82928
82937
|
}[] | undefined;
|
|
82938
|
+
unbroken?: boolean | undefined;
|
|
82929
82939
|
padMargin?: number | undefined;
|
|
82930
82940
|
traceMargin?: number | undefined;
|
|
82931
82941
|
clearance?: number | undefined;
|
|
@@ -82942,6 +82952,7 @@ declare class CopperPour extends PrimitiveComponent<typeof copperPourProps> {
|
|
|
82942
82952
|
y: string | number;
|
|
82943
82953
|
}[] | undefined;
|
|
82944
82954
|
coveredWithSolderMask?: boolean | undefined;
|
|
82955
|
+
unbroken?: boolean | undefined;
|
|
82945
82956
|
padMargin?: string | number | undefined;
|
|
82946
82957
|
traceMargin?: string | number | undefined;
|
|
82947
82958
|
clearance?: string | number | undefined;
|
|
@@ -151818,12 +151829,15 @@ declare const applyEditEvents: ({ circuitJson, editEvents, }: {
|
|
|
151818
151829
|
/**
|
|
151819
151830
|
* This function can only be called in the PcbTraceRender phase or later
|
|
151820
151831
|
*/
|
|
151821
|
-
declare const getSimpleRouteJsonFromCircuitJson: ({ db, circuitJson, subcircuit_id, minTraceWidth, nominalTraceWidth, }: {
|
|
151832
|
+
declare const getSimpleRouteJsonFromCircuitJson: ({ db, circuitJson, subcircuit_id, minTraceWidth, nominalTraceWidth, subcircuitComponent, }: {
|
|
151822
151833
|
db?: CircuitJsonUtilObjects;
|
|
151823
151834
|
circuitJson?: AnyCircuitElement[];
|
|
151824
151835
|
subcircuit_id?: string | null;
|
|
151825
151836
|
minTraceWidth?: number;
|
|
151826
151837
|
nominalTraceWidth?: number;
|
|
151838
|
+
subcircuitComponent?: {
|
|
151839
|
+
selectAll(selector: string): unknown[];
|
|
151840
|
+
};
|
|
151827
151841
|
}) => {
|
|
151828
151842
|
simpleRouteJson: SimpleRouteJson;
|
|
151829
151843
|
connMap: ConnectivityMap;
|
package/dist/index.js
CHANGED
|
@@ -13120,12 +13120,127 @@ import { su as su4 } from "@tscircuit/circuit-json-util";
|
|
|
13120
13120
|
import {
|
|
13121
13121
|
getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson3
|
|
13122
13122
|
} from "circuit-json-to-connectivity-map";
|
|
13123
|
+
|
|
13124
|
+
// lib/utils/autorouting/getUnbrokenCopperPourObstacles.ts
|
|
13125
|
+
var COPPER_POUR_RECT_HEIGHT = 0.5;
|
|
13126
|
+
var dedupeStrings = (values) => Array.from(new Set(values.filter((value) => Boolean(value))));
|
|
13127
|
+
var getLayerName = (layer) => typeof layer === "string" ? layer : layer.name;
|
|
13128
|
+
var createCopperPourObstacle = ({
|
|
13129
|
+
layer,
|
|
13130
|
+
connectedTo,
|
|
13131
|
+
center,
|
|
13132
|
+
width,
|
|
13133
|
+
height
|
|
13134
|
+
}) => ({
|
|
13135
|
+
type: "rect",
|
|
13136
|
+
layers: [layer],
|
|
13137
|
+
center,
|
|
13138
|
+
width,
|
|
13139
|
+
height,
|
|
13140
|
+
connectedTo,
|
|
13141
|
+
isCopperPour: true
|
|
13142
|
+
});
|
|
13143
|
+
var getCopperPourBoundary = ({
|
|
13144
|
+
outline,
|
|
13145
|
+
group,
|
|
13146
|
+
board
|
|
13147
|
+
}) => {
|
|
13148
|
+
if (outline && outline.length >= 3) return outline;
|
|
13149
|
+
if (group?.outline && group.outline.length >= 3) return group.outline;
|
|
13150
|
+
if (board?.outline && board.outline.length >= 3) return board.outline;
|
|
13151
|
+
return null;
|
|
13152
|
+
};
|
|
13153
|
+
var getCopperPourBoundsRect = ({
|
|
13154
|
+
group,
|
|
13155
|
+
board
|
|
13156
|
+
}) => {
|
|
13157
|
+
if (group?.width && group.height) {
|
|
13158
|
+
return {
|
|
13159
|
+
center: group.center,
|
|
13160
|
+
width: group.width,
|
|
13161
|
+
height: group.height
|
|
13162
|
+
};
|
|
13163
|
+
}
|
|
13164
|
+
if (board?.width && board.height) {
|
|
13165
|
+
return {
|
|
13166
|
+
center: board.center,
|
|
13167
|
+
width: board.width,
|
|
13168
|
+
height: board.height
|
|
13169
|
+
};
|
|
13170
|
+
}
|
|
13171
|
+
return null;
|
|
13172
|
+
};
|
|
13173
|
+
var getCopperPourConnectedTo = (net, connMap) => dedupeStrings([
|
|
13174
|
+
net.source_net_id,
|
|
13175
|
+
net.subcircuit_connectivity_map_key,
|
|
13176
|
+
net.source_net_id ? connMap.getNetConnectedToId(net.source_net_id) : null
|
|
13177
|
+
]);
|
|
13178
|
+
var getUnbrokenCopperPourObstacles = ({
|
|
13179
|
+
connMap,
|
|
13180
|
+
subcircuitComponent,
|
|
13181
|
+
board,
|
|
13182
|
+
group
|
|
13183
|
+
}) => {
|
|
13184
|
+
if (!subcircuitComponent) return [];
|
|
13185
|
+
const obstacles = [];
|
|
13186
|
+
const copperPours = subcircuitComponent.selectAll(
|
|
13187
|
+
"copperpour"
|
|
13188
|
+
);
|
|
13189
|
+
for (const copperPour of copperPours) {
|
|
13190
|
+
const props = copperPour._parsedProps;
|
|
13191
|
+
if (!props.unbroken) continue;
|
|
13192
|
+
const net = copperPour.getSubcircuit().selectOne(props.connectsTo);
|
|
13193
|
+
if (!net?.source_net_id) continue;
|
|
13194
|
+
const layer = getLayerName(props.layer);
|
|
13195
|
+
const connectedTo = getCopperPourConnectedTo(net, connMap);
|
|
13196
|
+
if (connectedTo.length === 0) continue;
|
|
13197
|
+
const boundary = getCopperPourBoundary({
|
|
13198
|
+
outline: props.outline,
|
|
13199
|
+
group,
|
|
13200
|
+
board
|
|
13201
|
+
});
|
|
13202
|
+
if (boundary) {
|
|
13203
|
+
const rects = fillPolygonWithRects(boundary, {
|
|
13204
|
+
rectHeight: COPPER_POUR_RECT_HEIGHT
|
|
13205
|
+
});
|
|
13206
|
+
if (rects.length > 0) {
|
|
13207
|
+
obstacles.push(
|
|
13208
|
+
...rects.map(
|
|
13209
|
+
(rect) => createCopperPourObstacle({
|
|
13210
|
+
layer,
|
|
13211
|
+
connectedTo,
|
|
13212
|
+
center: rect.center,
|
|
13213
|
+
width: rect.width,
|
|
13214
|
+
height: rect.height
|
|
13215
|
+
})
|
|
13216
|
+
)
|
|
13217
|
+
);
|
|
13218
|
+
continue;
|
|
13219
|
+
}
|
|
13220
|
+
}
|
|
13221
|
+
const boundsRect = getCopperPourBoundsRect({ group, board });
|
|
13222
|
+
if (!boundsRect) continue;
|
|
13223
|
+
obstacles.push(
|
|
13224
|
+
createCopperPourObstacle({
|
|
13225
|
+
layer,
|
|
13226
|
+
connectedTo,
|
|
13227
|
+
center: boundsRect.center,
|
|
13228
|
+
width: boundsRect.width,
|
|
13229
|
+
height: boundsRect.height
|
|
13230
|
+
})
|
|
13231
|
+
);
|
|
13232
|
+
}
|
|
13233
|
+
return obstacles;
|
|
13234
|
+
};
|
|
13235
|
+
|
|
13236
|
+
// lib/utils/autorouting/getSimpleRouteJsonFromCircuitJson.ts
|
|
13123
13237
|
var getSimpleRouteJsonFromCircuitJson = ({
|
|
13124
13238
|
db,
|
|
13125
13239
|
circuitJson,
|
|
13126
13240
|
subcircuit_id,
|
|
13127
13241
|
minTraceWidth = 0.1,
|
|
13128
|
-
nominalTraceWidth
|
|
13242
|
+
nominalTraceWidth,
|
|
13243
|
+
subcircuitComponent
|
|
13129
13244
|
}) => {
|
|
13130
13245
|
if (!db && circuitJson) {
|
|
13131
13246
|
db = su4(circuitJson);
|
|
@@ -13161,6 +13276,7 @@ var getSimpleRouteJsonFromCircuitJson = ({
|
|
|
13161
13276
|
board = db.pcb_board.list()[0];
|
|
13162
13277
|
}
|
|
13163
13278
|
db = su4(subcircuitElements);
|
|
13279
|
+
const pcbGroup = subcircuit_id ? db.pcb_group.getWhere({ subcircuit_id }) : void 0;
|
|
13164
13280
|
const connMap = getFullConnectivityMapFromCircuitJson3(subcircuitElements);
|
|
13165
13281
|
const obstacles = getObstaclesFromCircuitJson(
|
|
13166
13282
|
[
|
|
@@ -13177,6 +13293,14 @@ var getSimpleRouteJsonFromCircuitJson = ({
|
|
|
13177
13293
|
),
|
|
13178
13294
|
connMap
|
|
13179
13295
|
);
|
|
13296
|
+
obstacles.push(
|
|
13297
|
+
...getUnbrokenCopperPourObstacles({
|
|
13298
|
+
connMap,
|
|
13299
|
+
subcircuitComponent,
|
|
13300
|
+
board,
|
|
13301
|
+
group: pcbGroup
|
|
13302
|
+
})
|
|
13303
|
+
);
|
|
13180
13304
|
for (const obstacle of obstacles) {
|
|
13181
13305
|
const additionalIds = obstacle.connectedTo.flatMap(
|
|
13182
13306
|
(id) => connMap.getIdsConnectedToNet(id)
|
|
@@ -13255,22 +13379,19 @@ var getSimpleRouteJsonFromCircuitJson = ({
|
|
|
13255
13379
|
maxY: Math.max(...allPoints.map((p) => p.y)) + 1
|
|
13256
13380
|
};
|
|
13257
13381
|
}
|
|
13258
|
-
if (
|
|
13259
|
-
const
|
|
13260
|
-
|
|
13261
|
-
|
|
13262
|
-
|
|
13263
|
-
|
|
13264
|
-
|
|
13265
|
-
|
|
13266
|
-
|
|
13267
|
-
bounds
|
|
13268
|
-
|
|
13269
|
-
|
|
13270
|
-
|
|
13271
|
-
maxY: Math.max(bounds.maxY, groupBounds.maxY)
|
|
13272
|
-
};
|
|
13273
|
-
}
|
|
13382
|
+
if (pcbGroup?.width && pcbGroup.height) {
|
|
13383
|
+
const groupBounds = {
|
|
13384
|
+
minX: pcbGroup.center.x - pcbGroup.width / 2,
|
|
13385
|
+
maxX: pcbGroup.center.x + pcbGroup.width / 2,
|
|
13386
|
+
minY: pcbGroup.center.y - pcbGroup.height / 2,
|
|
13387
|
+
maxY: pcbGroup.center.y + pcbGroup.height / 2
|
|
13388
|
+
};
|
|
13389
|
+
bounds = {
|
|
13390
|
+
minX: Math.min(bounds.minX, groupBounds.minX),
|
|
13391
|
+
maxX: Math.max(bounds.maxX, groupBounds.maxX),
|
|
13392
|
+
minY: Math.min(bounds.minY, groupBounds.minY),
|
|
13393
|
+
maxY: Math.max(bounds.maxY, groupBounds.maxY)
|
|
13394
|
+
};
|
|
13274
13395
|
}
|
|
13275
13396
|
const routedTraceIds = new Set(
|
|
13276
13397
|
db.pcb_trace.list().map((t) => t.source_trace_id).filter((id) => Boolean(id))
|
|
@@ -17760,7 +17881,8 @@ var Group6 = class extends NormalComponent3 {
|
|
|
17760
17881
|
db,
|
|
17761
17882
|
minTraceWidth: this.props.autorouter?.minTraceWidth ?? 0.15,
|
|
17762
17883
|
nominalTraceWidth: this.props.nominalTraceWidth,
|
|
17763
|
-
subcircuit_id: this.subcircuit_id
|
|
17884
|
+
subcircuit_id: this.subcircuit_id,
|
|
17885
|
+
subcircuitComponent: this
|
|
17764
17886
|
}).simpleRouteJson,
|
|
17765
17887
|
subcircuit_id: this.subcircuit_id
|
|
17766
17888
|
}),
|
|
@@ -17865,7 +17987,8 @@ var Group6 = class extends NormalComponent3 {
|
|
|
17865
17987
|
db,
|
|
17866
17988
|
minTraceWidth: this.props.autorouter?.minTraceWidth ?? 0.15,
|
|
17867
17989
|
nominalTraceWidth: this.props.nominalTraceWidth,
|
|
17868
|
-
subcircuit_id: this.subcircuit_id
|
|
17990
|
+
subcircuit_id: this.subcircuit_id,
|
|
17991
|
+
subcircuitComponent: this
|
|
17869
17992
|
});
|
|
17870
17993
|
if (isAutoJumperPreset) {
|
|
17871
17994
|
simpleRouteJson.allowJumpers = true;
|
|
@@ -19153,7 +19276,7 @@ import { identity as identity5 } from "transformation-matrix";
|
|
|
19153
19276
|
var package_default = {
|
|
19154
19277
|
name: "@tscircuit/core",
|
|
19155
19278
|
type: "module",
|
|
19156
|
-
version: "0.0.
|
|
19279
|
+
version: "0.0.1154",
|
|
19157
19280
|
types: "dist/index.d.ts",
|
|
19158
19281
|
main: "dist/index.js",
|
|
19159
19282
|
module: "dist/index.js",
|
|
@@ -19185,12 +19308,12 @@ var package_default = {
|
|
|
19185
19308
|
"@biomejs/biome": "^1.8.3",
|
|
19186
19309
|
"@resvg/resvg-js": "^2.6.2",
|
|
19187
19310
|
"@tscircuit/alphabet": "0.0.25",
|
|
19188
|
-
"@tscircuit/capacity-autorouter": "^0.0.
|
|
19311
|
+
"@tscircuit/capacity-autorouter": "^0.0.425",
|
|
19189
19312
|
"@tscircuit/checks": "0.0.116",
|
|
19190
19313
|
"@tscircuit/circuit-json-util": "^0.0.92",
|
|
19191
19314
|
"@tscircuit/common": "^0.0.20",
|
|
19192
19315
|
"@tscircuit/copper-pour-solver": "^0.0.20",
|
|
19193
|
-
"@tscircuit/footprinter": "^0.0.
|
|
19316
|
+
"@tscircuit/footprinter": "^0.0.349",
|
|
19194
19317
|
"@tscircuit/infer-cable-insertion-point": "^0.0.2",
|
|
19195
19318
|
"@tscircuit/infgrid-ijump-astar": "^0.0.35",
|
|
19196
19319
|
"@tscircuit/log-soup": "^1.0.2",
|
|
@@ -19198,7 +19321,7 @@ var package_default = {
|
|
|
19198
19321
|
"@tscircuit/math-utils": "^0.0.36",
|
|
19199
19322
|
"@tscircuit/miniflex": "^0.0.4",
|
|
19200
19323
|
"@tscircuit/ngspice-spice-engine": "^0.0.8",
|
|
19201
|
-
"@tscircuit/props": "^0.0.
|
|
19324
|
+
"@tscircuit/props": "^0.0.504",
|
|
19202
19325
|
"@tscircuit/schematic-match-adapt": "^0.0.16",
|
|
19203
19326
|
"@tscircuit/schematic-trace-solver": "^v0.0.45",
|
|
19204
19327
|
"@tscircuit/solver-utils": "^0.0.3",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tscircuit/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.1155",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
"@biomejs/biome": "^1.8.3",
|
|
34
34
|
"@resvg/resvg-js": "^2.6.2",
|
|
35
35
|
"@tscircuit/alphabet": "0.0.25",
|
|
36
|
-
"@tscircuit/capacity-autorouter": "^0.0.
|
|
36
|
+
"@tscircuit/capacity-autorouter": "^0.0.425",
|
|
37
37
|
"@tscircuit/checks": "0.0.116",
|
|
38
38
|
"@tscircuit/circuit-json-util": "^0.0.92",
|
|
39
39
|
"@tscircuit/common": "^0.0.20",
|
|
40
40
|
"@tscircuit/copper-pour-solver": "^0.0.20",
|
|
41
|
-
"@tscircuit/footprinter": "^0.0.
|
|
41
|
+
"@tscircuit/footprinter": "^0.0.349",
|
|
42
42
|
"@tscircuit/infer-cable-insertion-point": "^0.0.2",
|
|
43
43
|
"@tscircuit/infgrid-ijump-astar": "^0.0.35",
|
|
44
44
|
"@tscircuit/log-soup": "^1.0.2",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@tscircuit/math-utils": "^0.0.36",
|
|
47
47
|
"@tscircuit/miniflex": "^0.0.4",
|
|
48
48
|
"@tscircuit/ngspice-spice-engine": "^0.0.8",
|
|
49
|
-
"@tscircuit/props": "^0.0.
|
|
49
|
+
"@tscircuit/props": "^0.0.504",
|
|
50
50
|
"@tscircuit/schematic-match-adapt": "^0.0.16",
|
|
51
51
|
"@tscircuit/schematic-trace-solver": "^v0.0.45",
|
|
52
52
|
"@tscircuit/solver-utils": "^0.0.3",
|