@crafing/svg-maker 0.0.0-stage → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +466 -2
- package/index.d.ts +169 -0
- package/package.json +29 -4
- package/vkmxr.js +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Crafing
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,467 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `@crafing/svg-maker`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Complete integration guide for beginners.
|
|
4
|
+
|
|
5
|
+
This package stores and edits **SVG path data** (points, curves, shapes) and can turn that data into an SVG string.
|
|
6
|
+
It does **not** draw anything on screen by itself. You (or a React UI) decide how to display it.
|
|
7
|
+
|
|
8
|
+
## Live demo
|
|
9
|
+
|
|
10
|
+
Try the free browser tool built with this stack:
|
|
11
|
+
|
|
12
|
+
**[SVG Maker on Crafing](https://www.crafing.com/tools/svg-maker)**
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Table of contents
|
|
17
|
+
|
|
18
|
+
1. [What this package does](#1-what-this-package-does)
|
|
19
|
+
2. [Install](#2-install)
|
|
20
|
+
3. [Your first program (5 minutes)](#3-your-first-program-5-minutes)
|
|
21
|
+
4. [Understand the data model](#4-understand-the-data-model)
|
|
22
|
+
5. [Build a path from clicks](#5-build-a-path-from-clicks)
|
|
23
|
+
6. [Curves and corners](#6-curves-and-corners)
|
|
24
|
+
7. [Shapes](#7-shapes)
|
|
25
|
+
8. [Hit-testing (mouse near a point or line)](#8-hit-testing-mouse-near-a-point-or-line)
|
|
26
|
+
9. [Export SVG and download](#9-export-svg-and-download)
|
|
27
|
+
10. [Save / load from a database](#10-save--load-from-a-database)
|
|
28
|
+
11. [Use with React](#11-use-with-react)
|
|
29
|
+
12. [API checklist](#12-api-checklist)
|
|
30
|
+
13. [Common mistakes](#13-common-mistakes)
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 1. What this package does
|
|
35
|
+
|
|
36
|
+
| It does | It does **not** |
|
|
37
|
+
|---------|-----------------|
|
|
38
|
+
| Create path objects | Render buttons or a toolbar |
|
|
39
|
+
| Convert points → SVG `d` string | Include React components |
|
|
40
|
+
| Insert curve points, round corners | Talk to your server |
|
|
41
|
+
| Hit-test mouse vs points/segments | Style your page |
|
|
42
|
+
|
|
43
|
+
Think of it as the **brain** of an SVG editor. Your HTML/React is the **face**.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 2. Install
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm install @crafing/svg-maker
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Works in browsers (with a bundler like Vite / Next / Webpack) and in Node.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 3. Your first program (5 minutes)
|
|
58
|
+
|
|
59
|
+
Create a file (for example `demo.mjs`) or put this in a browser module:
|
|
60
|
+
|
|
61
|
+
```js
|
|
62
|
+
import {
|
|
63
|
+
createEmptyPath,
|
|
64
|
+
createShapePath,
|
|
65
|
+
pointsToPathD,
|
|
66
|
+
buildSvgMarkup,
|
|
67
|
+
} from "@crafing/svg-maker";
|
|
68
|
+
|
|
69
|
+
// 1) Start with an empty path
|
|
70
|
+
const path = createEmptyPath({
|
|
71
|
+
name: "My path",
|
|
72
|
+
fill: "#111827",
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// 2) Add three corner points (a triangle)
|
|
76
|
+
path.points = [
|
|
77
|
+
{ id: "a", x: 50, y: 200, kind: "corner" },
|
|
78
|
+
{ id: "b", x: 200, y: 50, kind: "corner" },
|
|
79
|
+
{ id: "c", x: 350, y: 200, kind: "corner" },
|
|
80
|
+
];
|
|
81
|
+
path.closed = true;
|
|
82
|
+
|
|
83
|
+
// 3) Get the SVG path `d` attribute
|
|
84
|
+
const d = pointsToPathD(path.points, path.closed);
|
|
85
|
+
console.log("d =", d);
|
|
86
|
+
|
|
87
|
+
// 4) Or build a full SVG document string
|
|
88
|
+
const svg = buildSvgMarkup([path], { width: 400, height: 400 });
|
|
89
|
+
console.log(svg);
|
|
90
|
+
|
|
91
|
+
// Bonus: insert a ready-made rectangle shape
|
|
92
|
+
const rect = createShapePath("rect", {
|
|
93
|
+
width: 400,
|
|
94
|
+
height: 400,
|
|
95
|
+
fill: "#2563eb",
|
|
96
|
+
});
|
|
97
|
+
console.log(pointsToPathD(rect.points, rect.closed));
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Show the SVG in the browser:
|
|
101
|
+
|
|
102
|
+
```html
|
|
103
|
+
<!doctype html>
|
|
104
|
+
<html>
|
|
105
|
+
<body>
|
|
106
|
+
<div id="out"></div>
|
|
107
|
+
<script type="module">
|
|
108
|
+
import { createShapePath, buildSvgMarkup } from "@crafing/svg-maker";
|
|
109
|
+
|
|
110
|
+
const path = createShapePath("ellipse", {
|
|
111
|
+
width: 400,
|
|
112
|
+
height: 300,
|
|
113
|
+
fill: "#16a34a",
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
document.getElementById("out").innerHTML = buildSvgMarkup([path], {
|
|
117
|
+
width: 400,
|
|
118
|
+
height: 300,
|
|
119
|
+
});
|
|
120
|
+
</script>
|
|
121
|
+
</body>
|
|
122
|
+
</html>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
If you see a green oval, the package is integrated correctly.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 4. Understand the data model
|
|
130
|
+
|
|
131
|
+
Everything is plain JavaScript objects. You can `JSON.stringify` them and store them.
|
|
132
|
+
|
|
133
|
+
### Point
|
|
134
|
+
|
|
135
|
+
```js
|
|
136
|
+
{
|
|
137
|
+
id: "pt-1", // unique string
|
|
138
|
+
x: 120, // position
|
|
139
|
+
y: 80,
|
|
140
|
+
kind: "corner", // "corner" OR "curve"
|
|
141
|
+
// only for kind === "curve":
|
|
142
|
+
c1x: 100, c1y: 80, // handle toward the previous point
|
|
143
|
+
c2x: 140, c2y: 80, // handle toward the next point
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Path
|
|
148
|
+
|
|
149
|
+
```js
|
|
150
|
+
{
|
|
151
|
+
id: "path-1",
|
|
152
|
+
name: "Path 1",
|
|
153
|
+
points: [ /* points above */ ],
|
|
154
|
+
closed: false, // true = connect last point back to first
|
|
155
|
+
fill: "#111827",
|
|
156
|
+
stroke: "none",
|
|
157
|
+
strokeWidth: 1, // open line default = LINE_MIN_STROKE_WIDTH (1)
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Stroke rules** (see `resolvePathPaint` / `LINE_MIN_STROKE_WIDTH`):
|
|
162
|
+
|
|
163
|
+
| Path | Default / paint |
|
|
164
|
+
|------|-----------------|
|
|
165
|
+
| Open (`closed: false`) — line | `strokeWidth` minimum **1**; stroke color falls back to fill if `"none"` |
|
|
166
|
+
| Closed — fill shape | `strokeWidth` may be **0** (no outline until you raise it) |
|
|
167
|
+
|
|
168
|
+
`createEmptyPath({ closed: false })` defaults stroke width to **1**; `closed: true` (and shapes) default to **0**.
|
|
169
|
+
|
|
170
|
+
### Tools / shapes (strings you pass from your UI)
|
|
171
|
+
|
|
172
|
+
- Tools: `"pen"` | `"select"` | `"curve"` (for your own UI state)
|
|
173
|
+
- Shapes: `"rect"` | `"rounded-rect"` | `"ellipse"` | `"triangle"`
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 5. Build a path from clicks
|
|
178
|
+
|
|
179
|
+
Example: user clicks on an SVG → you add a corner point.
|
|
180
|
+
|
|
181
|
+
```js
|
|
182
|
+
import { createEmptyPath, nextSvgMakerId, pointsToPathD } from "@crafing/svg-maker";
|
|
183
|
+
|
|
184
|
+
let path = createEmptyPath({ name: "Path 1", fill: "#111827" });
|
|
185
|
+
|
|
186
|
+
function onCanvasClick(x, y) {
|
|
187
|
+
path = {
|
|
188
|
+
...path,
|
|
189
|
+
points: [
|
|
190
|
+
...path.points,
|
|
191
|
+
{
|
|
192
|
+
id: nextSvgMakerId("pt"),
|
|
193
|
+
x,
|
|
194
|
+
y,
|
|
195
|
+
kind: "corner",
|
|
196
|
+
},
|
|
197
|
+
],
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
// redraw using this string
|
|
201
|
+
const d = pointsToPathD(path.points, path.closed);
|
|
202
|
+
mySvgPathElement.setAttribute("d", d);
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Close the path later:
|
|
207
|
+
|
|
208
|
+
```js
|
|
209
|
+
path = { ...path, closed: true };
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 6. Curves and corners
|
|
215
|
+
|
|
216
|
+
### Turn a corner into a curve
|
|
217
|
+
|
|
218
|
+
```js
|
|
219
|
+
import { makePointCurve, makePointCorner } from "@crafing/svg-maker";
|
|
220
|
+
|
|
221
|
+
// index = which point in path.points
|
|
222
|
+
path.points = makePointCurve(path.points, index, path.closed);
|
|
223
|
+
|
|
224
|
+
// back to a sharp corner
|
|
225
|
+
path.points = makePointCorner(path.points, index);
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Insert a curve point on a line between two points
|
|
229
|
+
|
|
230
|
+
`endIndex` = index of the segment’s **end** point (the point after the segment).
|
|
231
|
+
|
|
232
|
+
```js
|
|
233
|
+
import { insertCurvePointOnSegment } from "@crafing/svg-maker";
|
|
234
|
+
|
|
235
|
+
const { points, selectedPointId } = insertCurvePointOnSegment(
|
|
236
|
+
path.points,
|
|
237
|
+
endIndex,
|
|
238
|
+
mouseX,
|
|
239
|
+
mouseY,
|
|
240
|
+
path.closed,
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
path.points = points;
|
|
244
|
+
// selectedPointId is returned for callers that want it —
|
|
245
|
+
// UI editors typically do NOT auto-select (add ≠ select / focus).
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Round a corner (like a rounded rectangle corner)
|
|
249
|
+
|
|
250
|
+
```js
|
|
251
|
+
import { roundCornerAt, previewRoundCorner } from "@crafing/svg-maker";
|
|
252
|
+
|
|
253
|
+
const { points, selectedPointId } = roundCornerAt(
|
|
254
|
+
path.points,
|
|
255
|
+
index,
|
|
256
|
+
16, // radius in px
|
|
257
|
+
path.closed,
|
|
258
|
+
);
|
|
259
|
+
path.points = points;
|
|
260
|
+
|
|
261
|
+
// Optional: preview before committing
|
|
262
|
+
const preview = previewRoundCorner(path.points, index, 16, path.closed);
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Move / edit one point
|
|
266
|
+
|
|
267
|
+
```js
|
|
268
|
+
import { updatePointFields } from "@crafing/svg-maker";
|
|
269
|
+
|
|
270
|
+
path.points = updatePointFields(path.points, pointId, {
|
|
271
|
+
x: newX,
|
|
272
|
+
y: newY,
|
|
273
|
+
});
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## 7. Shapes
|
|
279
|
+
|
|
280
|
+
```js
|
|
281
|
+
import { createShapePath } from "@crafing/svg-maker";
|
|
282
|
+
|
|
283
|
+
const rect = createShapePath("rect", {
|
|
284
|
+
width: 400,
|
|
285
|
+
height: 400,
|
|
286
|
+
fill: "#111827",
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
const rounded = createShapePath("rounded-rect", {
|
|
290
|
+
width: 400,
|
|
291
|
+
height: 400,
|
|
292
|
+
fill: "#111827",
|
|
293
|
+
radius: 32,
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
const oval = createShapePath("ellipse", { width: 400, height: 300, fill: "#e11d48" });
|
|
297
|
+
const tri = createShapePath("triangle", { width: 400, height: 400, fill: "#ca8a04" });
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
Add to your list of paths:
|
|
301
|
+
|
|
302
|
+
```js
|
|
303
|
+
const paths = [rect, oval];
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 8. Hit-testing (mouse near a point or line)
|
|
309
|
+
|
|
310
|
+
Use this when building your own canvas so clicks can select points or insert on edges.
|
|
311
|
+
|
|
312
|
+
```js
|
|
313
|
+
import {
|
|
314
|
+
findNearestPointHit,
|
|
315
|
+
findNearestSegmentHit,
|
|
316
|
+
} from "@crafing/svg-maker";
|
|
317
|
+
|
|
318
|
+
const paths = [path]; // array of SvgMakerPath
|
|
319
|
+
|
|
320
|
+
function onMouseMove(x, y) {
|
|
321
|
+
const pointHit = findNearestPointHit(paths, x, y, 16);
|
|
322
|
+
// pointHit → { pathId, pointId, pointIndex, kind, ... } or null
|
|
323
|
+
|
|
324
|
+
const segHit = findNearestSegmentHit(paths, x, y, 14);
|
|
325
|
+
// segHit → { pathId, endIndex, x, y, dist, ... } or null
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Related helpers:
|
|
330
|
+
|
|
331
|
+
```js
|
|
332
|
+
import {
|
|
333
|
+
listPathSegments,
|
|
334
|
+
segmentToPathD,
|
|
335
|
+
closestPointOnSegment,
|
|
336
|
+
curveHandlesOnSegment,
|
|
337
|
+
resolvePathPaint,
|
|
338
|
+
} from "@crafing/svg-maker";
|
|
339
|
+
|
|
340
|
+
const paint = resolvePathPaint(path); // { fill, stroke, strokeWidth }
|
|
341
|
+
// Open paths: paint.strokeWidth ≥ LINE_MIN_STROKE_WIDTH (1)
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
```js
|
|
345
|
+
import { LINE_MIN_STROKE_WIDTH, resolvePathPaint } from "@crafing/svg-maker";
|
|
346
|
+
// LINE_MIN_STROKE_WIDTH === 1
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## 9. Export SVG and download
|
|
352
|
+
|
|
353
|
+
```js
|
|
354
|
+
import { buildSvgMarkup } from "@crafing/svg-maker";
|
|
355
|
+
|
|
356
|
+
const markup = buildSvgMarkup(paths, { width: 400, height: 400 });
|
|
357
|
+
|
|
358
|
+
function downloadSvg(filename = "drawing.svg") {
|
|
359
|
+
const blob = new Blob([markup], { type: "image/svg+xml" });
|
|
360
|
+
const url = URL.createObjectURL(blob);
|
|
361
|
+
const a = document.createElement("a");
|
|
362
|
+
a.href = url;
|
|
363
|
+
a.download = filename;
|
|
364
|
+
a.click();
|
|
365
|
+
URL.revokeObjectURL(url);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
async function copySvg() {
|
|
369
|
+
await navigator.clipboard.writeText(markup);
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## 10. Save / load from a database
|
|
376
|
+
|
|
377
|
+
Save the **path objects** (or the whole `paths` array), not only the SVG string — so the user can edit again later.
|
|
378
|
+
|
|
379
|
+
```js
|
|
380
|
+
// SAVE
|
|
381
|
+
await fetch("/api/drawings", {
|
|
382
|
+
method: "POST",
|
|
383
|
+
headers: { "Content-Type": "application/json" },
|
|
384
|
+
body: JSON.stringify({
|
|
385
|
+
width: 400,
|
|
386
|
+
height: 400,
|
|
387
|
+
paths, // array of SvgMakerPath
|
|
388
|
+
}),
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
// LOAD
|
|
392
|
+
const saved = await fetch("/api/drawings/123").then((r) => r.json());
|
|
393
|
+
const paths = saved.paths;
|
|
394
|
+
const width = saved.width;
|
|
395
|
+
const height = saved.height;
|
|
396
|
+
|
|
397
|
+
// show again
|
|
398
|
+
const svg = buildSvgMarkup(paths, { width, height });
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## 11. Use with React
|
|
404
|
+
|
|
405
|
+
If you use React, install the companion hook package and follow its README:
|
|
406
|
+
|
|
407
|
+
```bash
|
|
408
|
+
npm install @crafing/react-svg-maker
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
```jsx
|
|
412
|
+
import { useSvgMaker } from "@crafing/react-svg-maker";
|
|
413
|
+
|
|
414
|
+
const { paths, markup, addPath, controllerProps } = useSvgMaker({
|
|
415
|
+
width: 400,
|
|
416
|
+
height: 400,
|
|
417
|
+
});
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
`@crafing/react-svg-maker` also has **no UI** — it only holds state. You still build the artboard.
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## 12. API checklist
|
|
425
|
+
|
|
426
|
+
| Function | Purpose |
|
|
427
|
+
|----------|---------|
|
|
428
|
+
| `nextSvgMakerId(prefix?)` | New unique id |
|
|
429
|
+
| `LINE_MIN_STROKE_WIDTH` | `1` — minimum stroke for open (line) paths |
|
|
430
|
+
| `createEmptyPath(options?)` | Empty path (open → strokeWidth 1, closed → 0) |
|
|
431
|
+
| `createShapePath(kind, options?)` | Rect / rounded-rect / ellipse / triangle |
|
|
432
|
+
| `pointsToPathD(points, closed?)` | SVG `d` string |
|
|
433
|
+
| `buildSvgMarkup(paths, { width, height })` | Full SVG document |
|
|
434
|
+
| `resolvePathPaint(path)` | Normalized fill/stroke (open line min stroke 1) |
|
|
435
|
+
| `makePointCurve` / `makePointCorner` | Toggle point kind |
|
|
436
|
+
| `insertCurvePointOnSegment` | Add curve on an edge |
|
|
437
|
+
| `roundCornerAt` / `previewRoundCorner` | Round a corner |
|
|
438
|
+
| `updatePointFields` | Patch one point |
|
|
439
|
+
| `listPathSegments` / `segmentToPathD` | Segment helpers |
|
|
440
|
+
| `closestPointOnSegment` | Closest point on a segment |
|
|
441
|
+
| `curveHandlesOnSegment` | Suggested handles at a position |
|
|
442
|
+
| `findNearestPointHit` / `findNearestSegmentHit` | Mouse hit-testing |
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## 13. Common mistakes
|
|
447
|
+
|
|
448
|
+
1. **Expecting a visible editor after install**
|
|
449
|
+
This package has no UI. You must draw SVG yourself or use a React artboard.
|
|
450
|
+
|
|
451
|
+
2. **Forgetting `closed: true`**
|
|
452
|
+
Open paths do not connect the last point to the first.
|
|
453
|
+
|
|
454
|
+
3. **Mutating `points` in place without replacing the array**
|
|
455
|
+
Prefer immutable updates (`path = { ...path, points: nextPoints }`) so React / your UI re-renders.
|
|
456
|
+
|
|
457
|
+
4. **Saving only the SVG string**
|
|
458
|
+
Users cannot edit curves later. Save the `paths` JSON.
|
|
459
|
+
|
|
460
|
+
5. **Wrong `endIndex` for `insertCurvePointOnSegment`**
|
|
461
|
+
Pass the index of the segment’s **end** point, not the start.
|
|
462
|
+
|
|
463
|
+
---
|
|
464
|
+
|
|
465
|
+
## License
|
|
466
|
+
|
|
467
|
+
MIT
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
export type SvgMakerTool = "pen" | "select" | "curve";
|
|
2
|
+
export type SvgMakerShapeKind =
|
|
3
|
+
| "rect"
|
|
4
|
+
| "rounded-rect"
|
|
5
|
+
| "ellipse"
|
|
6
|
+
| "triangle";
|
|
7
|
+
|
|
8
|
+
export interface SvgMakerPoint {
|
|
9
|
+
id: string;
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
kind: "corner" | "curve";
|
|
13
|
+
c1x?: number;
|
|
14
|
+
c1y?: number;
|
|
15
|
+
c2x?: number;
|
|
16
|
+
c2y?: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface SvgMakerPath {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
points: SvgMakerPoint[];
|
|
23
|
+
closed: boolean;
|
|
24
|
+
fill: string;
|
|
25
|
+
stroke: string;
|
|
26
|
+
strokeWidth: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Minimum stroke for open (line) paths. Closed / round defaults to 0. */
|
|
30
|
+
export const LINE_MIN_STROKE_WIDTH: 1;
|
|
31
|
+
|
|
32
|
+
export function nextSvgMakerId(prefix?: string): string;
|
|
33
|
+
export function createEmptyPath(options?: {
|
|
34
|
+
name?: string;
|
|
35
|
+
fill?: string;
|
|
36
|
+
stroke?: string;
|
|
37
|
+
strokeWidth?: number;
|
|
38
|
+
/** Default `false`. Set `true` so new empty paths start closed. */
|
|
39
|
+
closed?: boolean;
|
|
40
|
+
}): SvgMakerPath;
|
|
41
|
+
export function pointsToPathD(
|
|
42
|
+
points: SvgMakerPoint[],
|
|
43
|
+
closed?: boolean,
|
|
44
|
+
): string;
|
|
45
|
+
export function makePointCurve(
|
|
46
|
+
points: SvgMakerPoint[],
|
|
47
|
+
index: number,
|
|
48
|
+
closed?: boolean,
|
|
49
|
+
): SvgMakerPoint[];
|
|
50
|
+
export function makePointCorner(
|
|
51
|
+
points: SvgMakerPoint[],
|
|
52
|
+
index: number,
|
|
53
|
+
): SvgMakerPoint[];
|
|
54
|
+
export function listPathSegments(
|
|
55
|
+
points: SvgMakerPoint[],
|
|
56
|
+
closed?: boolean,
|
|
57
|
+
): Array<{
|
|
58
|
+
startIndex: number;
|
|
59
|
+
endIndex: number;
|
|
60
|
+
start: SvgMakerPoint;
|
|
61
|
+
end: SvgMakerPoint;
|
|
62
|
+
closing: boolean;
|
|
63
|
+
}>;
|
|
64
|
+
export function segmentToPathD(
|
|
65
|
+
start: SvgMakerPoint,
|
|
66
|
+
end: SvgMakerPoint,
|
|
67
|
+
closing?: boolean,
|
|
68
|
+
): string;
|
|
69
|
+
export function closestPointOnSegment(
|
|
70
|
+
start: SvgMakerPoint,
|
|
71
|
+
end: SvgMakerPoint,
|
|
72
|
+
x: number,
|
|
73
|
+
y: number,
|
|
74
|
+
closing?: boolean,
|
|
75
|
+
): { x: number; y: number; t: number; dist: number } | null;
|
|
76
|
+
export function curveHandlesOnSegment(
|
|
77
|
+
start: SvgMakerPoint,
|
|
78
|
+
end: SvgMakerPoint,
|
|
79
|
+
x: number,
|
|
80
|
+
y: number,
|
|
81
|
+
): {
|
|
82
|
+
x: number;
|
|
83
|
+
y: number;
|
|
84
|
+
c1x: number;
|
|
85
|
+
c1y: number;
|
|
86
|
+
c2x: number;
|
|
87
|
+
c2y: number;
|
|
88
|
+
};
|
|
89
|
+
export function findNearestPointHit(
|
|
90
|
+
paths: SvgMakerPath[],
|
|
91
|
+
x: number,
|
|
92
|
+
y: number,
|
|
93
|
+
maxDist?: number,
|
|
94
|
+
): {
|
|
95
|
+
pathId: string;
|
|
96
|
+
pointId: string;
|
|
97
|
+
pointIndex: number;
|
|
98
|
+
x: number;
|
|
99
|
+
y: number;
|
|
100
|
+
dist: number;
|
|
101
|
+
kind: string;
|
|
102
|
+
closed: boolean;
|
|
103
|
+
} | null;
|
|
104
|
+
export function findNearestSegmentHit(
|
|
105
|
+
paths: SvgMakerPath[],
|
|
106
|
+
x: number,
|
|
107
|
+
y: number,
|
|
108
|
+
maxDist?: number,
|
|
109
|
+
): {
|
|
110
|
+
pathId: string;
|
|
111
|
+
endIndex: number;
|
|
112
|
+
closing: boolean;
|
|
113
|
+
x: number;
|
|
114
|
+
y: number;
|
|
115
|
+
dist: number;
|
|
116
|
+
} | null;
|
|
117
|
+
export function insertCurvePointOnSegment(
|
|
118
|
+
points: SvgMakerPoint[],
|
|
119
|
+
endIndex: number,
|
|
120
|
+
x: number,
|
|
121
|
+
y: number,
|
|
122
|
+
closed?: boolean,
|
|
123
|
+
): { points: SvgMakerPoint[]; selectedPointId: string | null };
|
|
124
|
+
export function insertCornerPointOnSegment(
|
|
125
|
+
points: SvgMakerPoint[],
|
|
126
|
+
endIndex: number,
|
|
127
|
+
x: number,
|
|
128
|
+
y: number,
|
|
129
|
+
closed?: boolean,
|
|
130
|
+
): { points: SvgMakerPoint[]; selectedPointId: string | null };
|
|
131
|
+
export function roundCornerAt(
|
|
132
|
+
points: SvgMakerPoint[],
|
|
133
|
+
index: number,
|
|
134
|
+
radius?: number,
|
|
135
|
+
closed?: boolean,
|
|
136
|
+
): { points: SvgMakerPoint[]; selectedPointId: string | null };
|
|
137
|
+
export function previewRoundCorner(
|
|
138
|
+
points: SvgMakerPoint[],
|
|
139
|
+
index: number,
|
|
140
|
+
radius?: number,
|
|
141
|
+
closed?: boolean,
|
|
142
|
+
): {
|
|
143
|
+
d: string;
|
|
144
|
+
enter: SvgMakerPoint;
|
|
145
|
+
exit: SvgMakerPoint;
|
|
146
|
+
} | null;
|
|
147
|
+
export function updatePointFields(
|
|
148
|
+
points: SvgMakerPoint[],
|
|
149
|
+
pointId: string,
|
|
150
|
+
patch: Partial<SvgMakerPoint>,
|
|
151
|
+
): SvgMakerPoint[];
|
|
152
|
+
export function resolvePathPaint(path?: Partial<SvgMakerPath>): {
|
|
153
|
+
fill: string;
|
|
154
|
+
stroke: string;
|
|
155
|
+
strokeWidth: number;
|
|
156
|
+
};
|
|
157
|
+
export function buildSvgMarkup(
|
|
158
|
+
paths: SvgMakerPath[],
|
|
159
|
+
size: { width: number; height: number },
|
|
160
|
+
): string;
|
|
161
|
+
export function createShapePath(
|
|
162
|
+
kind: SvgMakerShapeKind,
|
|
163
|
+
options?: {
|
|
164
|
+
width?: number;
|
|
165
|
+
height?: number;
|
|
166
|
+
fill?: string;
|
|
167
|
+
radius?: number;
|
|
168
|
+
},
|
|
169
|
+
): SvgMakerPath;
|
package/package.json
CHANGED
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crafing/svg-maker",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Framework-agnostic SVG path maker core (points, curves, shapes, export)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./vkmxr.js",
|
|
7
|
+
"module": "./vkmxr.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./index.d.ts",
|
|
11
|
+
"import": "./vkmxr.js",
|
|
12
|
+
"default": "./vkmxr.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"types": "./index.d.ts",
|
|
16
|
+
"files": [
|
|
17
|
+
"vkmxr.js",
|
|
18
|
+
"index.d.ts",
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE"
|
|
21
|
+
],
|
|
22
|
+
"sideEffects": false,
|
|
23
|
+
"keywords": [
|
|
24
|
+
"svg",
|
|
25
|
+
"path",
|
|
26
|
+
"bezier",
|
|
27
|
+
"curve",
|
|
28
|
+
"vector"
|
|
29
|
+
],
|
|
30
|
+
"license": "MIT"
|
|
31
|
+
}
|
package/vkmxr.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x3b24b7=_0x285b;(function(_0x43ca07,_0x40a53f){const _0x417c63=_0x285b,_0x16bf9f=_0x43ca07();while(!![]){try{const _0x4e7cde=-parseInt(_0x417c63(0xef))/0x1*(-parseInt(_0x417c63(0x163))/0x2)+-parseInt(_0x417c63(0x16c))/0x3+-parseInt(_0x417c63(0x1af))/0x4*(parseInt(_0x417c63(0x181))/0x5)+parseInt(_0x417c63(0x1ef))/0x6+parseInt(_0x417c63(0xf6))/0x7*(parseInt(_0x417c63(0xd6))/0x8)+-parseInt(_0x417c63(0x135))/0x9+-parseInt(_0x417c63(0x221))/0xa*(parseInt(_0x417c63(0x1bb))/0xb);if(_0x4e7cde===_0x40a53f)break;else _0x16bf9f['push'](_0x16bf9f['shift']());}catch(_0xeee139){_0x16bf9f['push'](_0x16bf9f['shift']());}}}(_0x2d54,0x92b02));var _0x18a0a9=0x0;function _0x2d54(){const _0x13bec4=['rMTmCgu','zMLUzeLUzgv4','uM91BMrLzcbYzwn0','Dhj1BMm','Cdj4','iIb2Awv3qM94psiWidaG','AwXywvK','DxDbuwq','qxvRsw4','weHVwwi','uefutw8','zwXSAxbZzq','tg9gvwm','yKXbAvq','AKPMrgS','zxDtvge','A1LRtwW','v2TgCg4','rwXSAxbZzq','uK5tu1m','sMv1quG','D3fwCMu','DxHvuMu','zKP6Axe','uMvJDgfUz2XL','vw9frxO','uu94Bwy','C1Drv3e','mtm2zwHIzvfQ','AuTlB0K','A3jPt0y','EKDkCui','uurzr3G','sLbMEu4','zNLoBu4','zxfrq3q','vM93z2C','yNP3uhG','z1bAAui','vNfxrha','nda3AuXWA0fS','CMPTv1e','zxnXzgm','ANnQChG','y2XVC2LUzW','yuvAEM4','u1nUsgG','r29gCeK','z0rQqK8','yZj5','zgLZDa','wffWB0O','sgftzMK','CMvJDa','s3rzDfC','u0DwDg0','CKTMt2K','CKnHsK8','u0DLr3G','AxngAw5PDgu','iIbMAwXSpsi','zfrYzMm','AgXiAeG','C3rHCNq','q0Pfrxu','CdfJmxK','uvHPChO','rvnXEuK','D3f3q0W','sLHbvNu','DgT3CK0','ALnuDhK','q1bLELO','EKXiz1m','BMn3rMG','wxzQuva','CfLvzgi','ueflyLG','DLrcsgK','yZf5','AwvWy3a','CfzNCwe','zuvlAMS','zLbhDKm','wwncEvu','jMX0oW','AxnbCNjHEq','v3ftCM8','ENfJsfy','CMvWBgfJzq','BfDgvu8','CdjJmxK','mJy0mdK0mM96ANnwuG','runQyMu','r0TZq1K','u25tz3O','iIbZDhjVA2uTD2LKDgG9iG','rhbAC2G','q0zAswG','rgvUsKi','BwLU','vfD4s3G','Cg9PBNrZ','EMXgExa','Dg5xA2C','vgPnBLq','DKrhwMO','reLcCKq','rKn5u2K','rvjKDvu','yK9kuKS','vgjPtNu','ug1JENC','EhnAB00','ieWG','iJ4k','wezdrvy','yxnQvem','C0LwDNO','CdjJmNK','s3PYwgS','Bwfgqwe','yKPRr3O','y3vYDMu','uxjqrgC','EKD6A0O','ALHWvxK','y2nLtem','AgnZtuS','sKHyAwe','DxvLu2W','zxHxtwG','sMfHALa','sMrVwwu','Be9wzfm','s0fiBNy','vujxsgO','rxrNvxK','vw5lqLG','EgnjDeS','BeTMuuy','D29ptve','mtmYntuWEhv2t2ry','wKfvCfi','u0HwBLe','s1Leugy','u0LLquu','shfOA1C','Bg1gAhm','CNHYrM8','Du1qseu','vMjoz0y','y0nOvuK','B2TRtKm','BNvLB2q','CdfJmNK','BgvU','sgrczfG','rKftwu0','Cw9TAgW','s01zBfa','r2XyDxO','BM9Uzq','Dg9tDhjPBMC','EgvKqM0','s3HXsge','zwDcCg8','zw5Ksw5KzxG','Avvkv1m','C3rHCNrZv2L0Aa','v1f0see','reL1tNq','C3znBfy','ofDsvMzjtG','zKTrAhq','v0f0Bhq','DNrAqNe','DwrkwKi','EM1Ur2K','ica8Cgf0AcbKpsi','q3jhCLG','EvLItvK','DLzMEKy','zurKDKG','yZf4','vhjPyw5NBgu','wKPbwM8','sLPJzgC','yvrAsw0','BgL2sMW','yKjzELi','B2nHt0q','CwvftMC','Cwnsr24','AM9PBG','tMjry1i','sujKBfy','tK10D1C','muHKuKXZzq','ugrzD2u','CdjJmNG','Bun2BgW','yZj4','A2LUza','EKfktvu','mZeWmtqZng1lB3fyDG','vwnlvM4','CdfJmxG','C3rYB2TL','rwn0CKK','s2XYEfG','suvOteC','B2j6u3q','rMXIC3y','DwLAENa','u01uyNa','D1r3wvK','CfftDMG','wffTEvu','t0nwruy','vxP3qLm','AxnUAe8','yujqqLi','rNrxyvK','rhbpueu','C1LIqKm','yM54zwq','Cdf4','AhLWB3q','BM93','vhjjCfq','zw5K','uMLhD1C','zxbrAKu','z0TNC0K','tNfoqw8','vvLXshO','r2Pjthe','Cdf5','surVAM4','sxnpz3a','C3vwwMq','ExDRwLy','iemG','D0ntt3K','weL3uKC','A3rtr2C','BgvUz3rO','zMLSDgvY','t0XfsM4','z2ndA1e','yw94AhG','wMvdELi','uu1Nug0','EMHHwvC','ANDlChK','s3vVyLa','DffXwhm','CvDsDuy','rvnfAKO','re9wqM8','DxDVrNG','vxLMBwG','zMLSBa','CdjJmxG','iIbZDhjVA2u9iG','jNf1B3q7','jMfTCdS','nJe4mdC1t3DIzKre','jMD0oW','rfbcANa','t25UwK4','BhLotNO','AxnUA2K','thfOtvq','Cgf0Aa','ELPNvhi','AgXmtg0','v2Hdww4','u2jLEu4','AvzyANi','BwfW','tNztrfK','Cdj5','B0vhB00','DMH5BMW','r0fby0W','pd94BwWGDMvYC2LVBJ0Ims4WiIbLBMnVzgLUzZ0IvvrgltGIpZ4kphn2zYb4BwXUCZ0IAhr0CdOVl3D3DY53mY5VCMCVmJaWmc9ZDMCIihDPzhrOpsi','yxLqrKC','Bwf4','z3PmsxO','CMTXweO','vMPpy04','s1HpAeO','yLrqzLu','C3rYB2TLv2LKDgG','zLP6z04','y2D6BeW','Eu5ht1C','DejkEKG','t1bgBKW','yvf1tvy','Dfnjr3K','ugf0Aa','CM91BMq','v2fICvu','q09HuuK','wLH2r1a','rvjMuLO','t2vRBLa','Be95Cva','iZeXmtGYnW','vfzcC2y','uejdwM8','mJa2mduZoePUzMDRAG','ww5rDgW','vMrQAve','ANzPELy','wM5Qru8','t1fHywG','vfPKzMq','zeLTDxi','Be1LBhK','nti3mZq2uLrSCgLo','zLPRDuW','C3bSAwnL','DgLOv2O','uKvks1O','sejpuKW','ChvZAa','seHRCLO','yLbVs2C','iIbOzwLNAhq9iG','s05KDwO','B3rIAKq','rhPgruG','AKnNsKK','sKndzxa','thDOrLu','yvnfu20','iIbMAwXSlxj1Bgu9iMv2zw5VzgqIlZ4','EhjhrNK','DKD5ELG','DuTmshC','odq5nJvzuwDVDxm','zxnswwe','y2jqqve','yK1uy2m','y2XVC2vK','tNzOugm','qwPhr3u','BfrPuNu','cJWVC3zNpGO','DhjPyw5NBgu','CdfJmNG','iZaWmdaWma','uwjPCNK','C2XPy2u','y29YBMvY','wKzHCxq','AwHHCfm','AeD6vu4'];_0x2d54=function(){return _0x13bec4;};return _0x2d54();}function nextSvgMakerId(_0x26153b='p'){const _0x20e179=_0x285b;return _0x18a0a9+=0x1,_0x26153b+'-'+Date[_0x20e179(0x10e)]()[_0x20e179(0x236)](0x24)+'-'+_0x18a0a9;}var _0x15f5ad=0x1;function createEmptyPath({name:name=_0x3b24b7(0x158),fill:fill=_0x3b24b7(0x18c),stroke:stroke=_0x3b24b7(0x235),strokeWidth:_0x2d80e7,closed:closed=![]}={}){const _0xa3a942=_0x3b24b7,_0x34f8cc={'uKLHw':function(_0x5d55bf,_0x38d8a9){return _0x5d55bf===_0x38d8a9;},'FkLpe':function(_0x56b011,_0x5e5717){return _0x56b011(_0x5e5717);},'JXAVu':function(_0x27a29b,_0x5ba097){return _0x27a29b(_0x5ba097);}},_0x4b3e1c=_0x34f8cc[_0xa3a942(0x180)](closed,!![]);return{'id':_0x34f8cc[_0xa3a942(0x193)](nextSvgMakerId,_0xa3a942(0x13c)),'name':name,'points':[],'closed':_0x4b3e1c,'fill':fill,'stroke':stroke,'strokeWidth':_0x2d80e7!=null?_0x34f8cc[_0xa3a942(0x1d8)](Number,_0x2d80e7)||0x0:_0x4b3e1c?0x0:_0x15f5ad};}function resolvePathPaint(_0x1df755={}){const _0x407792=_0x3b24b7,_0x423fde={'SbeyN':_0x407792(0x235),'JeuAH':function(_0x597aa7,_0x3f8df7){return _0x597aa7!==_0x3f8df7;},'vtZBq':_0x407792(0x160),'DOVBo':function(_0x3fe8f4,_0x5c39b2){return _0x3fe8f4!==_0x5c39b2;}},_0x338293=_0x1df755[_0x407792(0x185)]===!![];if(!_0x338293){const _0xc417a3=_0x1df755[_0x407792(0xf9)]&&_0x1df755[_0x407792(0xf9)]!==_0x423fde[_0x407792(0x140)]?_0x1df755[_0x407792(0xf9)]:_0x1df755[_0x407792(0x130)]&&_0x423fde[_0x407792(0x1a7)](_0x1df755[_0x407792(0x130)],_0x407792(0x235))?_0x1df755[_0x407792(0x130)]:_0x423fde[_0x407792(0xd9)];return{'fill':_0x423fde[_0x407792(0x140)],'stroke':_0xc417a3,'strokeWidth':Math[_0x407792(0x14a)](Number(_0x1df755[_0x407792(0x150)])||0x0,_0x15f5ad)};}return{'fill':_0x1df755[_0x407792(0x130)]&&_0x423fde[_0x407792(0x12d)](_0x1df755[_0x407792(0x130)],'')?_0x1df755[_0x407792(0x130)]:_0x407792(0x235),'stroke':_0x1df755[_0x407792(0xf9)]||_0x407792(0x235),'strokeWidth':Number(_0x1df755[_0x407792(0x150)])||0x0};}function pointsToPathD(_0x316163,_0x3667f7=![]){const _0x20d8e7=_0x3b24b7,_0x3d224c={'uiZzp':function(_0x31cf1e,_0x568230){return _0x31cf1e(_0x568230);},'PdYwe':function(_0x10f17d,_0x230a3c){return _0x10f17d(_0x230a3c);},'tSIGy':function(_0x588cf5,_0x51652){return _0x588cf5<_0x51652;},'FASYM':function(_0x20e3ac,_0x54aefb,_0x1eb3f0){return _0x20e3ac(_0x54aefb,_0x1eb3f0);},'gKgsI':function(_0x2cd703,_0x564043){return _0x2cd703-_0x564043;},'yNGOW':function(_0x4272a0,_0x594a0b){return _0x4272a0>=_0x594a0b;},'OnnZN':function(_0x3366f1,_0x36fa1a,_0x58ae24){return _0x3366f1(_0x36fa1a,_0x58ae24);},'JZcdg':function(_0x5a9be4,_0x3540c0){return _0x5a9be4-_0x3540c0;}};if(!Array[_0x20d8e7(0x1e9)](_0x316163)||!_0x316163[_0x20d8e7(0x120)])return'';const _0x3cf803=['M\x20'+_0x3d224c[_0x20d8e7(0xff)](_0x3688b4,_0x316163[0x0]['x'])+'\x20'+_0x3d224c[_0x20d8e7(0xf0)](_0x3688b4,_0x316163[0x0]['y'])];for(let _0x396fab=0x1;_0x3d224c[_0x20d8e7(0x157)](_0x396fab,_0x316163[_0x20d8e7(0x120)]);_0x396fab+=0x1){_0x3cf803[_0x20d8e7(0x172)](_0x3d224c[_0x20d8e7(0x231)](_0x5b9184,_0x316163[_0x3d224c[_0x20d8e7(0x113)](_0x396fab,0x1)],_0x316163[_0x396fab]));}if(_0x3667f7&&_0x3d224c[_0x20d8e7(0x153)](_0x316163[_0x20d8e7(0x120)],0x3)){const _0x5e7858=_0x3d224c[_0x20d8e7(0x138)](_0x5b9184,_0x316163[_0x3d224c[_0x20d8e7(0xe4)](_0x316163[_0x20d8e7(0x120)],0x1)],_0x316163[0x0]);_0x5e7858[_0x20d8e7(0x23c)]('C')&&_0x3cf803[_0x20d8e7(0x172)](_0x5e7858),_0x3cf803[_0x20d8e7(0x172)]('Z');}return _0x3cf803[_0x20d8e7(0xeb)]('\x20');}function _0x32dcfd(_0x335447,_0x78dcbd){const _0x5981ad=_0x3b24b7,_0x37758d={'qWRuF':function(_0x274984,_0x4f029d){return _0x274984-_0x4f029d;},'vhynl':function(_0x45e6bf,_0x5c4621){return _0x45e6bf(_0x5c4621);},'aQuMV':function(_0x398464,_0x284d74){return _0x398464(_0x284d74);},'asjTC':function(_0x2e8c27,_0x3be67f){return _0x2e8c27<_0x3be67f;},'uueSl':function(_0x1d503e,_0xee58ed){return _0x1d503e/_0xee58ed;}},_0x2723b4=_0x37758d[_0x5981ad(0x12b)](_0x37758d[_0x5981ad(0x146)](Number,_0x78dcbd['x']),_0x37758d[_0x5981ad(0x146)](Number,_0x335447['x'])),_0x5cfa61=_0x37758d[_0x5981ad(0x156)](Number,_0x78dcbd['y'])-_0x37758d[_0x5981ad(0x146)](Number,_0x335447['y']),_0xa2bcf0=Math[_0x5981ad(0x10d)](_0x2723b4,_0x5cfa61);if(_0x37758d[_0x5981ad(0x208)](_0xa2bcf0,0.000001))return{'x':0x0,'y':0x0,'len':0x0};return{'x':_0x37758d[_0x5981ad(0x215)](_0x2723b4,_0xa2bcf0),'y':_0x5cfa61/_0xa2bcf0,'len':_0xa2bcf0};}function _0x459651(_0x23ae1b,_0x55e3cd){const _0x2e6a63=_0x3b24b7,_0x30f048={'VjOcN':function(_0x20f029,_0x956157){return _0x20f029-_0x956157;},'VqWDp':function(_0x4722a9,_0x159110){return _0x4722a9===_0x159110;},'iKKoI':function(_0x58ca71,_0x17e39d){return _0x58ca71(_0x17e39d);},'XQpoJ':function(_0x381af2,_0x5510a1){return _0x381af2(_0x5510a1);},'lOVdS':function(_0x34ada2,_0x58ceba){return _0x34ada2/_0x58ceba;},'QXipz':function(_0x4a0c16,_0x413545){return _0x4a0c16(_0x413545);},'NvSDY':function(_0x2723be,_0xcf8b01){return _0x2723be+_0xcf8b01;},'bJkGz':function(_0x5ad907,_0x11322c){return _0x5ad907/_0x11322c;},'SHVnQ':_0x2e6a63(0x20e),'UYqHz':function(_0xd9a0c2,_0x3058ba){return _0xd9a0c2(_0x3058ba);},'Flbsv':function(_0x2b5680,_0x254973){return _0x2b5680/_0x254973;},'GlXuz':function(_0x585985,_0x5a4d84){return _0x585985-_0x5a4d84;},'yYbMY':function(_0x5bad9b,_0x427091){return _0x5bad9b/_0x427091;}},_0x50a543=_0x55e3cd['x']-_0x23ae1b['x'],_0x425503=_0x30f048[_0x2e6a63(0x14d)](_0x55e3cd['y'],_0x23ae1b['y']),_0x2823ed=_0x30f048[_0x2e6a63(0x1ba)](_0x23ae1b[_0x2e6a63(0xf4)],_0x2e6a63(0x20e))&&Number[_0x2e6a63(0x1ce)](_0x30f048[_0x2e6a63(0x1b0)](Number,_0x23ae1b[_0x2e6a63(0xf3)]))?_0x30f048[_0x2e6a63(0x1c6)](Number,_0x23ae1b[_0x2e6a63(0xf3)]):_0x23ae1b['x']+_0x30f048[_0x2e6a63(0x219)](_0x50a543,0x3),_0x2c1ac4=_0x30f048[_0x2e6a63(0x1ba)](_0x23ae1b[_0x2e6a63(0xf4)],_0x2e6a63(0x20e))&&Number[_0x2e6a63(0x1ce)](_0x30f048[_0x2e6a63(0x1b0)](Number,_0x23ae1b[_0x2e6a63(0x1c4)]))?_0x30f048[_0x2e6a63(0x1d5)](Number,_0x23ae1b[_0x2e6a63(0x1c4)]):_0x30f048[_0x2e6a63(0x143)](_0x23ae1b['y'],_0x30f048[_0x2e6a63(0x20d)](_0x425503,0x3)),_0x3db894=_0x30f048[_0x2e6a63(0x1ba)](_0x55e3cd[_0x2e6a63(0xf4)],_0x30f048[_0x2e6a63(0x223)])&&Number[_0x2e6a63(0x1ce)](_0x30f048[_0x2e6a63(0x115)](Number,_0x55e3cd[_0x2e6a63(0xe1)]))?_0x30f048[_0x2e6a63(0x1c6)](Number,_0x55e3cd[_0x2e6a63(0xe1)]):_0x30f048[_0x2e6a63(0x14d)](_0x55e3cd['x'],_0x30f048[_0x2e6a63(0xfe)](_0x50a543,0x3)),_0x42a4af=_0x30f048[_0x2e6a63(0x1ba)](_0x55e3cd[_0x2e6a63(0xf4)],_0x2e6a63(0x20e))&&Number[_0x2e6a63(0x1ce)](Number(_0x55e3cd[_0x2e6a63(0x1e2)]))?_0x30f048[_0x2e6a63(0x1d5)](Number,_0x55e3cd[_0x2e6a63(0x1e2)]):_0x30f048[_0x2e6a63(0x234)](_0x55e3cd['y'],_0x30f048[_0x2e6a63(0xde)](_0x425503,0x3));return{'c1x':_0x2823ed,'c1y':_0x2c1ac4,'c2x':_0x3db894,'c2y':_0x42a4af};}function _0x3afa3f(_0x32f55f,_0x2daf4a){const _0x21831d=_0x3b24b7,_0x10db4f={'CPezZ':function(_0x140428,_0x51ce5e){return _0x140428===_0x51ce5e;},'rCaJO':_0x21831d(0x20e),'LqhMT':function(_0x25c43f,_0x469496){return _0x25c43f===_0x469496;}};return _0x10db4f[_0x21831d(0x1db)](_0x32f55f?.[_0x21831d(0xf4)],_0x10db4f[_0x21831d(0x1cc)])||_0x10db4f[_0x21831d(0x13b)](_0x2daf4a?.[_0x21831d(0xf4)],_0x10db4f[_0x21831d(0x1cc)]);}function _0x5b9184(_0x4d123e,_0x1387ea){const _0x29ee08=_0x3b24b7,_0xf80e5a={'isnhO':function(_0x50d00b,_0x5c00cb){return _0x50d00b(_0x5c00cb);},'WqSro':function(_0xdd2b58,_0x4290ca){return _0xdd2b58(_0x4290ca);},'qcRGn':function(_0x319314,_0x17555e){return _0x319314(_0x17555e);}};if(_0x3afa3f(_0x4d123e,_0x1387ea)){const {c1x:_0xd3c225,c1y:_0x5c54fd,c2x:_0x1dc868,c2y:_0x4970e2}=_0x459651(_0x4d123e,_0x1387ea);return'C\x20'+_0xf80e5a[_0x29ee08(0x106)](_0x3688b4,_0xd3c225)+'\x20'+_0xf80e5a[_0x29ee08(0x1ea)](_0x3688b4,_0x5c54fd)+'\x20'+_0xf80e5a[_0x29ee08(0xea)](_0x3688b4,_0x1dc868)+'\x20'+_0xf80e5a[_0x29ee08(0x1ea)](_0x3688b4,_0x4970e2)+'\x20'+_0xf80e5a[_0x29ee08(0x106)](_0x3688b4,_0x1387ea['x'])+'\x20'+_0xf80e5a[_0x29ee08(0x1ea)](_0x3688b4,_0x1387ea['y']);}return'L\x20'+_0xf80e5a[_0x29ee08(0x106)](_0x3688b4,_0x1387ea['x'])+'\x20'+_0x3688b4(_0x1387ea['y']);}function _0x48bdf(_0x4af95f,_0xd598c3){const _0x17667a=_0x3b24b7,_0x4a0ed0={'LwhFU':function(_0x18b730,_0x3b7293){return _0x18b730(_0x3b7293);},'HdBdX':function(_0x3df161,_0x9d09d6){return _0x3df161-_0x9d09d6;},'JCCep':function(_0x251fbc,_0x3061f1){return _0x251fbc(_0x3061f1);}},_0x182371=Number(_0xd598c3['x'])-_0x4a0ed0[_0x17667a(0x17b)](Number,_0x4af95f['x']),_0x251bfc=_0x4a0ed0[_0x17667a(0x230)](_0x4a0ed0[_0x17667a(0x17a)](Number,_0xd598c3['y']),Number(_0x4af95f['y']));return Math[_0x17667a(0x10d)](_0x182371,_0x251bfc);}function makePointCurve(_0x53caec,_0x541173,_0x3b0e2f=![]){const _0x4db22e=_0x3b24b7,_0x17f440={'zAJMU':_0x4db22e(0x20e),'TrIpT':function(_0x1267ec,_0x22bfdf){return _0x1267ec(_0x22bfdf);},'SGeGx':function(_0x5e0dce,_0x58aedf){return _0x5e0dce<_0x58aedf;},'bMTcc':function(_0xbf28d7,_0x13e802){return _0xbf28d7>=_0x13e802;},'FCySi':function(_0x4a02e7,_0x41f265){return _0x4a02e7<_0x41f265;},'vGyzX':function(_0x2f18b7,_0x10c231){return _0x2f18b7-_0x10c231;},'QOxmf':function(_0x437ee8,_0x219827){return _0x437ee8>=_0x219827;},'YnQtl':function(_0x452085,_0x3f7956){return _0x452085<_0x3f7956;},'ncwFh':function(_0x486ed7,_0x4aab4c){return _0x486ed7!==_0x4aab4c;},'NqNAo':function(_0x5e334e,_0x23e7e4){return _0x5e334e*_0x23e7e4;},'UnKBX':function(_0x552f1e,_0x1c1697){return _0x552f1e-_0x1c1697;},'Qbiry':function(_0x580c95,_0x3a8e82){return _0x580c95*_0x3a8e82;},'xrGFy':function(_0x364de4,_0x24f23c,_0x50cc85){return _0x364de4(_0x24f23c,_0x50cc85);},'gDjBO':function(_0x3396db,_0x4660ef){return _0x3396db+_0x4660ef;},'XHoYb':function(_0x1fef8d,_0x128468){return _0x1fef8d-_0x128468;},'Pmczw':function(_0x27bfe9,_0x4d3306){return _0x27bfe9+_0x4d3306;}},_0x56f977=Array[_0x4db22e(0x1e9)](_0x53caec)?_0x53caec[_0x4db22e(0x120)]:0x0;if(!_0x56f977||_0x17f440[_0x4db22e(0x1cd)](_0x541173,0x0)||_0x17f440[_0x4db22e(0x184)](_0x541173,_0x56f977))return _0x53caec;let _0x5a0668=_0x541173-0x1,_0xdceb7f=_0x541173+0x1;if(_0x3b0e2f&&_0x17f440[_0x4db22e(0x184)](_0x56f977,0x3)){if(_0x17f440[_0x4db22e(0x1ff)](_0x5a0668,0x0))_0x5a0668=_0x17f440[_0x4db22e(0x17f)](_0x56f977,0x1);if(_0x17f440[_0x4db22e(0x1ad)](_0xdceb7f,_0x56f977))_0xdceb7f=0x0;}const _0x489215=_0x53caec[_0x541173],_0x3b5088=_0x5a0668>=0x0&&_0x17f440[_0x4db22e(0x1ff)](_0x5a0668,_0x56f977)?_0x53caec[_0x5a0668]:null,_0x2dc7fd=_0xdceb7f>=0x0&&_0x17f440[_0x4db22e(0x164)](_0xdceb7f,_0x56f977)&&_0x17f440[_0x4db22e(0x1dd)](_0xdceb7f,_0x541173)?_0x53caec[_0xdceb7f]:null;if(!_0x3b5088&&!_0x2dc7fd)return _0x53caec;const _0x201a1f=0.33;let _0xf929c1=_0x489215['x'],_0x1f9ec6=_0x489215['y'],_0x52335e=_0x489215['x'],_0x3c9f10=_0x489215['y'];if(_0x3b5088){const _0x423e38=_0x32dcfd(_0x3b5088,_0x489215),_0x37d419=Math[_0x4db22e(0x14a)](0xa,_0x17f440[_0x4db22e(0x114)](_0x423e38[_0x4db22e(0x22f)],_0x201a1f));_0xf929c1=_0x17f440[_0x4db22e(0x17f)](_0x489215['x'],_0x17f440[_0x4db22e(0x114)](_0x423e38['x'],_0x37d419)),_0x1f9ec6=_0x17f440[_0x4db22e(0x21d)](_0x489215['y'],_0x17f440[_0x4db22e(0x18d)](_0x423e38['y'],_0x37d419));}if(_0x2dc7fd){const _0x4233f8=_0x17f440[_0x4db22e(0x17e)](_0x32dcfd,_0x489215,_0x2dc7fd),_0x27ce14=Math[_0x4db22e(0x14a)](0xa,_0x17f440[_0x4db22e(0x18d)](_0x4233f8[_0x4db22e(0x22f)],_0x201a1f));_0x52335e=_0x489215['x']+_0x4233f8['x']*_0x27ce14,_0x3c9f10=_0x17f440[_0x4db22e(0x1c3)](_0x489215['y'],_0x4233f8['y']*_0x27ce14);}return _0x3b5088&&!_0x2dc7fd&&(_0x52335e=_0x17f440[_0x4db22e(0x1c3)](_0x489215['x'],_0x17f440[_0x4db22e(0x19c)](_0x489215['x'],_0xf929c1)),_0x3c9f10=_0x17f440[_0x4db22e(0x203)](_0x489215['y'],_0x489215['y']-_0x1f9ec6)),!_0x3b5088&&_0x2dc7fd&&(_0xf929c1=_0x17f440[_0x4db22e(0x19c)](_0x489215['x'],_0x52335e-_0x489215['x']),_0x1f9ec6=_0x17f440[_0x4db22e(0x19c)](_0x489215['y'],_0x3c9f10-_0x489215['y'])),_0x53caec[_0x4db22e(0x142)]((_0xce931b,_0x7e34d2)=>{const _0x2cb6b3=_0x4db22e;if(_0x7e34d2!==_0x541173)return _0xce931b;return{..._0xce931b,'kind':_0x17f440[_0x2cb6b3(0xf5)],'c1x':_0x3688b4(_0xf929c1),'c1y':_0x3688b4(_0x1f9ec6),'c2x':_0x17f440[_0x2cb6b3(0x10f)](_0x3688b4,_0x52335e),'c2y':_0x17f440[_0x2cb6b3(0x10f)](_0x3688b4,_0x3c9f10)};});}function makePointCorner(_0x2600a1,_0x29de95){const _0x45bde7=_0x3b24b7,_0x1f9634={'hlLLm':function(_0x483b78,_0x37faee){return _0x483b78!==_0x37faee;},'KMYlP':_0x45bde7(0x18f)};if(!Array[_0x45bde7(0x1e9)](_0x2600a1)||_0x29de95<0x0||_0x29de95>=_0x2600a1[_0x45bde7(0x120)])return _0x2600a1;return _0x2600a1[_0x45bde7(0x142)]((_0x31901f,_0xba92ce)=>{const _0x3d0d77=_0x45bde7;if(_0x1f9634[_0x3d0d77(0x13e)](_0xba92ce,_0x29de95))return _0x31901f;return{'id':_0x31901f['id'],'x':_0x31901f['x'],'y':_0x31901f['y'],'kind':_0x1f9634[_0x3d0d77(0x233)]};});}function listPathSegments(_0x19a8e4,_0x8a1535=![]){const _0x281797=_0x3b24b7,_0x3431cd={'ESqyI':function(_0x44ae99,_0x4f1e85){return _0x44ae99<_0x4f1e85;},'EtgUy':function(_0x371eda,_0x2a27c0){return _0x371eda-_0x2a27c0;},'tnWkg':function(_0x24bb9b,_0x3b69ef){return _0x24bb9b-_0x3b69ef;},'livJl':function(_0x503c5c,_0x56deda){return _0x503c5c-_0x56deda;}};if(!Array[_0x281797(0x1e9)](_0x19a8e4)||_0x3431cd[_0x281797(0x1d6)](_0x19a8e4[_0x281797(0x120)],0x2))return[];const _0xbd347b=[];for(let _0x4578f6=0x1;_0x3431cd[_0x281797(0x1d6)](_0x4578f6,_0x19a8e4[_0x281797(0x120)]);_0x4578f6+=0x1){_0xbd347b[_0x281797(0x172)]({'startIndex':_0x3431cd[_0x281797(0x21c)](_0x4578f6,0x1),'endIndex':_0x4578f6,'start':_0x19a8e4[_0x3431cd[_0x281797(0x1fb)](_0x4578f6,0x1)],'end':_0x19a8e4[_0x4578f6],'closing':![]});}return _0x8a1535&&_0x19a8e4[_0x281797(0x120)]>=0x3&&_0xbd347b[_0x281797(0x172)]({'startIndex':_0x19a8e4[_0x281797(0x120)]-0x1,'endIndex':0x0,'start':_0x19a8e4[_0x3431cd[_0x281797(0xe6)](_0x19a8e4[_0x281797(0x120)],0x1)],'end':_0x19a8e4[0x0],'closing':!![]}),_0xbd347b;}function segmentToPathD(_0x4515a1,_0x36c519,_0x446e45=![]){const _0x3fac67=_0x3b24b7,_0xab9b2b={'KuobP':function(_0x19f624,_0x4ae5c8,_0x22773c){return _0x19f624(_0x4ae5c8,_0x22773c);},'wTwYY':function(_0x51e209,_0x22bb6e){return _0x51e209(_0x22bb6e);},'jJfDk':function(_0x313c2f,_0x15740e){return _0x313c2f(_0x15740e);},'gPZiB':function(_0x37fdad,_0xeeaa7e){return _0x37fdad(_0xeeaa7e);},'bTPfU':function(_0x32e5af,_0x211f09){return _0x32e5af(_0x211f09);}};if(!_0x4515a1||!_0x36c519)return'';if(_0xab9b2b[_0x3fac67(0x129)](_0x3afa3f,_0x4515a1,_0x36c519)){const {c1x:_0x124b54,c1y:_0x1d2a6c,c2x:_0x3af506,c2y:_0x3f5cea}=_0xab9b2b[_0x3fac67(0x129)](_0x459651,_0x4515a1,_0x36c519);return'M\x20'+_0x3688b4(_0x4515a1['x'])+'\x20'+_0xab9b2b[_0x3fac67(0x101)](_0x3688b4,_0x4515a1['y'])+_0x3fac67(0x11c)+_0xab9b2b[_0x3fac67(0x1a1)](_0x3688b4,_0x124b54)+'\x20'+_0x3688b4(_0x1d2a6c)+'\x20'+_0xab9b2b[_0x3fac67(0x101)](_0x3688b4,_0x3af506)+'\x20'+_0xab9b2b[_0x3fac67(0x1a1)](_0x3688b4,_0x3f5cea)+'\x20'+_0xab9b2b[_0x3fac67(0x1a1)](_0x3688b4,_0x36c519['x'])+'\x20'+_0xab9b2b[_0x3fac67(0x1a1)](_0x3688b4,_0x36c519['y']);}return'M\x20'+_0xab9b2b[_0x3fac67(0x1a1)](_0x3688b4,_0x4515a1['x'])+'\x20'+_0xab9b2b[_0x3fac67(0x1b9)](_0x3688b4,_0x4515a1['y'])+_0x3fac67(0x205)+_0xab9b2b[_0x3fac67(0x1b9)](_0x3688b4,_0x36c519['x'])+'\x20'+_0xab9b2b[_0x3fac67(0x14f)](_0x3688b4,_0x36c519['y']);}function _0x167615(_0x4746a8,_0x42b8bf,_0x359532,_0x24b2bb){const _0xb6c1a4=_0x3b24b7,_0x2fa496={'SIeAE':function(_0x692a41,_0x59b5b2){return _0x692a41(_0x59b5b2);},'JPfyN':function(_0x4cb978,_0x28c538){return _0x4cb978(_0x28c538);},'SnSgz':function(_0x11642b,_0x59ce85){return _0x11642b(_0x59ce85);},'bPoKg':function(_0x4d84f6,_0x51a77a){return _0x4d84f6-_0x51a77a;},'ZXvGP':function(_0x48b9ab,_0x532052){return _0x48b9ab+_0x532052;},'jsjpx':function(_0x39979a,_0x2f3177){return _0x39979a*_0x2f3177;},'obzSt':function(_0x94e37,_0x5a33e1){return _0x94e37*_0x5a33e1;},'xedBm':function(_0x56a8ae,_0xaef0f5){return _0x56a8ae<_0xaef0f5;},'bnxed':function(_0x181749,_0x3ac5d5){return _0x181749/_0x3ac5d5;},'uMPHE':function(_0x55680b,_0x43104f){return _0x55680b+_0x43104f;},'VbNgF':function(_0xbf1966,_0x24a0e8){return _0xbf1966+_0x24a0e8;},'uwAQd':function(_0x4ff5bd,_0x53897b){return _0x4ff5bd*_0x53897b;},'WQtHA':function(_0x5ead44,_0x5010e2){return _0x5ead44*_0x5010e2;},'aEZzn':function(_0x16ac0e,_0x49e763){return _0x16ac0e-_0x49e763;}},_0xc51d95=_0x2fa496[_0xb6c1a4(0x225)](Number,_0x359532['x']),_0x285098=_0x2fa496[_0xb6c1a4(0x1b4)](Number,_0x359532['y']),_0x48b5dd=_0x2fa496[_0xb6c1a4(0x1f2)](Number,_0x24b2bb['x']),_0x531d02=_0x2fa496[_0xb6c1a4(0x225)](Number,_0x24b2bb['y']),_0x6785e0=_0x2fa496[_0xb6c1a4(0x174)](_0x48b5dd,_0xc51d95),_0x48b8b9=_0x2fa496[_0xb6c1a4(0x174)](_0x531d02,_0x285098),_0x4ff39e=_0x2fa496[_0xb6c1a4(0x15c)](_0x2fa496[_0xb6c1a4(0x1be)](_0x6785e0,_0x6785e0),_0x2fa496[_0xb6c1a4(0xfd)](_0x48b8b9,_0x48b8b9));let _0x254ea2=_0x2fa496[_0xb6c1a4(0x237)](_0x4ff39e,1e-8)?0x0:_0x2fa496[_0xb6c1a4(0x10b)](_0x2fa496[_0xb6c1a4(0x229)](_0x2fa496[_0xb6c1a4(0x1be)](_0x2fa496[_0xb6c1a4(0x174)](_0x4746a8,_0xc51d95),_0x6785e0),_0x2fa496[_0xb6c1a4(0xfd)](_0x2fa496[_0xb6c1a4(0x174)](_0x42b8bf,_0x285098),_0x48b8b9)),_0x4ff39e);_0x254ea2=Math[_0xb6c1a4(0x14a)](0x0,Math[_0xb6c1a4(0x1f7)](0x1,_0x254ea2));const _0x36ae1e=_0x2fa496[_0xb6c1a4(0x22a)](_0xc51d95,_0x2fa496[_0xb6c1a4(0x19a)](_0x254ea2,_0x6785e0)),_0x22bbcd=_0x2fa496[_0xb6c1a4(0x22a)](_0x285098,_0x2fa496[_0xb6c1a4(0x23d)](_0x254ea2,_0x48b8b9));return{'x':_0x36ae1e,'y':_0x22bbcd,'t':_0x254ea2,'dist':Math[_0xb6c1a4(0x10d)](_0x2fa496[_0xb6c1a4(0x174)](_0x4746a8,_0x36ae1e),_0x2fa496[_0xb6c1a4(0x1c0)](_0x42b8bf,_0x22bbcd))};}function _0x26f8e3(_0x555fac,_0x144dee,_0x3b591b,_0x1bb1f6,_0x53c148){const _0x48d57b=_0x3b24b7,_0x5e9c48={'hcsMK':function(_0x4243e9,_0x328f87){return _0x4243e9*_0x328f87;},'xsZoM':function(_0x572d5b,_0x3e2a45){return _0x572d5b*_0x3e2a45;},'uwoFx':function(_0x175c53,_0x32065f){return _0x175c53+_0x32065f;},'hlHhH':function(_0x55e050,_0x3d0b46){return _0x55e050+_0x3d0b46;},'GKsCY':function(_0x1c7a7f,_0x479a2b){return _0x1c7a7f*_0x479a2b;},'nueod':function(_0x335386,_0x45a64b){return _0x335386*_0x45a64b;},'udJZB':function(_0x261273,_0x22e400){return _0x261273*_0x22e400;},'UcKVn':function(_0x479bcf,_0xff2351){return _0x479bcf*_0xff2351;},'cgzlL':function(_0x516656,_0x20f09a){return _0x516656*_0x20f09a;},'kriOF':function(_0x2d2690,_0x397b62){return _0x2d2690+_0x397b62;},'WkFpn':function(_0x5697f2,_0x179b70){return _0x5697f2+_0x179b70;},'rjmWQ':function(_0x525ed2,_0x2f6eef){return _0x525ed2*_0x2f6eef;},'esqdc':function(_0x23c8b7,_0x3e85a9){return _0x23c8b7*_0x3e85a9;},'aoxhx':function(_0x22a158,_0x48f802){return _0x22a158*_0x48f802;},'zlFyp':function(_0x5927a7,_0x27e39a){return _0x5927a7*_0x27e39a;},'cceLC':function(_0x2deac3,_0x4e234f){return _0x2deac3*_0x4e234f;}},_0x34a54d=0x1-_0x53c148,_0x3ea29b=_0x5e9c48[_0x48d57b(0x213)](_0x34a54d,_0x34a54d),_0x1e25ad=_0x53c148*_0x53c148,_0x210ed6=_0x5e9c48[_0x48d57b(0x204)](_0x3ea29b,_0x34a54d),_0x488748=_0x5e9c48[_0x48d57b(0x204)](_0x1e25ad,_0x53c148);return{'x':_0x5e9c48[_0x48d57b(0x12e)](_0x5e9c48[_0x48d57b(0x1d1)](_0x5e9c48[_0x48d57b(0x1f1)](_0x210ed6,_0x555fac['x'])+_0x5e9c48[_0x48d57b(0x22d)](_0x5e9c48[_0x48d57b(0x204)](_0x5e9c48[_0x48d57b(0x22d)](0x3,_0x3ea29b),_0x53c148),_0x144dee['x']),_0x5e9c48[_0x48d57b(0xda)](_0x5e9c48[_0x48d57b(0xf7)](_0x5e9c48[_0x48d57b(0x1f1)](0x3,_0x34a54d),_0x1e25ad),_0x3b591b['x'])),_0x5e9c48[_0x48d57b(0x152)](_0x488748,_0x1bb1f6['x'])),'y':_0x5e9c48[_0x48d57b(0x1b1)](_0x5e9c48[_0x48d57b(0x1d1)](_0x5e9c48[_0x48d57b(0x1a4)](_0x5e9c48[_0x48d57b(0x1bc)](_0x210ed6,_0x555fac['y']),_0x5e9c48[_0x48d57b(0x1bd)](_0x5e9c48[_0x48d57b(0xf7)](0x3*_0x3ea29b,_0x53c148),_0x144dee['y'])),_0x5e9c48[_0x48d57b(0x124)](_0x5e9c48[_0x48d57b(0x22d)](_0x5e9c48[_0x48d57b(0x1fa)](0x3,_0x34a54d),_0x1e25ad),_0x3b591b['y'])),_0x5e9c48[_0x48d57b(0x212)](_0x488748,_0x1bb1f6['y']))};}function _0x28e795(_0x5c8a67,_0x1ce3b8,_0x1019ef,_0x29be98,_0x5c5380,_0xf9d05e,_0x198037=0x30){const _0x2d92e4=_0x3b24b7,_0x556684={'ewSTa':function(_0x5c7cd6,_0x3ebeb7){return _0x5c7cd6<=_0x3ebeb7;},'gcCkQ':function(_0x1bb5ac,_0x583b4e){return _0x1bb5ac/_0x583b4e;},'TWxKx':function(_0x1c8276,_0x3d4af9,_0x13d76f,_0x4d058e,_0x1608cb,_0x87d5d8){return _0x1c8276(_0x3d4af9,_0x13d76f,_0x4d058e,_0x1608cb,_0x87d5d8);},'lKfQF':function(_0x20c0a8,_0x577c39){return _0x20c0a8-_0x577c39;},'tihWj':function(_0x519cf1,_0x3d4346){return _0x519cf1<_0x3d4346;},'iVXjr':function(_0xe20ec8,_0x481006){return _0xe20ec8-_0x481006;},'TjMnT':function(_0x4b931c,_0x3a7676){return _0x4b931c+_0x3a7676;},'ZAUpR':function(_0x4b1549,_0x56b4e0){return _0x4b1549+_0x56b4e0;},'CFZIh':function(_0x438a6,_0x4bb9be){return _0x438a6/_0x4bb9be;},'pYUdb':function(_0x4a81e6,_0x7800ab){return _0x4a81e6-_0x7800ab;},'YvjQP':function(_0x11b2c0,_0x59a43a){return _0x11b2c0/_0x59a43a;},'sYbBC':function(_0x13eea9,_0x2a8b42,_0x549460,_0x3061a8,_0x280cf7,_0x58b78e){return _0x13eea9(_0x2a8b42,_0x549460,_0x3061a8,_0x280cf7,_0x58b78e);},'lyNNz':function(_0x3d7f10,_0x1d09e6){return _0x3d7f10-_0x1d09e6;},'DenJB':function(_0x213105,_0x3e957c){return _0x213105-_0x3e957c;}};let _0x2fc235={'x':_0x1019ef['x'],'y':_0x1019ef['y'],'t':0x0,'dist':Infinity};for(let _0x5ac42e=0x0;_0x556684[_0x2d92e4(0x1a2)](_0x5ac42e,_0x198037);_0x5ac42e+=0x1){const _0x3dc75e=_0x556684[_0x2d92e4(0x123)](_0x5ac42e,_0x198037),_0x20f709=_0x556684[_0x2d92e4(0x1f8)](_0x26f8e3,_0x1019ef,_0x29be98,_0x5c5380,_0xf9d05e,_0x3dc75e),_0x3cd990=Math[_0x2d92e4(0x10d)](_0x556684[_0x2d92e4(0x21f)](_0x5c8a67,_0x20f709['x']),_0x556684[_0x2d92e4(0x21f)](_0x1ce3b8,_0x20f709['y']));if(_0x556684[_0x2d92e4(0x16f)](_0x3cd990,_0x2fc235[_0x2d92e4(0x1c5)]))_0x2fc235={'x':_0x20f709['x'],'y':_0x20f709['y'],'t':_0x3dc75e,'dist':_0x3cd990};}const _0xb51702=_0x556684[_0x2d92e4(0x123)](0x1,_0x198037);let _0x4c5fb6=Math[_0x2d92e4(0x14a)](0x0,_0x556684[_0x2d92e4(0x141)](_0x2fc235['t'],_0xb51702)),_0x1d38a3=Math[_0x2d92e4(0x1f7)](0x1,_0x556684[_0x2d92e4(0x1fc)](_0x2fc235['t'],_0xb51702));for(let _0x2baaf0=0x0;_0x2baaf0<0x8;_0x2baaf0+=0x1){const _0x435e98=_0x556684[_0x2d92e4(0x222)](_0x4c5fb6,_0x556684[_0x2d92e4(0x1f5)](_0x556684[_0x2d92e4(0x1df)](_0x1d38a3,_0x4c5fb6),0x3)),_0x54b4b9=_0x556684[_0x2d92e4(0x21f)](_0x1d38a3,_0x556684[_0x2d92e4(0x1de)](_0x556684[_0x2d92e4(0x21f)](_0x1d38a3,_0x4c5fb6),0x3)),_0x199654=_0x556684[_0x2d92e4(0x1f8)](_0x26f8e3,_0x1019ef,_0x29be98,_0x5c5380,_0xf9d05e,_0x435e98),_0x10a1d3=_0x556684[_0x2d92e4(0x10a)](_0x26f8e3,_0x1019ef,_0x29be98,_0x5c5380,_0xf9d05e,_0x54b4b9),_0x466d5b=Math[_0x2d92e4(0x10d)](_0x5c8a67-_0x199654['x'],_0x1ce3b8-_0x199654['y']),_0x2f59a8=Math[_0x2d92e4(0x10d)](_0x556684[_0x2d92e4(0x139)](_0x5c8a67,_0x10a1d3['x']),_0x556684[_0x2d92e4(0x1f6)](_0x1ce3b8,_0x10a1d3['y']));if(_0x466d5b<_0x2f59a8){_0x1d38a3=_0x54b4b9;if(_0x466d5b<_0x2fc235[_0x2d92e4(0x1c5)])_0x2fc235={'x':_0x199654['x'],'y':_0x199654['y'],'t':_0x435e98,'dist':_0x466d5b};}else{_0x4c5fb6=_0x435e98;if(_0x556684[_0x2d92e4(0x16f)](_0x2f59a8,_0x2fc235[_0x2d92e4(0x1c5)]))_0x2fc235={'x':_0x10a1d3['x'],'y':_0x10a1d3['y'],'t':_0x54b4b9,'dist':_0x2f59a8};}}return _0x2fc235;}function closestPointOnSegment(_0x34dd87,_0x3344a6,_0x43e4cc,_0x424543,_0x292ae7=![]){const _0x572c98=_0x3b24b7,_0x31622b={'WAtlt':function(_0x30f41d,_0x3f2b26,_0x5bf83c){return _0x30f41d(_0x3f2b26,_0x5bf83c);},'zGJqB':function(_0x1094b4,_0x112f48,_0x5e4578,_0x54e854,_0x54b6ac,_0x545247,_0x1eaf59){return _0x1094b4(_0x112f48,_0x5e4578,_0x54e854,_0x54b6ac,_0x545247,_0x1eaf59);},'sIVvz':function(_0x9eb36a,_0x14678a,_0x57f6a4,_0x24cc4a,_0x8b001c){return _0x9eb36a(_0x14678a,_0x57f6a4,_0x24cc4a,_0x8b001c);}};if(!_0x34dd87||!_0x3344a6)return null;if(_0x3afa3f(_0x34dd87,_0x3344a6)){const {c1x:_0x1a96a6,c1y:_0x392627,c2x:_0x8158ce,c2y:_0x1ff262}=_0x31622b[_0x572c98(0xd8)](_0x459651,_0x34dd87,_0x3344a6);return _0x31622b[_0x572c98(0x1b2)](_0x28e795,_0x43e4cc,_0x424543,_0x34dd87,{'x':_0x1a96a6,'y':_0x392627},{'x':_0x8158ce,'y':_0x1ff262},_0x3344a6);}return _0x31622b[_0x572c98(0x209)](_0x167615,_0x43e4cc,_0x424543,_0x34dd87,_0x3344a6);}function findNearestPointHit(_0x41aa8f,_0x31142d,_0x271082,_0x54fb62=0x10){const _0x10871f=_0x3b24b7,_0x422692={'OCVEF':function(_0x34f5b7,_0x179f78){return _0x34f5b7<_0x179f78;},'aSESm':function(_0x4d3991,_0x3c1f87){return _0x4d3991(_0x3c1f87);},'DpZsh':function(_0x38ddff,_0x4de54b){return _0x38ddff-_0x4de54b;},'ZJAZo':function(_0x317c76,_0x52d3e5){return _0x317c76(_0x52d3e5);},'qeENg':function(_0x3f57d5,_0xee05e1){return _0x3f57d5===_0xee05e1;}};let _0x13a4da=null;for(const _0x4723be of _0x41aa8f||[]){const _0x55b975=_0x4723be[_0x10871f(0x1f9)]||[];for(let _0x41eba5=0x0;_0x422692[_0x10871f(0x104)](_0x41eba5,_0x55b975[_0x10871f(0x120)]);_0x41eba5+=0x1){const _0xcc3947=_0x55b975[_0x41eba5],_0x56e916=Math[_0x10871f(0x10d)](_0x422692[_0x10871f(0x17c)](Number,_0xcc3947['x'])-_0x31142d,_0x422692[_0x10871f(0x1f4)](_0x422692[_0x10871f(0xe3)](Number,_0xcc3947['y']),_0x271082));if(_0x56e916>_0x54fb62)continue;(!_0x13a4da||_0x422692[_0x10871f(0x104)](_0x56e916,_0x13a4da[_0x10871f(0x1c5)]))&&(_0x13a4da={'pathId':_0x4723be['id'],'pointId':_0xcc3947['id'],'pointIndex':_0x41eba5,'x':_0xcc3947['x'],'y':_0xcc3947['y'],'dist':_0x56e916,'kind':_0xcc3947[_0x10871f(0xf4)],'closed':_0x422692[_0x10871f(0xe9)](_0x4723be[_0x10871f(0x185)],!![])});}}return _0x13a4da;}function findNearestSegmentHit(_0x116a41,_0x131748,_0x4aec6f,_0x4e2b1d=0xe){const _0x219cf2=_0x3b24b7,_0x96206={'isnki':function(_0x3faa4e,_0x4d1089){return _0x3faa4e>_0x4d1089;},'TZdfd':function(_0x3c4859,_0x3ec281){return _0x3c4859<_0x3ec281;}};let _0x2557c5=null;for(const _0x2b080f of _0x116a41||[]){const _0x722795=listPathSegments(_0x2b080f[_0x219cf2(0x1f9)],_0x2b080f[_0x219cf2(0x185)]);for(const _0x41e9e1 of _0x722795){const _0x1ee2af=closestPointOnSegment(_0x41e9e1[_0x219cf2(0x1d2)],_0x41e9e1[_0x219cf2(0x110)],_0x131748,_0x4aec6f,_0x41e9e1[_0x219cf2(0x1bf)]);if(!_0x1ee2af||_0x96206[_0x219cf2(0x13a)](_0x1ee2af[_0x219cf2(0x1c5)],_0x4e2b1d))continue;(!_0x2557c5||_0x96206[_0x219cf2(0x169)](_0x1ee2af[_0x219cf2(0x1c5)],_0x2557c5[_0x219cf2(0x1c5)]))&&(_0x2557c5={'pathId':_0x2b080f['id'],'endIndex':_0x41e9e1[_0x219cf2(0x23a)],'closing':_0x41e9e1[_0x219cf2(0x1bf)],'x':_0x1ee2af['x'],'y':_0x1ee2af['y'],'dist':_0x1ee2af[_0x219cf2(0x1c5)]});}}return _0x2557c5;}function curveHandlesOnSegment(_0x5ee8d5,_0x33d194,_0x4aafc8,_0x5811a8){const _0x23aefb=_0x3b24b7,_0x4f33d8={'LoFUc':function(_0x579980,_0x4aabfe){return _0x579980(_0x4aabfe);},'pVgqa':function(_0x304eaf,_0x40dab1,_0x5a521b){return _0x304eaf(_0x40dab1,_0x5a521b);},'KNduj':function(_0x3faad5,_0x5b03d3){return _0x3faad5*_0x5b03d3;},'vVfzF':function(_0x3aa98e,_0x1b660d){return _0x3aa98e*_0x1b660d;},'ywkZV':function(_0x2053a9,_0x56d2da){return _0x2053a9-_0x56d2da;},'SSnHh':function(_0x37dfa1,_0x49cde5){return _0x37dfa1-_0x49cde5;},'zqcHV':function(_0x5e74aa,_0x45e4a4){return _0x5e74aa(_0x45e4a4);},'iepcp':function(_0x44d43b,_0x4ee939){return _0x44d43b+_0x4ee939;},'Vowgg':function(_0x459302,_0x2aaa3f){return _0x459302*_0x2aaa3f;}},_0x35a850=_0x4f33d8[_0x23aefb(0x19f)](_0x3688b4,_0x4aafc8),_0x3f43fa=_0x4f33d8[_0x23aefb(0x19f)](_0x3688b4,_0x5811a8),_0x4979e4={'x':_0x35a850,'y':_0x3f43fa},_0x152a80=_0x4f33d8[_0x23aefb(0x1e4)](_0x32dcfd,_0x5ee8d5,_0x4979e4),_0x11d162=_0x32dcfd(_0x4979e4,_0x33d194),_0x3af73d=Math[_0x23aefb(0x14a)](0xa,_0x4f33d8[_0x23aefb(0x176)](_0x152a80[_0x23aefb(0x22f)],0.33)),_0x3dbfdf=Math[_0x23aefb(0x14a)](0xa,_0x4f33d8[_0x23aefb(0xdf)](_0x11d162[_0x23aefb(0x22f)],0.33));return{'x':_0x35a850,'y':_0x3f43fa,'c1x':_0x3688b4(_0x4f33d8[_0x23aefb(0x11b)](_0x35a850,_0x152a80['x']*_0x3af73d)),'c1y':_0x3688b4(_0x4f33d8[_0x23aefb(0x1c1)](_0x3f43fa,_0x4f33d8[_0x23aefb(0xdf)](_0x152a80['y'],_0x3af73d))),'c2x':_0x4f33d8[_0x23aefb(0x1eb)](_0x3688b4,_0x4f33d8[_0x23aefb(0x1e3)](_0x35a850,_0x4f33d8[_0x23aefb(0xdf)](_0x11d162['x'],_0x3dbfdf))),'c2y':_0x3688b4(_0x4f33d8[_0x23aefb(0x1e3)](_0x3f43fa,_0x4f33d8[_0x23aefb(0x1b7)](_0x11d162['y'],_0x3dbfdf)))};}function insertCurvePointOnSegment(_0x26cba4,_0x42eb1c,_0x2837e4,_0x5572f8,_0x15aece=![]){const _0x1e6ef9=_0x3b24b7,_0x4c068a={'TVBsf':function(_0x1e37d4,_0x4bdf29){return _0x1e37d4<_0x4bdf29;},'bLAiT':function(_0xf416e2,_0x47a482){return _0xf416e2===_0x47a482;},'Uyfmh':function(_0x21b361,_0x4de0f3){return _0x21b361>=_0x4de0f3;},'DzFEH':function(_0x4022a9,_0x139f4d){return _0x4022a9<=_0x139f4d;},'DIBrD':function(_0x27c7b1,_0x4aa083){return _0x27c7b1>=_0x4aa083;},'PAKbX':_0x1e6ef9(0x20e)};if(!Array[_0x1e6ef9(0x1e9)](_0x26cba4)||_0x4c068a[_0x1e6ef9(0x161)](_0x26cba4[_0x1e6ef9(0x120)],0x2))return{'points':_0x26cba4,'selectedPointId':null};const _0x3d6015=_0x26cba4[_0x1e6ef9(0x120)],_0x2676d2=_0x15aece&&_0x4c068a[_0x1e6ef9(0x1a0)](_0x42eb1c,0x0),_0x4d0e1c=_0x2676d2?_0x3d6015-0x1:_0x42eb1c-0x1;if(_0x4c068a[_0x1e6ef9(0x161)](_0x4d0e1c,0x0)||_0x4c068a[_0x1e6ef9(0x12f)](_0x4d0e1c,_0x3d6015))return{'points':_0x26cba4,'selectedPointId':null};if(!_0x2676d2&&(_0x4c068a[_0x1e6ef9(0x178)](_0x42eb1c,0x0)||_0x4c068a[_0x1e6ef9(0x1fe)](_0x42eb1c,_0x3d6015)))return{'points':_0x26cba4,'selectedPointId':null};const _0x1395b0=_0x26cba4[_0x4d0e1c],_0x3e8c31=_0x26cba4[_0x42eb1c],_0xd2f8ce=curveHandlesOnSegment(_0x1395b0,_0x3e8c31,_0x2837e4,_0x5572f8),_0x1e16e6={'id':nextSvgMakerId('pt'),'x':_0xd2f8ce['x'],'y':_0xd2f8ce['y'],'kind':_0x4c068a[_0x1e6ef9(0x1e0)],'c1x':_0xd2f8ce[_0x1e6ef9(0xe1)],'c1y':_0xd2f8ce[_0x1e6ef9(0x1e2)],'c2x':_0xd2f8ce[_0x1e6ef9(0xf3)],'c2y':_0xd2f8ce[_0x1e6ef9(0x1c4)]},_0x211b78=_0x2676d2?_0x3d6015:_0x42eb1c,_0x22af9a=[..._0x26cba4];return _0x22af9a[_0x1e6ef9(0x16e)](_0x211b78,0x0,_0x1e16e6),{'points':_0x22af9a,'selectedPointId':_0x1e16e6['id']};}function insertCornerPointOnSegment(_0x31e7e3,_0x32a6d1,_0x543b05,_0x5c4488,_0x45bec2=![]){const _0x4904f0=_0x3b24b7,_0x2d1f2f={'bBYzR':function(_0x1b4265,_0x3f93d2){return _0x1b4265<_0x3f93d2;},'XIwRG':function(_0x5e5e90,_0x276198){return _0x5e5e90===_0x276198;},'gzLIz':function(_0x55cc3f,_0x363d79){return _0x55cc3f-_0x363d79;},'REJKZ':function(_0x1ee3fd,_0x4ca372){return _0x1ee3fd-_0x4ca372;},'lOyqP':function(_0x3dced3,_0x1614e9){return _0x3dced3<_0x1614e9;},'ihapS':function(_0x343833,_0x5bbd85){return _0x343833>=_0x5bbd85;},'rKfOi':function(_0x14e8e9,_0x2c6e32){return _0x14e8e9<=_0x2c6e32;},'maFAa':function(_0x401793,_0xadae94){return _0x401793(_0xadae94);},'vDGZj':function(_0x384bf4,_0x58504){return _0x384bf4(_0x58504);},'PATMo':_0x4904f0(0x18f)};if(!Array[_0x4904f0(0x1e9)](_0x31e7e3)||_0x2d1f2f[_0x4904f0(0xe7)](_0x31e7e3[_0x4904f0(0x120)],0x2))return{'points':_0x31e7e3,'selectedPointId':null};const _0x474d01=_0x31e7e3[_0x4904f0(0x120)],_0x11a8b1=_0x45bec2&&_0x2d1f2f[_0x4904f0(0x11e)](_0x32a6d1,0x0),_0x3f3a0b=_0x11a8b1?_0x2d1f2f[_0x4904f0(0x14b)](_0x474d01,0x1):_0x2d1f2f[_0x4904f0(0x170)](_0x32a6d1,0x1);if(_0x2d1f2f[_0x4904f0(0x15f)](_0x3f3a0b,0x0)||_0x2d1f2f[_0x4904f0(0x191)](_0x3f3a0b,_0x474d01))return{'points':_0x31e7e3,'selectedPointId':null};if(!_0x11a8b1&&(_0x2d1f2f[_0x4904f0(0x1cb)](_0x32a6d1,0x0)||_0x32a6d1>=_0x474d01))return{'points':_0x31e7e3,'selectedPointId':null};const _0x4d6ae8={'id':_0x2d1f2f[_0x4904f0(0x20c)](nextSvgMakerId,'pt'),'x':_0x2d1f2f[_0x4904f0(0x1fd)](_0x3688b4,_0x543b05),'y':_0x3688b4(_0x5c4488),'kind':_0x2d1f2f[_0x4904f0(0x19d)]},_0x43e7cf=_0x11a8b1?_0x474d01:_0x32a6d1,_0x24fca8=[..._0x31e7e3];return _0x24fca8[_0x4904f0(0x16e)](_0x43e7cf,0x0,_0x4d6ae8),{'points':_0x24fca8,'selectedPointId':_0x4d6ae8['id']};}var _0x1f0539=0.5522847498;function roundCornerAt(_0x17e066,_0x4805fe,_0x2cf766=0x10,_0x281ff4=![]){const _0x27f646=_0x3b24b7,_0x16c4c1={'wqwCL':function(_0x4e31dd,_0x12d474){return _0x4e31dd<_0x12d474;},'hGzUN':function(_0x587185,_0x445793){return _0x587185(_0x445793);},'uxURe':function(_0x3df69c,_0x43b369){return _0x3df69c%_0x43b369;},'COaQI':function(_0x5aa371,_0x285304){return _0x5aa371<=_0x285304;},'DIuNt':function(_0x126f06,_0x21843d){return _0x126f06-_0x21843d;},'zLHgS':function(_0x5c728f,_0x47d14a){return _0x5c728f%_0x47d14a;},'UoEEz':function(_0x257a60,_0x33bc37){return _0x257a60+_0x33bc37;},'fJziq':function(_0x278277,_0x47ce80){return _0x278277+_0x47ce80;},'KAHnv':_0x27f646(0x20e),'eqQCt':function(_0x1c1490,_0x1d09f2){return _0x1c1490(_0x1d09f2);}},_0xe250ec=Array[_0x27f646(0x1e9)](_0x17e066)?_0x17e066[_0x27f646(0x120)]:0x0;if(_0x16c4c1[_0x27f646(0x1d7)](_0xe250ec,0x3))return{'points':_0x17e066,'selectedPointId':null};let _0x2b639a=_0x16c4c1[_0x27f646(0x192)](Number,_0x4805fe);if(!Number[_0x27f646(0x1ce)](_0x2b639a))return{'points':_0x17e066,'selectedPointId':null};if(_0x281ff4)_0x2b639a=_0x16c4c1[_0x27f646(0x1a9)](Math[_0x27f646(0x196)](_0x2b639a)%_0xe250ec+_0xe250ec,_0xe250ec);else{if(_0x16c4c1[_0x27f646(0x15b)](_0x2b639a,0x0)||_0x2b639a>=_0x16c4c1[_0x27f646(0xd4)](_0xe250ec,0x1))return{'points':_0x17e066,'selectedPointId':null};else _0x2b639a=Math[_0x27f646(0x196)](_0x2b639a);}const _0x34a8af=_0x281ff4?_0x16c4c1[_0x27f646(0x1dc)](_0x16c4c1[_0x27f646(0x1ac)](_0x16c4c1[_0x27f646(0xd4)](_0x2b639a,0x1),_0xe250ec),_0xe250ec):_0x2b639a-0x1,_0x1bc12d=_0x281ff4?_0x16c4c1[_0x27f646(0x1a9)](_0x16c4c1[_0x27f646(0x1aa)](_0x2b639a,0x1),_0xe250ec):_0x2b639a+0x1,_0x37d9f7=_0x17e066[_0x34a8af],_0x552a0e=_0x17e066[_0x2b639a],_0x56054a=_0x17e066[_0x1bc12d];if(!_0x37d9f7||!_0x552a0e||!_0x56054a)return{'points':_0x17e066,'selectedPointId':null};const _0x49f7cd=_0x5f24e3(_0x37d9f7,_0x552a0e,_0x56054a,_0x2cf766);if(!_0x49f7cd)return{'points':_0x17e066,'selectedPointId':null};const _0x4e21e6={'id':_0x552a0e['id'],'x':_0x49f7cd[_0x27f646(0x10c)],'y':_0x49f7cd[_0x27f646(0x117)],'kind':_0x16c4c1[_0x27f646(0x21a)],'c1x':_0x49f7cd[_0x27f646(0xf8)],'c1y':_0x49f7cd[_0x27f646(0x1d4)],'c2x':_0x49f7cd[_0x27f646(0x18b)],'c2y':_0x49f7cd[_0x27f646(0x22e)]},_0x52b6bb={'id':_0x16c4c1[_0x27f646(0x1b6)](nextSvgMakerId,'pt'),'x':_0x49f7cd[_0x27f646(0x197)],'y':_0x49f7cd[_0x27f646(0x144)],'kind':_0x27f646(0x20e),'c1x':_0x49f7cd[_0x27f646(0x131)],'c1y':_0x49f7cd[_0x27f646(0x1ee)],'c2x':_0x49f7cd[_0x27f646(0xf1)],'c2y':_0x49f7cd[_0x27f646(0x20a)]},_0x24bb43=[..._0x17e066[_0x27f646(0x18e)](0x0,_0x2b639a),_0x4e21e6,_0x52b6bb,..._0x17e066[_0x27f646(0x18e)](_0x16c4c1[_0x27f646(0x1ac)](_0x2b639a,0x1))];return{'points':_0x24bb43,'selectedPointId':_0x52b6bb['id']};}function _0x5f24e3(_0x5e29c3,_0x1c26df,_0x40430f,_0x568275){const _0x4d5493=_0x3b24b7,_0x560906={'WhCYn':function(_0xe9005f,_0x40a0e4,_0x3c8ab1){return _0xe9005f(_0x40a0e4,_0x3c8ab1);},'ktSGg':function(_0x22049b,_0x4fb859){return _0x22049b<_0x4fb859;},'QMgPm':function(_0x1f5480,_0x453d15){return _0x1f5480(_0x453d15);},'QDYGx':function(_0x1d5722,_0x2382d4){return _0x1d5722*_0x2382d4;},'bOJRK':function(_0x10909a,_0x58dd2b){return _0x10909a/_0x58dd2b;},'XFCEV':function(_0x1599aa,_0x3288ff){return _0x1599aa-_0x3288ff;},'vTBHi':function(_0x207a76,_0x2b3590){return _0x207a76/_0x2b3590;},'otbjD':function(_0x11ae61,_0x37d9ae){return _0x11ae61-_0x37d9ae;},'EctrI':function(_0x36f9a2,_0x4dce06){return _0x36f9a2-_0x4dce06;},'jSTty':function(_0x391502,_0x49fb4d){return _0x391502+_0x49fb4d;},'rkqXJ':function(_0x1d9b76,_0x4a7cc6){return _0x1d9b76*_0x4a7cc6;},'UBWHj':function(_0x53d88a,_0x33ab97){return _0x53d88a*_0x33ab97;},'QrPDg':function(_0x45cbbe,_0x586d85){return _0x45cbbe(_0x586d85);},'KXOhJ':function(_0x3f3564,_0x4143e3){return _0x3f3564(_0x4143e3);},'DpOPE':function(_0x3b970f,_0x6674db){return _0x3b970f(_0x6674db);},'KYDPf':function(_0x55ce55,_0x438502){return _0x55ce55-_0x438502;},'RNSSS':function(_0x33689d,_0x447dd1){return _0x33689d/_0x447dd1;},'SMTbp':function(_0x23542a,_0x4ba092){return _0x23542a(_0x4ba092);},'lTiRu':function(_0x13915e,_0x4c2bff){return _0x13915e-_0x4c2bff;},'ZFaqt':function(_0x291bea,_0x5a5087){return _0x291bea*_0x5a5087;},'KzrXk':function(_0x24cdef,_0x2a6b40){return _0x24cdef(_0x2a6b40);},'zGzkJ':function(_0x32b133,_0x1f021b){return _0x32b133+_0x1f021b;},'zZgTr':function(_0x50b31d,_0xd79cf3){return _0x50b31d/_0xd79cf3;}},_0x2fd8c0=_0x560906[_0x4d5493(0x13f)](_0x48bdf,_0x5e29c3,_0x1c26df),_0x558803=_0x48bdf(_0x1c26df,_0x40430f);if(_0x2fd8c0<0.001||_0x560906[_0x4d5493(0x11f)](_0x558803,0.001))return null;const _0x4f6533=Math[_0x4d5493(0x14a)](0x1,Math[_0x4d5493(0x1f7)](_0x560906[_0x4d5493(0x126)](Number,_0x568275)||0x10,_0x560906[_0x4d5493(0x1b3)](_0x2fd8c0,0.45),_0x560906[_0x4d5493(0x1b3)](_0x558803,0.45))),_0x54964a=_0x560906[_0x4d5493(0x201)](_0x560906[_0x4d5493(0x207)](_0x1c26df['x'],_0x5e29c3['x']),_0x2fd8c0),_0x13729d=_0x560906[_0x4d5493(0x201)](_0x1c26df['y']-_0x5e29c3['y'],_0x2fd8c0),_0x59616b=(_0x40430f['x']-_0x1c26df['x'])/_0x558803,_0x396eb7=_0x560906[_0x4d5493(0x1e1)](_0x560906[_0x4d5493(0x177)](_0x40430f['y'],_0x1c26df['y']),_0x558803),_0x2e0656=_0x560906[_0x4d5493(0x177)](_0x1c26df['x'],_0x560906[_0x4d5493(0x1b3)](_0x54964a,_0x4f6533)),_0x5c123e=_0x560906[_0x4d5493(0xfa)](_0x1c26df['y'],_0x13729d*_0x4f6533),_0x1d129f=_0x560906[_0x4d5493(0x1da)](_0x1c26df['x'],_0x560906[_0x4d5493(0x14c)](_0x59616b,_0x4f6533)),_0xedda02=_0x1c26df['y']+_0x560906[_0x4d5493(0x21b)](_0x396eb7,_0x4f6533),_0x3c6a65=_0x560906[_0x4d5493(0x14c)](_0x4f6533,_0x1f0539),_0xc6340=Math[_0x4d5493(0x14a)](0.001,_0x560906[_0x4d5493(0x13f)](_0x48bdf,_0x5e29c3,{'x':_0x2e0656,'y':_0x5c123e})),_0x3a8144=Math[_0x4d5493(0x14a)](0.001,_0x48bdf({'x':_0x1d129f,'y':_0xedda02},_0x40430f));return{'p1x':_0x560906[_0x4d5493(0x20f)](_0x3688b4,_0x2e0656),'p1y':_0x560906[_0x4d5493(0x14e)](_0x3688b4,_0x5c123e),'p2x':_0x560906[_0x4d5493(0x109)](_0x3688b4,_0x1d129f),'p2y':_0x560906[_0x4d5493(0x126)](_0x3688b4,_0xedda02),'p1c1x':_0x3688b4(_0x560906[_0x4d5493(0x224)](_0x2e0656,_0x54964a*_0x560906[_0x4d5493(0x1a6)](_0xc6340,0x3))),'p1c1y':_0x560906[_0x4d5493(0x100)](_0x3688b4,_0x560906[_0x4d5493(0x177)](_0x5c123e,_0x13729d*_0x560906[_0x4d5493(0x1a6)](_0xc6340,0x3))),'p1c2x':_0x3688b4(_0x560906[_0x4d5493(0x1da)](_0x2e0656,_0x54964a*_0x3c6a65)),'p1c2y':_0x560906[_0x4d5493(0x100)](_0x3688b4,_0x560906[_0x4d5493(0x1da)](_0x5c123e,_0x13729d*_0x3c6a65)),'p2c1x':_0x560906[_0x4d5493(0x126)](_0x3688b4,_0x560906[_0x4d5493(0x188)](_0x1d129f,_0x560906[_0x4d5493(0x190)](_0x59616b,_0x3c6a65))),'p2c1y':_0x560906[_0x4d5493(0x20b)](_0x3688b4,_0x560906[_0x4d5493(0xfa)](_0xedda02,_0x396eb7*_0x3c6a65)),'p2c2x':_0x3688b4(_0x560906[_0x4d5493(0x210)](_0x1d129f,_0x59616b*_0x560906[_0x4d5493(0x13d)](_0x3a8144,0x3))),'p2c2y':_0x560906[_0x4d5493(0x109)](_0x3688b4,_0x560906[_0x4d5493(0x210)](_0xedda02,_0x560906[_0x4d5493(0x1b3)](_0x396eb7,_0x560906[_0x4d5493(0x13d)](_0x3a8144,0x3))))};}function previewRoundCorner(_0x4f58e3,_0x1d2732,_0x42f734=0x10,_0x4389dd=![]){const _0x452971=_0x3b24b7,_0x249e55={'lmFhs':function(_0x50bae5,_0x924daa,_0x3c0e84,_0x139f47,_0x4e8a5a){return _0x50bae5(_0x924daa,_0x3c0e84,_0x139f47,_0x4e8a5a);},'eEKjk':function(_0x2f3582,_0x5a7a2c){return _0x2f3582===_0x5a7a2c;},'qomhl':function(_0x466390,_0x34d3e1){return _0x466390<=_0x34d3e1;},'HBORL':function(_0x2aa265,_0x163d93,_0xf5c8ea,_0x3698ce){return _0x2aa265(_0x163d93,_0xf5c8ea,_0x3698ce);}},{points:_0xf1d333,selectedPointId:_0x55da29}=_0x249e55[_0x452971(0x227)](roundCornerAt,_0x4f58e3,_0x1d2732,_0x42f734,_0x4389dd);if(!_0x55da29||_0x249e55[_0x452971(0x1e5)](_0xf1d333,_0x4f58e3))return null;const _0x21118b=_0xf1d333[_0x452971(0x194)](_0x1be0c8=>_0x1be0c8['id']===_0x55da29);if(_0x249e55[_0x452971(0x232)](_0x21118b,0x0))return null;const _0x3722b7=_0xf1d333[_0x21118b-0x1],_0x411840=_0xf1d333[_0x21118b];return{'d':_0x249e55[_0x452971(0x171)](segmentToPathD,_0x3722b7,_0x411840,![]),'enter':_0x3722b7,'exit':_0x411840};}function _0x285b(_0x16ead2,_0xae4d1b){_0x16ead2=_0x16ead2-0xd4;const _0x2d5408=_0x2d54();let _0x285bcf=_0x2d5408[_0x16ead2];if(_0x285b['hCrlLy']===undefined){var _0x1c9e59=function(_0x45e868){const _0x3870c3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2ef1e2='',_0x2bbccb='';for(let _0x52f814=0x0,_0x51b439,_0x2a5cd9,_0x1b3f73=0x0;_0x2a5cd9=_0x45e868['charAt'](_0x1b3f73++);~_0x2a5cd9&&(_0x51b439=_0x52f814%0x4?_0x51b439*0x40+_0x2a5cd9:_0x2a5cd9,_0x52f814++%0x4)?_0x2ef1e2+=String['fromCharCode'](0xff&_0x51b439>>(-0x2*_0x52f814&0x6)):0x0){_0x2a5cd9=_0x3870c3['indexOf'](_0x2a5cd9);}for(let _0x4ffa4b=0x0,_0xc12f03=_0x2ef1e2['length'];_0x4ffa4b<_0xc12f03;_0x4ffa4b++){_0x2bbccb+='%'+('00'+_0x2ef1e2['charCodeAt'](_0x4ffa4b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2bbccb);};_0x285b['KZWpHn']=_0x1c9e59,_0x285b['jBcXtc']={},_0x285b['hCrlLy']=!![];}const _0x4412f4=_0x2d5408[0x0];_0x285b['WUOIjE']!==_0x4412f4&&(_0x285b['jBcXtc']={},_0x285b['WUOIjE']=_0x4412f4);const _0x99dc9=_0x285b['jBcXtc'][_0x16ead2];return _0x99dc9===undefined?(_0x285bcf=_0x285b['KZWpHn'](_0x285bcf),_0x285b['jBcXtc'][_0x16ead2]=_0x285bcf):_0x285bcf=_0x99dc9,_0x285bcf;}function updatePointFields(_0x13cafe,_0x2c3a53,_0x135532){const _0x2b01a3=_0x3b24b7,_0x3dd6ba={'tQqXs':function(_0x23d8e9,_0x15d754){return _0x23d8e9!==_0x15d754;},'ayPFG':function(_0x32fcb3,_0x404d31){return _0x32fcb3===_0x404d31;},'IEhLG':_0x2b01a3(0x20e),'PBCZo':function(_0x25a4f2,_0x228427){return _0x25a4f2(_0x228427);},'egBpo':function(_0x2094b5,_0x22a49c){return _0x2094b5(_0x22a49c);}};if(!Array[_0x2b01a3(0x1e9)](_0x13cafe)||!_0x2c3a53)return _0x13cafe;return _0x13cafe[_0x2b01a3(0x142)](_0x4428ff=>{const _0x19e84a=_0x2b01a3;if(_0x3dd6ba[_0x19e84a(0x12a)](_0x4428ff['id'],_0x2c3a53))return _0x4428ff;const _0x2d57e1={..._0x4428ff,..._0x135532};if(_0x3dd6ba[_0x19e84a(0x149)](_0x2d57e1[_0x19e84a(0xf4)],_0x3dd6ba[_0x19e84a(0xfc)])){if(!Number[_0x19e84a(0x1ce)](_0x3dd6ba[_0x19e84a(0x162)](Number,_0x2d57e1[_0x19e84a(0xe1)])))_0x2d57e1[_0x19e84a(0xe1)]=_0x2d57e1['x'];if(!Number[_0x19e84a(0x1ce)](_0x3dd6ba[_0x19e84a(0x239)](Number,_0x2d57e1[_0x19e84a(0x1e2)])))_0x2d57e1[_0x19e84a(0x1e2)]=_0x2d57e1['y'];if(!Number[_0x19e84a(0x1ce)](_0x3dd6ba[_0x19e84a(0x239)](Number,_0x2d57e1[_0x19e84a(0xf3)])))_0x2d57e1[_0x19e84a(0xf3)]=_0x2d57e1['x'];if(!Number[_0x19e84a(0x1ce)](Number(_0x2d57e1[_0x19e84a(0x1c4)])))_0x2d57e1[_0x19e84a(0x1c4)]=_0x2d57e1['y'];}return _0x2d57e1;});}function buildSvgMarkup(_0x51c5e1,{width:_0x40986c,height:_0x52c082}){const _0x484707=_0x3b24b7,_0x2c0644={'jvizV':function(_0x409a98,_0x550ce7,_0x360c47){return _0x409a98(_0x550ce7,_0x360c47);},'aTZIm':function(_0x1ad889,_0x2402eb){return _0x1ad889(_0x2402eb);},'fZzgN':function(_0x58f0bd,_0x2616a1){return _0x58f0bd(_0x2616a1);},'CrGrX':function(_0x5c2cf7,_0x27f4f5){return _0x5c2cf7(_0x27f4f5);},'dImur':function(_0x36b85f,_0x1acf6d){return _0x36b85f(_0x1acf6d);}},_0x250aa3=Math[_0x484707(0x14a)](0x1,Math[_0x484707(0x159)](_0x2c0644[_0x484707(0x151)](Number,_0x40986c)||0x190)),_0x171c35=Math[_0x484707(0x14a)](0x1,Math[_0x484707(0x159)](_0x2c0644[_0x484707(0x16a)](Number,_0x52c082)||0x190)),_0xf88864=(Array[_0x484707(0x1e9)](_0x51c5e1)?_0x51c5e1:[])[_0x484707(0x142)](_0x2ea032=>{const _0x4b54e1=_0x484707,_0x19eb8e=_0x2c0644[_0x4b54e1(0x166)](pointsToPathD,_0x2ea032[_0x4b54e1(0x1f9)],_0x2ea032[_0x4b54e1(0x185)]);if(!_0x19eb8e)return'';const _0x2f9f57=_0x2c0644[_0x4b54e1(0xe5)](resolvePathPaint,_0x2ea032),_0x296e64=_0x2c0644[_0x4b54e1(0x151)](_0x1fc576,_0x2f9f57[_0x4b54e1(0x130)]),_0x1d079e=_0x2c0644[_0x4b54e1(0xe5)](_0x1fc576,_0x2f9f57[_0x4b54e1(0xf9)]),_0x14f733=_0x2f9f57[_0x4b54e1(0x150)];return _0x4b54e1(0xdc)+_0x2c0644[_0x4b54e1(0xdd)](_0x1fc576,_0x19eb8e)+_0x4b54e1(0x1cf)+_0x296e64+_0x4b54e1(0x132)+_0x1d079e+_0x4b54e1(0x1f3)+_0x14f733+_0x4b54e1(0x17d);})[_0x484707(0x121)](Boolean)[_0x484707(0xeb)]('\x0a');return _0x484707(0x148)+_0x250aa3+_0x484707(0x175)+_0x171c35+_0x484707(0x198)+_0x250aa3+'\x20'+_0x171c35+_0x484707(0x206)+_0xf88864+_0x484707(0x189);}function _0x3688b4(_0x2eb939){const _0x162cff=_0x3b24b7,_0x72f453={'ZnjEO':function(_0xe81d3a,_0x416d7e){return _0xe81d3a(_0x416d7e);},'HaSfi':function(_0x9b39ba,_0x422313){return _0x9b39ba/_0x422313;},'zmnGi':function(_0x888f60,_0x27e9a1){return _0x888f60*_0x27e9a1;}},_0x31e35f=_0x72f453[_0x162cff(0x167)](Number,_0x2eb939);if(!Number[_0x162cff(0x1ce)](_0x31e35f))return 0x0;return _0x72f453[_0x162cff(0x1c7)](Math[_0x162cff(0x159)](_0x72f453[_0x162cff(0xdb)](_0x31e35f,0x64)),0x64);}function _0x1fc576(_0x5680cc){const _0x4efeee=_0x3b24b7,_0x47209d={'GAAcL':function(_0x428f83,_0x2d35df){return _0x428f83(_0x2d35df);},'eDdvH':_0x4efeee(0x134),'NMtwW':_0x4efeee(0x1e8),'wCSOy':_0x4efeee(0x136)};return _0x47209d[_0x4efeee(0x147)](String,_0x5680cc??'')[_0x4efeee(0x1ec)](/&/g,_0x47209d[_0x4efeee(0xe0)])[_0x4efeee(0x1ec)](/"/g,_0x4efeee(0x133))[_0x4efeee(0x1ec)](/</g,_0x47209d[_0x4efeee(0xee)])[_0x4efeee(0x1ec)](/>/g,_0x47209d[_0x4efeee(0x11d)]);}function _0x5d3163(_0x354a04,_0x1cabdc,_0x6c2ea5=_0x3b24b7(0x18f),_0x49ef66={}){const _0xac1104=_0x3b24b7,_0x386333={'FtWaY':function(_0x3c03e1,_0x472eac){return _0x3c03e1(_0x472eac);}};return{'id':_0x386333[_0xac1104(0x108)](nextSvgMakerId,'pt'),'x':_0x386333[_0xac1104(0x108)](_0x3688b4,_0x354a04),'y':_0x386333[_0xac1104(0x108)](_0x3688b4,_0x1cabdc),'kind':_0x6c2ea5,..._0x49ef66};}function createShapePath(_0x2ab881,{width:width=0x190,height:height=0x190,fill:fill=_0x3b24b7(0x160),radius:radius=0x20}={}){const _0x5d3eba=_0x3b24b7,_0x4411d6={'WabqU':function(_0x4aa42f,_0x52b771){return _0x4aa42f(_0x52b771);},'VdjiQ':function(_0xdb9143,_0x1d3916){return _0xdb9143(_0x1d3916);},'iUJWS':function(_0xf90472,_0xdccc9e){return _0xf90472/_0xdccc9e;},'JHXia':function(_0x176e88,_0x52e287){return _0x176e88*_0x52e287;},'KxqHa':function(_0xc2f684,_0x2a9b6d){return _0xc2f684-_0x2a9b6d;},'OQaah':function(_0x5b4e69,_0x2b2594){return _0x5b4e69-_0x2b2594;},'OPFnL':function(_0x1fd894,_0x169de9){return _0x1fd894/_0x169de9;},'HHkrZ':function(_0x51ed68,_0x25f4be){return _0x51ed68+_0x25f4be;},'jXpUy':function(_0x18badc,_0x2e34c3){return _0x18badc/_0x2e34c3;},'ESEjJ':function(_0x1854de,_0x3909bf){return _0x1854de+_0x3909bf;},'esRYa':function(_0x46f00d,_0x933de9){return _0x46f00d/_0x933de9;},'fZkuL':function(_0x1f8bba,_0x120a4c){return _0x1f8bba===_0x120a4c;},'JaajP':_0x5d3eba(0x1c8),'epQjE':function(_0x1b98cf,_0x4cd04a){return _0x1b98cf(_0x4cd04a);},'dTrfc':_0x5d3eba(0x1ab),'pQSvh':function(_0x19735e,_0x2d40df,_0x224153){return _0x19735e(_0x2d40df,_0x224153);},'ERfRZ':function(_0x577770,_0x1ac703,_0x5dcc18){return _0x577770(_0x1ac703,_0x5dcc18);},'HqhkW':function(_0xb0e7eb,_0x27e750){return _0xb0e7eb===_0x27e750;},'IDojn':_0x5d3eba(0x18a),'OeknP':function(_0x293c0e,_0x1d666b,_0x300737){return _0x293c0e(_0x1d666b,_0x300737);},'bzwPx':function(_0x42b07a,_0x50f513,_0x1a4f1e){return _0x42b07a(_0x50f513,_0x1a4f1e);},'IBdlV':function(_0x40be51,_0x154095){return _0x40be51*_0x154095;},'ECjbe':_0x5d3eba(0x1a5),'UzwBS':function(_0x27f1db,_0x3fa71c,_0x144d90,_0x1d0a02,_0x1be0a0){return _0x27f1db(_0x3fa71c,_0x144d90,_0x1d0a02,_0x1be0a0);},'NvhPc':_0x5d3eba(0x20e),'NbQcR':function(_0x258f35,_0x306645){return _0x258f35+_0x306645;},'cChUI':function(_0x31a515,_0xf5a949,_0x3f204d,_0xaab3c7,_0x3d2c7f){return _0x31a515(_0xf5a949,_0x3f204d,_0xaab3c7,_0x3d2c7f);},'woOMQ':function(_0x2c79d1,_0x1fbbc0){return _0x2c79d1+_0x1fbbc0;},'fKQht':function(_0x55acbe,_0x23a096){return _0x55acbe+_0x23a096;},'DPBjp':function(_0x521dd7,_0x13e8d6){return _0x521dd7+_0x13e8d6;},'jCgJI':function(_0x461746,_0x589984){return _0x461746+_0x589984;},'mCvll':function(_0x45790d,_0x4b00f6){return _0x45790d-_0x4b00f6;},'XQmyU':function(_0x1f793b,_0x28ff23){return _0x1f793b+_0x28ff23;},'KlrxX':function(_0x5517b4,_0x5dad39){return _0x5517b4-_0x5dad39;},'JdoYe':function(_0x3d8dab,_0x3f66ec){return _0x3d8dab-_0x3f66ec;},'YcByU':function(_0x70ec15,_0x16e960,_0x5ead6a,_0x56bb50,_0x3fd1f7){return _0x70ec15(_0x16e960,_0x5ead6a,_0x56bb50,_0x3fd1f7);},'exWMh':function(_0x3899d5,_0x3ad9e3){return _0x3899d5-_0x3ad9e3;},'tkwrM':function(_0x4f1fcf,_0x2dfcfb){return _0x4f1fcf-_0x2dfcfb;},'rxrFo':function(_0x203d19,_0x56b72a){return _0x203d19/_0x56b72a;},'cbPAQ':function(_0x236c08,_0x4c09d4){return _0x236c08/_0x4c09d4;},'lMely':function(_0xb3a8a9,_0xe2798d){return _0xb3a8a9*_0xe2798d;},'kYkMl':function(_0x35fcf6,_0x119906){return _0x35fcf6(_0x119906);},'tBJzH':_0x5d3eba(0x195),'okkNC':function(_0xe5a2d2,_0xef6fcc,_0x2b05c6,_0x5c745a,_0x436e4e){return _0xe5a2d2(_0xef6fcc,_0x2b05c6,_0x5c745a,_0x436e4e);},'oEGoM':function(_0x2957c8,_0x2a2eda){return _0x2957c8+_0x2a2eda;},'GoFpI':function(_0x3df269,_0x24680b){return _0x3df269+_0x24680b;},'fyNmN':function(_0x53a982,_0x573ed6){return _0x53a982/_0x573ed6;},'svMlV':function(_0x421554,_0x1ee56b){return _0x421554-_0x1ee56b;},'OLEJn':function(_0x424b02,_0x2bd0fd){return _0x424b02-_0x2bd0fd;},'lWFUO':function(_0x9eb3cf,_0x2a352c){return _0x9eb3cf-_0x2a352c;},'IsOgp':function(_0x3ab4cb,_0x41051e){return _0x3ab4cb-_0x41051e;},'CJEEu':function(_0x13fe37,_0x254382){return _0x13fe37+_0x254382;},'AjGGu':function(_0x284c27,_0x3ce40a){return _0x284c27+_0x3ce40a;},'fPGvC':function(_0x34eb6c,_0x4fe37b){return _0x34eb6c*_0x4fe37b;},'RiGwW':function(_0xf44b57,_0x50faea,_0x13edcd,_0x222695,_0x423a24){return _0xf44b57(_0x50faea,_0x13edcd,_0x222695,_0x423a24);},'xcItK':function(_0xe51be1,_0x19adaf){return _0xe51be1-_0x19adaf;},'SGVtm':function(_0x2ce6aa,_0x4c4cd0){return _0x2ce6aa-_0x4c4cd0;},'KtYtW':function(_0x73b1b7,_0xbabbbd){return _0x73b1b7/_0xbabbbd;},'TbiNu':function(_0xa9be5a,_0x156246){return _0xa9be5a*_0x156246;},'ilXYY':function(_0x300cb3,_0x501db9){return _0x300cb3+_0x501db9;},'aBPBR':function(_0x52ec24,_0x386b73){return _0x52ec24-_0x386b73;},'GjILq':function(_0x2f7602,_0x120420){return _0x2f7602-_0x120420;},'ERduU':function(_0xde42ab,_0x467891){return _0xde42ab-_0x467891;},'wqVre':function(_0x24123b,_0x30aad4){return _0x24123b-_0x30aad4;},'ocaOD':function(_0x32aa60,_0xe25723){return _0x32aa60+_0xe25723;},'sWQWq':function(_0x39a50e,_0x21d233){return _0x39a50e-_0x21d233;},'ZeCzR':function(_0x29c2e3,_0x5ebbe7){return _0x29c2e3-_0x5ebbe7;},'suVZd':function(_0x5d4f00,_0x4cdfa3){return _0x5d4f00-_0x4cdfa3;},'jwKpy':function(_0x154a9c,_0xcbac27){return _0x154a9c*_0xcbac27;},'zhaYW':function(_0x4d85ff,_0x397de2){return _0x4d85ff+_0x397de2;},'AukIn':function(_0x558afa,_0x35e61f){return _0x558afa-_0x35e61f;}},_0x189daa=Math[_0x5d3eba(0x14a)](0x28,_0x4411d6[_0x5d3eba(0x15a)](Number,width)||0x190),_0x46f6f8=Math[_0x5d3eba(0x14a)](0x28,_0x4411d6[_0x5d3eba(0x165)](Number,height)||0x190),_0x5034d4=_0x189daa/0x2,_0x18b775=_0x4411d6[_0x5d3eba(0x23b)](_0x46f6f8,0x2),_0x1f78f8=_0x4411d6[_0x5d3eba(0x214)](Math[_0x5d3eba(0x1f7)](_0x189daa,_0x46f6f8),0.55),_0x100aa5=_0x1f78f8,_0x382537=_0x4411d6[_0x5d3eba(0x238)](_0x5034d4,_0x4411d6[_0x5d3eba(0x23b)](_0x1f78f8,0x2)),_0x174620=_0x4411d6[_0x5d3eba(0x168)](_0x18b775,_0x4411d6[_0x5d3eba(0x155)](_0x100aa5,0x2)),_0x56eeed=_0x4411d6[_0x5d3eba(0x173)](_0x5034d4,_0x4411d6[_0x5d3eba(0x211)](_0x1f78f8,0x2)),_0x50bf8e=_0x4411d6[_0x5d3eba(0x12c)](_0x18b775,_0x4411d6[_0x5d3eba(0x182)](_0x100aa5,0x2));if(_0x4411d6[_0x5d3eba(0x16d)](_0x2ab881,_0x4411d6[_0x5d3eba(0x217)]))return{..._0x4411d6[_0x5d3eba(0x112)](createEmptyPath,{'name':_0x4411d6[_0x5d3eba(0x1d0)],'fill':fill}),'closed':!![],'points':[_0x4411d6[_0x5d3eba(0x102)](_0x5d3163,_0x382537,_0x174620),_0x4411d6[_0x5d3eba(0x15d)](_0x5d3163,_0x56eeed,_0x174620),_0x4411d6[_0x5d3eba(0x102)](_0x5d3163,_0x56eeed,_0x50bf8e),_0x4411d6[_0x5d3eba(0x102)](_0x5d3163,_0x382537,_0x50bf8e)]};if(_0x4411d6[_0x5d3eba(0x226)](_0x2ab881,_0x4411d6[_0x5d3eba(0x118)]))return{..._0x4411d6[_0x5d3eba(0x165)](createEmptyPath,{'name':_0x5d3eba(0xe2),'fill':fill}),'closed':!![],'points':[_0x4411d6[_0x5d3eba(0x15e)](_0x5d3163,_0x5034d4,_0x174620),_0x4411d6[_0x5d3eba(0x1b8)](_0x5d3163,_0x56eeed,_0x50bf8e),_0x4411d6[_0x5d3eba(0x102)](_0x5d3163,_0x382537,_0x50bf8e)]};if(_0x4411d6[_0x5d3eba(0x16d)](_0x2ab881,_0x5d3eba(0x19e))){const _0x3ea58b=_0x4411d6[_0x5d3eba(0x23b)](_0x1f78f8,0x2),_0x3c22b9=_0x4411d6[_0x5d3eba(0x155)](_0x100aa5,0x2),_0x3f9b3a=_0x4411d6[_0x5d3eba(0xed)](_0x3ea58b,_0x1f0539),_0x1bf7bd=_0x3c22b9*_0x1f0539;return{...createEmptyPath({'name':_0x4411d6[_0x5d3eba(0x1f0)],'fill':fill}),'closed':!![],'points':[_0x4411d6[_0x5d3eba(0x105)](_0x5d3163,_0x4411d6[_0x5d3eba(0x173)](_0x5034d4,_0x3ea58b),_0x18b775,_0x4411d6[_0x5d3eba(0x186)],{'c1x':_0x4411d6[_0x5d3eba(0x12c)](_0x5034d4,_0x3ea58b),'c1y':_0x4411d6[_0x5d3eba(0x238)](_0x18b775,_0x1bf7bd),'c2x':_0x4411d6[_0x5d3eba(0xec)](_0x5034d4,_0x3ea58b),'c2y':_0x18b775+_0x1bf7bd}),_0x4411d6[_0x5d3eba(0x22b)](_0x5d3163,_0x5034d4,_0x4411d6[_0x5d3eba(0x220)](_0x18b775,_0x3c22b9),_0x4411d6[_0x5d3eba(0x186)],{'c1x':_0x4411d6[_0x5d3eba(0xd7)](_0x5034d4,_0x3f9b3a),'c1y':_0x4411d6[_0x5d3eba(0x137)](_0x18b775,_0x3c22b9),'c2x':_0x4411d6[_0x5d3eba(0x168)](_0x5034d4,_0x3f9b3a),'c2y':_0x4411d6[_0x5d3eba(0x179)](_0x18b775,_0x3c22b9)}),_0x5d3163(_0x5034d4-_0x3ea58b,_0x18b775,_0x4411d6[_0x5d3eba(0x186)],{'c1x':_0x4411d6[_0x5d3eba(0xf2)](_0x5034d4,_0x3ea58b),'c1y':_0x4411d6[_0x5d3eba(0x103)](_0x18b775,_0x1bf7bd),'c2x':_0x4411d6[_0x5d3eba(0xfb)](_0x5034d4,_0x3ea58b),'c2y':_0x4411d6[_0x5d3eba(0x218)](_0x18b775,_0x1bf7bd)}),_0x4411d6[_0x5d3eba(0x1e7)](_0x5d3163,_0x5034d4,_0x4411d6[_0x5d3eba(0xfb)](_0x18b775,_0x3c22b9),_0x4411d6[_0x5d3eba(0x186)],{'c1x':_0x4411d6[_0x5d3eba(0x216)](_0x5034d4,_0x3f9b3a),'c1y':_0x4411d6[_0x5d3eba(0x1d9)](_0x18b775,_0x3c22b9),'c2x':_0x5034d4+_0x3f9b3a,'c2y':_0x4411d6[_0x5d3eba(0x218)](_0x18b775,_0x3c22b9)})]};}const _0x1f8b8e=Math[_0x5d3eba(0x14a)](0x1,Math[_0x5d3eba(0x1f7)](_0x4411d6[_0x5d3eba(0x15a)](Number,radius)||0x20,_0x4411d6[_0x5d3eba(0x228)](_0x1f78f8,0x2),_0x4411d6[_0x5d3eba(0x183)](_0x100aa5,0x2))),_0x1c51b8=_0x4411d6[_0x5d3eba(0x16b)](_0x1f8b8e,_0x1f0539);return{..._0x4411d6[_0x5d3eba(0x1a3)](createEmptyPath,{'name':_0x4411d6[_0x5d3eba(0x154)],'fill':fill}),'closed':!![],'points':[_0x4411d6[_0x5d3eba(0x22c)](_0x5d3163,_0x382537+_0x1f8b8e,_0x174620,_0x4411d6[_0x5d3eba(0x186)],{'c1x':_0x4411d6[_0x5d3eba(0x220)](_0x382537,_0x1f8b8e)-_0x1c51b8,'c1y':_0x174620,'c2x':_0x4411d6[_0x5d3eba(0x145)](_0x4411d6[_0x5d3eba(0x1c2)](_0x382537,_0x1f8b8e),_0x4411d6[_0x5d3eba(0x1b5)](_0x4411d6[_0x5d3eba(0xf2)](_0x4411d6[_0x5d3eba(0xd5)](_0x56eeed,_0x382537),_0x4411d6[_0x5d3eba(0x214)](0x2,_0x1f8b8e)),0x3)),'c2y':_0x174620}),_0x4411d6[_0x5d3eba(0x22b)](_0x5d3163,_0x4411d6[_0x5d3eba(0x216)](_0x56eeed,_0x1f8b8e),_0x174620,_0x5d3eba(0x20e),{'c1x':_0x4411d6[_0x5d3eba(0xfb)](_0x4411d6[_0x5d3eba(0x122)](_0x56eeed,_0x1f8b8e),_0x4411d6[_0x5d3eba(0x211)](_0x4411d6[_0x5d3eba(0x1ed)](_0x4411d6[_0x5d3eba(0x119)](_0x56eeed,_0x382537),_0x4411d6[_0x5d3eba(0x16b)](0x2,_0x1f8b8e)),0x3)),'c1y':_0x174620,'c2x':_0x4411d6[_0x5d3eba(0x137)](_0x4411d6[_0x5d3eba(0x216)](_0x56eeed,_0x1f8b8e),_0x1c51b8),'c2y':_0x174620}),_0x5d3163(_0x56eeed,_0x4411d6[_0x5d3eba(0x1d3)](_0x174620,_0x1f8b8e),_0x4411d6[_0x5d3eba(0x186)],{'c1x':_0x56eeed,'c1y':_0x4411d6[_0x5d3eba(0x1c2)](_0x174620,_0x1f8b8e)-_0x1c51b8,'c2x':_0x56eeed,'c2y':_0x4411d6[_0x5d3eba(0x103)](_0x4411d6[_0x5d3eba(0x187)](_0x174620,_0x1f8b8e),(_0x4411d6[_0x5d3eba(0x238)](_0x50bf8e,_0x174620)-_0x4411d6[_0x5d3eba(0x1e6)](0x2,_0x1f8b8e))/0x3)}),_0x4411d6[_0x5d3eba(0x111)](_0x5d3163,_0x56eeed,_0x4411d6[_0x5d3eba(0x21e)](_0x50bf8e,_0x1f8b8e),_0x5d3eba(0x20e),{'c1x':_0x56eeed,'c1y':_0x4411d6[_0x5d3eba(0xf2)](_0x4411d6[_0x5d3eba(0x1ca)](_0x50bf8e,_0x1f8b8e),_0x4411d6[_0x5d3eba(0x1c9)](_0x50bf8e-_0x174620-_0x4411d6[_0x5d3eba(0x202)](0x2,_0x1f8b8e),0x3)),'c2x':_0x56eeed,'c2y':_0x4411d6[_0x5d3eba(0x199)](_0x4411d6[_0x5d3eba(0x107)](_0x50bf8e,_0x1f8b8e),_0x1c51b8)}),_0x4411d6[_0x5d3eba(0x105)](_0x5d3163,_0x56eeed-_0x1f8b8e,_0x50bf8e,_0x5d3eba(0x20e),{'c1x':_0x4411d6[_0x5d3eba(0x116)](_0x56eeed,_0x1f8b8e)+_0x1c51b8,'c1y':_0x50bf8e,'c2x':_0x4411d6[_0x5d3eba(0x200)](_0x4411d6[_0x5d3eba(0x1a8)](_0x56eeed,_0x1f8b8e),(_0x56eeed-_0x382537-_0x4411d6[_0x5d3eba(0xed)](0x2,_0x1f8b8e))/0x3),'c2y':_0x50bf8e}),_0x4411d6[_0x5d3eba(0x105)](_0x5d3163,_0x4411d6[_0x5d3eba(0xe8)](_0x382537,_0x1f8b8e),_0x50bf8e,_0x4411d6[_0x5d3eba(0x186)],{'c1x':_0x4411d6[_0x5d3eba(0x137)](_0x4411d6[_0x5d3eba(0xec)](_0x382537,_0x1f8b8e),_0x4411d6[_0x5d3eba(0x183)](_0x4411d6[_0x5d3eba(0x1ed)](_0x56eeed,_0x382537)-_0x4411d6[_0x5d3eba(0x202)](0x2,_0x1f8b8e),0x3)),'c1y':_0x50bf8e,'c2x':_0x4411d6[_0x5d3eba(0x1ae)](_0x4411d6[_0x5d3eba(0x220)](_0x382537,_0x1f8b8e),_0x1c51b8),'c2y':_0x50bf8e}),_0x4411d6[_0x5d3eba(0x1e7)](_0x5d3163,_0x382537,_0x50bf8e-_0x1f8b8e,_0x4411d6[_0x5d3eba(0x186)],{'c1x':_0x382537,'c1y':_0x4411d6[_0x5d3eba(0x173)](_0x4411d6[_0x5d3eba(0x168)](_0x50bf8e,_0x1f8b8e),_0x1c51b8),'c2x':_0x382537,'c2y':_0x4411d6[_0x5d3eba(0x125)](_0x4411d6[_0x5d3eba(0x1ca)](_0x50bf8e,_0x1f8b8e),_0x4411d6[_0x5d3eba(0x1a8)](_0x4411d6[_0x5d3eba(0x11a)](_0x50bf8e,_0x174620),_0x4411d6[_0x5d3eba(0x128)](0x2,_0x1f8b8e))/0x3)}),_0x4411d6[_0x5d3eba(0x105)](_0x5d3163,_0x382537,_0x174620+_0x1f8b8e,_0x4411d6[_0x5d3eba(0x186)],{'c1x':_0x382537,'c1y':_0x4411d6[_0x5d3eba(0x127)](_0x174620,_0x1f8b8e)+_0x4411d6[_0x5d3eba(0x19b)](_0x4411d6[_0x5d3eba(0x125)](_0x50bf8e,_0x174620),_0x4411d6[_0x5d3eba(0x16b)](0x2,_0x1f8b8e))/0x3,'c2x':_0x382537,'c2y':_0x4411d6[_0x5d3eba(0x11a)](_0x4411d6[_0x5d3eba(0x1c2)](_0x174620,_0x1f8b8e),_0x1c51b8)})]};}export{_0x15f5ad as LINE_MIN_STROKE_WIDTH,buildSvgMarkup,closestPointOnSegment,createEmptyPath,createShapePath,curveHandlesOnSegment,findNearestPointHit,findNearestSegmentHit,insertCornerPointOnSegment,insertCurvePointOnSegment,listPathSegments,makePointCorner,makePointCurve,nextSvgMakerId,pointsToPathD,previewRoundCorner,resolvePathPaint,roundCornerAt,segmentToPathD,updatePointFields};
|