@tscircuit/schematic-trace-solver 0.0.146 → 0.0.148

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.
@@ -35,6 +35,7 @@ import { UnroutedTraceRecoverySolver } from "../UnroutedTraceRecoverySolver/Unro
35
35
  import { SameNetJunctionAlignmentSolver } from "../SameNetJunctionAlignmentSolver/SameNetJunctionAlignmentSolver"
36
36
  import { TraceElbowTransitionSimplificationSolver } from "../TraceElbowTransitionSimplificationSolver/TraceElbowTransitionSimplificationSolver"
37
37
  import { InlineNetLabelSolver } from "../InlineNetLabelSolver/InlineNetLabelSolver"
38
+ import { findPerpendicularPathCrossings } from "../TraceCleanupSolver/sub-solver/findIntersectionsWithObstacles"
38
39
 
39
40
  type PipelineStep<T extends new (...args: any[]) => BaseSolver> = {
40
41
  solverName: string
@@ -259,6 +260,61 @@ export class SchematicTracePipelineSolver extends BaseSolver {
259
260
  const prevSolverOutput =
260
261
  instance.traceElbowTransitionSimplificationSolver!.getOutput()
261
262
  const traces = prevSolverOutput.traces
263
+ const overlapShiftSolver = instance.traceOverlapShiftSolver!
264
+ const inlineLabelNetIds = new Set(
265
+ [
266
+ ...instance.inputProblem.directConnections,
267
+ ...instance.inputProblem.netConnections,
268
+ ]
269
+ .filter((connection) => connection.allowInlineNetLabel)
270
+ .map((connection) => connection.netId),
271
+ )
272
+ // An overlap shift can separate collinear inline-label traces by creating
273
+ // a new perpendicular crossing. Limit the extra untangle work to those
274
+ // newly introduced crossings so established routes remain stable.
275
+ const traceIdsInNewCrossingsAfterOverlapShift = new Set<string>()
276
+ for (
277
+ let traceIndex = 0;
278
+ traceIndex < overlapShiftSolver.inputTracePaths.length;
279
+ traceIndex++
280
+ ) {
281
+ const inputTrace = overlapShiftSolver.inputTracePaths[traceIndex]!
282
+ const shiftedTrace =
283
+ overlapShiftSolver.correctedTraceMap[inputTrace.mspPairId]!
284
+ for (
285
+ let otherTraceIndex = traceIndex + 1;
286
+ otherTraceIndex < overlapShiftSolver.inputTracePaths.length;
287
+ otherTraceIndex++
288
+ ) {
289
+ const otherInputTrace =
290
+ overlapShiftSolver.inputTracePaths[otherTraceIndex]!
291
+ if (inputTrace.globalConnNetId === otherInputTrace.globalConnNetId) {
292
+ continue
293
+ }
294
+ if (
295
+ !inlineLabelNetIds.has(inputTrace.userNetId ?? "") &&
296
+ !inlineLabelNetIds.has(otherInputTrace.userNetId ?? "")
297
+ ) {
298
+ continue
299
+ }
300
+ const otherShiftedTrace =
301
+ overlapShiftSolver.correctedTraceMap[otherInputTrace.mspPairId]!
302
+ const crossingCountBeforeShift = findPerpendicularPathCrossings(
303
+ inputTrace.tracePath,
304
+ otherInputTrace.tracePath,
305
+ ).length
306
+ const crossingCountAfterShift = findPerpendicularPathCrossings(
307
+ shiftedTrace.tracePath,
308
+ otherShiftedTrace.tracePath,
309
+ ).length
310
+ if (crossingCountAfterShift > crossingCountBeforeShift) {
311
+ traceIdsInNewCrossingsAfterOverlapShift.add(inputTrace.mspPairId)
312
+ traceIdsInNewCrossingsAfterOverlapShift.add(
313
+ otherInputTrace.mspPairId,
314
+ )
315
+ }
316
+ }
317
+ }
262
318
 
263
319
  const labelMergingOutput =
264
320
  instance.traceLabelOverlapAvoidanceSolver!.labelMergingSolver!.getOutput()
@@ -270,6 +326,7 @@ export class SchematicTracePipelineSolver extends BaseSolver {
270
326
  allLabelPlacements: labelMergingOutput.netLabelPlacements,
271
327
  mergedLabelNetIdMap: labelMergingOutput.mergedLabelNetIdMap,
272
328
  paddingBuffer: 0.1,
329
+ eligibleTraceIds: traceIdsInNewCrossingsAfterOverlapShift,
273
330
  },
274
331
  ]
275
332
  }),
@@ -8,6 +8,7 @@ import type { InputProblem } from "lib/types/InputProblem"
8
8
  import { dedupeOrientations } from "lib/utils/dedupeOrientations"
9
9
  import type { FacingDirection } from "lib/utils/dir"
10
10
  import { getOrientationConstraint } from "lib/utils/getOrientationConstraint"
11
+ import { getNetLabelWidthForConnection } from "lib/utils/getNetLabelWidthForConnection"
11
12
  import {
12
13
  EPS,
13
14
  getManhattanDistance,
@@ -310,20 +311,12 @@ const getNetLabelWidth = (
310
311
  inputProblem: InputProblem,
311
312
  label: NetLabelPlacement,
312
313
  ) => {
313
- const ncWidthByNetId = inputProblem.netConnections.find(
314
- (connection) => connection.netId === label.netId,
315
- )?.netLabelWidth
316
- if (ncWidthByNetId !== undefined) return ncWidthByNetId
317
-
318
- const dcWidth = inputProblem.directConnections.find((dc) =>
319
- dc.pinIds.some((pid) => label.pinIds.includes(pid)),
320
- )?.netLabelWidth
321
- if (dcWidth !== undefined) return dcWidth
322
-
323
- const ncWidthByPinId = inputProblem.netConnections.find((nc) =>
324
- nc.pinIds.some((pid) => label.pinIds.includes(pid)),
325
- )?.netLabelWidth
326
- if (ncWidthByPinId !== undefined) return ncWidthByPinId
314
+ const configuredWidth = getNetLabelWidthForConnection({
315
+ inputProblem,
316
+ netId: label.netId,
317
+ pinIds: label.pinIds,
318
+ })
319
+ if (configuredWidth !== undefined) return configuredWidth
327
320
 
328
321
  if (label.orientation === "y+" || label.orientation === "y-") {
329
322
  return label.height
@@ -12,6 +12,7 @@ import {
12
12
  } from "./findIntersectionsWithObstacles"
13
13
  import {
14
14
  generateLShapeRerouteCandidates,
15
+ generatePerimeterCornerTraceDetours,
15
16
  generatePerpendicularTraceDetours,
16
17
  } from "./generateLShapeRerouteCandidates"
17
18
  import { isPathColliding, type CollisionInfo } from "./isPathColliding"
@@ -53,6 +54,7 @@ export interface UntangleTraceSubsolverInput {
53
54
  allLabelPlacements: NetLabelPlacement[]
54
55
  mergedLabelNetIdMap: Record<string, Set<string>>
55
56
  paddingBuffer: number
57
+ eligibleTraceIds?: ReadonlySet<string>
56
58
  }
57
59
 
58
60
  /**
@@ -127,7 +129,7 @@ export class UntangleTraceSubsolver extends BaseSolver {
127
129
 
128
130
  if (this.processingCrossings) {
129
131
  // The L-shape pass below only reacts when both arms intersect obstacles.
130
- // Resolve strict crossings on merged-label bundles before entering it.
132
+ // Resolve eligible strict cross-net crossings before entering it.
131
133
  const crossing = this._findCrossing()
132
134
  if (crossing) {
133
135
  if (!this._resolveCrossing(crossing)) {
@@ -207,8 +209,12 @@ export class UntangleTraceSubsolver extends BaseSolver {
207
209
  const otherTrace = traces[secondIndex]!
208
210
  if (trace.globalConnNetId === otherTrace.globalConnNetId) continue
209
211
  const isInitialBundleCrossing = this._isTraceBundle(trace, otherTrace)
212
+ const isEligibleInitialCrossing =
213
+ this.input.eligibleTraceIds?.has(trace.mspPairId) === true ||
214
+ this.input.eligibleTraceIds?.has(otherTrace.mspPairId) === true
210
215
  if (
211
216
  !isInitialBundleCrossing &&
217
+ !isEligibleInitialCrossing &&
212
218
  !this.reroutedTraceIds.has(trace.mspPairId) &&
213
219
  !this.reroutedTraceIds.has(otherTrace.mspPairId)
214
220
  ) {
@@ -259,6 +265,16 @@ export class UntangleTraceSubsolver extends BaseSolver {
259
265
  chipBounds,
260
266
  clearance: this.input.paddingBuffer,
261
267
  }),
268
+ ...generatePerimeterCornerTraceDetours({
269
+ trace: crossing.trace,
270
+ chipBounds,
271
+ clearance: this.input.paddingBuffer,
272
+ }),
273
+ ...generatePerimeterCornerTraceDetours({
274
+ trace: crossing.otherTrace,
275
+ chipBounds,
276
+ clearance: this.input.paddingBuffer,
277
+ }),
262
278
  ]
263
279
  const chipObstacles = getObstacleRects(this.input.inputProblem).filter(
264
280
  (obstacle) => obstacle.kind === "chip",
@@ -122,6 +122,58 @@ export interface TraceDetourCandidate {
122
122
  path: Point[]
123
123
  }
124
124
 
125
+ export const generatePerimeterCornerTraceDetours = ({
126
+ trace,
127
+ chipBounds,
128
+ clearance,
129
+ }: Omit<
130
+ PerpendicularTraceDetourInput,
131
+ "segmentIndex" | "obstacleStart" | "obstacleEnd"
132
+ >): TraceDetourCandidate[] => {
133
+ if (trace.tracePath.length < 4 || chipBounds.length === 0) return []
134
+
135
+ const start = trace.tracePath[0]!
136
+ const firstEscape = trace.tracePath[1]!
137
+ const lastEscape = trace.tracePath.at(-2)!
138
+ const end = trace.tracePath.at(-1)!
139
+ const minX = Math.min(...chipBounds.map((bounds) => bounds.minX)) - clearance
140
+ const maxX = Math.max(...chipBounds.map((bounds) => bounds.maxX)) + clearance
141
+ const minY = Math.min(...chipBounds.map((bounds) => bounds.minY)) - clearance
142
+ const maxY = Math.max(...chipBounds.map((bounds) => bounds.maxY)) + clearance
143
+ const candidates: TraceDetourCandidate[] = []
144
+
145
+ for (const channelX of [minX, maxX]) {
146
+ for (const channelY of [minY, maxY]) {
147
+ candidates.push({
148
+ traceId: trace.mspPairId,
149
+ path: simplifyPath([
150
+ start,
151
+ firstEscape,
152
+ { x: firstEscape.x, y: channelY },
153
+ { x: channelX, y: channelY },
154
+ { x: channelX, y: lastEscape.y },
155
+ lastEscape,
156
+ end,
157
+ ]),
158
+ })
159
+ candidates.push({
160
+ traceId: trace.mspPairId,
161
+ path: simplifyPath([
162
+ start,
163
+ firstEscape,
164
+ { x: channelX, y: firstEscape.y },
165
+ { x: channelX, y: channelY },
166
+ { x: lastEscape.x, y: channelY },
167
+ lastEscape,
168
+ end,
169
+ ]),
170
+ })
171
+ }
172
+ }
173
+
174
+ return candidates
175
+ }
176
+
125
177
  export const generatePerpendicularTraceDetours = ({
126
178
  trace,
127
179
  segmentIndex,
@@ -35,6 +35,13 @@ export interface InputDirectConnection {
35
35
  netId?: string
36
36
  netLabelWidth?: number
37
37
 
38
+ /**
39
+ * Width of the conventional anchored label to use only when an inline label
40
+ * cannot be placed. Unlike `netLabelWidth`, this does not affect whether or
41
+ * how the point-to-point connection is routed.
42
+ */
43
+ fallbackNetLabelWidth?: number
44
+
38
45
  /**
39
46
  * When true, this point-to-point connection may be labeled with an "inline
40
47
  * net label": the net name is drawn parallel to (and offset from) the routed
@@ -66,6 +73,7 @@ export interface InputNetConnection {
66
73
  netId: string
67
74
  pinIds: Array<PinId>
68
75
  netLabelWidth?: number
76
+ fallbackNetLabelWidth?: number
69
77
  netLabelHeight?: number
70
78
 
71
79
  /**
@@ -0,0 +1,63 @@
1
+ import type {
2
+ InputDirectConnection,
3
+ InputNetConnection,
4
+ InputProblem,
5
+ NetId,
6
+ PinId,
7
+ } from "lib/types/InputProblem"
8
+
9
+ type ConnectionWithLabelWidth = InputDirectConnection | InputNetConnection
10
+
11
+ const getConfiguredWidth = (
12
+ connections: Array<ConnectionWithLabelWidth | undefined>,
13
+ includeFallbackNetLabelWidth: boolean,
14
+ ) => {
15
+ const explicitWidth = connections.find(
16
+ (connection) => connection?.netLabelWidth !== undefined,
17
+ )?.netLabelWidth
18
+ if (explicitWidth !== undefined) return explicitWidth
19
+ if (!includeFallbackNetLabelWidth) return undefined
20
+
21
+ return connections.find(
22
+ (connection) => connection?.fallbackNetLabelWidth !== undefined,
23
+ )?.fallbackNetLabelWidth
24
+ }
25
+
26
+ export const getNetLabelWidthForConnection = ({
27
+ inputProblem,
28
+ netId,
29
+ pinIds,
30
+ includeFallbackNetLabelWidth = true,
31
+ }: {
32
+ inputProblem: InputProblem
33
+ netId?: NetId
34
+ pinIds: readonly PinId[]
35
+ includeFallbackNetLabelWidth?: boolean
36
+ }): number | undefined => {
37
+ if (netId) {
38
+ const widthByNetId = getConfiguredWidth(
39
+ [
40
+ inputProblem.netConnections.find(
41
+ (connection) => connection.netId === netId,
42
+ ),
43
+ inputProblem.directConnections.find(
44
+ (connection) => connection.netId === netId,
45
+ ),
46
+ ],
47
+ includeFallbackNetLabelWidth,
48
+ )
49
+ if (widthByNetId !== undefined) return widthByNetId
50
+ }
51
+
52
+ return getConfiguredWidth(
53
+ [
54
+ inputProblem.directConnections.find((connection) =>
55
+ connection.pinIds.some((pinId) => pinIds.includes(pinId)),
56
+ ),
57
+ inputProblem.netConnections.find((connection) =>
58
+ connection.pinIds.some((pinId) => pinIds.includes(pinId)),
59
+ ),
60
+ ],
61
+ includeFallbackNetLabelWidth,
62
+ )
63
+ }
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "url": "https://github.com/tscircuit/schematic-trace-solver.git"
6
6
  },
7
7
  "main": "dist/index.js",
8
- "version": "0.0.146",
8
+ "version": "0.0.148",
9
9
  "type": "module",
10
10
  "scripts": {
11
11
  "start": "cosmos",
@@ -1,4 +1,4 @@
1
- <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="2.9875,-2.9000000000000004 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,470.7160493827161 218.4827160493827,467.2592592592593" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.7 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,463.80246913580254 218.4827160493827,467.2592592592593" fill="none" stroke="hsl(112, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.3000000000000007 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,449.9753086419754 218.4827160493827,481.0864197530865" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.5000000000000004 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,456.8888888888889 218.4827160493827,481.0864197530865" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="7.15,-2.8 7.619999999999999,-4" data-type="line" data-label="" points="325.64320987654327,467.2592592592593 341.8901234567901,508.74074074074076" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="7.15,-3.2 7.619999999999999,-2" data-type="line" data-label="" points="325.64320987654327,481.0864197530865 341.8901234567901,439.60493827160496" fill="none" stroke="hsl(120, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.58,-4 8.5,-2.9" data-type="line" data-label="" points="375.0753086419753,508.74074074074076 372.30987654320995,470.7160493827161" fill="none" stroke="hsl(112, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.58,-2 8.5,-3.1" data-type="line" data-label="" points="375.0753086419753,439.60493827160496 372.30987654320995,477.6296296296297" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.54,8 11.7,-3" data-type="line" data-label="" points="373.69259259259263,93.92592592592592 482.92716049382716,474.17283950617286" fill="none" stroke="hsl(232, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="11.7,-3 11.53,7.95" data-type="line" data-label="" points="482.92716049382716,474.17283950617286 477.0506172839507,95.65432098765433" fill="none" stroke="hsl(184, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.66,6 11.7,-3.2" data-type="line" data-label="" points="377.8407407407408,163.06172839506172 482.92716049382716,481.0864197530865" fill="none" stroke="hsl(136, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="5,1.38 11.7,-2.8" data-type="line" data-label="" points="251.32222222222225,322.7654320987655 482.92716049382716,467.2592592592593" fill="none" stroke="hsl(280, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.6,1 5,1.38" data-type="line" data-label="" points="375.76666666666665,335.90123456790127 251.32222222222225,322.7654320987655" fill="none" stroke="hsl(304, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.6,1 11.53,0.95" data-type="line" data-label="" points="375.76666666666665,335.90123456790127 477.0506172839507,337.6296296296297" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-1.4999999999999998" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,422.320987654321" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.1000000000000005 1.9000000000000001,-6.3" data-type="line" data-label="" points="181.75432098765435,477.6296296296297 144.16172839506174,588.246913580247" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.3000000000000003 4.5,-6.3" data-type="line" data-label="" points="181.75432098765435,484.54320987654324 234.0382716049383,588.246913580247" fill="none" stroke="hsl(72, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="4.049999999999999,-3 12.47,7.95" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 509.5444444444445,95.65432098765433" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 12.47,0.95" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 509.5444444444445,337.6296296296297" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 5,0.6200000000000001" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-1.4999999999999998" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-1.7" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-3.9000000000000004" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.1" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.300000000000001" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.5" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 12.47,0.95" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 509.5444444444445,337.6296296296297" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 5,0.6200000000000001" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-1.4999999999999998" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-1.7" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-3.9000000000000004" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.1" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.300000000000001" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.5" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 5,0.6200000000000001" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-1.4999999999999998" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-1.7" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-3.9000000000000004" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.1" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.300000000000001" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.5" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-1.4999999999999998" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-1.7" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-3.9000000000000004" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.1" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.300000000000001" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.5" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-1.7" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.1 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.1 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.300000000000001 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,519.1111111111112 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.460000000000001,8 7.34,6" data-type="line" data-label="" points="336.3592592592594,93.92592592592592 332.21111111111117,163.06172839506172" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.460000000000001,8 7.4,1" data-type="line" data-label="" points="336.3592592592594,93.92592592592592 334.28518518518524,335.90123456790127" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.34,6 7.4,1" data-type="line" data-label="" points="332.21111111111117,163.06172839506172 334.28518518518524,335.90123456790127" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.9000000000000001 2.9875,-2.1000000000000005" data-type="line" data-label="" points="181.75432098765435,436.1481481481482 181.75432098765435,443.0617283950618" fill="none" stroke="hsl(170, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-2.7 3.0875,-2.7 3.0875,-2.8 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,463.80246913580254 185.21111111111114,463.80246913580254 185.21111111111114,467.2592592592593 218.4827160493827,467.2592592592593" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.9000000000000004 3.0875,-2.9000000000000004 3.0875,-2.7 2.9875,-2.7" data-type="line" data-label="" points="181.75432098765435,470.7160493827161 185.21111111111114,470.7160493827161 185.21111111111114,463.80246913580254 181.75432098765435,463.80246913580254" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.3000000000000007 3.1875,-2.3000000000000007 3.1875,-2.5000000000000004 2.9875,-2.5000000000000004" data-type="line" data-label="" points="181.75432098765435,449.9753086419754 188.66790123456792,449.9753086419754 188.66790123456792,456.8888888888889 181.75432098765435,456.8888888888889" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.15,-2.8 7.285,-2.8 7.285,-4 7.619999999999999,-4" data-type="line" data-label="" points="325.64320987654327,467.2592592592593 330.30987654320995,467.2592592592593 330.30987654320995,508.74074074074076 341.8901234567901,508.74074074074076" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.15,-3.2 7.484999999999999,-3.2 7.484999999999999,-2 7.619999999999999,-2" data-type="line" data-label="" points="325.64320987654327,481.0864197530865 337.22345679012346,481.0864197530865 337.22345679012346,439.60493827160496 341.8901234567901,439.60493827160496" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.58,-4 8.78,-4 8.78,-4.54 7.319999999999999,-4.54 7.319999999999999,-2.9 8.5,-2.9" data-type="line" data-label="" points="375.0753086419753,508.74074074074076 381.98888888888894,508.74074074074076 381.98888888888894,527.4074074074074 331.51975308641977,527.4074074074074 331.51975308641977,470.7160493827161 372.30987654320995,470.7160493827161" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.58,-2 8.78,-2 8.78,-1.46 7.519999999999999,-1.46 7.519999999999999,-3.1 8.5,-3.1" data-type="line" data-label="" points="375.0753086419753,439.60493827160496 381.98888888888894,439.60493827160496 381.98888888888894,420.93827160493834 338.4333333333333,420.93827160493834 338.4333333333333,477.6296296296297 372.30987654320995,477.6296296296297" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.1 3.1875,-4.1 3.1875,-3.9000000000000004 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 188.66790123456792,512.1975308641976 188.66790123456792,505.283950617284 181.75432098765435,505.283950617284" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.300000000000001 3.1875,-4.300000000000001 3.1875,-4.1 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,519.1111111111112 188.66790123456792,519.1111111111112 188.66790123456792,512.1975308641976 181.75432098765435,512.1975308641976" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.5 2.9875,-4.7 3.1875,-4.7 3.1875,-4.300000000000001 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,526.0246913580247 181.75432098765435,532.9382716049383 188.66790123456792,532.9382716049383 188.66790123456792,519.1111111111112 181.75432098765435,519.1111111111112" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-1.2999999999999998 3.1875,-1.2999999999999998 3.1875,-1.7 2.9875,-1.7" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,415.40740740740745 188.66790123456792,415.40740740740745 188.66790123456792,429.2345679012346 181.75432098765435,429.2345679012346" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.34,6 7.14,6 7.14,8 7.460000000000001,8" data-type="line" data-label="" points="332.21111111111117,163.06172839506172 325.2975308641976,163.06172839506172 325.2975308641976,93.92592592592592 336.3592592592594,93.92592592592592" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.9000000000000001 3.1875,-1.9000000000000001 3.1875,-2.1000000000000005 2.9875,-2.1000000000000005" data-type="line" data-label="" points="181.75432098765435,436.1481481481482 188.66790123456792,436.1481481481482 188.66790123456792,443.0617283950618 181.75432098765435,443.0617283950618" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.54,8 10.035,8 10.035,7.95 11.53,7.95" data-type="line" data-label="" points="373.69259259259263,93.92592592592592 425.3716049382716,93.92592592592592 425.3716049382716,95.65432098765433 477.0506172839507,95.65432098765433" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="5,1.38 5,1.58 8.8,1.58 8.8,1 8.6,1" data-type="line" data-label="" points="251.32222222222225,322.7654320987655 251.32222222222225,315.85185185185185 382.6802469135803,315.85185185185185 382.6802469135803,335.90123456790127 375.76666666666665,335.90123456790127" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="11.7,-2.8 11.899999999999999,-2.8 11.899999999999999,-0.9249999999999999 11.33,-0.9249999999999999 11.33,0.95 11.53,0.95" data-type="line" data-label="" points="482.92716049382716,467.2592592592593 489.8407407407408,467.2592592592593 489.8407407407408,402.44444444444446 470.1370370370371,402.44444444444446 470.1370370370371,337.6296296296297 477.0506172839507,337.6296296296297" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.5000000000000004 3.6187499999999995,-2.5000000000000004 3.6187499999999995,-3.2 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,456.8888888888889 203.5753086419753,456.8888888888889 203.5753086419753,481.0864197530865 218.4827160493827,481.0864197530865" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.9000000000000004 3.5187499999999994,-3.9000000000000004 3.5187499999999994,-3 4.049999999999999,-3" data-type="line" data-label="" points="181.75432098765435,505.283950617284 200.11851851851853,505.283950617284 200.11851851851853,474.17283950617286 218.4827160493827,474.17283950617286" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.7 3.2875,-1.7 3.2875,-1.9500000000000002 3.5875,-1.9500000000000002 3.5875,-2.6000000000000005 3.2875,-2.6000000000000005 3.2875,-3.9000000000000004 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 192.12469135802473,429.2345679012346 192.12469135802473,437.87654320987656 202.4950617283951,437.87654320987656 202.4950617283951,460.3456790123457 192.12469135802473,460.3456790123457 192.12469135802473,505.283950617284 181.75432098765435,505.283950617284" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.66,6 13.360999999999997,6 13.360999999999997,-3.2 11.7,-3.2" data-type="line" data-label="" points="377.8407407407408,163.06172839506172 540.3444444444444,163.06172839506172 540.3444444444444,481.0864197530865 482.92716049382716,481.0864197530865" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="12.47,7.95 12.711,7.95 12.711,7.599" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 517.8753086419754,95.65432098765433 517.8753086419754,107.78765432098766" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="12.47,0.95 12.711,0.95 12.711,0.599" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 517.8753086419754,337.6296296296297 517.8753086419754,349.762962962963" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.4,1 7.049,1 7.049,1.051" data-type="line" data-label="" points="334.28518518518524,335.90123456790127 322.1518518518519,335.90123456790127 322.1518518518519,334.1382716049383" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_7" data-x="10.1" data-y="-3" x="372.30987654321" y="463.80246913580254" width="110.6172839506172" height="20.740740740740705" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_49" data-x="5.6" data-y="-3" x="218.48271604938267" y="460.3456790123457" width="107.16049382716056" height="27.65432098765433" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_50" data-x="8.1" data-y="-2" x="341.8901234567901" y="427.85185185185185" width="33.18518518518522" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_51" data-x="8.1" data-y="-4" x="341.8901234567901" y="496.98765432098764" width="33.18518518518522" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_52" data-x="12" data-y="8" x="477.0506172839507" y="81.50030888888892" width="32.493827160493765" height="24.851234074074" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_53" data-x="8" data-y="8" x="336.3592592592594" y="82.17283950617286" width="37.33333333333326" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_54" data-x="8" data-y="6" x="332.2111111111112" y="151.30864197530866" width="45.62962962962962" height="23.50617283950615" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_55" data-x="12" data-y="1" x="477.0506172839507" y="323.47561753086427" width="32.493827160493765" height="24.851234074074" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_56" data-x="8" data-y="0.9999999999999999" x="334.2851851851853" y="324.14814814814815" width="41.48148148148141" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_57" data-x="5.2524999999999995" data-y="1" x="235.76666666666662" y="322.7654320987655" width="48.567901234567955" height="26.271604938271594" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_58" data-x="1.8" data-y="-3" x="99.65555555555557" y="422.320987654321" width="82.09876543209877" height="103.7037037037037" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_59" data-x="2.2" data-y="-6.3" x="144.16172839506174" y="576.493827160494" width="20.740740740740762" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_60" data-x="4.8" data-y="-6.3" x="234.0382716049383" y="576.493827160494" width="20.740740740740733" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="U_MCU_USB_BOOT" data-x="9.74" data-y="-2.5700000000000003" x="386.1370370370371" y="456.1975308641976" width="58.07407407407413" height="6.2222222222222285" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="ESP32_P4NRW32X" data-x="9.74" data-y="-3.4299999999999997" x="386.1370370370371" y="485.925925925926" width="58.07407407407413" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="USBLC6_2SC6" data-x="5.109999999999999" data-y="-3.53" x="232.3098765432099" y="489.3827160493828" width="45.62962962962962" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="U_ESD" data-x="4.749999999999999" data-y="-2.4850000000000003" x="230.23580246913582" y="452.0493827160494" width="24.888888888888857" height="8.641975308641975" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="TYPE-C-31-M-12" data-x="1.8525" data-y="-4.43" x="113.48271604938273" y="520.4938271604939" width="58.074074074074076" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="J_USB" data-x="1.3125000000000002" data-y="-1.585" x="111.40864197530865" y="420.93827160493834" width="24.888888888888914" height="8.641975308641918" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DM_MCU
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="2.9875,-2.9000000000000004 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,470.7160493827161 218.4827160493827,467.2592592592593" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.7 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,463.80246913580254 218.4827160493827,467.2592592592593" fill="none" stroke="hsl(112, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.3000000000000007 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,449.9753086419754 218.4827160493827,481.0864197530865" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.5000000000000004 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,456.8888888888889 218.4827160493827,481.0864197530865" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="7.15,-2.8 7.619999999999999,-4" data-type="line" data-label="" points="325.64320987654327,467.2592592592593 341.8901234567901,508.74074074074076" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="7.15,-3.2 7.619999999999999,-2" data-type="line" data-label="" points="325.64320987654327,481.0864197530865 341.8901234567901,439.60493827160496" fill="none" stroke="hsl(120, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.58,-4 8.5,-2.9" data-type="line" data-label="" points="375.0753086419753,508.74074074074076 372.30987654320995,470.7160493827161" fill="none" stroke="hsl(112, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.58,-2 8.5,-3.1" data-type="line" data-label="" points="375.0753086419753,439.60493827160496 372.30987654320995,477.6296296296297" fill="none" stroke="hsl(160, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.54,8 11.7,-3" data-type="line" data-label="" points="373.69259259259263,93.92592592592592 482.92716049382716,474.17283950617286" fill="none" stroke="hsl(232, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="11.7,-3 11.53,7.95" data-type="line" data-label="" points="482.92716049382716,474.17283950617286 477.0506172839507,95.65432098765433" fill="none" stroke="hsl(184, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.66,6 11.7,-3.2" data-type="line" data-label="" points="377.8407407407408,163.06172839506172 482.92716049382716,481.0864197530865" fill="none" stroke="hsl(136, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="5,1.38 11.7,-2.8" data-type="line" data-label="" points="251.32222222222225,322.7654320987655 482.92716049382716,467.2592592592593" fill="none" stroke="hsl(280, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.6,1 5,1.38" data-type="line" data-label="" points="375.76666666666665,335.90123456790127 251.32222222222225,322.7654320987655" fill="none" stroke="hsl(304, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="8.6,1 11.53,0.95" data-type="line" data-label="" points="375.76666666666665,335.90123456790127 477.0506172839507,337.6296296296297" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-1.4999999999999998" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,422.320987654321" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.1000000000000005 1.9000000000000001,-6.3" data-type="line" data-label="" points="181.75432098765435,477.6296296296297 144.16172839506174,588.246913580247" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.3000000000000003 4.5,-6.3" data-type="line" data-label="" points="181.75432098765435,484.54320987654324 234.0382716049383,588.246913580247" fill="none" stroke="hsl(72, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="4.049999999999999,-3 12.47,7.95" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 509.5444444444445,95.65432098765433" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 12.47,0.95" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 509.5444444444445,337.6296296296297" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 5,0.6200000000000001" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-1.4999999999999998" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-1.7" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-3.9000000000000004" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.1" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.300000000000001" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="4.049999999999999,-3 2.9875,-4.5" data-type="line" data-label="" points="218.4827160493827,474.17283950617286 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 12.47,0.95" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 509.5444444444445,337.6296296296297" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 5,0.6200000000000001" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-1.4999999999999998" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-1.7" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-3.9000000000000004" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.1" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.300000000000001" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,7.95 2.9875,-4.5" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 5,0.6200000000000001" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 251.32222222222225,349.03703703703707" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-1.4999999999999998" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-1.7" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-3.9000000000000004" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.1" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.300000000000001" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="12.47,0.95 2.9875,-4.5" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-1.4999999999999998" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,422.320987654321" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-1.7" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-3.9000000000000004" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.1" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.300000000000001" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="5,0.6200000000000001 2.9875,-4.5" data-type="line" data-label="" points="251.32222222222225,349.03703703703707 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-1.7" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,429.2345679012346" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,505.283950617284" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.7 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,512.1975308641976" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-3.9000000000000004 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,505.283950617284 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.1 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 181.75432098765435,519.1111111111112" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.1 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-4.300000000000001 2.9875,-4.5" data-type="line" data-label="" points="181.75432098765435,519.1111111111112 181.75432098765435,526.0246913580247" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.460000000000001,8 7.34,6" data-type="line" data-label="" points="336.3592592592594,93.92592592592592 332.21111111111117,163.06172839506172" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.460000000000001,8 7.4,1" data-type="line" data-label="" points="336.3592592592594,93.92592592592592 334.28518518518524,335.90123456790127" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.34,6 7.4,1" data-type="line" data-label="" points="332.21111111111117,163.06172839506172 334.28518518518524,335.90123456790127" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-1.9000000000000001 2.9875,-2.1000000000000005" data-type="line" data-label="" points="181.75432098765435,436.1481481481482 181.75432098765435,443.0617283950618" fill="none" stroke="hsl(170, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.9875,-2.7 3.0875,-2.7 3.0875,-2.8 4.049999999999999,-2.8" data-type="line" data-label="" points="181.75432098765435,463.80246913580254 185.21111111111114,463.80246913580254 185.21111111111114,467.2592592592593 218.4827160493827,467.2592592592593" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.9000000000000004 3.0875,-2.9000000000000004 3.0875,-2.7 2.9875,-2.7" data-type="line" data-label="" points="181.75432098765435,470.7160493827161 185.21111111111114,470.7160493827161 185.21111111111114,463.80246913580254 181.75432098765435,463.80246913580254" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.3000000000000007 3.1875,-2.3000000000000007 3.1875,-2.5000000000000004 2.9875,-2.5000000000000004" data-type="line" data-label="" points="181.75432098765435,449.9753086419754 188.66790123456792,449.9753086419754 188.66790123456792,456.8888888888889 181.75432098765435,456.8888888888889" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.15,-2.8 7.285,-2.8 7.285,-4 7.619999999999999,-4" data-type="line" data-label="" points="325.64320987654327,467.2592592592593 330.30987654320995,467.2592592592593 330.30987654320995,508.74074074074076 341.8901234567901,508.74074074074076" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.15,-3.2 7.484999999999999,-3.2 7.484999999999999,-2 7.619999999999999,-2" data-type="line" data-label="" points="325.64320987654327,481.0864197530865 337.22345679012346,481.0864197530865 337.22345679012346,439.60493827160496 341.8901234567901,439.60493827160496" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.58,-4 8.78,-4 8.78,-4.54 7.319999999999999,-4.54 7.319999999999999,-2.9 8.5,-2.9" data-type="line" data-label="" points="375.0753086419753,508.74074074074076 381.98888888888894,508.74074074074076 381.98888888888894,527.4074074074074 331.51975308641977,527.4074074074074 331.51975308641977,470.7160493827161 372.30987654320995,470.7160493827161" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.58,-2 8.78,-2 8.78,-1.46 7.519999999999999,-1.46 7.519999999999999,-3.1 8.5,-3.1" data-type="line" data-label="" points="375.0753086419753,439.60493827160496 381.98888888888894,439.60493827160496 381.98888888888894,420.93827160493834 338.4333333333333,420.93827160493834 338.4333333333333,477.6296296296297 372.30987654320995,477.6296296296297" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.1 3.1875,-4.1 3.1875,-3.9000000000000004 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,512.1975308641976 188.66790123456792,512.1975308641976 188.66790123456792,505.283950617284 181.75432098765435,505.283950617284" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.300000000000001 3.1875,-4.300000000000001 3.1875,-4.1 2.9875,-4.1" data-type="line" data-label="" points="181.75432098765435,519.1111111111112 188.66790123456792,519.1111111111112 188.66790123456792,512.1975308641976 181.75432098765435,512.1975308641976" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-4.5 2.9875,-4.7 3.1875,-4.7 3.1875,-4.300000000000001 2.9875,-4.300000000000001" data-type="line" data-label="" points="181.75432098765435,526.0246913580247 181.75432098765435,532.9382716049383 188.66790123456792,532.9382716049383 188.66790123456792,519.1111111111112 181.75432098765435,519.1111111111112" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.4999999999999998 2.9875,-1.2999999999999998 3.1875,-1.2999999999999998 3.1875,-1.7 2.9875,-1.7" data-type="line" data-label="" points="181.75432098765435,422.320987654321 181.75432098765435,415.40740740740745 188.66790123456792,415.40740740740745 188.66790123456792,429.2345679012346 181.75432098765435,429.2345679012346" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.34,6 7.14,6 7.14,8 7.460000000000001,8" data-type="line" data-label="" points="332.21111111111117,163.06172839506172 325.2975308641976,163.06172839506172 325.2975308641976,93.92592592592592 336.3592592592594,93.92592592592592" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.9000000000000001 3.1875,-1.9000000000000001 3.1875,-2.1000000000000005 2.9875,-2.1000000000000005" data-type="line" data-label="" points="181.75432098765435,436.1481481481482 188.66790123456792,436.1481481481482 188.66790123456792,443.0617283950618 181.75432098765435,443.0617283950618" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.54,8 10.035,8 10.035,7.95 11.53,7.95" data-type="line" data-label="" points="373.69259259259263,93.92592592592592 425.3716049382716,93.92592592592592 425.3716049382716,95.65432098765433 477.0506172839507,95.65432098765433" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="5,1.38 5,1.58 8.8,1.58 8.8,1 8.6,1" data-type="line" data-label="" points="251.32222222222225,322.7654320987655 251.32222222222225,315.85185185185185 382.6802469135803,315.85185185185185 382.6802469135803,335.90123456790127 375.76666666666665,335.90123456790127" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="11.7,-2.8 11.899999999999999,-2.8 11.899999999999999,-0.9249999999999999 11.33,-0.9249999999999999 11.33,0.95 11.53,0.95" data-type="line" data-label="" points="482.92716049382716,467.2592592592593 489.8407407407408,467.2592592592593 489.8407407407408,402.44444444444446 470.1370370370371,402.44444444444446 470.1370370370371,337.6296296296297 477.0506172839507,337.6296296296297" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-2.5000000000000004 3.5187499999999994,-2.5000000000000004 3.5187499999999994,-3.2 4.049999999999999,-3.2" data-type="line" data-label="" points="181.75432098765435,456.8888888888889 200.11851851851853,456.8888888888889 200.11851851851853,481.0864197530865 218.4827160493827,481.0864197530865" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-3.9000000000000004 3.5187499999999994,-3.9000000000000004 3.5187499999999994,-3 4.049999999999999,-3" data-type="line" data-label="" points="181.75432098765435,505.283950617284 200.11851851851853,505.283950617284 200.11851851851853,474.17283950617286 218.4827160493827,474.17283950617286" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.9875,-1.7 3.2875,-1.7 3.2875,-3.9000000000000004 2.9875,-3.9000000000000004" data-type="line" data-label="" points="181.75432098765435,429.2345679012346 192.12469135802473,429.2345679012346 192.12469135802473,505.283950617284 181.75432098765435,505.283950617284" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8.66,6 13.360999999999997,6 13.360999999999997,-3.2 11.7,-3.2" data-type="line" data-label="" points="377.8407407407408,163.06172839506172 540.3444444444444,163.06172839506172 540.3444444444444,481.0864197530865 482.92716049382716,481.0864197530865" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="12.47,7.95 12.711,7.95 12.711,7.599" data-type="line" data-label="" points="509.5444444444445,95.65432098765433 517.8753086419754,95.65432098765433 517.8753086419754,107.78765432098766" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="12.47,0.95 12.711,0.95 12.711,0.599" data-type="line" data-label="" points="509.5444444444445,337.6296296296297 517.8753086419754,337.6296296296297 517.8753086419754,349.762962962963" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.4,1 7.049,1 7.049,1.051" data-type="line" data-label="" points="334.28518518518524,335.90123456790127 322.1518518518519,335.90123456790127 322.1518518518519,334.1382716049383" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_7" data-x="10.1" data-y="-3" x="372.30987654321" y="463.80246913580254" width="110.6172839506172" height="20.740740740740705" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_49" data-x="5.6" data-y="-3" x="218.48271604938267" y="460.3456790123457" width="107.16049382716056" height="27.65432098765433" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_50" data-x="8.1" data-y="-2" x="341.8901234567901" y="427.85185185185185" width="33.18518518518522" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_51" data-x="8.1" data-y="-4" x="341.8901234567901" y="496.98765432098764" width="33.18518518518522" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_52" data-x="12" data-y="8" x="477.0506172839507" y="81.50030888888892" width="32.493827160493765" height="24.851234074074" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_53" data-x="8" data-y="8" x="336.3592592592594" y="82.17283950617286" width="37.33333333333326" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_54" data-x="8" data-y="6" x="332.2111111111112" y="151.30864197530866" width="45.62962962962962" height="23.50617283950615" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_55" data-x="12" data-y="1" x="477.0506172839507" y="323.47561753086427" width="32.493827160493765" height="24.851234074074" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_56" data-x="8" data-y="0.9999999999999999" x="334.2851851851853" y="324.14814814814815" width="41.48148148148141" height="23.506172839506178" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_57" data-x="5.2524999999999995" data-y="1" x="235.76666666666662" y="322.7654320987655" width="48.567901234567955" height="26.271604938271594" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_58" data-x="1.8" data-y="-3" x="99.65555555555557" y="422.320987654321" width="82.09876543209877" height="103.7037037037037" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_59" data-x="2.2" data-y="-6.3" x="144.16172839506174" y="576.493827160494" width="20.740740740740762" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="schematic_component_60" data-x="4.8" data-y="-6.3" x="234.0382716049383" y="576.493827160494" width="20.740740740740733" height="23.50617283950612" fill="hsl(320, 100%, 50%, 0.8)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="U_MCU_USB_BOOT" data-x="9.74" data-y="-2.5700000000000003" x="386.1370370370371" y="456.1975308641976" width="58.07407407407413" height="6.2222222222222285" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="ESP32_P4NRW32X" data-x="9.74" data-y="-3.4299999999999997" x="386.1370370370371" y="485.925925925926" width="58.07407407407413" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="USBLC6_2SC6" data-x="5.109999999999999" data-y="-3.53" x="232.3098765432099" y="489.3827160493828" width="45.62962962962962" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="U_ESD" data-x="4.749999999999999" data-y="-2.4850000000000003" x="230.23580246913582" y="452.0493827160494" width="24.888888888888857" height="8.641975308641975" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="TYPE-C-31-M-12" data-x="1.8525" data-y="-4.43" x="113.48271604938273" y="520.4938271604939" width="58.074074074074076" height="6.222222222222172" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="J_USB" data-x="1.3125000000000002" data-y="-1.585" x="111.40864197530865" y="420.93827160493834" width="24.888888888888914" height="8.641975308641918" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DM_MCU
2
2
  globalConnNetId: connectivity_net4" data-x="8.78" data-y="-3.775" x="378.5320987654321" y="493.1851851851853" width="6.913580246913625" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DP_MCU
3
3
  globalConnNetId: connectivity_net5" data-x="8.78" data-y="-2.225" x="378.5320987654321" y="439.604938271605" width="6.913580246913625" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: .R_RESET_PU &gt; .pin2 to .C_RESET &gt; .pin1
4
4
  globalConnNetId: connectivity_net8" data-x="4.16" data-y="1.58" x="193.24814814814818" y="312.39506172839504" width="58.074074074074076" height="6.913580246913568" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: .C_RESET &gt; .pin1 to .U_MCU &gt; .pin103
@@ -11,7 +11,7 @@ globalConnNetId: connectivity_net9" data-x="2.9875" data-y="-4.91" x="173.458024
11
11
  globalConnNetId: connectivity_net9" data-x="12.711" data-y="7.389" x="509.5790123456791" y="107.78765432098764" width="16.59259259259261" height="14.518518518518505" fill="#00000066" stroke="#000000" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: GND
12
12
  globalConnNetId: connectivity_net9" data-x="12.711" data-y="0.389" x="509.5790123456791" y="349.762962962963" width="16.59259259259261" height="14.518518518518533" fill="#00000066" stroke="#000000" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: GND
13
13
  globalConnNetId: connectivity_net9" data-x="5" data-y="0.40900000000000014" x="243.02592592592595" y="349.07160493827166" width="16.59259259259261" height="14.518518518518533" fill="#00000066" stroke="#000000" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: .J_USB &gt; .pin8 to .U_ESD &gt; .pin3
14
- globalConnNetId: connectivity_net1" data-x="3.3874999999999997" data-y="-2.2750000000000004" x="192.12469135802468" y="441.3333333333334" width="6.913580246913597" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DP_POST_ESD
14
+ globalConnNetId: connectivity_net1" data-x="3.5187499999999994" data-y="-2.2750000000000004" x="196.66172839506174" y="441.3333333333334" width="6.913580246913568" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DP_POST_ESD
15
15
  globalConnNetId: connectivity_net3" data-x="7.484999999999999" data-y="-3.4250000000000003" x="333.76666666666665" y="481.0864197530865" width="6.913580246913568" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: USB_HS_DM_POST_ESD
16
16
  globalConnNetId: connectivity_net2" data-x="7.285" data-y="-2.5749999999999997" x="326.85308641975314" y="451.70370370370375" width="6.913580246913568" height="15.555555555555543" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: V3V3
17
17
  globalConnNetId: connectivity_net12" data-x="7.14" data-y="8.21" x="314.9271604938272" y="79.40740740740733" width="20.740740740740762" height="14.51851851851859" fill="#ef444466" stroke="#ef4444" stroke-width="0.028928571428571425"/></g><g><rect data-type="rect" data-label="netId: V3V3
@@ -79,7 +79,7 @@ orientation: y-" data-x="2.9875" data-y="-4.7" cx="181.75432098765435" cy="532.9
79
79
  orientation: y-" data-x="12.711" data-y="7.599" cx="517.8753086419754" cy="107.78765432098766" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
80
80
  orientation: y-" data-x="12.711" data-y="0.599" cx="517.8753086419754" cy="349.762962962963" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
81
81
  orientation: y-" data-x="5" data-y="0.6200000000000001" cx="251.32222222222225" cy="349.03703703703707" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
82
- orientation: y+" data-x="3.3874999999999997" data-y="-2.5000000000000004" cx="195.5814814814815" cy="456.8888888888889" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
82
+ orientation: y+" data-x="3.5187499999999994" data-y="-2.5000000000000004" cx="200.11851851851853" cy="456.8888888888889" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
83
83
  orientation: y-" data-x="7.484999999999999" data-y="-3.2" cx="337.22345679012346" cy="481.0864197530865" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
84
84
  orientation: y+" data-x="7.285" data-y="-2.8" cx="330.30987654320995" cy="467.2592592592593" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
85
85
  orientation: y+" data-x="7.14" data-y="8" cx="325.2975308641976" cy="93.92592592592592" r="3" fill="hsl(80, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
@@ -0,0 +1,59 @@
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-4.5,3 -2.38,3" data-type="line" data-label="" points="56.18029471251077,218.9540595203698 399.20254261774056,218.9540595203698" fill="none" stroke="hsl(192, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-3.5,3 -2.7,1.5" data-type="line" data-label="" points="217.98324183761918,218.9540595203698 347.4255995377058,461.65848020803236" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.62,3 -3.3,1.5" data-type="line" data-label="" points="522.1727824328229,218.9540595203698 250.34383126264083,461.65848020803236" fill="none" stroke="hsl(190, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-4.5,3 -4.6,3 -4.6,3.4250000000000003 -2.48,3.4250000000000003 -2.48,3 -2.38,3" data-type="line" data-label="" points="56.18029471251077,218.9540595203698 40,218.9540595203698 40,150.18780699219872 383.02224790522973,150.18780699219872 383.02224790522973,218.9540595203698 399.20254261774056,218.9540595203698" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.5,3 -2.5,3 -2.5,1.5 -2.7,1.5" data-type="line" data-label="" points="217.98324183761918,218.9540595203698 379.7861889627275,218.9540595203698 379.7861889627275,461.65848020803236 347.4255995377058,461.65848020803236" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.62,3 -1.3790000000000002,3 -1.3790000000000002,3.251" data-type="line" data-label="" points="522.1727824328229,218.9540595203698 561.1672926899739,218.9540595203698 561.1672926899739,178.34151979196758" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.3,1.5 -3.541,1.5 -3.541,1.9509999999999998" data-type="line" data-label="" points="250.34383126264083,461.65848020803236 211.34932100548974,461.65848020803236 211.34932100548974,388.6853510546085" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="-4" data-y="3" x="56.18029471251077" y="166.36810170470955" width="161.8029471251084" height="105.17191563132053" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="-2" data-y="3" x="399.2025426177405" y="178.50332273909274" width="122.97023981508238" height="80.90147356255414" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="-3" data-y="1.5" x="250.3438312626409" y="393.70124241548683" width="97.08176827506497" height="135.91447558509105" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="netId: GND
2
+ globalConnNetId: connectivity_net1" data-x="-3" data-y="2.79" x="260.0520080901473" y="218.9540595203698" width="77.6654146200521" height="67.95723779254547" fill="#00000066" stroke="#000000" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="netId: VCC
3
+ globalConnNetId: connectivity_net2" data-x="-1.3790000000000002" data-y="3.461" x="522.3345853799478" y="110.38428199942206" width="77.66541462005205" height="67.95723779254547" fill="#ef444466" stroke="#ef4444" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="netId: VCC
4
+ globalConnNetId: connectivity_net2" data-x="-3.541" data-y="2.161" x="172.51661369546378" y="320.72811326206295" width="77.66541462005193" height="67.95723779254553" fill="#ef444466" stroke="#ef4444" stroke-width="0.006180357142857142"/></g><g><rect data-type="rect" data-label="INLINE netId: .B1 &gt; .pin1 to .SW1 &gt; .pin1
5
+ axis: x
6
+ side: y+" data-x="-3.54" data-y="3.535" x="166.20629875758448" y="122.68130598093029" width="90.60965039006078" height="19.41635365501304" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.006180357142857142"/></g><text data-type="text" data-label=".B1 &gt; .pin1 to .SW1 &gt; .pin1" data-x="-3.54" data-y="3.535" x="211.51112395261487" y="132.3894828084368" fill="green" font-size="19.416353655013005" font-family="sans-serif" text-anchor="middle" dominant-baseline="central"><![CDATA[.B1 > .pin1 to .SW1 > .pin1]]></text><g><circle data-type="point" data-label="schematic_port_0
7
+ x-" data-x="-4.5" data-y="3" cx="56.18029471251077" cy="218.9540595203698" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_1
8
+ x+" data-x="-3.5" data-y="3" cx="217.98324183761918" cy="218.9540595203698" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_2
9
+ x-" data-x="-2.38" data-y="3" cx="399.20254261774056" cy="218.9540595203698" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_3
10
+ x+" data-x="-1.62" data-y="3" cx="522.1727824328229" cy="218.9540595203698" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_4
11
+ x-" data-x="-3.3" data-y="1.5" cx="250.34383126264083" cy="461.65848020803236" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_5
12
+ x+" data-x="-2.7" data-y="1.5" cx="347.4255995377058" cy="461.65848020803236" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
13
+ orientation: y-" data-x="-3" data-y="3" cx="298.8847154001734" cy="218.9540595203698" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
14
+ orientation: y+" data-x="-1.3790000000000002" data-y="3.251" cx="561.1672926899739" cy="178.34151979196758" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
15
+ orientation: y+" data-x="-3.541" data-y="1.9509999999999998" cx="211.34932100548974" cy="388.6853510546085" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="inline anchor
16
+ .B1 &gt; .pin1 to .SW1 &gt; .pin1" data-x="-3.54" data-y="3.4250000000000003" cx="211.51112395261487" cy="150.18780699219872" r="3" fill="green"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
17
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
18
+ const svg = e.currentTarget;
19
+ const rect = svg.getBoundingClientRect();
20
+ const x = e.clientX - rect.left;
21
+ const y = e.clientY - rect.top;
22
+ const crosshair = svg.getElementById('crosshair');
23
+ const h = svg.getElementById('crosshair-h');
24
+ const v = svg.getElementById('crosshair-v');
25
+ const coords = svg.getElementById('coordinates');
26
+
27
+ crosshair.style.display = 'block';
28
+ h.setAttribute('x1', '0');
29
+ h.setAttribute('x2', '640');
30
+ h.setAttribute('y1', y);
31
+ h.setAttribute('y2', y);
32
+ v.setAttribute('x1', x);
33
+ v.setAttribute('x2', x);
34
+ v.setAttribute('y1', '0');
35
+ v.setAttribute('y2', '640');
36
+
37
+ // Calculate real coordinates using inverse transformation
38
+ const matrix = {"a":161.80294712510837,"c":0,"e":784.2935567754985,"b":0,"d":-161.80294712510837,"f":704.3629008956949};
39
+ // Manually invert and apply the affine transform
40
+ // Since we only use translate and scale, we can directly compute:
41
+ // x' = (x - tx) / sx
42
+ // y' = (y - ty) / sy
43
+ const sx = matrix.a;
44
+ const sy = matrix.d;
45
+ const tx = matrix.e;
46
+ const ty = matrix.f;
47
+ const realPoint = {
48
+ x: (x - tx) / sx,
49
+ y: (y - ty) / sy // Flip y back since we used negative scale
50
+ }
51
+
52
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
53
+ coords.setAttribute('x', (x + 5).toString());
54
+ coords.setAttribute('y', (y - 5).toString());
55
+ });
56
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
57
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
58
+ });
59
+ ]]></script></svg>