@hypersoniclabs/helix-cli 0.1.25-helix3.466 → 0.1.25-helix3.467

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.
Files changed (25) hide show
  1. package/dist/character/stages/armBindFixRig.js +1 -1
  2. package/dist/character/stages/armBindFixRig.js.map +1 -1
  3. package/dist/character/stages/clothWeights.d.ts +61 -0
  4. package/dist/character/stages/clothWeights.js +265 -0
  5. package/dist/character/stages/clothWeights.js.map +1 -0
  6. package/dist/character/stages/hairWeights.d.ts +7 -0
  7. package/dist/character/stages/hairWeights.js +8 -3
  8. package/dist/character/stages/hairWeights.js.map +1 -1
  9. package/dist/tsconfig.build.tsbuildinfo +1 -1
  10. package/package.json +1 -1
  11. package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
  12. package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
  13. package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
  14. package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
  15. package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
  16. package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
  17. package/plugins/beamng-vehicle/bin/__pycache__/beamng_stock_events.cpython-312.pyc +0 -0
  18. package/plugins/beamng-vehicle/bin/__pycache__/fmod_studio.cpython-312.pyc +0 -0
  19. package/plugins/beamng-vehicle/bin/__pycache__/fsb5.cpython-312.pyc +0 -0
  20. package/plugins/beamng-vehicle/bin/__pycache__/sim_audio.cpython-312.pyc +0 -0
  21. package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_ac.cpython-312.pyc +0 -0
  22. package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_beamng.cpython-312.pyc +0 -0
  23. package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_fixtures.cpython-312.pyc +0 -0
  24. package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
  25. package/plugins/beamng-vehicle/bin/__pycache__/test_sim_audio.cpython-312.pyc +0 -0
@@ -47,7 +47,7 @@ function describeFixRig(report) {
47
47
  lines.push(`arm reach: ${r.skipped ? `skipped (${r.skipped})` : `${r.mode === 'report' ? 'would release' : 'released'} arm weight on ${r.released} vert(s) outside the arm (${r.weightMoved} weight moved to the body, LOD0)`}`);
48
48
  const w = report.weights;
49
49
  if (w !== null)
50
- lines.push(`static weights: ${w.skipped ? `skipped (${w.skipped})` : `${w.mode === 'report' ? 'would re-weight' : 're-weighted'} ${w.offLimb} vert(s) carrying limb weight outside the limb (${w.loose} re-hung as hair/cloth/tail), ${w.hangingBack} hanging on the back or head-hung, ${w.feetSided ?? 0} shoe/foot vert(s) given back to their own foot (LOD0)`}`);
50
+ lines.push(`static weights: ${w.skipped ? `skipped (${w.skipped})` : `${w.mode === 'report' ? 'would re-weight' : 're-weighted'} ${w.offLimb} vert(s) carrying limb weight outside the limb (${w.loose} re-hung as hair/cloth/tail), ${w.hangingBack} hanging on the back or head-hung, ${w.feetSided ?? 0} shoe/foot vert(s) given back to their own foot, ${w.clothRelaxed ?? 0} hanging-cloth vert(s) (skirt, robe, cape tail) re-weighted so the stride does not tear them (LOD0)`}`);
51
51
  const b = report.bind;
52
52
  if (b !== null) {
53
53
  if (b.skipped)
@@ -1 +1 @@
1
- {"version":3,"file":"armBindFixRig.js","sourceRoot":"","sources":["../../../src/character/stages/armBindFixRig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"armBindFixRig.js","sourceRoot":"","sources":["../../../src/character/stages/armBindFixRig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { type SkinModel, type VertexSet, type Weights } from './armBindSkin';
2
+ /**
3
+ * HANGING CLOTH — a skirt, robe, coat tail or cape skinned so it does not tear when the legs part.
4
+ *
5
+ * Generated characters (Dreamer: Tripo) come back auto-rigged by proximity to the bones. Cloth that hangs below the
6
+ * hips and is wider than the legs (a floor-length skirt, a robe, a cape's tail) is given, panel by panel, to whichever
7
+ * leg it is nearest to in the source pose: the left half of the hem follows the left leg, the right half the right
8
+ * leg, and a vertex a centimetre from the seam between them is 100 % one leg and its neighbour 100 % the other. At
9
+ * rest nothing shows. In a stride the legs part half a metre and every edge that crosses the seam is stretched
10
+ * 10-20x: the hem opens into spikes, the back of the garment into a flat blade behind the legs (2026-10-08, hosted
11
+ * critic, seven of the day's twelve avatars with long cloth: "the skirt tears into jagged shards", "coat-tail
12
+ * polygons stretch into spikes below the hem", "a thin flat triangular blade jutting behind the legs"). The gate's own
13
+ * `avatar.skin_intact` passed most of them because the torn cloth is a small share of the whole surface.
14
+ *
15
+ * What fixes it is not where the cloth hangs from but that the weights change SMOOTHLY: the legs part by the same
16
+ * distance, spread over many edges instead of one. So this stage finds the triangles a walk stride tears (an edge
17
+ * stretched over `tearRatio` x), takes the cloth around them (surface distance `reachM`), and relaxes that cloth's
18
+ * weights toward the average of its neighbours until the stride no longer tears it. Nothing else moves: a vertex
19
+ * outside that reach keeps its weights, and a model whose stride does not tear anything is not touched at all.
20
+ *
21
+ * The result is kept only when the stride stretch (share of the surface area with an edge over 3x) falls in the sum
22
+ * of the two opposite strides and rises in neither. Run per vertex set (per LOD), measured on that LOD's own mesh,
23
+ * after the other static-weight rules. Only JOINTS_n / WEIGHTS_n change.
24
+ */
25
+ export interface HangingClothOptions {
26
+ /** An edge stretched past this ratio in a stride marks the cloth around it for relaxing (default 2). */
27
+ tearRatio?: number;
28
+ /** Surface distance around a torn triangle that is relaxed, at 1.70 m (default 0.2 m). */
29
+ reachM?: number;
30
+ /** Relaxation rounds (each `iterationsPerRound` weighted-average sweeps) before giving up (default 30). */
31
+ rounds?: number;
32
+ iterationsPerRound?: number;
33
+ /** Cloth is only relaxed this far above the pelvis joint, at 1.70 m (default 0.05 m): a skirt, robe or tail hangs below the hips. */
34
+ aboveHipM?: number;
35
+ /** Stride half-angle of the gate, degrees (default 50: a run's, wider than the walk's 35). */
36
+ strideDeg?: number;
37
+ /**
38
+ * Cloth more than `legMarginM` from every leg axis (a cape's tail, a skirt's flare, a coat tail) is not leg skin: up to
39
+ * this share of its leg weight is handed to the pelvis, so it hangs from the hips instead of swinging with a leg
40
+ * (default 0.6; 0 skips). Faded in over `pullFadeM`.
41
+ */
42
+ freeHangShare?: number;
43
+ legMarginM?: number;
44
+ pullFadeM?: number;
45
+ }
46
+ export interface HangingClothReport {
47
+ /** Vertices whose weights were relaxed (0 when nothing tore, or the result was not an improvement). */
48
+ vertices: number;
49
+ /** Stride stretch (% of surface area with an edge over 3x), the two strides, before and after. */
50
+ before: [number, number];
51
+ after: [number, number];
52
+ /** Vertices (welded nodes) whose leg weight was partly handed to the pelvis because the cloth hangs free of the legs. */
53
+ pulled?: number;
54
+ /** Why nothing was changed, when so. */
55
+ skipped?: string;
56
+ }
57
+ /**
58
+ * Relax the weights of the cloth a stride tears. `w` is changed in place when (and only when) the result is an
59
+ * improvement; the caller writes it back.
60
+ */
61
+ export declare function relaxHangingCloth(model: SkinModel, set: VertexSet, w: Weights, options?: HangingClothOptions): HangingClothReport;
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.relaxHangingCloth = relaxHangingCloth;
4
+ const armBindSkin_1 = require("./armBindSkin");
5
+ const limbBridge_1 = require("./limbBridge");
6
+ const ROOTS = [[/^thigh_l$/, 1], [/^thigh_r$/, -1], [/^upperarm_l$/, -0.85], [/^upperarm_r$/, 0.85]];
7
+ /** Per joint: the stride root (thigh / upper arm) it hangs from, or null. */
8
+ function strideRoots(model) {
9
+ const roots = new Map();
10
+ for (const joint of model.joints) {
11
+ for (const [re, sign] of ROOTS) {
12
+ if (re.test(joint.getName())) {
13
+ const w = joint.getWorldMatrix();
14
+ roots.set(joint, { root: joint, sign, pivot: [w[12], w[13], w[14]] });
15
+ }
16
+ }
17
+ }
18
+ return model.joints.map((joint) => {
19
+ for (let n = joint; n !== null; n = n.getParentNode()) {
20
+ const d = roots.get(n);
21
+ if (d)
22
+ return d;
23
+ }
24
+ return null;
25
+ });
26
+ }
27
+ /** Skin positions with the legs and arms swung `phase * angle` about X (phase +1 / -1: the two gate strides). */
28
+ function stridePositions(P, w, deltas, angle) {
29
+ const n = P.length / 3;
30
+ const out = new Float64Array(n * 3);
31
+ // cos/sin per joint once.
32
+ const c = deltas.map((d) => (d ? Math.cos(d.sign * angle) : 1));
33
+ const s = deltas.map((d) => (d ? Math.sin(d.sign * angle) : 0));
34
+ for (let v = 0; v < n; v++) {
35
+ const x = P[v * 3], y = P[v * 3 + 1], z = P[v * 3 + 2];
36
+ let sum = 0, ox = 0, oy = 0, oz = 0;
37
+ for (let q = 0; q < w.width; q++) {
38
+ const j = w.joints[v * w.width + q];
39
+ const k = w.weights[v * w.width + q];
40
+ if (j < 0 || k <= 0)
41
+ continue;
42
+ sum += k;
43
+ const d = deltas[j];
44
+ if (!d) {
45
+ ox += k * x;
46
+ oy += k * y;
47
+ oz += k * z;
48
+ continue;
49
+ }
50
+ const dy = y - d.pivot[1], dz = z - d.pivot[2];
51
+ ox += k * x;
52
+ oy += k * (d.pivot[1] + c[j] * dy - s[j] * dz);
53
+ oz += k * (d.pivot[2] + s[j] * dy + c[j] * dz);
54
+ }
55
+ if (sum > 0) {
56
+ out[v * 3] = ox / sum;
57
+ out[v * 3 + 1] = oy / sum;
58
+ out[v * 3 + 2] = oz / sum;
59
+ }
60
+ else {
61
+ out[v * 3] = x;
62
+ out[v * 3 + 1] = y;
63
+ out[v * 3 + 2] = z;
64
+ }
65
+ }
66
+ return out;
67
+ }
68
+ /** Per triangle worst edge stretch ratio (posed / rest), for tris with a non-degenerate rest edge. */
69
+ function triangleWorst(rest, posed, tris, out) {
70
+ const len = (p, a, b) => Math.hypot(p[a * 3] - p[b * 3], p[a * 3 + 1] - p[b * 3 + 1], p[a * 3 + 2] - p[b * 3 + 2]);
71
+ for (let t = 0; t < tris.length; t += 3) {
72
+ const a = tris[t], b = tris[t + 1], c = tris[t + 2];
73
+ let worst = 0;
74
+ for (const [i, j] of [[a, b], [b, c], [c, a]]) {
75
+ const r = len(rest, i, j);
76
+ if (r > 1e-7)
77
+ worst = Math.max(worst, len(posed, i, j) / r);
78
+ }
79
+ out[t / 3] = Math.max(out[t / 3], worst);
80
+ }
81
+ }
82
+ function measure(P, w, deltas, tris, angle) {
83
+ return [(0, limbBridge_1.stretchedAreaPercent)(P, stridePositions(P, w, deltas, angle), tris), (0, limbBridge_1.stretchedAreaPercent)(P, stridePositions(P, w, deltas, -angle), tris)];
84
+ }
85
+ /**
86
+ * Relax the weights of the cloth a stride tears. `w` is changed in place when (and only when) the result is an
87
+ * improvement; the caller writes it back.
88
+ */
89
+ function relaxHangingCloth(model, set, w, options = {}) {
90
+ const none = (skipped, m = [0, 0]) => ({ vertices: 0, before: m, after: m, skipped });
91
+ const deltas = strideRoots(model);
92
+ if (!deltas.some((d) => d !== null && d.sign > 0))
93
+ return none('no stride joints');
94
+ const P = (0, armBindSkin_1.bindPositions)(model, set);
95
+ const tris = (0, armBindSkin_1.setTriangles)(set);
96
+ if (tris.length === 0)
97
+ return none('no triangles');
98
+ const angle = ((options.strideDeg ?? 50) * Math.PI) / 180;
99
+ const before = measure(P, w, deltas, tris, angle);
100
+ let lo = Infinity, hi = -Infinity;
101
+ for (let i = 1; i < P.length; i += 3) {
102
+ lo = Math.min(lo, P[i]);
103
+ hi = Math.max(hi, P[i]);
104
+ }
105
+ const k = Math.max(0.3, (hi - Math.min(lo, 0)) / 1.7);
106
+ const pelvisJ = model.index.get('pelvis');
107
+ const pelvis = pelvisJ === undefined ? undefined : model.joints[pelvisJ];
108
+ const hipY = pelvis ? pelvis.getWorldMatrix()[13] : (lo + hi) / 2;
109
+ const yMax = hipY + (options.aboveHipM ?? 0.05) * k;
110
+ const g = (0, armBindSkin_1.weldGraph)(P, tris);
111
+ const members = Array.from({ length: g.nodes }, () => []);
112
+ for (let v = 0; v < g.of.length; v++)
113
+ members[g.of[v]].push(v);
114
+ // Sparse per-node weights (a welded node's vertices share one set), changed in place.
115
+ const nodeW = Array.from({ length: g.nodes }, (_, node) => {
116
+ const m = new Map();
117
+ const v = members[node][0];
118
+ for (let q = 0; q < w.width; q++) {
119
+ const j = w.joints[v * w.width + q];
120
+ const x = w.weights[v * w.width + q];
121
+ if (j >= 0 && x > 0)
122
+ m.set(j, (m.get(j) ?? 0) + x);
123
+ }
124
+ return m;
125
+ });
126
+ const snapshot = { joints: Int32Array.from(w.joints), weights: Float64Array.from(w.weights) };
127
+ const touched = new Set();
128
+ const apply = () => {
129
+ for (const node of touched) {
130
+ const top = [...nodeW[node].entries()].filter(([, x]) => x > 1e-5).sort((a, b) => b[1] - a[1] || a[0] - b[0]).slice(0, w.width);
131
+ const tot = top.reduce((sum, [, x]) => sum + x, 0);
132
+ for (const v of members[node]) {
133
+ for (let q = 0; q < w.width; q++) {
134
+ const e = top[q];
135
+ w.joints[v * w.width + q] = e === undefined || tot <= 0 ? -1 : e[0];
136
+ w.weights[v * w.width + q] = e === undefined || tot <= 0 ? 0 : e[1] / tot;
137
+ }
138
+ }
139
+ }
140
+ };
141
+ // 1. Free-hanging cloth is not leg skin: hand a share of its leg weight to the pelvis.
142
+ const share = options.freeHangShare ?? 0.6;
143
+ const legPts = ['l', 'r'].map((sd) => ['thigh', 'calf', 'foot', 'ball'].map((n) => model.joints[model.index.get(`${n}_${sd}`) ?? -1]).filter((n) => n !== undefined).map((n) => { const m = n.getWorldMatrix(); return [m[12], m[13], m[14]]; }));
144
+ const isLeg = (j) => /^(thigh|calf|foot|ball)(_twist_0\d)?_[lr]$/.test(model.names[j]);
145
+ let pulled = 0;
146
+ if (share > 0 && pelvisJ !== undefined && legPts.every((pts) => pts.length >= 3)) {
147
+ const margin = (options.legMarginM ?? 0.14) * k, fadeM = Math.max(1e-3, (options.pullFadeM ?? 0.1) * k);
148
+ for (let node = 0; node < g.nodes; node++) {
149
+ const x = g.pos[node * 3], y = g.pos[node * 3 + 1], z = g.pos[node * 3 + 2];
150
+ if (y > yMax)
151
+ continue;
152
+ const d = Math.min(...legPts.map((pts) => polylineDistance([x, y, z], pts)));
153
+ const p = share * smooth((d - margin) / fadeM);
154
+ if (p < 0.02)
155
+ continue;
156
+ let moved = 0;
157
+ const next = new Map();
158
+ for (const [j, wt] of nodeW[node]) {
159
+ if (isLeg(j)) {
160
+ next.set(j, (next.get(j) ?? 0) + wt * (1 - p));
161
+ moved += wt * p;
162
+ }
163
+ else
164
+ next.set(j, (next.get(j) ?? 0) + wt);
165
+ }
166
+ if (moved < 1e-4)
167
+ continue;
168
+ next.set(pelvisJ, (next.get(pelvisJ) ?? 0) + moved);
169
+ nodeW[node] = next;
170
+ touched.add(node);
171
+ pulled++;
172
+ }
173
+ apply();
174
+ }
175
+ // 2. Cloth the stride tears is relaxed toward its neighbours' weights until it does not.
176
+ const ratio = options.tearRatio ?? 2;
177
+ const tearing = () => {
178
+ const worst = new Float32Array(tris.length / 3);
179
+ triangleWorst(P, stridePositions(P, w, deltas, angle), tris, worst);
180
+ triangleWorst(P, stridePositions(P, w, deltas, -angle), tris, worst);
181
+ return worst;
182
+ };
183
+ let worst = tearing();
184
+ let after = measure(P, w, deltas, tris, angle);
185
+ if (worst.some((x) => x > ratio)) {
186
+ const reach = (options.reachM ?? 0.2) * k;
187
+ const sources = new Set();
188
+ for (let t = 0; t < worst.length; t++)
189
+ if (worst[t] > ratio)
190
+ for (let c = 0; c < 3; c++)
191
+ sources.add(g.of[tris[t * 3 + c]]);
192
+ const dist = (0, armBindSkin_1.surfaceDistance)(g, sources, reach);
193
+ const active = [];
194
+ const fade = new Float64Array(g.nodes);
195
+ for (let node = 0; node < g.nodes; node++) {
196
+ if (Number.isFinite(dist[node]) && g.pos[node * 3 + 1] <= yMax) {
197
+ active.push(node);
198
+ fade[node] = 1 - 0.5 * (dist[node] / reach);
199
+ touched.add(node);
200
+ }
201
+ }
202
+ const sweep = () => {
203
+ const next = new Map();
204
+ for (const node of active) {
205
+ const a = 0.5 * fade[node];
206
+ const avg = new Map();
207
+ let wsum = 0;
208
+ for (let o = g.start[node]; o < g.start[node + 1]; o++) {
209
+ const nb = g.nbr[o];
210
+ const f = 1 / Math.max(1e-4, g.len[o]);
211
+ wsum += f;
212
+ for (const [j, x] of nodeW[nb])
213
+ avg.set(j, (avg.get(j) ?? 0) + f * x);
214
+ }
215
+ if (wsum <= 0)
216
+ continue;
217
+ const m = new Map();
218
+ for (const [j, x] of nodeW[node])
219
+ m.set(j, (1 - a) * x);
220
+ for (const [j, x] of avg)
221
+ m.set(j, (m.get(j) ?? 0) + (a * x) / wsum);
222
+ next.set(node, m);
223
+ }
224
+ for (const [node, m] of next)
225
+ nodeW[node] = m;
226
+ };
227
+ const rounds = options.rounds ?? 30, per = options.iterationsPerRound ?? 8;
228
+ for (let r = 0; r < rounds && active.length > 0; r++) {
229
+ for (let i = 0; i < per; i++)
230
+ sweep();
231
+ apply();
232
+ // Stop as soon as no triangle is stretched past the tear ratio any more: no smoother than it has to be.
233
+ worst = tearing();
234
+ if (!worst.some((x) => x > ratio))
235
+ break;
236
+ }
237
+ after = measure(P, w, deltas, tris, angle);
238
+ }
239
+ // 3. Keep it only if the stride stretch did not grow in either stride, and fell in the sum when something tore.
240
+ const tore = before[0] + before[1] > 0.02;
241
+ const grew = after[0] > before[0] + 0.05 || after[1] > before[1] + 0.05;
242
+ const better = !tore || after[0] + after[1] < before[0] + before[1] - 1e-9;
243
+ if (touched.size === 0 || grew || !better) {
244
+ w.joints.set(snapshot.joints);
245
+ w.weights.set(snapshot.weights);
246
+ return { vertices: 0, before, after: before, skipped: touched.size === 0 ? 'nothing tears and nothing hangs free' : 'the stride stretch did not fall in both strides' };
247
+ }
248
+ let changed = 0;
249
+ for (const node of touched)
250
+ changed += members[node].length;
251
+ return { vertices: changed, before, after, pulled };
252
+ }
253
+ function polylineDistance(p, pts) {
254
+ let best = Infinity;
255
+ for (let i = 0; i + 1 < pts.length; i++) {
256
+ const a = pts[i], b = pts[i + 1];
257
+ const ab = [b[0] - a[0], b[1] - a[1], b[2] - a[2]];
258
+ const l2 = ab[0] * ab[0] + ab[1] * ab[1] + ab[2] * ab[2];
259
+ const t = l2 > 0 ? Math.max(0, Math.min(1, ((p[0] - a[0]) * ab[0] + (p[1] - a[1]) * ab[1] + (p[2] - a[2]) * ab[2]) / l2)) : 0;
260
+ best = Math.min(best, Math.hypot(p[0] - a[0] - ab[0] * t, p[1] - a[1] - ab[1] * t, p[2] - a[2] - ab[2] * t));
261
+ }
262
+ return best;
263
+ }
264
+ const smooth = (t) => { const x = Math.min(1, Math.max(0, t)); return x * x * (3 - 2 * x); };
265
+ //# sourceMappingURL=clothWeights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clothWeights.js","sourceRoot":"","sources":["../../../src/character/stages/clothWeights.ts"],"names":[],"mappings":";;AA+HA,8CAiIC;AA/PD,+CAAsI;AACtI,6CAAoD;AA6DpD,MAAM,KAAK,GAA4B,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;AAI9H,6EAA6E;AAC7E,SAAS,WAAW,CAAC,KAAgB;IACnC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAe,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,KAAK,CAAC,cAAc,EAAc,CAAC;gBAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC,EAAE,CAAE,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QAC3J,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAChC,KAAK,IAAI,CAAC,GAAgB,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC;QAAC,CAAC;QAChH,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iHAAiH;AACjH,SAAS,eAAe,CAAC,CAAe,EAAE,CAAU,EAAE,MAAmC,EAAE,KAAa;IACtG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,0BAA0B;IAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;QAC1D,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC9B,GAAG,IAAI,CAAC,CAAC;YACT,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,CAAC,EAAE,CAAC;gBAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC5D,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC;YACjD,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;YAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;YAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;QAAC,CAAC;aAAM,CAAC;YAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IAChK,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sGAAsG;AACtG,SAAS,aAAa,CAAC,IAAkB,EAAE,KAAmB,EAAE,IAAiB,EAAE,GAAiB;IAClG,MAAM,GAAG,GAAG,CAAC,CAAe,EAAE,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC;IAC/J,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QACvD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,IAAI;gBAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAAC,CAAC;QACnJ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,CAAe,EAAE,CAAU,EAAE,MAAmC,EAAE,IAAiB,EAAE,KAAa;IACjH,OAAO,CAAC,IAAA,iCAAoB,EAAC,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,IAAA,iCAAoB,EAAC,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACrJ,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,KAAgB,EAAE,GAAc,EAAE,CAAU,EAAE,UAA+B,EAAE;IAC/G,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,IAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACpI,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnF,MAAM,CAAC,GAAG,IAAA,2BAAa,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAA,0BAAY,EAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAElD,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IAAC,CAAC;IAC7F,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAE,MAAM,CAAC,cAAc,EAAe,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpD,MAAM,CAAC,GAAG,IAAA,uBAAS,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,sFAAsF;IACtF,MAAM,KAAK,GAA+B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;QACpF,MAAM,CAAC,GAAG,IAAI,GAAG,EAAkB,CAAC;QACpC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAE,CAAC,CAAC,CAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;YAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAAC,CAAC;QACtK,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YACjI,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACnD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAE,EAAE,CAAC;gBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACjB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC5E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,uFAAuF;IACvF,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC;IAC3C,MAAM,MAAM,GAAI,CAAC,GAAG,EAAE,GAAG,CAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAa,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,EAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3R,MAAM,KAAK,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,4CAA4C,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IACzG,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,CAAC,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;QACjF,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACxG,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;YAC/E,IAAI,CAAC,GAAG,IAAI;gBAAE,SAAS;YACvB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,IAAI;gBAAE,SAAS;YACvB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;YACvC,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAE,EAAE,CAAC;gBAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAAC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;gBAAC,CAAC;;oBAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC;YACrK,IAAI,KAAK,GAAG,IAAI;gBAAE,SAAS;YAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM,EAAE,CAAC;QAClD,CAAC;QACD,KAAK,EAAE,CAAC;IACV,CAAC;IAED,yFAAyF;IACzF,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,GAAiB,EAAE;QACjC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,aAAa,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpE,aAAa,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;IACtB,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,KAAK,CAAC,CAAC,CAAE,GAAG,KAAK;gBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAE,CAAC,CAAC;QAC/H,MAAM,IAAI,GAAG,IAAA,6BAAe,EAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAE,IAAI,IAAI,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,GAAG,KAAK,CAAC,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;QAC3J,CAAC;QACD,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,MAAM,IAAI,GAAG,IAAI,GAAG,EAA+B,CAAC;YACpD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAE,CAAC;gBAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;gBACtC,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;oBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;oBACxC,IAAI,IAAI,CAAC,CAAC;oBACV,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAE;wBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzE,CAAC;gBACD,IAAI,IAAI,IAAI,CAAC;oBAAE,SAAS;gBACxB,MAAM,CAAC,GAAG,IAAI,GAAG,EAAkB,CAAC;gBACpC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAE;oBAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG;oBAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACrE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gBAAE,KAAK,EAAE,CAAC;YACtC,KAAK,EAAE,CAAC;YACR,wGAAwG;YACxG,KAAK,GAAG,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;gBAAE,MAAM;QAC3C,CAAC;QACD,KAAK,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,gHAAgH;IAChH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACxE,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3E,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1C,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,iDAAiD,EAAE,CAAC;IAC1K,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,OAAO;QAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAE,CAAC,MAAM,CAAC;IAC7D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAoB,EAAE,GAAkB;IAChE,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QACnC,MAAM,EAAE,GAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { Document } from '@gltf-transform/core';
2
2
  import { type SkinModel, type VertexSet, type Weights } from './armBindSkin';
3
3
  import { type FootWeightsOptions } from './footWeights';
4
+ import { type HangingClothOptions } from './clothWeights';
4
5
  /**
5
6
  * STATIC WEIGHTS — hair, loose cloth and appendages skinned to the body they hang from; no weight leaking across limbs.
6
7
  *
@@ -61,6 +62,8 @@ export interface StaticWeightsOptions {
61
62
  armReach?: ArmReachOptions | false;
62
63
  /** Foot siding (`footWeights.ts`): a shoe never carries the other foot's weight (default on). `false` skips it. */
63
64
  feet?: FootWeightsOptions | false;
65
+ /** Hanging cloth (`clothWeights.ts`): a skirt, robe or cape tail a stride tears gets its weights relaxed until it does not (default on). `false` skips it. */
66
+ hangingCloth?: HangingClothOptions | false;
64
67
  }
65
68
  export interface StaticWeightsSetReport {
66
69
  skin: number;
@@ -73,6 +76,8 @@ export interface StaticWeightsSetReport {
73
76
  hangingBack: number;
74
77
  /** Foot siding: vertices below the ankle that handed the other foot's weight back to their own side. */
75
78
  feetSided?: number;
79
+ /** Hanging cloth: vertices whose weights were relaxed because the walk stride tore the cloth around them. */
80
+ clothRelaxed?: number;
76
81
  }
77
82
  export interface StaticWeightsReport {
78
83
  mode: StaticWeightsMode;
@@ -84,6 +89,8 @@ export interface StaticWeightsReport {
84
89
  hangingBack: number;
85
90
  /** LOD0: vertices whose cross-foot weight went back to their own foot. */
86
91
  feetSided: number;
92
+ /** LOD0: vertices of hanging cloth (skirt, robe, cape tail) relaxed so the stride does not tear it. */
93
+ clothRelaxed: number;
87
94
  }
88
95
  type Group = 'armL' | 'armR' | 'legL' | 'legR' | 'torso' | 'clavL' | 'clavR' | 'neck' | 'head' | 'aux';
89
96
  export declare function jointGroup(name: string): Group;
@@ -7,6 +7,7 @@ exports.armEnvelopeMembership = armEnvelopeMembership;
7
7
  exports.releaseArmReach = releaseArmReach;
8
8
  const armBindSkin_1 = require("./armBindSkin");
9
9
  const footWeights_1 = require("./footWeights");
10
+ const clothWeights_1 = require("./clothWeights");
10
11
  function jointGroup(name) {
11
12
  const side = /_l$/.test(name) ? 'L' : /_r$/.test(name) ? 'R' : '';
12
13
  if (/^(upperarm|lowerarm|hand|thumb|index|middle|ring|pinky)(_twist_0\d|_0\d|_metacarpal)?_[lr]$/.test(name) || /^\w+_metacarpal_[lr]$/.test(name))
@@ -304,14 +305,16 @@ function processSet(model, set, w, o, write) {
304
305
  hanging++;
305
306
  }
306
307
  }
307
- if (write && (offLimb + hanging) > 0)
308
+ // Hanging cloth: last, on the weights every other rule left, measured on this LOD's own mesh.
309
+ const cloth = o.hangingCloth === false ? 0 : (0, clothWeights_1.relaxHangingCloth)(model, set, w, o.hangingCloth).vertices;
310
+ if (write && (offLimb + hanging + cloth) > 0)
308
311
  (0, armBindSkin_1.writeWeights)(set, w);
309
- return { vertices: n, offLimb, loose, hangingBack: hanging };
312
+ return { vertices: n, offLimb, loose, hangingBack: hanging, clothRelaxed: cloth };
310
313
  }
311
314
  /** Clean every skin's weights in place (report mode measures only). */
312
315
  function cleanStaticWeights(document, options = {}) {
313
316
  const mode = options.mode ?? 'repair';
314
- const report = { mode, sets: [], offLimb: 0, loose: 0, hangingBack: 0, feetSided: 0 };
317
+ const report = { mode, sets: [], offLimb: 0, loose: 0, hangingBack: 0, feetSided: 0, clothRelaxed: 0 };
315
318
  if (mode === 'off')
316
319
  return { ...report, skipped: 'off' };
317
320
  const models = (0, armBindSkin_1.skinModels)(document);
@@ -322,6 +325,7 @@ function cleanStaticWeights(document, options = {}) {
322
325
  envelopeFadeM: options.envelopeFadeM ?? 0.05, skirtThighShare: options.skirtThighShare ?? 0.6,
323
326
  hangingBack: options.hangingBack ?? true, backMarginM: options.backMarginM ?? 0.05,
324
327
  fadeStartM: options.fadeStartM ?? 0.03, fadeEndM: options.fadeEndM ?? 0.12,
328
+ hangingCloth: options.hangingCloth ?? {},
325
329
  };
326
330
  let biggest = -1;
327
331
  for (const [si, model] of models.entries()) {
@@ -339,6 +343,7 @@ function cleanStaticWeights(document, options = {}) {
339
343
  report.loose = r.loose;
340
344
  report.hangingBack = r.hangingBack;
341
345
  report.feetSided = feet?.sided ?? 0;
346
+ report.clothRelaxed = r.clothRelaxed ?? 0;
342
347
  }
343
348
  }
344
349
  }