@nakednous/tree 0.0.11 → 0.0.12

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/README.md CHANGED
@@ -289,8 +289,8 @@ mat4PV mat4MV
289
289
  **Matrix construction from specs** (`form.js`):
290
290
  ```
291
291
  mat4FromBasis — rigid frame from orthonormal basis + translation
292
- mat4LookAt — view matrix (world→eye) from lookat params
293
- mat4EyeMatrix — eye matrix (eye→world) from lookat params
292
+ mat4View — view matrix (world→eye) from lookat params
293
+ mat4Eye — eye matrix (eye→world) from lookat params
294
294
  mat4FromTRS — column-major mat4 from flat TRS scalars
295
295
  mat4FromTranslation — translation-only mat4
296
296
  mat4FromScale — scale-only mat4
package/dist/index.js CHANGED
@@ -240,7 +240,7 @@ const quatToAxisAngle = (q, out) => {
240
240
  *
241
241
  * Lookat constructors live here because a camera is just a frame — the eye
242
242
  * matrix is the camera object's model matrix, not a camera-specific concept.
243
- * There is no camera module; mat4LookAt and mat4EyeMatrix are frame
243
+ * There is no camera module; mat4View and mat4Eye are frame
244
244
  * constructions that happen to use lookat parameterisation.
245
245
  *
246
246
  * Projection constructors live here because they construct matrices from
@@ -295,7 +295,7 @@ function mat4FromBasis(out, rx,ry,rz, ux,uy,uz, fx,fy,fz, tx,ty,tz) {
295
295
  * @param {number} ux,uy,uz World up hint (need not be unit).
296
296
  * @returns {Float32Array|number[]} out
297
297
  */
298
- function mat4LookAt(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {
298
+ function mat4View(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {
299
299
  // z = normalize(eye - center) (camera +Z away from target)
300
300
  let zx=ex-cx, zy=ey-cy, zz=ez-cz;
301
301
  const zl=Math.sqrt(zx*zx+zy*zy+zz*zz)||1;
@@ -320,7 +320,7 @@ function mat4LookAt(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {
320
320
  /**
321
321
  * Eye matrix (eye→world) from lookat parameters.
322
322
  * Transpose of the rotation block + direct translation column.
323
- * Same inputs as mat4LookAt.
323
+ * Same inputs as mat4View.
324
324
  *
325
325
  * @param {Float32Array|number[]} out 16-element destination.
326
326
  * @param {number} ex,ey,ez Eye (camera) position.
@@ -328,8 +328,8 @@ function mat4LookAt(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {
328
328
  * @param {number} ux,uy,uz World up hint (need not be unit).
329
329
  * @returns {Float32Array|number[]} out
330
330
  */
331
- function mat4EyeMatrix(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {
332
- // Same basis computation as mat4LookAt.
331
+ function mat4Eye(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {
332
+ // Same basis computation as mat4View.
333
333
  let zx=ex-cx, zy=ey-cy, zz=ez-cz;
334
334
  const zl=Math.sqrt(zx*zx+zy*zy+zz*zz)||1;
335
335
  zx/=zl; zy/=zl; zz/=zl;
@@ -2445,5 +2445,5 @@ function boxVisibility(planes, x0, y0, z0, x1, y1, z1) {
2445
2445
  return allIn ? VISIBLE : SEMIVISIBLE;
2446
2446
  }
2447
2447
 
2448
- export { CameraTrack, EYE, INVISIBLE, MATRIX, MODEL, NDC, ORIGIN, PLANE_BOTTOM, PLANE_FAR, PLANE_LEFT, PLANE_NEAR, PLANE_RIGHT, PLANE_TOP, PoseTrack, SCREEN, SEMIVISIBLE, VISIBLE, WEBGL, WEBGPU, WORLD, _i, _j, _k, boxVisibility, distanceToPlane, frustumPlanes, hermiteVec3, i, j, k, lerpVec3, mapDirection, mapLocation, mat3Direction, mat3NormalFromMat4, mat4Bias, mat4EyeMatrix, mat4FromBasis, mat4FromScale, mat4FromTRS, mat4FromTranslation, mat4Frustum, mat4Invert, mat4Location, mat4LookAt, mat4MV, mat4Mul, mat4MulDir, mat4MulPoint, mat4Ortho, mat4PV, mat4Perspective, mat4Pick, mat4Reflect, mat4ToRotation, mat4ToScale, mat4ToTransform, mat4ToTranslation, mat4Transpose, pixelRatio, pointVisibility, projBottom, projFar, projFov, projHfov, projIsOrtho, projLeft, projNear, projRight, projTop, qCopy, qDot, qFromAxisAngle, qFromLookDir, qFromMat4, qFromRotMat3x3, qMul, qNegate, qNlerp, qNormalize, qSet, qSlerp, qToMat4, quatToAxisAngle, sphereVisibility, transformToMat4 };
2448
+ export { CameraTrack, EYE, INVISIBLE, MATRIX, MODEL, NDC, ORIGIN, PLANE_BOTTOM, PLANE_FAR, PLANE_LEFT, PLANE_NEAR, PLANE_RIGHT, PLANE_TOP, PoseTrack, SCREEN, SEMIVISIBLE, VISIBLE, WEBGL, WEBGPU, WORLD, _i, _j, _k, boxVisibility, distanceToPlane, frustumPlanes, hermiteVec3, i, j, k, lerpVec3, mapDirection, mapLocation, mat3Direction, mat3NormalFromMat4, mat4Bias, mat4Eye, mat4FromBasis, mat4FromScale, mat4FromTRS, mat4FromTranslation, mat4Frustum, mat4Invert, mat4Location, mat4MV, mat4Mul, mat4MulDir, mat4MulPoint, mat4Ortho, mat4PV, mat4Perspective, mat4Pick, mat4Reflect, mat4ToRotation, mat4ToScale, mat4ToTransform, mat4ToTranslation, mat4Transpose, mat4View, pixelRatio, pointVisibility, projBottom, projFar, projFov, projHfov, projIsOrtho, projLeft, projNear, projRight, projTop, qCopy, qDot, qFromAxisAngle, qFromLookDir, qFromMat4, qFromRotMat3x3, qMul, qNegate, qNlerp, qNormalize, qSet, qSlerp, qToMat4, quatToAxisAngle, sphereVisibility, transformToMat4 };
2449
2449
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/constants.js","../src/quat.js","../src/form.js","../src/query.js","../src/track.js","../src/visibility.js"],"sourcesContent":["/**\n * @file Core constants — zero dependencies.\n * @module tree/constants\n * @license AGPL-3.0-only\n */\n\n// Coordinate spaces\nexport const WORLD = 'WORLD';\nexport const EYE = 'EYE';\nexport const NDC = 'NDC';\nexport const SCREEN = 'SCREEN';\nexport const MODEL = 'MODEL';\nexport const MATRIX = 'MATRIX';\n\n// NDC Z convention (only difference between backends)\nexport const WEBGL = -1; // z ∈ [−1, 1]\nexport const WEBGPU = 0; // z ∈ [0, 1]\n\n// Visibility results\nexport const INVISIBLE = 0;\nexport const VISIBLE = 1;\nexport const SEMIVISIBLE = 2;\n\n// Basis vectors (frozen plain arrays — duck-typed Vec3)\nexport const ORIGIN = Object.freeze([0, 0, 0]);\nexport const i = Object.freeze([1, 0, 0]);\nexport const j = Object.freeze([0, 1, 0]);\nexport const k = Object.freeze([0, 0, 1]);\nexport const _i = Object.freeze([-1, 0, 0]);\nexport const _j = Object.freeze([0, -1, 0]);\nexport const _k = Object.freeze([0, 0, -1]);\n","/**\n * @file Quaternion algebra and mat4/mat3 conversions.\n * @module tree/quat\n * @license AGPL-3.0-only\n *\n * Quaternions are stored as flat [x, y, z, w] arrays (w-last, glTF layout).\n *\n * All functions follow the out-first, zero-allocation contract.\n * Conversion functions bridge between quaternion and matrix representations\n * but do not perform any higher-level graphics operations — those belong\n * in form.js (matrix construction from specs) or track.js (animation).\n */\n\n'use strict';\n\n// =========================================================================\n// Basic ops\n// =========================================================================\n\n/** Set all four components. @returns {number[]} out */\nexport const qSet = (out, x, y, z, w) => {\n out[0] = x; out[1] = y; out[2] = z; out[3] = w; return out;\n};\n\n/** Copy quaternion a into out. @returns {number[]} out */\nexport const qCopy = (out, a) => {\n out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3]; return out;\n};\n\n/** Dot product of two quaternions. */\nexport const qDot = (a, b) => a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];\n\n/** Normalise quaternion in-place. @returns {number[]} out */\nexport const qNormalize = (out) => {\n const l = Math.sqrt(out[0]*out[0]+out[1]*out[1]+out[2]*out[2]+out[3]*out[3]) || 1;\n out[0]/=l; out[1]/=l; out[2]/=l; out[3]/=l; return out;\n};\n\n/** Negate quaternion (same rotation, different hemisphere). @returns {number[]} out */\nexport const qNegate = (out, a) => {\n out[0]=-a[0]; out[1]=-a[1]; out[2]=-a[2]; out[3]=-a[3]; return out;\n};\n\n/** Hamilton product out = a * b. @returns {number[]} out */\nexport const qMul = (out, a, b) => {\n const ax=a[0],ay=a[1],az=a[2],aw=a[3], bx=b[0],by=b[1],bz=b[2],bw=b[3];\n out[0]=aw*bx+ax*bw+ay*bz-az*by;\n out[1]=aw*by-ax*bz+ay*bw+az*bx;\n out[2]=aw*bz+ax*by-ay*bx+az*bw;\n out[3]=aw*bw-ax*bx-ay*by-az*bz;\n return out;\n};\n\n// =========================================================================\n// Interpolation\n// =========================================================================\n\n/** Spherical linear interpolation. @returns {number[]} out */\nexport const qSlerp = (out, a, b, t) => {\n let bx=b[0],by=b[1],bz=b[2],bw=b[3];\n let d = a[0]*bx+a[1]*by+a[2]*bz+a[3]*bw;\n if (d < 0) { bx=-bx; by=-by; bz=-bz; bw=-bw; d=-d; }\n let f0, f1;\n if (1-d > 1e-10) {\n const th=Math.acos(d), st=Math.sin(th);\n f0=Math.sin((1-t)*th)/st; f1=Math.sin(t*th)/st;\n } else {\n f0=1-t; f1=t;\n }\n out[0]=a[0]*f0+bx*f1; out[1]=a[1]*f0+by*f1;\n out[2]=a[2]*f0+bz*f1; out[3]=a[3]*f0+bw*f1;\n return qNormalize(out);\n};\n\n/**\n * Normalised linear interpolation (nlerp).\n * Cheaper than slerp; slightly non-constant angular velocity.\n * Handles antipodal quats by flipping b when dot < 0.\n * @returns {number[]} out\n */\nexport const qNlerp = (out, a, b, t) => {\n let bx=b[0],by=b[1],bz=b[2],bw=b[3];\n if (a[0]*bx+a[1]*by+a[2]*bz+a[3]*bw < 0) { bx=-bx; by=-by; bz=-bz; bw=-bw; }\n out[0]=a[0]+t*(bx-a[0]); out[1]=a[1]+t*(by-a[1]);\n out[2]=a[2]+t*(bz-a[2]); out[3]=a[3]+t*(bw-a[3]);\n return qNormalize(out);\n};\n\n// =========================================================================\n// Construction\n// =========================================================================\n\n/**\n * Build a quaternion from axis-angle.\n * @param {number[]} out\n * @param {number} ax @param {number} ay @param {number} az Axis (need not be unit).\n * @param {number} angle Radians.\n * @returns {number[]} out\n */\nexport const qFromAxisAngle = (out, ax, ay, az, angle) => {\n const half = angle * 0.5;\n const s = Math.sin(half);\n const len = Math.sqrt(ax*ax + ay*ay + az*az) || 1;\n out[0] = s * ax / len; out[1] = s * ay / len; out[2] = s * az / len;\n out[3] = Math.cos(half);\n return out;\n};\n\n/**\n * Build a quaternion from a look direction (−Z forward) and optional up (default +Y).\n * @param {number[]} out\n * @param {number[]} dir Forward direction [x,y,z].\n * @param {number[]} [up] Up vector [x,y,z].\n * @returns {number[]} out\n */\nexport const qFromLookDir = (out, dir, up) => {\n let fx=dir[0],fy=dir[1],fz=dir[2];\n const fl=Math.sqrt(fx*fx+fy*fy+fz*fz)||1;\n fx/=fl; fy/=fl; fz/=fl;\n let ux=up?up[0]:0, uy=up?up[1]:1, uz=up?up[2]:0;\n let rx=uy*fz-uz*fy, ry=uz*fx-ux*fz, rz=ux*fy-uy*fx;\n const rl=Math.sqrt(rx*rx+ry*ry+rz*rz)||1;\n rx/=rl; ry/=rl; rz/=rl;\n ux=fy*rz-fz*ry; uy=fz*rx-fx*rz; uz=fx*ry-fy*rx;\n return qFromRotMat3x3(out, rx,ry,rz, ux,uy,uz, -fx,-fy,-fz);\n};\n\n/**\n * Build a quaternion from a 3×3 rotation matrix (9 row-major scalars).\n * @returns {number[]} out (normalised)\n */\nexport const qFromRotMat3x3 = (out, m00,m01,m02, m10,m11,m12, m20,m21,m22) => {\n const tr = m00+m11+m22;\n if (tr > 0) {\n const s=0.5/Math.sqrt(tr+1);\n out[3]=0.25/s; out[0]=(m21-m12)*s; out[1]=(m02-m20)*s; out[2]=(m10-m01)*s;\n } else if (m00>m11 && m00>m22) {\n const s=2*Math.sqrt(1+m00-m11-m22);\n out[3]=(m21-m12)/s; out[0]=0.25*s; out[1]=(m01+m10)/s; out[2]=(m02+m20)/s;\n } else if (m11>m22) {\n const s=2*Math.sqrt(1+m11-m00-m22);\n out[3]=(m02-m20)/s; out[0]=(m01+m10)/s; out[1]=0.25*s; out[2]=(m12+m21)/s;\n } else {\n const s=2*Math.sqrt(1+m22-m00-m11);\n out[3]=(m10-m01)/s; out[0]=(m02+m20)/s; out[1]=(m12+m21)/s; out[2]=0.25*s;\n }\n return qNormalize(out);\n};\n\n/**\n * Extract a unit quaternion from the upper-left 3×3 of a column-major mat4.\n * @param {number[]} out\n * @param {Float32Array|number[]} m Column-major mat4.\n * @returns {number[]} out\n */\nexport const qFromMat4 = (out, m) =>\n qFromRotMat3x3(out, m[0],m[4],m[8], m[1],m[5],m[9], m[2],m[6],m[10]);\n\n/**\n * Write a quaternion into the rotation block of a column-major mat4.\n * Translation and perspective rows/cols are set to identity values.\n * @param {Float32Array|number[]} out 16-element array.\n * @param {number[]} q [x,y,z,w].\n * @returns {Float32Array|number[]} out\n */\nexport const qToMat4 = (out, q) => {\n const x=q[0],y=q[1],z=q[2],w=q[3];\n const x2=x+x,y2=y+y,z2=z+z;\n const xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;\n out[0]=1-(yy+zz); out[1]=xy+wz; out[2]=xz-wy; out[3]=0;\n out[4]=xy-wz; out[5]=1-(xx+zz); out[6]=yz+wx; out[7]=0;\n out[8]=xz+wy; out[9]=yz-wx; out[10]=1-(xx+yy); out[11]=0;\n out[12]=0; out[13]=0; out[14]=0; out[15]=1;\n return out;\n};\n\n// =========================================================================\n// Decomposition\n// =========================================================================\n\n/**\n * Decompose a unit quaternion into { axis:[x,y,z], angle } (radians).\n * @param {number[]} q [x,y,z,w].\n * @param {Object} [out]\n * @returns {{ axis: number[], angle: number }}\n */\nexport const quatToAxisAngle = (q, out) => {\n out = out || {};\n const x=q[0],y=q[1],z=q[2],w=q[3];\n const sinHalf = Math.sqrt(x*x+y*y+z*z);\n if (sinHalf < 1e-8) { out.axis=[0,1,0]; out.angle=0; return out; }\n out.angle = 2*Math.atan2(sinHalf, w);\n out.axis = [x/sinHalf, y/sinHalf, z/sinHalf];\n return out;\n};\n","/**\n * @file Matrix construction from geometric specs and partial decomposition.\n * @module tree/form\n * @license AGPL-3.0-only\n *\n * Constructs mat4s from higher-level specs: TRS transforms, orthonormal\n * bases, lookat parameters, projection parameters, and special-purpose\n * matrices (bias, reflection).\n *\n * Design invariant: form.js has no dependency on query.js. Construction\n * from specs requires only scalar arithmetic and quaternion conversions.\n * Callers compose the resulting matrices using query.js (mat4Mul etc.).\n *\n * Lookat constructors live here because a camera is just a frame — the eye\n * matrix is the camera object's model matrix, not a camera-specific concept.\n * There is no camera module; mat4LookAt and mat4EyeMatrix are frame\n * constructions that happen to use lookat parameterisation.\n *\n * Projection constructors live here because they construct matrices from\n * geometric parameters. Projection scalar reads (projNear, projFov, etc.)\n * live in query.js — they interrogate an existing projection matrix.\n *\n * Partial decomposers (mat4To___) are the inverse of construction — they\n * extract a single component from an existing matrix. Kept alongside\n * constructors because they are paired operations on the same components.\n *\n * Imports quat.js only. No dependency on query.js, visibility.js, or track.js.\n *\n * All functions follow the out-first, zero-allocation contract.\n * Returns null on degeneracy where applicable.\n */\n\n'use strict';\n\nimport { qFromRotMat3x3 } from './quat.js';\n\n// =========================================================================\n// Frame construction\n// =========================================================================\n\n/**\n * Rigid frame from orthonormal basis + translation.\n * The primitive that lookat constructors use internally.\n *\n * Column-major layout: col0=right, col1=up, col2=forward, col3=translation.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} rx,ry,rz Right vector (col 0).\n * @param {number} ux,uy,uz Up vector (col 1).\n * @param {number} fx,fy,fz Forward vec (col 2).\n * @param {number} tx,ty,tz Translation (col 3).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4FromBasis(out, rx,ry,rz, ux,uy,uz, fx,fy,fz, tx,ty,tz) {\n out[0]=rx; out[1]=ry; out[2]=rz; out[3]=0;\n out[4]=ux; out[5]=uy; out[6]=uz; out[7]=0;\n out[8]=fx; out[9]=fy; out[10]=fz; out[11]=0;\n out[12]=tx; out[13]=ty; out[14]=tz; out[15]=1;\n return out;\n}\n\n/**\n * View matrix (world→eye) from lookat parameters.\n * Cheaper than building the eye matrix and inverting.\n *\n * Convention: −Z axis points toward center (camera looks along −Z in eye space).\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ex,ey,ez Eye (camera) position.\n * @param {number} cx,cy,cz Center (look-at target).\n * @param {number} ux,uy,uz World up hint (need not be unit).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4LookAt(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {\n // z = normalize(eye - center) (camera +Z away from target)\n let zx=ex-cx, zy=ey-cy, zz=ez-cz;\n const zl=Math.sqrt(zx*zx+zy*zy+zz*zz)||1;\n zx/=zl; zy/=zl; zz/=zl;\n // x = normalize(up × z) (right)\n let xx=uy*zz-uz*zy, xy=uz*zx-ux*zz, xz=ux*zy-uy*zx;\n const xl=Math.sqrt(xx*xx+xy*xy+xz*xz)||1;\n xx/=xl; xy/=xl; xz/=xl;\n // y = z × x (up_ortho, guaranteed perpendicular)\n const yx=zy*xz-zz*xy, yy=zz*xx-zx*xz, yz=zx*xy-zy*xx;\n // View = [R | -R·t] (column-major)\n out[0]=xx; out[1]=yx; out[2]=zx; out[3]=0;\n out[4]=xy; out[5]=yy; out[6]=zy; out[7]=0;\n out[8]=xz; out[9]=yz; out[10]=zz; out[11]=0;\n out[12]=-(xx*ex+xy*ey+xz*ez);\n out[13]=-(yx*ex+yy*ey+yz*ez);\n out[14]=-(zx*ex+zy*ey+zz*ez);\n out[15]=1;\n return out;\n}\n\n/**\n * Eye matrix (eye→world) from lookat parameters.\n * Transpose of the rotation block + direct translation column.\n * Same inputs as mat4LookAt.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ex,ey,ez Eye (camera) position.\n * @param {number} cx,cy,cz Center (look-at target).\n * @param {number} ux,uy,uz World up hint (need not be unit).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4EyeMatrix(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {\n // Same basis computation as mat4LookAt.\n let zx=ex-cx, zy=ey-cy, zz=ez-cz;\n const zl=Math.sqrt(zx*zx+zy*zy+zz*zz)||1;\n zx/=zl; zy/=zl; zz/=zl;\n let xx=uy*zz-uz*zy, xy=uz*zx-ux*zz, xz=ux*zy-uy*zx;\n const xl=Math.sqrt(xx*xx+xy*xy+xz*xz)||1;\n xx/=xl; xy/=xl; xz/=xl;\n const yx=zy*xz-zz*xy, yy=zz*xx-zx*xz, yz=zx*xy-zy*xx;\n // Eye matrix = [R^T | t] (rotation transposed, translation = eye position)\n out[0]=xx; out[1]=xy; out[2]=xz; out[3]=0;\n out[4]=yx; out[5]=yy; out[6]=yz; out[7]=0;\n out[8]=zx; out[9]=zy; out[10]=zz; out[11]=0;\n out[12]=ex; out[13]=ey; out[14]=ez; out[15]=1;\n return out;\n}\n\n// =========================================================================\n// TRS construction\n// =========================================================================\n\n/**\n * Column-major mat4 from flat TRS scalars.\n * No struct allocation — all components passed as plain numbers.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} tx,ty,tz Translation.\n * @param {number} qx,qy,qz,qw Rotation quaternion [x,y,z,w].\n * @param {number} sx,sy,sz Scale.\n * @returns {Float32Array|number[]} out\n */\nexport function mat4FromTRS(out, tx,ty,tz, qx,qy,qz,qw, sx,sy,sz) {\n const x2=qx+qx,y2=qy+qy,z2=qz+qz;\n const xx=qx*x2,xy=qx*y2,xz=qx*z2,yy=qy*y2,yz=qy*z2,zz=qz*z2;\n const wx=qw*x2,wy=qw*y2,wz=qw*z2;\n out[0]=(1-(yy+zz))*sx; out[1]=(xy+wz)*sx; out[2]=(xz-wy)*sx; out[3]=0;\n out[4]=(xy-wz)*sy; out[5]=(1-(xx+zz))*sy; out[6]=(yz+wx)*sy; out[7]=0;\n out[8]=(xz+wy)*sz; out[9]=(yz-wx)*sz; out[10]=(1-(xx+yy))*sz; out[11]=0;\n out[12]=tx; out[13]=ty; out[14]=tz; out[15]=1;\n return out;\n}\n\n/**\n * Translation-only mat4.\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} tx,ty,tz\n * @returns {Float32Array|number[]} out\n */\nexport function mat4FromTranslation(out, tx,ty,tz) {\n out[0]=1; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=1; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0; out[10]=1; out[11]=0;\n out[12]=tx; out[13]=ty; out[14]=tz; out[15]=1;\n return out;\n}\n\n/**\n * Scale-only mat4.\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} sx,sy,sz\n * @returns {Float32Array|number[]} out\n */\nexport function mat4FromScale(out, sx,sy,sz) {\n out[0]=sx; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=sy; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0; out[10]=sz; out[11]=0;\n out[12]=0; out[13]=0; out[14]=0; out[15]=1;\n return out;\n}\n\n// =========================================================================\n// Projection construction\n// =========================================================================\n\n/**\n * Perspective projection matrix.\n *\n * NDC convention: ndcZMin = WEBGL (−1) or WEBGPU (0).\n * near maps to ndcZMin, far maps to +1.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} fov Vertical field of view (radians).\n * @param {number} aspect Width / height.\n * @param {number} near Near plane distance (positive).\n * @param {number} far Far plane distance (positive, > near).\n * @param {number} ndcZMin -1 (WEBGL) or 0 (WEBGPU).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Perspective(out, fov, aspect, near, far, ndcZMin) {\n const f = 1 / Math.tan(fov * 0.5);\n out[0]=f/aspect; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=f; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0;\n out[10]=(ndcZMin*near-far)/(far-near);\n out[11]=-1;\n out[12]=0; out[13]=0;\n out[14]=(ndcZMin-1)*far*near/(far-near);\n out[15]=0;\n return out;\n}\n\n/**\n * Orthographic projection matrix.\n *\n * NDC convention: ndcZMin = WEBGL (−1) or WEBGPU (0).\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} left,right,bottom,top Frustum extents.\n * @param {number} near,far Clip plane distances (positive).\n * @param {number} ndcZMin -1 (WEBGL) or 0 (WEBGPU).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Ortho(out, left, right, bottom, top, near, far, ndcZMin) {\n const rl=1/(right-left), tb=1/(top-bottom), fn=1/(far-near);\n out[0]=2*rl; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=2*tb; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0;\n out[10]=(ndcZMin-1)*fn;\n out[11]=0;\n out[12]=-(right+left)*rl; out[13]=-(top+bottom)*tb;\n out[14]=(ndcZMin*far-near)*fn;\n out[15]=1;\n return out;\n}\n\n/**\n * Frustum (off-centre perspective) projection matrix.\n *\n * NDC convention: ndcZMin = WEBGL (−1) or WEBGPU (0).\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} left,right,bottom,top Near-plane extents.\n * @param {number} near,far Clip plane distances (positive).\n * @param {number} ndcZMin -1 (WEBGL) or 0 (WEBGPU).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Frustum(out, left, right, bottom, top, near, far, ndcZMin) {\n const rl=1/(right-left), tb=1/(top-bottom);\n out[0]=2*near*rl; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=2*near*tb; out[6]=0; out[7]=0;\n out[8]=(right+left)*rl; out[9]=(top+bottom)*tb;\n out[10]=(ndcZMin*near-far)/(far-near);\n out[11]=-1;\n out[12]=0; out[13]=0;\n out[14]=(ndcZMin-1)*far*near/(far-near);\n out[15]=0;\n return out;\n}\n\n// =========================================================================\n// Special-purpose construction\n// =========================================================================\n\n/**\n * Bias matrix: remaps xyz from NDC to texture/UV space [0,1].\n * xy always remap from [−1,1]; z remaps from [ndcZMin,1].\n * Used to transform light-space NDC coordinates for shadow map sampling.\n *\n * Column-major (WebGL, ndcZMin=−1):\n * [ 0.5 0 0 0.5 ]\n * [ 0 0.5 0 0.5 ]\n * [ 0 0 0.5 0.5 ]\n * [ 0 0 0 1 ]\n *\n * Column-major (WebGPU, ndcZMin=0):\n * [ 0.5 0 0 0.5 ]\n * [ 0 0.5 0 0.5 ]\n * [ 0 0 1 0 ]\n * [ 0 0 0 1 ]\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Bias(out, ndcZMin) {\n const sz = 1 / (1 - ndcZMin);\n const tz = -ndcZMin / (1 - ndcZMin);\n out[0]=0.5; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=0.5; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0; out[10]=sz; out[11]=0;\n out[12]=0.5; out[13]=0.5; out[14]=tz; out[15]=1;\n return out;\n}\n\n/**\n * Reflection matrix across a plane ax + by + cz = d.\n * [nx, ny, nz] must be a unit normal.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} nx,ny,nz Unit plane normal.\n * @param {number} d Plane offset (dot(point_on_plane, normal)).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Reflect(out, nx,ny,nz,d) {\n out[0]=1-2*nx*nx; out[1]=-2*ny*nx; out[2]=-2*nz*nx; out[3]=0;\n out[4]=-2*nx*ny; out[5]=1-2*ny*ny; out[6]=-2*nz*ny; out[7]=0;\n out[8]=-2*nx*nz; out[9]=-2*ny*nz; out[10]=1-2*nz*nz; out[11]=0;\n out[12]=2*d*nx; out[13]=2*d*ny; out[14]=2*d*nz; out[15]=1;\n return out;\n}\n\n// =========================================================================\n// Partial decomposition (mat4To___ mirrors mat4From___)\n// =========================================================================\n\n/**\n * Extract translation from a column-major mat4 (column 3).\n * @param {Float32Array|number[]} out3 3-element destination.\n * @param {Float32Array|number[]} m 16-element source.\n * @returns {Float32Array|number[]} out3\n */\nexport function mat4ToTranslation(out3, m) {\n out3[0]=m[12]; out3[1]=m[13]; out3[2]=m[14];\n return out3;\n}\n\n/**\n * Extract scale from a column-major mat4 (column lengths of rotation block).\n * Assumes no shear.\n * @param {Float32Array|number[]} out3 3-element destination.\n * @param {Float32Array|number[]} m 16-element source.\n * @returns {Float32Array|number[]} out3\n */\nexport function mat4ToScale(out3, m) {\n out3[0]=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);\n out3[1]=Math.sqrt(m[4]*m[4]+m[5]*m[5]+m[6]*m[6]);\n out3[2]=Math.sqrt(m[8]*m[8]+m[9]*m[9]+m[10]*m[10]);\n return out3;\n}\n\n/**\n * Extract rotation as a unit quaternion from a column-major mat4.\n * Scale is factored out from each column before extraction.\n * Assumes no shear.\n * @param {number[]} out4 4-element [x,y,z,w] destination.\n * @param {Float32Array|number[]} m 16-element source.\n * @returns {number[]} out4\n */\nexport function mat4ToRotation(out4, m) {\n const sx=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2])||1;\n const sy=Math.sqrt(m[4]*m[4]+m[5]*m[5]+m[6]*m[6])||1;\n const sz=Math.sqrt(m[8]*m[8]+m[9]*m[9]+m[10]*m[10])||1;\n return qFromRotMat3x3(out4,\n m[0]/sx, m[4]/sy, m[8]/sz,\n m[1]/sx, m[5]/sy, m[9]/sz,\n m[2]/sx, m[6]/sy, m[10]/sz);\n}\n","/**\n * @file Matrix arithmetic, space-transform dispatch, and projection queries.\n * @module tree/query\n * @license AGPL-3.0-only\n *\n * The operative layer — receives existing matrices and extracts information.\n * Contrast with form.js which constructs matrices from specs.\n *\n * form.js — you have specs, you want a matrix\n * query.js — you have a matrix, you want information\n *\n * No dependency on form.js. Operating on matrices requires no knowledge\n * of how they were constructed.\n *\n * Storage: column-major Float32Array / ArrayLike<number>.\n * Element [col*4 + row] = M[row, col].\n *\n * Multiply: mat4Mul(out, A, B) = A · B (standard math order).\n *\n * Pipeline: clip = P · V · M · v\n * P = projection (eye → clip)\n * V = view (world → eye)\n * M = model (local → world)\n *\n * NDC convention parameter (ndcZMin):\n * WEBGL = -1 z ∈ [−1, 1]\n * WEBGPU = 0 z ∈ [0, 1]\n *\n * All functions follow the out-first, zero-allocation contract.\n * Returns null on degeneracy (singular matrix, etc.).\n */\n\n'use strict';\n\nimport {\n WORLD, EYE, NDC, SCREEN, MATRIX,\n} from './constants.js';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Mat4 math\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = A · B (column-major, standard math order) */\nexport function mat4Mul(out, A, B) {\n const a0=A[0],a1=A[1],a2=A[2],a3=A[3],\n a4=A[4],a5=A[5],a6=A[6],a7=A[7],\n a8=A[8],a9=A[9],a10=A[10],a11=A[11],\n a12=A[12],a13=A[13],a14=A[14],a15=A[15];\n let b0=B[0],b1=B[1],b2=B[2],b3=B[3];\n out[0]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[1]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[2]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[3]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[4];b1=B[5];b2=B[6];b3=B[7];\n out[4]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[5]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[6]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[7]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[8];b1=B[9];b2=B[10];b3=B[11];\n out[8]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[9]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[10]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[11]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[12];b1=B[13];b2=B[14];b3=B[15];\n out[12]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[13]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[14]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[15]=a3*b0+a7*b1+a11*b2+a15*b3;\n return out;\n}\n\n/** out = inverse(src). Returns null if singular. */\nexport function mat4Invert(out, src) {\n const s=src;\n const a00=s[0],a01=s[1],a02=s[2],a03=s[3],\n a10=s[4],a11=s[5],a12=s[6],a13=s[7],\n a20=s[8],a21=s[9],a22=s[10],a23=s[11],\n a30=s[12],a31=s[13],a32=s[14],a33=s[15];\n const b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,\n b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,\n b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,\n b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,\n b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,\n b10=a21*a33-a23*a31,b11=a22*a33-a23*a32;\n let det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;\n if (Math.abs(det) < 1e-12) return null;\n det=1/det;\n out[0]=(a11*b11-a12*b10+a13*b09)*det;\n out[1]=(a02*b10-a01*b11-a03*b09)*det;\n out[2]=(a31*b05-a32*b04+a33*b03)*det;\n out[3]=(a22*b04-a21*b05-a23*b03)*det;\n out[4]=(a12*b08-a10*b11-a13*b07)*det;\n out[5]=(a00*b11-a02*b08+a03*b07)*det;\n out[6]=(a32*b02-a30*b05-a33*b01)*det;\n out[7]=(a20*b05-a22*b02+a23*b01)*det;\n out[8]=(a10*b10-a11*b08+a13*b06)*det;\n out[9]=(a01*b08-a00*b10-a03*b06)*det;\n out[10]=(a30*b04-a31*b02+a33*b00)*det;\n out[11]=(a21*b02-a20*b04-a23*b00)*det;\n out[12]=(a11*b07-a10*b09-a12*b06)*det;\n out[13]=(a00*b09-a01*b07+a02*b06)*det;\n out[14]=(a31*b01-a30*b03-a32*b00)*det;\n out[15]=(a20*b03-a21*b01+a22*b00)*det;\n return out;\n}\n\n/** out = transpose(src) */\nexport function mat4Transpose(out, src) {\n if (out === src) {\n let t;\n t=src[1];out[1]=src[4];out[4]=t;\n t=src[2];out[2]=src[8];out[8]=t;\n t=src[3];out[3]=src[12];out[12]=t;\n t=src[6];out[6]=src[9];out[9]=t;\n t=src[7];out[7]=src[13];out[13]=t;\n t=src[11];out[11]=src[14];out[14]=t;\n } else {\n out[0]=src[0];out[1]=src[4];out[2]=src[8];out[3]=src[12];\n out[4]=src[1];out[5]=src[5];out[6]=src[9];out[7]=src[13];\n out[8]=src[2];out[9]=src[6];out[10]=src[10];out[11]=src[14];\n out[12]=src[3];out[13]=src[7];out[14]=src[11];out[15]=src[15];\n }\n return out;\n}\n\n/** out[0..8] = inverseTranspose(upper3×3(src)) (normal matrix) */\nexport function mat3NormalFromMat4(out, src) {\n const a00=src[0],a01=src[1],a02=src[2],\n a10=src[4],a11=src[5],a12=src[6],\n a20=src[8],a21=src[9],a22=src[10];\n const b01=a22*a11-a12*a21,\n b11=-a22*a01+a02*a21,\n b21=a12*a01-a02*a11;\n let det=a00*b01+a10*b11+a20*b21;\n if (Math.abs(det) < 1e-12) { for(let i=0;i<9;i++)out[i]=0; return out; }\n det=1/det;\n out[0]=b01*det;\n out[1]=(-a22*a10+a12*a20)*det;\n out[2]=(a21*a10-a11*a20)*det;\n out[3]=b11*det;\n out[4]=(a22*a00-a02*a20)*det;\n out[5]=(-a21*a00+a01*a20)*det;\n out[6]=b21*det;\n out[7]=(-a12*a00+a02*a10)*det;\n out[8]=(a11*a00-a01*a10)*det;\n return out;\n}\n\n/** out = mat4 * [x,y,z,1], perspective-divides, writes xyz */\nexport function mat4MulPoint(out, m, x, y, z) {\n const rx = m[0]*x + m[4]*y + m[8]*z + m[12];\n const ry = m[1]*x + m[5]*y + m[9]*z + m[13];\n const rz = m[2]*x + m[6]*y + m[10]*z + m[14];\n const rw = m[3]*x + m[7]*y + m[11]*z + m[15];\n if (rw !== 0 && rw !== 1) {\n out[0] = rx/rw; out[1] = ry/rw; out[2] = rz/rw;\n } else {\n out[0] = rx; out[1] = ry; out[2] = rz;\n }\n return out;\n}\n\n/**\n * Apply only the 3×3 linear block of a mat4 to a direction vector.\n * No translation, no perspective divide. Suitable for directions and normals\n * when the matrix is known to be orthogonal (use mat3NormalFromMat4 for normals\n * under non-uniform scale).\n *\n * @param {Float32Array|number[]} out 3-element destination.\n * @param {Float32Array|number[]} m 16-element mat4.\n * @param {number} dx,dy,dz Input direction.\n * @returns {Float32Array|number[]} out\n */\nexport function mat4MulDir(out, m, dx, dy, dz) {\n out[0] = m[0]*dx + m[4]*dy + m[8]*dz;\n out[1] = m[1]*dx + m[5]*dy + m[9]*dz;\n out[2] = m[2]*dx + m[6]*dy + m[10]*dz;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Projection queries (read scalars from a projection mat4)\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** @returns {boolean} true if orthographic */\nexport function projIsOrtho(p) { return p[15] !== 0; }\n\n/**\n * Near plane distance.\n * @param {ArrayLike<number>} p Projection Mat4.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function projNear(p, ndcZMin) {\n return p[15] === 0\n ? p[14] / (p[10] + ndcZMin)\n : (p[14] - ndcZMin) / p[10];\n}\n\n/** Far plane distance (convention-independent: far always maps to NDC z=1). */\nexport function projFar(p) {\n return p[15] === 0\n ? p[14] / (1 + p[10])\n : (p[14] - 1) / p[10];\n}\n\nexport function projLeft(p, ndcZMin) {\n return p[15] === 1\n ? -(1 + p[12]) / p[0]\n : projNear(p, ndcZMin) * (p[8] - 1) / p[0];\n}\n\nexport function projRight(p, ndcZMin) {\n return p[15] === 1\n ? (1 - p[12]) / p[0]\n : projNear(p, ndcZMin) * (1 + p[8]) / p[0];\n}\n\nexport function projTop(p, ndcZMin) {\n return p[15] === 1\n ? (p[13] - 1) / p[5]\n : projNear(p, ndcZMin) * (p[9] - 1) / p[5];\n}\n\nexport function projBottom(p, ndcZMin) {\n return p[15] === 1\n ? (1 + p[13]) / p[5]\n : projNear(p, ndcZMin) * (1 + p[9]) / p[5];\n}\n\n/** Vertical fov (radians, perspective only). */\nexport function projFov(p) {\n return Math.abs(2 * Math.atan(1 / p[5]));\n}\n\n/** Horizontal fov (radians, perspective only). */\nexport function projHfov(p) {\n return Math.abs(2 * Math.atan(1 / p[0]));\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Derived matrices (convenience)\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = P · V */\nexport function mat4PV(out, proj, view) { return mat4Mul(out, proj, view); }\n\n/** out = V · M */\nexport function mat4MV(out, model, view) { return mat4Mul(out, view, model); }\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Location / Direction transforms\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Relative transform for locations (points): out = inv(to) · from.\n * @param {ArrayLike<number>} out 16-element destination.\n * @param {ArrayLike<number>} from Source frame transform.\n * @param {ArrayLike<number>} to Destination frame transform.\n * @returns {ArrayLike<number>|null} out, or null if to is singular.\n */\nexport function mat4Location(out, from, to) {\n return mat4Invert(out, to) && mat4Mul(out, out, from);\n}\n\n/**\n * Relative transform for directions (vectors): out = to₃ · inv(from₃).\n * Uses only the upper-left 3×3 blocks, ignoring translation.\n * @param {ArrayLike<number>} out 9-element destination.\n * @param {ArrayLike<number>} from Source frame transform.\n * @param {ArrayLike<number>} to Destination frame transform.\n * @returns {ArrayLike<number>|null} out, or null if from is singular.\n */\nexport function mat3Direction(out, from, to) {\n const a00=from[0], a01=from[1], a02=from[2],\n a10=from[4], a11=from[5], a12=from[6],\n a20=from[8], a21=from[9], a22=from[10];\n const b01=a22*a11-a12*a21,\n b11=a12*a20-a22*a10,\n b21=a21*a10-a11*a20;\n let det=a00*b01+a01*b11+a02*b21;\n if (Math.abs(det) < 1e-12) return null;\n det=1/det;\n const i00=b01*det, i01=(a02*a21-a22*a01)*det, i02=(a12*a01-a02*a11)*det;\n const i10=b11*det, i11=(a22*a00-a02*a20)*det, i12=(a02*a10-a12*a00)*det;\n const i20=b21*det, i21=(a01*a20-a21*a00)*det, i22=(a11*a00-a01*a10)*det;\n const t00=to[0], t01=to[1], t02=to[2],\n t10=to[4], t11=to[5], t12=to[6],\n t20=to[8], t21=to[9], t22=to[10];\n const m00=t00*i00+t10*i01+t20*i02, m01=t01*i00+t11*i01+t21*i02, m02=t02*i00+t12*i01+t22*i02;\n const m10=t00*i10+t10*i11+t20*i12, m11=t01*i10+t11*i11+t21*i12, m12=t02*i10+t12*i11+t22*i12;\n const m20=t00*i20+t10*i21+t20*i22, m21=t01*i20+t11*i21+t21*i22, m22=t02*i20+t12*i21+t22*i22;\n out[0]=m00; out[1]=m10; out[2]=m20;\n out[3]=m01; out[4]=m11; out[5]=m21;\n out[6]=m02; out[7]=m12; out[8]=m22;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Space transforms — mapLocation / mapDirection\n// ═══════════════════════════════════════════════════════════════════════════\n//\n// FLAT DISPATCH: every from→to pair is a self-contained leaf.\n// No path calls back into mapLocation/mapDirection (no reentrancy).\n// All intermediates are stack locals (zero shared state).\n//\n// Matrices bag m:\n// {\n// pMatrix: Float32Array(16) — projection (eye → clip)\n// vMatrix: Float32Array(16) — view (world → eye)\n// eMatrix?: Float32Array(16) — eye (eye → world, inv view); lazy\n// pvMatrix?: Float32Array(16) — P · V; lazy\n// ipvMatrix?: Float32Array(16) — inv(P · V); lazy\n// fromFrame?: Float32Array(16) — MATRIX source frame (custom space)\n// toFrameInv?:Float32Array(16) — inv(MATRIX dest frame)\n// }\n//\n\n// ── Location leaf helpers ────────────────────────────────────────────────\n\nfunction _worldToScreen(out, px, py, pz, pv, vp, ndcZMin) {\n const x = pv[0]*px+pv[4]*py+pv[8]*pz+pv[12];\n const y = pv[1]*px+pv[5]*py+pv[9]*pz+pv[13];\n const z = pv[2]*px+pv[6]*py+pv[10]*pz+pv[14];\n const w = pv[3]*px+pv[7]*py+pv[11]*pz+pv[15];\n const xi = (w !== 0 && w !== 1) ? 1/w : 1;\n const nx = x*xi, ny = y*xi, nz = z*xi;\n const vpX=vp[0], vpY=vp[1], vpW=Math.abs(vp[2]), vpH=Math.abs(vp[3]);\n out[0] = vpX + vpW * (nx + 1) * 0.5;\n out[1] = vpY + vpH * (1 - (ny + 1) * 0.5);\n out[2] = (nz - ndcZMin) / (1 - ndcZMin);\n return out;\n}\n\nfunction _screenToWorld(out, sx, sy, sz, ipv, vp, ndcZMin) {\n const vpX=vp[0], vpY=vp[1], vpW=Math.abs(vp[2]), vpH=Math.abs(vp[3]);\n const nx = (sx - vpX) / vpW * 2 - 1;\n const ny = 1 - (sy - vpY) / vpH * 2;\n const nz = sz * (1 - ndcZMin) + ndcZMin;\n return mat4MulPoint(out, ipv, nx, ny, nz);\n}\n\nfunction _worldToNDC(out, px, py, pz, pv) {\n const x=pv[0]*px+pv[4]*py+pv[8]*pz+pv[12];\n const y=pv[1]*px+pv[5]*py+pv[9]*pz+pv[13];\n const z=pv[2]*px+pv[6]*py+pv[10]*pz+pv[14];\n const w=pv[3]*px+pv[7]*py+pv[11]*pz+pv[15];\n const xi = (w !== 0 && w !== 1) ? 1/w : 1;\n out[0]=x*xi; out[1]=y*xi; out[2]=z*xi;\n return out;\n}\n\nfunction _ndcToWorld(out, nx, ny, nz, ipv) {\n return mat4MulPoint(out, ipv, nx, ny, nz);\n}\n\nfunction _screenToNDC(out, sx, sy, sz, vp, ndcZMin) {\n const vpX=vp[0], vpY=vp[1], vpW=Math.abs(vp[2]), vpH=Math.abs(vp[3]);\n out[0] = (sx - vpX) / vpW * 2 - 1;\n out[1] = 1 - (sy - vpY) / vpH * 2;\n out[2] = sz * (1 - ndcZMin) + ndcZMin;\n return out;\n}\n\nfunction _ndcToScreen(out, nx, ny, nz, vp, ndcZMin) {\n const vpX=vp[0], vpY=vp[1], vpW=Math.abs(vp[2]), vpH=Math.abs(vp[3]);\n out[0] = vpX + vpW * (nx + 1) * 0.5;\n out[1] = vpY + vpH * (1 - (ny + 1) * 0.5);\n out[2] = (nz - ndcZMin) / (1 - ndcZMin);\n return out;\n}\n\nfunction _ensurePV(m) {\n if (m.pvMatrix) return m.pvMatrix;\n m.pvMatrix = new Float32Array(16);\n mat4Mul(m.pvMatrix, m.pMatrix, m.vMatrix);\n return m.pvMatrix;\n}\n\n/**\n * Map a point between named coordinate spaces.\n *\n * @param {Vec3} out Result written here.\n * @param {number} px,py,pz Input point.\n * @param {string} from Source space constant.\n * @param {string} to Target space constant.\n * @param {object} m Matrices bag:\n * { pMatrix, vMatrix, eMatrix?, pvMatrix?, ipvMatrix?, fromFrame?, toFrameInv? }\n * @param {Vec4} vp Viewport [x, y, width, height].\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function mapLocation(out, px, py, pz, from, to, m, vp, ndcZMin) {\n // WORLD ↔ SCREEN\n if (from === WORLD && to === SCREEN)\n return _worldToScreen(out, px,py,pz, _ensurePV(m), vp, ndcZMin);\n if (from === SCREEN && to === WORLD)\n return _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n\n // WORLD ↔ NDC\n if (from === WORLD && to === NDC)\n return _worldToNDC(out, px,py,pz, _ensurePV(m));\n if (from === NDC && to === WORLD)\n return _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n\n // SCREEN ↔ NDC\n if (from === SCREEN && to === NDC)\n return _screenToNDC(out, px,py,pz, vp, ndcZMin);\n if (from === NDC && to === SCREEN)\n return _ndcToScreen(out, px,py,pz, vp, ndcZMin);\n\n // WORLD ↔ EYE\n if (from === WORLD && to === EYE)\n return mat4MulPoint(out, m.vMatrix, px,py,pz);\n if (from === EYE && to === WORLD)\n return mat4MulPoint(out, m.eMatrix, px,py,pz);\n\n // EYE ↔ SCREEN\n if (from === EYE && to === SCREEN) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return _worldToScreen(out, ex,ey,ez, _ensurePV(m), vp, ndcZMin);\n }\n if (from === SCREEN && to === EYE) {\n _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.vMatrix, wx,wy,wz);\n }\n\n // EYE ↔ NDC\n if (from === EYE && to === NDC) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return _worldToNDC(out, ex,ey,ez, _ensurePV(m));\n }\n if (from === NDC && to === EYE) {\n _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.vMatrix, wx,wy,wz);\n }\n\n // MATRIX (custom frame) ↔ WORLD\n if (from === MATRIX && to === WORLD)\n return mat4MulPoint(out, m.fromFrame, px,py,pz);\n if (from === WORLD && to === MATRIX)\n return mat4MulPoint(out, m.toFrameInv, px,py,pz);\n\n // MATRIX ↔ EYE\n if (from === MATRIX && to === EYE) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return mat4MulPoint(out, m.vMatrix, fx,fy,fz);\n }\n if (from === EYE && to === MATRIX) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return mat4MulPoint(out, m.toFrameInv, ex,ey,ez);\n }\n\n // MATRIX ↔ SCREEN\n if (from === MATRIX && to === SCREEN) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return _worldToScreen(out, fx,fy,fz, _ensurePV(m), vp, ndcZMin);\n }\n if (from === SCREEN && to === MATRIX) {\n _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ NDC\n if (from === MATRIX && to === NDC) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return _worldToNDC(out, fx,fy,fz, _ensurePV(m));\n }\n if (from === NDC && to === MATRIX) {\n _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ MATRIX\n if (from === MATRIX && to === MATRIX) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return mat4MulPoint(out, m.toFrameInv, fx,fy,fz);\n }\n\n // Fallback\n out[0]=px; out[1]=py; out[2]=pz;\n return out;\n}\n\n// ── Direction leaf helpers ───────────────────────────────────────────────\n\n/** Apply the 3×3 linear part of a mat4 (rotation/scale, no translation). */\nfunction _applyDir(out, m, dx, dy, dz) {\n out[0]=m[0]*dx+m[4]*dy+m[8]*dz;\n out[1]=m[1]*dx+m[5]*dy+m[9]*dz;\n out[2]=m[2]*dx+m[6]*dy+m[10]*dz;\n return out;\n}\n\nfunction _worldToScreenDir(out, dx, dy, dz, proj, view, vpW, vpH, ndcZMin) {\n // Transform to clip space (no w divide for direction).\n const vx=view[0]*dx+view[4]*dy+view[8]*dz;\n const vy=view[1]*dx+view[5]*dy+view[9]*dz;\n const vz=view[2]*dx+view[6]*dy+view[10]*dz;\n const cx=proj[0]*vx+proj[4]*vy+proj[8]*vz;\n const cy=proj[1]*vx+proj[5]*vy+proj[9]*vz;\n const cz=proj[2]*vx+proj[6]*vy+proj[10]*vz;\n // NDC→screen scale (direction, no offset).\n out[0]=cx*vpW*0.5; out[1]=-cy*vpH*0.5;\n out[2]=cz*(1-ndcZMin)*0.5;\n return out;\n}\n\nfunction _screenToWorldDir(out, dx, dy, dz, proj, eMatrix, vpW, vpH, ndcZMin) {\n // Screen direction → NDC direction.\n const nx=dx/(vpW*0.5), ny=-dy/(vpH*0.5);\n const nz=dz/((1-ndcZMin)*0.5);\n // NDC direction → eye direction (inverse projection, linear only).\n const ex=nx/proj[0], ey=ny/proj[5], ez=nz;\n // Eye direction → world direction.\n _applyDir(out, eMatrix, ex, ey, ez);\n return out;\n}\n\nfunction _screenToNDCDir(out, dx, dy, dz, vpW, vpH, ndcZMin) {\n out[0]=dx/(vpW*0.5); out[1]=-dy/(vpH*0.5);\n out[2]=dz/((1-ndcZMin)*0.5);\n return out;\n}\n\nfunction _ndcToScreenDir(out, dx, dy, dz, vpW, vpH, ndcZMin) {\n out[0]=dx*vpW*0.5; out[1]=-dy*vpH*0.5;\n out[2]=dz*(1-ndcZMin)*0.5;\n return out;\n}\n\n/**\n * Map a direction between named coordinate spaces.\n * Same bag contract as mapLocation.\n */\nexport function mapDirection(out, dx, dy, dz, from, to, m, vp, ndcZMin) {\n const vpW = Math.abs(vp[2]), vpH = Math.abs(vp[3]);\n\n // EYE ↔ WORLD (most common)\n if (from === EYE && to === WORLD) return _applyDir(out, m.eMatrix, dx, dy, dz);\n if (from === WORLD && to === EYE) return _applyDir(out, m.vMatrix, dx, dy, dz);\n\n // WORLD ↔ SCREEN\n if (from === WORLD && to === SCREEN)\n return _worldToScreenDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n if (from === SCREEN && to === WORLD)\n return _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n\n // SCREEN ↔ NDC\n if (from === SCREEN && to === NDC)\n return _screenToNDCDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n if (from === NDC && to === SCREEN)\n return _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n\n // WORLD ↔ NDC\n if (from === WORLD && to === NDC) {\n _worldToScreenDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === WORLD) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n }\n\n // EYE ↔ SCREEN\n if (from === EYE && to === SCREEN) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n }\n if (from === SCREEN && to === EYE) {\n _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n\n // EYE ↔ NDC\n if (from === EYE && to === NDC) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === EYE) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n\n // MATRIX ↔ WORLD\n if (from === MATRIX && to === WORLD) return _applyDir(out, m.fromFrame, dx,dy,dz);\n if (from === WORLD && to === MATRIX) return _applyDir(out, m.toFrameInv, dx,dy,dz);\n\n // MATRIX ↔ EYE\n if (from === MATRIX && to === EYE) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n if (from === EYE && to === MATRIX) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ SCREEN\n if (from === MATRIX && to === SCREEN) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n }\n if (from === SCREEN && to === MATRIX) {\n _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ NDC\n if (from === MATRIX && to === NDC) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === MATRIX) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ MATRIX\n if (from === MATRIX && to === MATRIX) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // Fallback\n out[0]=dx; out[1]=dy; out[2]=dz;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// pixelRatio\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * World-units-per-pixel at a given eye-space Z depth.\n * @param {ArrayLike<number>} proj Projection mat4.\n * @param {number} vpH Viewport height (pixels).\n * @param {number} eyeZ Eye-space Z (negative for in-front-of camera).\n * @param {number} ndcZMin WEBGL or WEBGPU.\n */\nexport function pixelRatio(proj, vpH, eyeZ, ndcZMin) {\n if (projIsOrtho(proj)) {\n return Math.abs(projTop(proj, ndcZMin) - projBottom(proj, ndcZMin)) / vpH;\n }\n return 2 * Math.abs(eyeZ) * Math.tan(projFov(proj) / 2) / vpH;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Pick-matrix\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Apply the pick-matrix in-place: proj ← M_pick · proj\n *\n * Zooms the frustum so that pixel (px, py) maps to the full NDC square,\n * making a 1×1 framebuffer render contain exactly that pixel's content.\n * Convention-independent — correct for both perspective and orthographic.\n *\n * M_pick (column-major):\n * [ sx 0 0 tx ] sx = W, sy = H\n * [ 0 sy 0 ty ] cx = NDC X of pixel centre = 2*(px+0.5)/W − 1\n * [ 0 0 1 0 ] cy = NDC Y of pixel centre = 1 − 2*(py+0.5)/H\n * [ 0 0 0 1 ] tx = −cx·W, ty = −cy·H\n *\n * @param {Float32Array} proj Projection mat4 — mutated in place.\n * @param {number} px Query X (CSS pixels).\n * @param {number} py Query Y (CSS pixels).\n * @param {number} W Canvas width (CSS pixels).\n * @param {number} H Canvas height (CSS pixels).\n * @returns {Float32Array} proj (same reference)\n */\nexport function mat4Pick(proj, px, py, W, H) {\n const cx = 2 * (px + 0.5) / W - 1;\n const cy = -2 * (py + 0.5) / H + 1;\n const sx = W;\n const sy = H;\n const tx = -cx * W;\n const ty = -cy * H;\n for (let j = 0; j < 4; j++) {\n const a = proj[j * 4];\n const b = proj[j * 4 + 1];\n const d = proj[j * 4 + 3];\n proj[j * 4] = sx * a + tx * d;\n proj[j * 4 + 1] = sy * b + ty * d;\n }\n return proj;\n}\n","/**\n * @file Spline math and keyframe animation state machines.\n * @module tree/track\n * @license AGPL-3.0-only\n *\n * Quaternion algebra is provided by quat.js — this module imports and uses\n * it but does not define it. Spline helpers (hermiteVec3, lerpVec3) and\n * TRS↔mat4 conversions (transformToMat4, mat4ToTransform) remain here\n * because they are tightly coupled to the PoseTrack keyframe shape.\n *\n * Zero dependencies on p5, DOM, WebGL, or WebGPU.\n *\n * ── Exports ──────────────────────────────────────────────────────────────────\n * Quaternion helpers (re-exported from quat.js)\n * qSet qCopy qDot qNormalize qNegate qMul qSlerp qNlerp\n * qFromAxisAngle qFromLookDir qFromRotMat3x3 qFromMat4 qToMat4\n * quatToAxisAngle\n * Spline / vector helpers\n * hermiteVec3 lerpVec3\n * Transform / mat4 helpers\n * transformToMat4 mat4ToTransform\n * Tracks\n * PoseTrack — { pos, rot, scl } TRS keyframes\n * CameraTrack — { eye, center, up } lookat keyframes\n *\n * ── Class hierarchy ───────────────────────────────────────────────────────────\n * Track (unexported, never instantiated directly)\n * └── PoseTrack (exported)\n * └── CameraTrack (exported)\n *\n * Track holds all transport machinery: cursor, play/stop/seek/tick,\n * hooks, rate semantics. Subclasses add only keyframe storage and\n * add() / eval() for their respective data shape.\n *\n * ── Hook architecture ─────────────────────────────────────────────────────────\n * Lib-space hooks (underscore prefix — reserved for host layer / UI layer):\n * _onActivate / _onDeactivate — fire on playing transitions false→true / true→false.\n * _onPlay / _onEnd / _onStop — mirror the user-space hooks; used by the UI layer\n * so it can sync without chaining the public slots.\n *\n * User-space hooks (public):\n * onPlay : fires in play() on false→true transition.\n * onEnd : fires in tick() at natural boundary (once mode only).\n * onStop : fires in stop() / reset() — explicit deactivation.\n * onEnd and onStop are mutually exclusive per event.\n *\n * Firing order:\n * play() → onPlay → _onPlay → _onActivate\n * tick() → onEnd → _onEnd → _onDeactivate\n * stop() → onStop → _onStop → _onDeactivate\n * reset() → onStop → _onStop → _onDeactivate\n *\n * ── Loop modes ────────────────────────────────────────────────────────────────\n * loop:false, bounce:false — play once, stop at end (fires onEnd)\n * loop:true, bounce:false — repeat, wrap back to start\n * loop:true, bounce:true — bounce forever at boundaries\n * loop:false, bounce:true — bounce once: flip at far boundary, stop at origin\n *\n * bounce and loop are fully independent flags — no exclusivity enforced.\n *\n * ── Playback semantics (rate + _dir) ─────────────────────────────────────────\n * rate > 0 forward\n * rate < 0 backward\n * rate === 0 frozen: tick() no-op; playing unchanged\n *\n * play() is the sole setter of playing = true.\n * stop() is the sole setter of playing = false.\n * Assigning rate never starts or stops playback.\n *\n * _dir (internal, ±1) tracks the current bounce travel direction.\n * tick() advances by rate * _dir and flips _dir at boundaries.\n * rate always holds the user-set value — it is never mutated by bounce.\n * _dir is reset to 1 only in reset() (keyframes cleared) — stop/replay\n * preserves the current travel direction.\n *\n * ── One-keyframe behaviour ────────────────────────────────────────────────────\n * play() with exactly one keyframe snaps eval() to that keyframe without\n * setting playing = true and without firing hooks.\n */\n\n'use strict';\n\nexport {\n qSet, qCopy, qDot, qNormalize, qNegate, qMul,\n qSlerp, qNlerp,\n qFromAxisAngle, qFromLookDir, qFromRotMat3x3, qFromMat4,\n quatToAxisAngle,\n} from './quat.js';\n\nimport {\n qSlerp, qNlerp, qMul, qFromAxisAngle, qFromLookDir, qFromRotMat3x3, qToMat4,\n} from './quat.js';\n\n// =========================================================================\n// S2 Spline / vector helpers\n// =========================================================================\n\nfunction _dist3(a, b) {\n const dx=a[0]-b[0], dy=a[1]-b[1], dz=a[2]-b[2];\n return Math.sqrt(dx*dx+dy*dy+dz*dz);\n}\n\n/**\n * Cubic Hermite interpolation between p0 and p1 with explicit tangents.\n * Catmull-Rom is a special case where m0/m1 are auto-computed from neighbors.\n * @param {number[]} out 3-element result.\n * @param {number[]} p0 Segment start.\n * @param {number[]} m0 Outgoing tangent at p0 (world-space, dp/dt scaled to segment).\n * @param {number[]} p1 Segment end.\n * @param {number[]} m1 Incoming tangent at p1 (world-space, dp/dt scaled to segment).\n * @param {number} t Blend [0, 1].\n * @returns {number[]} out\n */\nexport const hermiteVec3 = (out, p0, m0, p1, m1, t) => {\n const t2=t*t, t3=t2*t;\n const h00=2*t3-3*t2+1, h10=t3-2*t2+t, h01=-2*t3+3*t2, h11=t3-t2;\n out[0]=h00*p0[0]+h10*m0[0]+h01*p1[0]+h11*m1[0];\n out[1]=h00*p0[1]+h10*m0[1]+h01*p1[1]+h11*m1[1];\n out[2]=h00*p0[2]+h10*m0[2]+h01*p1[2]+h11*m1[2];\n return out;\n};\n\n// Centripetal CR outgoing tangent at p1 for segment p1→p2, scaled by dt1.\nconst _crTanOut = (out, p0, p1, p2, p3) => {\n const dt0=Math.pow(_dist3(p0,p1),0.5)||1, dt1=Math.pow(_dist3(p1,p2),0.5)||1;\n for (let i=0;i<3;i++) out[i]=((p1[i]-p0[i])/dt0-(p2[i]-p0[i])/(dt0+dt1)+(p2[i]-p1[i])/dt1)*dt1;\n return out;\n};\n\nconst _crTanIn = (out, p0, p1, p2, p3) => {\n const dt1=Math.pow(_dist3(p1,p2),0.5)||1, dt2=Math.pow(_dist3(p2,p3),0.5)||1;\n for (let i=0;i<3;i++) out[i]=((p2[i]-p1[i])/dt1-(p3[i]-p1[i])/(dt1+dt2)+(p3[i]-p2[i])/dt2)*dt1;\n return out;\n};\n\n// Module-level scratch — shared by eval() across all track instances (non-reentrant hot path).\nconst _m0=[0,0,0], _m1=[0,0,0];\n\n/**\n * Linear interpolation between two vec3s.\n * @param {number[]} out\n * @param {number[]} a\n * @param {number[]} b\n * @param {number} t Blend [0, 1].\n * @returns {number[]} out\n */\nexport const lerpVec3 = (out, a, b, t) => {\n out[0]=a[0]+t*(b[0]-a[0]);\n out[1]=a[1]+t*(b[1]-a[1]);\n out[2]=a[2]+t*(b[2]-a[2]);\n return out;\n};\n\n// =========================================================================\n// S3 Transform <-> Mat4\n// =========================================================================\n\n/**\n * Write a TRS transform into a column-major mat4.\n * @param {Float32Array|number[]} out 16-element column-major mat4.\n * @param {{ pos:number[], rot:number[], scl:number[] }} xform\n * @returns {Float32Array|number[]} out\n */\nexport const transformToMat4 = (out, xform) => {\n qToMat4(out, xform.rot);\n const sx=xform.scl[0], sy=xform.scl[1], sz=xform.scl[2];\n out[0]*=sx; out[1]*=sx; out[2]*=sx;\n out[4]*=sy; out[5]*=sy; out[6]*=sy;\n out[8]*=sz; out[9]*=sz; out[10]*=sz;\n out[12]=xform.pos[0]; out[13]=xform.pos[1]; out[14]=xform.pos[2];\n return out;\n};\n\n/**\n * Decompose a column-major mat4 into a TRS transform.\n * Assumes no shear. Scale extracted from column lengths.\n * @param {{ pos:number[], rot:number[], scl:number[] }} out\n * @param {Float32Array|number[]} m Column-major mat4.\n * @returns {{ pos:number[], rot:number[], scl:number[] }} out\n */\nexport const mat4ToTransform = (out, m) => {\n out.pos[0]=m[12]; out.pos[1]=m[13]; out.pos[2]=m[14];\n const sx=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);\n const sy=Math.sqrt(m[4]*m[4]+m[5]*m[5]+m[6]*m[6]);\n const sz=Math.sqrt(m[8]*m[8]+m[9]*m[9]+m[10]*m[10]);\n out.scl[0]=sx; out.scl[1]=sy; out.scl[2]=sz;\n qFromRotMat3x3(out.rot,\n m[0]/sx,m[4]/sy,m[8]/sz,\n m[1]/sx,m[5]/sy,m[9]/sz,\n m[2]/sx,m[6]/sy,m[10]/sz);\n return out;\n};\n\n// =========================================================================\n// S4a Spec parser — PoseTrack\n// =========================================================================\n\nconst _isNum = (x) => typeof x === 'number' && Number.isFinite(x);\nconst _clamp01 = (x) => x < 0 ? 0 : (x > 1 ? 1 : x);\nconst _clampS = (x, lo, hi) => x < lo ? lo : (x > hi ? hi : x);\n\nfunction _parseVec3(v) {\n if (!v) return null;\n if (ArrayBuffer.isView(v) && v.length >= 3) return [v[0], v[1], v[2]];\n if (Array.isArray(v) && v.length >= 3 && v.every(n => typeof n === 'number')) return [v[0], v[1], v[2]];\n if (typeof v === 'object' && 'x' in v) return [v.x || 0, v.y || 0, v.z || 0];\n return null;\n}\n\n// Euler: unit axis vectors and the six valid intrinsic orderings.\nconst _EULER_AXES = { X:[1,0,0], Y:[0,1,0], Z:[0,0,1] };\nconst _EULER_ORDERS = new Set(['XYZ','XZY','YXZ','YZX','ZXY','ZYX']);\n\n/**\n * Parse any rotation representation into a unit quaternion [x,y,z,w].\n *\n * Accepted forms:\n *\n * [x,y,z,w] — raw quaternion array\n * { axis:[x,y,z], angle } — axis-angle\n * { dir:[x,y,z], up?:[x,y,z] } — forward direction (−Z) with optional up\n * { eMatrix: mat4 } — rotation block of an eye matrix\n * { mat3: mat3 } — column-major 3×3 rotation matrix\n * { euler:[rx,ry,rz], order? } — intrinsic Euler (default order: YXZ)\n * { from:[x,y,z], to:[x,y,z] } — shortest-arc rotation\n *\n * @param {*} v\n * @returns {number[]|null} [x,y,z,w] or null if unparseable.\n */\nfunction _parseQuat(v) {\n if (!v) return null;\n\n // Raw array [x,y,z,w]\n if (Array.isArray(v) && v.length === 4) return [v[0],v[1],v[2],v[3]];\n if (ArrayBuffer.isView(v) && v.length >= 4) return [v[0],v[1],v[2],v[3]];\n\n if (typeof v !== 'object') return null;\n\n // { axis, angle }\n if (v.axis != null && v.angle != null) {\n const ax = Array.isArray(v.axis) ? v.axis : [v.axis.x||0, v.axis.y||0, v.axis.z||0];\n return qFromAxisAngle([0,0,0,1], ax[0],ax[1],ax[2], v.angle);\n }\n\n // { dir, up? }\n if (v.dir != null) {\n const d = Array.isArray(v.dir) ? v.dir : [v.dir.x||0, v.dir.y||0, v.dir.z||0];\n const u = v.up ? (Array.isArray(v.up) ? v.up : [v.up.x||0, v.up.y||0, v.up.z||0]) : null;\n return qFromLookDir([0,0,0,1], d, u);\n }\n\n // { eMatrix }\n if (v.eMatrix != null) {\n const m = (ArrayBuffer.isView(v.eMatrix) || Array.isArray(v.eMatrix))\n ? v.eMatrix : (v.eMatrix.mat4 ?? null);\n if (!m || m.length < 16) return null;\n return qFromRotMat3x3([0,0,0,1], m[0],m[4],m[8], m[1],m[5],m[9], m[2],m[6],m[10]);\n }\n\n // { mat3 }\n if (v.mat3 != null) {\n const m = (ArrayBuffer.isView(v.mat3) || Array.isArray(v.mat3))\n ? v.mat3 : null;\n if (!m || m.length < 9) return null;\n return qFromRotMat3x3([0,0,0,1], m[0],m[3],m[6], m[1],m[4],m[7], m[2],m[5],m[8]);\n }\n\n // { euler, order? }\n if (v.euler != null) {\n const e = v.euler;\n if (!Array.isArray(e) || e.length < 3) return null;\n const order = (v.order && _EULER_ORDERS.has(v.order)) ? v.order : 'YXZ';\n const q = [0,0,0,1];\n const s = [0,0,0,1];\n for (let i = 0; i < 3; i++) {\n const ax = _EULER_AXES[order[i]];\n qMul(q, q, qFromAxisAngle(s, ax[0],ax[1],ax[2], e[i]));\n }\n return q;\n }\n\n // { from, to }\n if (v.from != null && v.to != null) {\n const f = Array.isArray(v.from) ? v.from : [v.from.x||0, v.from.y||0, v.from.z||0];\n const t = Array.isArray(v.to) ? v.to : [v.to.x||0, v.to.y||0, v.to.z||0];\n const fl = Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]) || 1;\n const tl = Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]) || 1;\n const fx=f[0]/fl, fy=f[1]/fl, fz=f[2]/fl;\n const tx=t[0]/tl, ty=t[1]/tl, tz=t[2]/tl;\n const dot = fx*tx + fy*ty + fz*tz;\n if (dot >= 1 - 1e-8) return [0,0,0,1];\n if (dot <= -1 + 1e-8) {\n let px=0, py=fz, pz=-fy;\n let pl = Math.sqrt(px*px+py*py+pz*pz);\n if (pl < 1e-8) { px=fy; py=-fx; pz=0; pl = Math.sqrt(px*px+py*py+pz*pz); }\n if (pl < 1e-8) return [0,0,0,1];\n return qFromAxisAngle([0,0,0,1], px/pl,py/pl,pz/pl, Math.PI);\n }\n let ax=fy*tz-fz*ty, ay=fz*tx-fx*tz, az=fx*ty-fy*tx;\n const al = Math.sqrt(ax*ax+ay*ay+az*az) || 1;\n return qFromAxisAngle([0,0,0,1], ax/al,ay/al,az/al,\n Math.acos(Math.max(-1, Math.min(1, dot))));\n }\n\n return null;\n}\n\n/**\n * Parse a PoseTrack keyframe spec.\n *\n * Accepted forms:\n *\n * { mMatrix }\n * Decompose a column-major mat4 into TRS via mat4ToTransform.\n * Float32Array(16), plain Array, or { mat4 } wrapper.\n *\n * { pos?, rot?, scl?, tanIn?, tanOut? }\n * Explicit TRS. pos and scl are vec3, rot accepts any form from _parseQuat.\n * All fields are optional — missing pos/scl default to [0,0,0] / [1,1,1],\n * missing rot defaults to identity.\n * tanIn/tanOut are optional vec3 tangents for Hermite interpolation.\n *\n * @param {Object} spec\n * @returns {{ pos:number[], rot:number[], scl:number[], tanIn:number[]|null, tanOut:number[]|null }|null}\n */\nfunction _parseSpec(spec) {\n if (!spec || typeof spec !== 'object') return null;\n\n // { mMatrix } — full TRS decomposition from model matrix\n if (spec.mMatrix != null) {\n const m = (ArrayBuffer.isView(spec.mMatrix) || Array.isArray(spec.mMatrix))\n ? spec.mMatrix : (spec.mMatrix.mat4 ?? null);\n if (!m || m.length < 16) return null;\n const kf = mat4ToTransform({ pos:[0,0,0], rot:[0,0,0,1], scl:[1,1,1] }, m);\n kf.tanIn = null; kf.tanOut = null;\n return kf;\n }\n\n const pos = _parseVec3(spec.pos) || [0,0,0];\n const rot = _parseQuat(spec.rot) || [0,0,0,1];\n const scl = _parseVec3(spec.scl) || [1,1,1];\n const tanIn = _parseVec3(spec.tanIn) || null;\n const tanOut = _parseVec3(spec.tanOut) || null;\n return { pos, rot, scl, tanIn, tanOut };\n}\n\nfunction _sameTransform(a, b) {\n for (let i=0;i<3;i++) if (a.pos[i]!==b.pos[i]||a.scl[i]!==b.scl[i]) return false;\n for (let i=0;i<4;i++) if (a.rot[i]!==b.rot[i]) return false;\n return true;\n}\n\n// =========================================================================\n// S4b Spec parser — CameraTrack\n// =========================================================================\n\n/**\n * Parse a camera keyframe spec into internal { eye, center, up } form.\n *\n * Accepted forms:\n *\n * { eye, center?, up?, fov?, halfHeight?,\n * eyeTanIn?, eyeTanOut?, centerTanIn?, centerTanOut? }\n * Explicit lookat. center defaults to [0,0,0], up defaults to [0,1,0].\n * eyeTanIn/Out and centerTanIn/Out are optional vec3 tangents for Hermite.\n * When absent, centripetal Catmull-Rom tangents are auto-computed at eval time.\n *\n * Removed forms (task 2):\n * { vMatrix } and { eMatrix } — use PoseTrack.add({ mMatrix: eMatrix }) for\n * full-fidelity capture including roll, or cam.capturePose() for lookat-style.\n *\n * @param {Object} spec\n * @returns {{ eye:number[], center:number[], up:number[],\n * fov:number|null, halfHeight:number|null,\n * eyeTanIn:number[]|null, eyeTanOut:number[]|null,\n * centerTanIn:number[]|null, centerTanOut:number[]|null }|null}\n */\nfunction _parseCameraSpec(spec) {\n if (!spec || typeof spec !== 'object') return null;\n\n // { eye, center?, up? } — explicit lookat\n const eye = _parseVec3(spec.eye);\n if (!eye) return null;\n const center = _parseVec3(spec.center) || [0,0,0];\n const upRaw = spec.up ? _parseVec3(spec.up) : null;\n const up = upRaw || [0,1,0];\n const ul = Math.sqrt(up[0]*up[0]+up[1]*up[1]+up[2]*up[2]) || 1;\n return {\n eye, center,\n up: [up[0]/ul, up[1]/ul, up[2]/ul],\n fov: typeof spec.fov === 'number' ? spec.fov : null,\n halfHeight: typeof spec.halfHeight === 'number' ? spec.halfHeight : null,\n eyeTanIn: _parseVec3(spec.eyeTanIn) || null,\n eyeTanOut: _parseVec3(spec.eyeTanOut) || null,\n centerTanIn: _parseVec3(spec.centerTanIn) || null,\n centerTanOut:_parseVec3(spec.centerTanOut)|| null,\n };\n}\n\nfunction _sameCameraKeyframe(a, b) {\n for (let i=0;i<3;i++) {\n if (a.eye[i]!==b.eye[i]) return false;\n if (a.center[i]!==b.center[i]) return false;\n if (a.up[i]!==b.up[i]) return false;\n }\n if (a.fov !== b.fov) return false;\n if (a.halfHeight !== b.halfHeight) return false;\n return true;\n}\n\n// =========================================================================\n// S5 Track — unexported base class (transport machinery only)\n// =========================================================================\n\nclass Track {\n constructor() {\n /** @type {Array} Keyframe array — shape depends on subclass. */\n this.keyframes = [];\n /** Whether playback is active. @type {boolean} */\n this.playing = false;\n /** Loop at boundaries. @type {boolean} */\n this.loop = false;\n /** Ping-pong bounce (takes precedence over loop). @type {boolean} */\n this.bounce = false;\n /** Frames per segment (≥1). @type {number} */\n this.duration = 30;\n /** Current segment index. @type {number} */\n this.seg = 0;\n /** Frame offset within segment (can be fractional). @type {number} */\n this.f = 0;\n\n // Internal rate — never directly starts/stops playback\n this._rate = 1;\n // Internal bounce direction: +1 forward, -1 backward.\n this._dir = 1;\n // Scratch: true once _dir has been flipped in bounce-once mode.\n this._bounced = false;\n\n // User-space hooks\n /** @type {Function|null} */ this.onPlay = null;\n /** @type {Function|null} */ this.onEnd = null;\n /** @type {Function|null} */ this.onStop = null;\n\n // Lib-space hooks (set by host layer, e.g. p5 bridge)\n /** @type {Function|null} */ this._onActivate = null;\n /** @type {Function|null} */ this._onDeactivate = null;\n // Lib-space event mirrors — set by UI layer (trackUI), never touched by user code\n /** @type {Function|null} */ this._onPlay = null;\n /** @type {Function|null} */ this._onEnd = null;\n /** @type {Function|null} */ this._onStop = null;\n }\n\n /** Playback rate. Assigning never starts/stops playback. @type {number} */\n get rate() { return this._rate; }\n set rate(v) { this._rate = (_isNum(v)) ? v : 1; }\n\n /** Number of interpolatable segments (keyframes.length − 1, min 0). @type {number} */\n get segments() { return Math.max(0, this.keyframes.length - 1); }\n\n /**\n * Start or update playback.\n * @param {number|Object} [rateOrOpts] Numeric rate or options object:\n * { rate, duration, loop, bounce, onPlay, onEnd, onStop }\n * @returns {Track} this\n */\n play(rateOrOpts) {\n if (this.keyframes.length === 0) return this;\n\n // One keyframe: snap cursor, no animation\n if (this.keyframes.length === 1) {\n this.seg = 0; this.f = 0;\n return this;\n }\n\n if (typeof rateOrOpts === 'number' && Number.isFinite(rateOrOpts)) {\n this._rate = rateOrOpts;\n } else if (rateOrOpts && typeof rateOrOpts === 'object') {\n const o = rateOrOpts;\n if (_isNum(o.duration)) this.duration = Math.max(1, o.duration | 0);\n if ('loop' in o) this.loop = !!o.loop;\n if ('bounce' in o) this.bounce = !!o.bounce;\n if (typeof o.onPlay === 'function') this.onPlay = o.onPlay;\n if (typeof o.onEnd === 'function') this.onEnd = o.onEnd;\n if (typeof o.onStop === 'function') this.onStop = o.onStop;\n if (_isNum(o.rate)) this._rate = o.rate;\n }\n\n const nSeg = this.segments, dur = Math.max(1, this.duration | 0);\n if (this.seg < 0) this.seg = 0;\n if (this.seg >= nSeg) this.seg = nSeg - 1;\n if (this.f < 0) this.f = 0;\n if (this.f > dur) this.f = dur;\n\n const wasPlaying = this.playing;\n this.playing = true;\n if (!wasPlaying) {\n this._bounced = false;\n if (typeof this.onPlay === 'function') { try { this.onPlay(this); } catch (_) {} }\n this._onPlay?.();\n this._onActivate?.();\n }\n return this;\n }\n\n /**\n * Stop playback.\n * @param {boolean} [rewind=false] Seek to origin after stopping.\n * @returns {Track} this\n */\n stop(rewind) {\n const wasPlaying = this.playing;\n this.playing = false;\n if (wasPlaying) {\n this._bounced = false;\n if (typeof this.onStop === 'function') { try { this.onStop(this); } catch (_) {} }\n this._onStop?.();\n this._onDeactivate?.();\n if (rewind && this.keyframes.length > 1) this.seek(this._rate * this._dir < 0 ? 1 : 0);\n }\n return this;\n }\n\n /**\n * Clear all keyframes and stop.\n * @returns {Track} this\n */\n reset() {\n const wasPlaying = this.playing;\n this.playing = false;\n if (wasPlaying) {\n if (typeof this.onStop === 'function') { try { this.onStop(this); } catch (_) {} }\n this._onStop?.();\n this._onDeactivate?.();\n }\n this.keyframes.length = 0;\n this.seg = 0; this.f = 0; this._dir = 1; this._bounced = false;\n return this;\n }\n\n /**\n * Remove the keyframe at index. Adjusts cursor if needed.\n * @param {number} index\n * @returns {boolean}\n */\n remove(index) {\n if (!_isNum(index)) return false;\n const i = index | 0;\n if (i < 0 || i >= this.keyframes.length) return false;\n this.keyframes.splice(i, 1);\n const nSeg = this.segments;\n if (nSeg === 0) { this.seg = 0; this.f = 0; }\n else if (this.seg >= nSeg) { this.seg = nSeg - 1; }\n return true;\n }\n\n /**\n * Seek to a normalised position [0,1] across the full path.\n * @param {number} t Normalised time [0, 1].\n * @param {number} [segIndex] Optional segment override.\n * @returns {Track} this\n */\n seek(t, segIndex) {\n const nSeg = this.segments;\n if (nSeg === 0) { this.seg = 0; this.f = 0; return this; }\n const dur = Math.max(1, this.duration | 0);\n if (_isNum(segIndex)) {\n this.seg = _clampS(segIndex | 0, 0, nSeg - 1);\n this.f = _clamp01(t) * dur;\n } else {\n this._setCursorFromScalar(_clamp01(t) * nSeg * dur);\n }\n return this;\n }\n\n /**\n * Normalised playback position [0,1].\n * @returns {number}\n */\n time() {\n const nSeg = this.segments;\n if (nSeg === 0) return 0;\n const dur = Math.max(1, this.duration | 0);\n return _clamp01((this.seg * dur + this.f) / (nSeg * dur));\n }\n\n /**\n * Snapshot of transport state.\n * @returns {Object}\n */\n info() {\n return {\n keyframes: this.keyframes.length,\n segments: this.segments,\n seg: this.seg,\n f: this.f,\n playing: this.playing,\n loop: this.loop,\n bounce: this.bounce,\n rate: this._rate,\n duration: this.duration,\n time: this.segments > 0 ? this.time() : 0\n };\n }\n\n /**\n * Advance cursor by rate frames.\n * Returns true while playing, false when stopping.\n * @returns {boolean}\n */\n tick() {\n if (!this.playing) return false;\n const nSeg = this.segments;\n if (nSeg === 0) {\n this.playing = false; this._onDeactivate?.(); return false;\n }\n if (this._rate === 0) return true;\n\n const dur = Math.max(1, this.duration | 0);\n const total = nSeg * dur;\n const s = _clampS(this.seg * dur + this.f, 0, total);\n const next = s + this._rate * this._dir;\n\n // ── loop:true, bounce:true — bounce forever ───────────────────────────\n if (this.loop && this.bounce) {\n let pos = next, flips = 0;\n while (pos < 0 || pos > total) {\n if (pos < 0) { pos = -pos; flips++; }\n else { pos = 2 * total - pos; flips++; }\n }\n if (flips & 1) this._dir = -this._dir;\n this._setCursorFromScalar(pos);\n return true;\n }\n\n // ── loop:false, bounce:true — bounce once, stop at origin ────────────\n if (!this.loop && this.bounce) {\n if (next >= total) {\n // far boundary: reflect and flip direction once\n this._setCursorFromScalar(Math.min(total, 2 * total - next));\n this._dir = -this._dir;\n this._bounced = true;\n return true;\n }\n if (next <= 0) {\n // origin: stop (whether we bounced or started backward)\n this._setCursorFromScalar(0);\n this.playing = false;\n this._dir = 1; this._bounced = false;\n if (typeof this.onEnd === 'function') { try { this.onEnd(this); } catch (_) {} }\n this._onEnd?.();\n this._onDeactivate?.();\n return false;\n }\n this._setCursorFromScalar(next);\n return true;\n }\n\n // ── loop:true, bounce:false — repeat forever ──────────────────────────\n if (this.loop) {\n this._setCursorFromScalar(((next % total) + total) % total);\n return true;\n }\n\n // ── loop:false, bounce:false — play once, stop at boundary ───────────\n if (next <= 0) {\n this._setCursorFromScalar(0);\n this.playing = false;\n if (typeof this.onEnd === 'function') { try { this.onEnd(this); } catch (_) {} }\n this._onEnd?.();\n this._onDeactivate?.();\n return false;\n }\n if (next >= total) {\n this._setCursorFromScalar(total);\n this.playing = false;\n if (typeof this.onEnd === 'function') { try { this.onEnd(this); } catch (_) {} }\n this._onEnd?.();\n this._onDeactivate?.();\n return false;\n }\n\n this._setCursorFromScalar(next);\n return true;\n }\n\n /** @private */\n _setCursorFromScalar(s) {\n const dur = Math.max(1, this.duration | 0);\n const nSeg = this.segments;\n this.seg = Math.floor(s / dur);\n this.f = s - this.seg * dur;\n if (this.seg >= nSeg) { this.seg = nSeg - 1; this.f = dur; }\n if (this.seg < 0) { this.seg = 0; this.f = 0; }\n }\n}\n\n// =========================================================================\n// S6 PoseTrack\n// =========================================================================\n\n/**\n * Renderer-agnostic TRS keyframe track.\n *\n * Keyframe shape: { pos:[x,y,z], rot:[x,y,z,w], scl:[x,y,z],\n * tanIn?:[x,y,z], tanOut?:[x,y,z] }\n *\n * tanIn — incoming position tangent at this keyframe (Hermite mode).\n * tanOut — outgoing position tangent at this keyframe (Hermite mode).\n * When only one is supplied, the other mirrors it.\n * When neither is supplied, centripetal Catmull-Rom tangents are auto-computed.\n */\nexport class PoseTrack extends Track {\n constructor() {\n super();\n /**\n * Position interpolation mode.\n * - 'hermite' — cubic Hermite; auto-computes centripetal Catmull-Rom tangents\n * when none are stored (default)\n * - 'linear' — lerp\n * - 'step' — snap to k0; useful for discrete state changes\n * @type {'hermite'|'linear'|'step'}\n */\n this.posInterp = 'hermite';\n /**\n * Rotation interpolation mode.\n * - 'slerp' — constant angular velocity (default)\n * - 'nlerp' — normalised lerp; cheaper, slightly non-constant speed\n * - 'step' — snap to k0 quaternion; useful for discrete state changes\n * @type {'slerp'|'nlerp'|'step'}\n */\n this.rotInterp = 'slerp';\n // Scratch for toMatrix() — avoids hot-path allocations\n this._pos = [0,0,0];\n this._rot = [0,0,0,1];\n this._scl = [1,1,1];\n }\n\n /**\n * Append one or more keyframes. Adjacent duplicates are skipped by default.\n * @param {Object|Object[]} spec\n * @param {{ deduplicate?: boolean }} [opts]\n */\n add(spec, opts) {\n if (Array.isArray(spec)) {\n for (const s of spec) this.add(s, opts);\n return;\n }\n const kf = _parseSpec(spec);\n if (!kf) return;\n const dedup = !opts || opts.deduplicate !== false;\n if (dedup && this.keyframes.length > 0) {\n if (_sameTransform(this.keyframes[this.keyframes.length - 1], kf)) return;\n }\n this.keyframes.push(kf);\n }\n\n /**\n * Replace (or append at end) the keyframe at index.\n * @param {number} index\n * @param {Object} spec\n * @returns {boolean}\n */\n set(index, spec) {\n if (!_isNum(index)) return false;\n const i = index | 0, kf = _parseSpec(spec);\n if (!kf || i < 0 || i > this.keyframes.length) return false;\n if (i === this.keyframes.length) this.keyframes.push(kf);\n else this.keyframes[i] = kf;\n return true;\n }\n\n /**\n * Evaluate interpolated TRS pose at current cursor.\n * @param {{ pos:number[], rot:number[], scl:number[] }} [out]\n * @returns {{ pos:number[], rot:number[], scl:number[] }} out\n */\n eval(out) {\n out = out || { pos:[0,0,0], rot:[0,0,0,1], scl:[1,1,1] };\n const n = this.keyframes.length;\n if (n === 0) return out;\n\n if (n === 1) {\n const k = this.keyframes[0];\n out.pos[0]=k.pos[0]; out.pos[1]=k.pos[1]; out.pos[2]=k.pos[2];\n out.rot[0]=k.rot[0]; out.rot[1]=k.rot[1]; out.rot[2]=k.rot[2]; out.rot[3]=k.rot[3];\n out.scl[0]=k.scl[0]; out.scl[1]=k.scl[1]; out.scl[2]=k.scl[2];\n return out;\n }\n\n const nSeg = n - 1;\n const dur = Math.max(1, this.duration | 0);\n const seg = _clampS(this.seg, 0, nSeg - 1);\n const t = _clamp01(this.f / dur);\n const k0 = this.keyframes[seg];\n const k1 = this.keyframes[seg + 1];\n\n // pos — Hermite (auto-CR tangents when none stored), linear, or step\n if (this.posInterp === 'step') {\n out.pos[0]=k0.pos[0]; out.pos[1]=k0.pos[1]; out.pos[2]=k0.pos[2];\n } else if (this.posInterp === 'linear') {\n lerpVec3(out.pos, k0.pos, k1.pos, t);\n } else {\n const p0 = seg > 0 ? this.keyframes[seg - 1].pos : k0.pos;\n const p3 = seg + 2 < n ? this.keyframes[seg + 2].pos : k1.pos;\n const m0 = k0.tanOut != null ? k0.tanOut\n : k0.tanIn != null ? k0.tanIn\n : _crTanOut(_m0, p0, k0.pos, k1.pos, p3);\n const m1 = k1.tanIn != null ? k1.tanIn\n : k1.tanOut != null ? k1.tanOut\n : _crTanIn(_m1, p0, k0.pos, k1.pos, p3);\n hermiteVec3(out.pos, k0.pos, m0, k1.pos, m1, t);\n }\n\n // rot — step, slerp, or nlerp\n if (this.rotInterp === 'step') {\n out.rot[0]=k0.rot[0]; out.rot[1]=k0.rot[1]; out.rot[2]=k0.rot[2]; out.rot[3]=k0.rot[3];\n } else if (this.rotInterp === 'nlerp') {\n qNlerp(out.rot, k0.rot, k1.rot, t);\n } else {\n qSlerp(out.rot, k0.rot, k1.rot, t);\n }\n\n // scl — lerp\n lerpVec3(out.scl, k0.scl, k1.scl, t);\n\n return out;\n }\n\n /**\n * Evaluate into an existing column-major mat4.\n * @param {Float32Array|number[]} outMat4 16-element array.\n * @returns {Float32Array|number[]} outMat4\n */\n toMatrix(outMat4) {\n const xf = this.eval({ pos: this._pos, rot: this._rot, scl: this._scl });\n return transformToMat4(outMat4, xf);\n }\n}\n\n// =========================================================================\n// S7 CameraTrack\n// =========================================================================\n\n/**\n * Lookat camera keyframe track.\n *\n * Keyframe shape: { eye:[x,y,z], center:[x,y,z], up:[x,y,z],\n * fov?:number, halfHeight?:number,\n * eyeTanIn?:[x,y,z], eyeTanOut?:[x,y,z],\n * centerTanIn?:[x,y,z], centerTanOut?:[x,y,z] }\n *\n * fov — vertical fov (radians) for perspective cameras; null for ortho.\n * halfHeight — world-unit half-height of ortho frustum; null for perspective.\n * Both are optional and nullable. eval() lerps each only when both adjacent\n * keyframes carry a non-null value for that field.\n *\n * eyeTanIn/Out and centerTanIn/Out are optional vec3 tangents for Hermite\n * interpolation of the eye and center paths respectively.\n * When absent, centripetal Catmull-Rom tangents are auto-computed at eval time.\n *\n * Missing fields default to: center → [0,0,0], up → [0,1,0].\n *\n * add() accepts individual specs or a bulk array of specs:\n *\n * { eye, center?, up?, fov?, halfHeight?,\n * eyeTanIn?, eyeTanOut?, centerTanIn?, centerTanOut? }\n *\n * To capture a matrix-based pose, use PoseTrack.add({ mMatrix: eMatrix })\n * for full-fidelity including roll, or cam.capturePose() for lookat-style.\n */\nexport class CameraTrack extends Track {\n constructor() {\n super();\n /**\n * Eye-path interpolation mode.\n * @type {'hermite'|'linear'|'step'}\n */\n this.eyeInterp = 'hermite';\n /**\n * Center-path interpolation mode.\n * @type {'hermite'|'linear'|'step'}\n */\n this.centerInterp = 'linear';\n }\n\n /**\n * Append one or more camera keyframes. Adjacent duplicates are skipped by default.\n * @param {Object|Object[]} spec\n * @param {{ deduplicate?: boolean }} [opts]\n */\n add(spec, opts) {\n if (Array.isArray(spec)) {\n for (const s of spec) this.add(s, opts);\n return;\n }\n const kf = _parseCameraSpec(spec);\n if (!kf) return;\n const dedup = !opts || opts.deduplicate !== false;\n if (dedup && this.keyframes.length > 0) {\n if (_sameCameraKeyframe(this.keyframes[this.keyframes.length - 1], kf)) return;\n }\n this.keyframes.push(kf);\n }\n\n /**\n * Replace (or append at end) the camera keyframe at index.\n * @param {number} index\n * @param {Object} spec\n * @returns {boolean}\n */\n set(index, spec) {\n if (!_isNum(index)) return false;\n const i = index | 0, kf = _parseCameraSpec(spec);\n if (!kf || i < 0 || i > this.keyframes.length) return false;\n if (i === this.keyframes.length) this.keyframes.push(kf);\n else this.keyframes[i] = kf;\n return true;\n }\n\n /**\n * Evaluate interpolated camera pose at current cursor.\n *\n * @param {{ eye:number[], center:number[], up:number[] }} [out]\n * @returns {{ eye:number[], center:number[], up:number[] }} out\n */\n eval(out) {\n out = out || { eye:[0,0,0], center:[0,0,0], up:[0,1,0], fov:null, halfHeight:null };\n const n = this.keyframes.length;\n if (n === 0) return out;\n\n if (n === 1) {\n const k = this.keyframes[0];\n out.eye[0]=k.eye[0]; out.eye[1]=k.eye[1]; out.eye[2]=k.eye[2];\n out.center[0]=k.center[0]; out.center[1]=k.center[1]; out.center[2]=k.center[2];\n out.up[0]=k.up[0]; out.up[1]=k.up[1]; out.up[2]=k.up[2];\n out.fov = k.fov;\n out.halfHeight = k.halfHeight;\n return out;\n }\n\n const nSeg = n - 1;\n const dur = Math.max(1, this.duration | 0);\n const seg = _clampS(this.seg, 0, nSeg - 1);\n const t = _clamp01(this.f / dur);\n const k0 = this.keyframes[seg];\n const k1 = this.keyframes[seg + 1];\n\n // eye — Hermite (auto-CR tangents when none stored), linear, or step\n if (this.eyeInterp === 'step') {\n out.eye[0]=k0.eye[0]; out.eye[1]=k0.eye[1]; out.eye[2]=k0.eye[2];\n } else if (this.eyeInterp === 'linear') {\n lerpVec3(out.eye, k0.eye, k1.eye, t);\n } else {\n const p0 = seg > 0 ? this.keyframes[seg - 1].eye : k0.eye;\n const p3 = seg + 2 < n ? this.keyframes[seg + 2].eye : k1.eye;\n const m0 = k0.eyeTanOut != null ? k0.eyeTanOut\n : k0.eyeTanIn != null ? k0.eyeTanIn\n : _crTanOut(_m0, p0, k0.eye, k1.eye, p3);\n const m1 = k1.eyeTanIn != null ? k1.eyeTanIn\n : k1.eyeTanOut != null ? k1.eyeTanOut\n : _crTanIn(_m1, p0, k0.eye, k1.eye, p3);\n hermiteVec3(out.eye, k0.eye, m0, k1.eye, m1, t);\n }\n\n // center — Hermite, linear, or step (independent lookat target)\n if (this.centerInterp === 'step') {\n out.center[0]=k0.center[0]; out.center[1]=k0.center[1]; out.center[2]=k0.center[2];\n } else if (this.centerInterp === 'hermite') {\n const c0 = seg > 0 ? this.keyframes[seg - 1].center : k0.center;\n const c3 = seg + 2 < n ? this.keyframes[seg + 2].center : k1.center;\n const m0 = k0.centerTanOut != null ? k0.centerTanOut\n : k0.centerTanIn != null ? k0.centerTanIn\n : _crTanOut(_m0, c0, k0.center, k1.center, c3);\n const m1 = k1.centerTanIn != null ? k1.centerTanIn\n : k1.centerTanOut != null ? k1.centerTanOut\n : _crTanIn(_m1, c0, k0.center, k1.center, c3);\n hermiteVec3(out.center, k0.center, m0, k1.center, m1, t);\n } else {\n lerpVec3(out.center, k0.center, k1.center, t);\n }\n\n // up — nlerp on unit sphere\n lerpVec3(out.up, k0.up, k1.up, t);\n const ul=Math.sqrt(out.up[0]*out.up[0]+out.up[1]*out.up[1]+out.up[2]*out.up[2])||1;\n out.up[0]/=ul; out.up[1]/=ul; out.up[2]/=ul;\n\n // fov / halfHeight — lerp when both keyframes carry non-null values\n out.fov = (k0.fov != null && k1.fov != null)\n ? k0.fov + t * (k1.fov - k0.fov) : (k0.fov ?? k1.fov ?? null);\n out.halfHeight = (k0.halfHeight != null && k1.halfHeight != null)\n ? k0.halfHeight + t * (k1.halfHeight - k0.halfHeight)\n : (k0.halfHeight ?? k1.halfHeight ?? null);\n\n return out;\n }\n}\n","/**\n * @file Frustum planes and visibility tests — zero allocations.\n * @module tree/visibility\n * @license AGPL-3.0-only\n *\n * Planes are a flat Float64Array(24): 6 planes × 4 floats [a, b, c, d].\n * All inputs are scalars. All outputs are INVISIBLE | VISIBLE | SEMIVISIBLE.\n */\n\nimport { INVISIBLE, VISIBLE, SEMIVISIBLE } from './constants.js';\n\n// Plane indices\nexport const PLANE_LEFT = 0, PLANE_RIGHT = 1, PLANE_NEAR = 2,\n PLANE_FAR = 3, PLANE_TOP = 4, PLANE_BOTTOM = 5;\n\n/**\n * Compute 6 frustum planes from camera basis (world space) + projection params.\n * All inputs are scalars — the addon extracts them from the inverse view matrix\n * and projection queries before calling.\n *\n * @param {Float64Array} out 24-float output.\n * @param {number} posX,posY,posZ Camera world position.\n * @param {number} vdX,vdY,vdZ View direction (−Z in eye space, world).\n * @param {number} upX,upY,upZ Camera up.\n * @param {number} rtX,rtY,rtZ Camera right.\n * @param {boolean} ortho true if orthographic.\n * @param {number} near,far,left,right,top,bottom Projection plane values.\n */\nexport function frustumPlanes(\n out,\n posX, posY, posZ,\n vdX, vdY, vdZ,\n upX, upY, upZ,\n rtX, rtY, rtZ,\n ortho,\n near, far, left, right, top, bottom\n) {\n const posViewDir = posX*vdX + posY*vdY + posZ*vdZ;\n const posRight = posX*rtX + posY*rtY + posZ*rtZ;\n const posUp = posX*upX + posY*upY + posZ*upZ;\n\n if (ortho) {\n // Left: normal = −right\n out[0] = -rtX; out[1] = -rtY; out[2] = -rtZ;\n out[3] = -(posRight - left) * -1; // dot(pos - right*left, -right) ... simplified:\n // Actually: d = dot(pointOnPlane, normal)\n // pointOnPlane = pos + right*left (left is negative for standard ortho)\n // normal = -right\n // d = dot(pos + right*left, -right) = -posRight - left\n out[3] = -posRight - left;\n\n // Right: normal = right\n out[4] = rtX; out[5] = rtY; out[6] = rtZ;\n out[7] = posRight + right;\n\n // Top: normal = up\n out[16] = upX; out[17] = upY; out[18] = upZ;\n out[19] = posUp - bottom; // note: p5 top/bottom are swapped in sign convention\n\n // Bottom: normal = -up\n out[20] = -upX; out[21] = -upY; out[22] = -upZ;\n out[23] = -posUp + top;\n } else {\n // Left\n const hfovl = Math.atan2(left, near);\n const shfovl = Math.sin(hfovl), chfovl = Math.cos(hfovl);\n out[0] = vdX*shfovl - rtX*chfovl;\n out[1] = vdY*shfovl - rtY*chfovl;\n out[2] = vdZ*shfovl - rtZ*chfovl;\n out[3] = shfovl*posViewDir - chfovl*posRight;\n\n // Right\n const hfovr = Math.atan2(right, near);\n const shfovr = Math.sin(hfovr), chfovr = Math.cos(hfovr);\n out[4] = -vdX*shfovr + rtX*chfovr;\n out[5] = -vdY*shfovr + rtY*chfovr;\n out[6] = -vdZ*shfovr + rtZ*chfovr;\n out[7] = -shfovr*posViewDir + chfovr*posRight;\n\n // Top\n const fovt = Math.atan2(top, near);\n const sfovt = Math.sin(fovt), cfovt = Math.cos(fovt);\n out[16] = -vdX*sfovt + upX*cfovt;\n out[17] = -vdY*sfovt + upY*cfovt;\n out[18] = -vdZ*sfovt + upZ*cfovt;\n out[19] = -sfovt*posViewDir + cfovt*posUp;\n\n // Bottom\n const fovb = Math.atan2(bottom, near);\n const sfovb = Math.sin(fovb), cfovb = Math.cos(fovb);\n out[20] = vdX*sfovb - upX*cfovb;\n out[21] = vdY*sfovb - upY*cfovb;\n out[22] = vdZ*sfovb - upZ*cfovb;\n out[23] = sfovb*posViewDir - cfovb*posUp;\n }\n\n // Near plane: normal = −viewDir\n out[8] = -vdX; out[9] = -vdY; out[10] = -vdZ;\n out[11] = -posViewDir - near;\n\n // Far plane: normal = viewDir\n out[12] = vdX; out[13] = vdY; out[14] = vdZ;\n out[15] = posViewDir + far;\n\n return out;\n}\n\n/**\n * Signed distance from point to one frustum plane.\n * @param {Float64Array} planes 24-float planes buffer.\n * @param {number} planeIdx 0–5 (LEFT, RIGHT, NEAR, FAR, TOP, BOTTOM).\n * @param {number} px,py,pz Point coordinates.\n * @returns {number}\n */\nexport function distanceToPlane(planes, planeIdx, px, py, pz) {\n const b = planeIdx * 4;\n return planes[b]*px + planes[b+1]*py + planes[b+2]*pz - planes[b+3];\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function pointVisibility(planes, px, py, pz) {\n for (let i = 0; i < 6; i++) {\n if (distanceToPlane(planes, i, px, py, pz) > 0) return INVISIBLE;\n }\n return VISIBLE;\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function sphereVisibility(planes, cx, cy, cz, radius) {\n let allIn = true;\n for (let i = 0; i < 6; i++) {\n const d = distanceToPlane(planes, i, cx, cy, cz);\n if (d > radius) return INVISIBLE;\n if (d > 0 || -d < radius) allIn = false;\n }\n return allIn ? VISIBLE : SEMIVISIBLE;\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function boxVisibility(planes, x0, y0, z0, x1, y1, z1) {\n let allIn = true;\n for (let i = 0; i < 6; i++) {\n const b = i * 4;\n const a = planes[b], bv = planes[b+1], c = planes[b+2], d = planes[b+3];\n let allOut = true;\n for (let corner = 0; corner < 8; corner++) {\n const cx = (corner & 4) ? x0 : x1;\n const cy = (corner & 2) ? y0 : y1;\n const cz = (corner & 1) ? z0 : z1;\n const dist = a*cx + bv*cy + c*cz - d;\n if (dist > 0) { allIn = false; }\n else { allOut = false; }\n }\n if (allOut) return INVISIBLE;\n }\n return allIn ? VISIBLE : SEMIVISIBLE;\n}\n"],"names":[],"mappings":"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CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,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CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACxC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC7F,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC7F,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC7F,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;AACpC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;AACpC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;AACpC,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAS,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;AAC1D,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7C,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7C,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9C,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9C,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AACvC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG;AACrC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;AAC3C,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,CAAC,GAAG,OAAO,CAAC;AACzC,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE;AAC3D,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AACrC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;AACrC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO;AACzC,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC3C;;AAEA,SAAS,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1C,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3C,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3C,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5C,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5C,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACvC,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;AAC3C,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC3C;;AAEA,SAAS,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;AACpD,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AACnC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO;AACvC,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;AACpD,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG;AACrC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;AAC3C,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,CAAC,GAAG,OAAO,CAAC;AACzC,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,SAAS,CAAC,CAAC,EAAE;AACtB,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ;AACnC,EAAE,CAAC,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC;AACnC,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;AAC3C,EAAE,OAAO,CAAC,CAAC,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE;AACvE;AACA,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,KAAK,MAAM;AACrC,IAAI,OAAO,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC;AACnE,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,KAAK;AACrC,IAAI,OAAO,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC;;AAElE;AACA,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,KAAK,GAAG;AAClC,IAAI,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,KAAK;AAClC,IAAI,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;;AAElD;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,GAAG;AACnC,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC;AACnD,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,MAAM;AACnC,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC;;AAEnD;AACA,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,KAAK,GAAG;AAClC,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,KAAK;AAClC,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAEjD;AACA,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,MAAM,EAAE;AACrC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO;AACvB,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,IAAI,OAAO,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC;AACnE,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,GAAG,EAAE;AACrC,IAAI,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC;AAC3D,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE;AAClC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO;AACvB,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,IAAI,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE;AAClC,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;AAC3C,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,KAAK;AACrC,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACnD,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,KAAK,MAAM;AACrC,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAEpD;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,GAAG,EAAE;AACrC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS;AACzB,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,MAAM,EAAE;AACrC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO;AACvB,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACpD,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE;AACxC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS;AACzB,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,IAAI,OAAO,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC;AACnE,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE;AACxC,IAAI,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC;AAC3D,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACpD,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,GAAG,EAAE;AACrC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS;AACzB,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,IAAI,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,MAAM,EAAE;AACrC,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;AAC3C,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACpD,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE;AACxC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS;AACzB,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,IAAI,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACpD,EAAE;;AAEF;AACA,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AACjC,EAAE,OAAO,GAAG;AACZ;;AAEA;;AAEA;AACA,SAAS,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACvC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACjC,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;AAC3E;AACA,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3C,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3C,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;AAC5C,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3C,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3C,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;AAC5C;AACA,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG;AACvC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG;AAC3B,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;AAC9E;AACA,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC;AACzC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AAC/B;AACA,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AAC3C;AACA,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACrC,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,eAAe,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;AAC7D,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC;AAC3C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AAC7B,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,eAAe,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;AAC7D,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG;AACvC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG;AAC3B,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE;AACxE,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;AAEpD;AACA,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,KAAK,EAAE,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAChF,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,KAAK,GAAG,EAAE,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;;AAEhF;AACA,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,KAAK,MAAM;AACrC,IAAI,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AACpF,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,KAAK;AACrC,IAAI,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;;AAEpF;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,GAAG;AACnC,IAAI,OAAO,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC5D,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,MAAM;AACnC,IAAI,OAAO,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;;AAE5D;AACA,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,KAAK,GAAG,EAAE;AACpC,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC7E,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC5D,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,KAAK,EAAE;AACpC,IAAI,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AACrD,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AACpF,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,MAAM,EAAE;AACrC,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AACpF,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,GAAG,EAAE;AACrC,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC7E,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9C,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE;AAClC,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC7E,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC5D,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE;AAClC,IAAI,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AACrD,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC7E,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9C,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,KAAK,EAAE,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACnF,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAEpF;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,GAAG,EAAE;AACrC,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzC,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9C,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,MAAM,EAAE;AACrC,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE;AACxC,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzC,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AACpF,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE;AACxC,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC7E,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,GAAG,EAAE;AACrC,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzC,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC7E,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC5D,EAAE;AACF,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,MAAM,EAAE;AACrC,IAAI,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AACrD,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AAC7E,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE;AACxC,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzC,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,EAAE;;AAEF;AACA,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AACjC,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;AACrD,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;AACzB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG;AAC7E,EAAE;AACF,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAC/D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;AAC7C,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACpC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACpC,EAAE,MAAM,EAAE,GAAG,CAAC;AACd,EAAE,MAAM,EAAE,GAAG,CAAC;AACd,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;AACpB,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;AACpB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9B,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACzB,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AACrC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AACrC,EAAE;AACF,EAAE,OAAO,IAAI;AACb;;AC1tBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAeA;AACA;AACA;;AAEA,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AACtB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACrC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,WAAW,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK;AACvD,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE;AACjE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK;AAC3C,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9E,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG;AAChG,EAAE,OAAO,GAAG;AACZ,CAAC;;AAED,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK;AAC1C,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9E,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG;AAChG,EAAE,OAAO,GAAG;AACZ,CAAC;;AAED;AACA,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK;AAC1C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK;AAC/C,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AACzB,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;AACpC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;AACpC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACrC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK;AAC3C,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrD,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7C,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG;AACxB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC7B,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;;AAEA,MAAM,MAAM,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnE,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,MAAM,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;;AAE/D,SAAS,UAAU,CAAC,CAAC,EAAE;AACvB,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI;AACrB,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACzG,EAAE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9E,EAAE,OAAO,IAAI;AACb;;AAEA;AACA,MAAM,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACzD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;AAEpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,CAAC,EAAE;AACvB,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI;;AAErB;AACA,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE1E,EAAE,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,OAAO,IAAI;;AAExC;AACA,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;AACzC,IAAI,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACvF,IAAI,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;AAChE,EAAE;;AAEF;AACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE;AACrB,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACjF,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI;AAC5F,IAAI,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACxC,EAAE;;AAEF;AACA,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,EAAE;AACzB,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AACxE,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;AAC5C,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,OAAO,IAAI;AACxC,IAAI,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrF,EAAE;;AAEF;AACA,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;AACtB,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,QAAQ,CAAC,CAAC,IAAI,GAAG,IAAI;AACrB,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,IAAI;AACvC,IAAI,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpF,EAAE;;AAEF;AACA,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;AACvB,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;AACrB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,IAAI;AACtD,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK;AAC3E,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChC,MAAM,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,IAAI;AACJ,IAAI,OAAO,CAAC;AACZ,EAAE;;AAEF;AACA,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;AACtC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACtF,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACpF,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5C,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5C,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AACrC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,IAAI,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE;AAC1B,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;AAC7B,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3C,MAAM,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/E,MAAM,IAAI,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;AAClE,IAAI;AACJ,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtD,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;AAChD,IAAI,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAChD,EAAE;;AAEF,EAAE,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,IAAI,EAAE;AAC1B,EAAE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,OAAO,IAAI;;AAEpD;AACA,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AAC5B,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9E,QAAQ,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;AAClD,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,OAAO,IAAI;AACxC,IAAI,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9E,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI;AACrC,IAAI,OAAO,EAAE;AACb,EAAE;;AAEF,EAAE,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,EAAE,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,EAAE,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,EAAE,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI;AAChD,EAAE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI;AAChD,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;AACzC;;AAEA,SAAS,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE;AAC9B,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;AAClF,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;AAC7D,EAAE,OAAO,IAAI;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,IAAI,EAAE;AAChC,EAAE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,OAAO,IAAI;;AAEpD;AACA,EAAE,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI;AACvB,EAAE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI;AACrD,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,EAAE,MAAM,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,EAAE,OAAO;AACT,IAAI,GAAG,EAAE,MAAM;AACf,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,IAAI,GAAG,UAAU,OAAO,IAAI,CAAC,GAAG,YAAY,QAAQ,GAAG,IAAI,CAAC,GAAG,UAAU,IAAI;AAC7E,IAAI,UAAU,GAAG,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI;AAC7E,IAAI,QAAQ,KAAK,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI;AACrD,IAAI,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI;AACrD,IAAI,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI;AACrD,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI;AACrD,GAAG;AACH;;AAEA,SAAS,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE;AACnC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACxB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;AACzC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;AAC/C,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;AACvC,EAAE;AACF,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK;AACnC,EAAE,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,OAAO,KAAK;AACjD,EAAE,OAAO,IAAI;AACb;;AAEA;AACA;AACA;;AAEA,MAAM,KAAK,CAAC;AACZ,EAAE,WAAW,GAAG;AAChB;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE;AACvB;AACA,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;AAC1B;AACA,IAAI,IAAI,CAAC,IAAI,QAAQ,KAAK;AAC1B;AACA,IAAI,IAAI,CAAC,MAAM,MAAM,KAAK;AAC1B;AACA,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE;AACvB;AACA,IAAI,IAAI,CAAC,GAAG,SAAS,CAAC;AACtB;AACA,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC;;AAEtB;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;AAClB;AACA,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AAClB;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAEzB;AACA,iCAAiC,IAAI,CAAC,MAAM,GAAG,IAAI;AACnD,iCAAiC,IAAI,CAAC,KAAK,IAAI,IAAI;AACnD,iCAAiC,IAAI,CAAC,MAAM,GAAG,IAAI;;AAEnD;AACA,iCAAiC,IAAI,CAAC,WAAW,KAAK,IAAI;AAC1D,iCAAiC,IAAI,CAAC,aAAa,GAAG,IAAI;AAC1D;AACA,iCAAiC,IAAI,CAAC,OAAO,GAAG,IAAI;AACpD,iCAAiC,IAAI,CAAC,MAAM,IAAI,IAAI;AACpD,iCAAiC,IAAI,CAAC,OAAO,GAAG,IAAI;AACpD,EAAE;;AAEF;AACA,EAAE,IAAI,IAAI,IAAI,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;AAElD;AACA,EAAE,IAAI,QAAQ,GAAG,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,UAAU,EAAE;AACnB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;;AAEhD;AACA,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAC9B,MAAM,OAAO,IAAI;AACjB,IAAI;;AAEJ,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACvE,MAAM,IAAI,CAAC,KAAK,GAAG,UAAU;AAC7B,IAAI,CAAC,MAAM,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AAC7D,MAAM,MAAM,CAAC,GAAG,UAAU;AAC1B,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtF,MAAM,IAAI,MAAM,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;AAC/C,MAAM,IAAI,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;AACjD,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;AAClE,MAAM,IAAI,OAAO,CAAC,CAAC,KAAK,MAAM,UAAU,EAAE,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK;AACjE,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;AAClE,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI;AAChE,IAAI;;AAEJ,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACpE,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC;AACtC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;AAC7C,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;AACtC,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG;;AAExC,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;AACnC,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI;AACvB,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC3B,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,MAAM,IAAI,CAAC,OAAO,IAAI;AACtB,MAAM,IAAI,CAAC,WAAW,IAAI;AAC1B,IAAI;AACJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,MAAM,EAAE;AACf,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;AACnC,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK;AACxB,IAAI,IAAI,UAAU,EAAE;AACpB,MAAM,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC3B,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,MAAM,IAAI,CAAC,OAAO,IAAI;AACtB,MAAM,IAAI,CAAC,aAAa,IAAI;AAC5B,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5F,IAAI;AACJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;AACnC,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK;AACxB,IAAI,IAAI,UAAU,EAAE;AACpB,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,MAAM,IAAI,CAAC,OAAO,IAAI;AACtB,MAAM,IAAI,CAAC,aAAa,IAAI;AAC5B,IAAI;AACJ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;AAC7B,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK;AAClE,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,KAAK,EAAE;AAChB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK;AACpC,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC;AACvB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,KAAK;AACzD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;AAC9B,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACtD,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE;AACpB,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;AAC9B,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;AAC7D,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC9C,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE;AAC1B,MAAM,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AACnD,MAAM,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG;AAClC,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;AACzD,IAAI;AACJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,IAAI,GAAG;AACT,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;AAC9B,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,OAAO,CAAC;AAC5B,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC9C,IAAI,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,CAAC;AAC7D,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,IAAI,GAAG;AACT,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,MAAM,GAAG,QAAQ,IAAI,CAAC,GAAG;AACzB,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;AACvB,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO;AAC7B,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI;AAC1B,MAAM,MAAM,KAAK,IAAI,CAAC,MAAM;AAC5B,MAAM,IAAI,OAAO,IAAI,CAAC,KAAK;AAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,MAAM,IAAI,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG;AACnD,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,GAAG;AACT,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK;AACnC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;AAC9B,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE;AACpB,MAAM,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,OAAO,KAAK;AAChE,IAAI;AACJ,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,OAAO,IAAI;;AAErC,IAAI,MAAM,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAChD,IAAI,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG;AAC5B,IAAI,MAAM,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC5D,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI;;AAE5C;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AAClC,MAAM,IAAI,GAAG,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC;AAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE;AACrC,QAAQ,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC5C,qBAAqB,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACvD,MAAM;AACN,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;AAC3C,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AACpC,MAAM,OAAO,IAAI;AACjB,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACnC,MAAM,IAAI,IAAI,IAAI,KAAK,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;AACpE,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;AAC9B,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC5B,QAAQ,OAAO,IAAI;AACnB,MAAM;AACN,MAAM,IAAI,IAAI,IAAI,CAAC,EAAE;AACrB;AACA,QAAQ,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;AAC5B,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC5C,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,MAAM,IAAI;AACvB,QAAQ,IAAI,CAAC,aAAa,IAAI;AAC9B,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AACrC,MAAM,OAAO,IAAI;AACjB,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACnB,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AACjE,MAAM,OAAO,IAAI;AACjB,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE;AACnB,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAClC,MAAM,IAAI,CAAC,OAAO,GAAG,KAAK;AAC1B,MAAM,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,MAAM,IAAI,CAAC,MAAM,IAAI;AACrB,MAAM,IAAI,CAAC,aAAa,IAAI;AAC5B,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE;AACvB,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACtC,MAAM,IAAI,CAAC,OAAO,GAAG,KAAK;AAC1B,MAAM,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,MAAM,IAAI,CAAC,MAAM,IAAI;AACrB,MAAM,IAAI,CAAC,aAAa,IAAI;AAC5B,MAAM,OAAO,KAAK;AAClB,IAAI;;AAEJ,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AACnC,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA,EAAE,oBAAoB,CAAC,CAAC,EAAE;AAC1B,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;AAC9B,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;AAClC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG;AACjC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/D,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;AAChE,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,SAAS,SAAS,KAAK,CAAC;AACrC,EAAE,WAAW,GAAG;AAChB,IAAI,KAAK,EAAE;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,OAAO;AAC5B;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE;AAClB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC7B,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;AAC7C,MAAM;AACN,IAAI;AACJ,IAAI,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;AAC/B,IAAI,IAAI,CAAC,EAAE,EAAE;AACb,IAAI,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;AACrD,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACzE,IAAI;AACJ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE;AACnB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK;AACpC,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;AAC9C,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,KAAK;AAC/D,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5D,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;AAC/B,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,GAAG,EAAE;AACZ,IAAI,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5D,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;AACnC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG;;AAE3B,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;AACjB,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,MAAM,OAAO,GAAG;AAChB,IAAI;;AAEJ,IAAI,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;AACvC,IAAI,MAAM,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,IAAI,MAAM,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;;AAExC;AACA,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AACnC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC5C,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1C,IAAI,CAAC,MAAM;AACX,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG;AACpE,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG;AACpE,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;AACxC,iBAAiB,EAAE,CAAC,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC;AACxC,iBAAiB,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAO,CAAC;AACvD,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC;AACxC,iBAAiB,EAAE,CAAC,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;AACxC,iBAAiB,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AACtD,MAAM,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;AACrD,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AACnC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5F,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;AAC3C,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,IAAI,CAAC,MAAM;AACX,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,IAAI;;AAEJ;AACA,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;;AAExC,IAAI,OAAO,GAAG;AACd,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,OAAO,EAAE;AACpB,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5E,IAAI,OAAO,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;AACvC,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,WAAW,SAAS,KAAK,CAAC;AACvC,EAAE,WAAW,GAAG;AAChB,IAAI,KAAK,EAAE;AACX;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS;AAC9B;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,QAAQ;AAChC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE;AAClB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC7B,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;AAC7C,MAAM;AACN,IAAI;AACJ,IAAI,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACrC,IAAI,IAAI,CAAC,EAAE,EAAE;AACb,IAAI,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;AACrD,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AAC9E,IAAI;AACJ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE;AACnB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK;AACpC,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACpD,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,KAAK;AAC/D,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5D,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;AAC/B,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,GAAG,EAAE;AACZ,IAAI,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE;AACvF,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;AACnC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG;;AAE3B,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;AACjB,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/E,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACrF,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7E,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG;AAC5B,MAAM,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;AACnC,MAAM,OAAO,GAAG;AAChB,IAAI;;AAEJ,IAAI,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;AACvC,IAAI,MAAM,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,IAAI,MAAM,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;;AAExC;AACA,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AACnC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC5C,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1C,IAAI,CAAC,MAAM;AACX,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG;AACpE,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG;AACpE,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,IAAI,IAAI,GAAG,EAAE,CAAC;AAC3C,iBAAiB,EAAE,CAAC,QAAQ,KAAK,IAAI,GAAG,EAAE,CAAC;AAC3C,iBAAiB,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAO,CAAC;AACvD,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,KAAK,IAAI,GAAG,EAAE,CAAC;AAC3C,iBAAiB,EAAE,CAAC,SAAS,IAAI,IAAI,GAAG,EAAE,CAAC;AAC3C,iBAAiB,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AACtD,MAAM,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;AACrD,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;AACtC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACxF,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AAChD,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM;AAC1E,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM;AAC1E,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;AAC9C,iBAAiB,EAAE,CAAC,WAAW,KAAK,IAAI,GAAG,EAAE,CAAC;AAC9C,iBAAiB,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAU,CAAC;AAC7D,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,KAAK,IAAI,GAAG,EAAE,CAAC;AAC9C,iBAAiB,EAAE,CAAC,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;AAC9C,iBAAiB,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;AAC5D,MAAM,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9D,IAAI,CAAC,MAAM;AACX,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACnD,IAAI;;AAEJ;AACA,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACrC,IAAI,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtF,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;;AAE/C;AACA,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI;AAC/C,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;AACnE,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,UAAU,IAAI,IAAI;AACpE,QAAQ,EAAE,CAAC,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU;AAC1D,SAAS,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,IAAI,IAAI,CAAC;;AAEhD,IAAI,OAAO,GAAG;AACd,EAAE;AACF;;ACn+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACY,MAAC,UAAU,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC;AAC5D,aAAa,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa;AAC7B,EAAE,GAAG;AACL,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAClB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AACf,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AACf,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AACf,EAAE,KAAK;AACP,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;AAC/B,EAAE;AACF,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AACnD,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AACnD,EAAE,MAAM,KAAK,QAAQ,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;;AAEnD,EAAE,IAAI,KAAK,EAAE;AACb;AACA,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACrC;AACA;AACA;AACA;AACA,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI;;AAE7B;AACA,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AAC5C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,KAAK;;AAE7B;AACA,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAC/C,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC;;AAE7B;AACA,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG;AAClD,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG;AAC1B,EAAE,CAAC,MAAM;AACT;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;AACxC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AACpC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AACpC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AACpC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,QAAQ;;AAEhD;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;AACzC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AACrC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AACrC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AACrC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,QAAQ;;AAEjD;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;AACtC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACxD,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AACpC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AACpC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AACpC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK;;AAE7C;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;AACzC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACxD,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AACnC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AACnC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AACnC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK;AAC5C,EAAE;;AAEF;AACA,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG;AAChD,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI;;AAE9B;AACA,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAC7C,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,GAAG;;AAE5B,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9D,EAAE,MAAM,CAAC,GAAG,QAAQ,GAAG,CAAC;AACxB,EAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE;;AAEA;AACO,SAAS,eAAe,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACpD,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9B,IAAI,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,SAAS;AACpE,EAAE;AACF,EAAE,OAAO,OAAO;AAChB;;AAEA;AACO,SAAS,gBAAgB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;AAC7D,EAAE,IAAI,KAAK,GAAG,IAAI;AAClB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9B,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpD,IAAI,IAAI,CAAC,GAAG,MAAM,EAAE,OAAO,SAAS;AACpC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,GAAG,KAAK;AAC3C,EAAE;AACF,EAAE,OAAO,KAAK,GAAG,OAAO,GAAG,WAAW;AACtC;;AAEA;AACO,SAAS,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9D,EAAE,IAAI,KAAK,GAAG,IAAI;AAClB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9B,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACnB,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,IAAI,IAAI,MAAM,GAAG,IAAI;AACrB,IAAI,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE;AAC/C,MAAM,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AACvC,MAAM,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AACvC,MAAM,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AACvC,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;AAC1C,MAAM,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC;AACrC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;AAC7B,IAAI;AACJ,IAAI,IAAI,MAAM,EAAE,OAAO,SAAS;AAChC,EAAE;AACF,EAAE,OAAO,KAAK,GAAG,OAAO,GAAG,WAAW;AACtC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/constants.js","../src/quat.js","../src/form.js","../src/query.js","../src/track.js","../src/visibility.js"],"sourcesContent":["/**\n * @file Core constants — zero dependencies.\n * @module tree/constants\n * @license AGPL-3.0-only\n */\n\n// Coordinate spaces\nexport const WORLD = 'WORLD';\nexport const EYE = 'EYE';\nexport const NDC = 'NDC';\nexport const SCREEN = 'SCREEN';\nexport const MODEL = 'MODEL';\nexport const MATRIX = 'MATRIX';\n\n// NDC Z convention (only difference between backends)\nexport const WEBGL = -1; // z ∈ [−1, 1]\nexport const WEBGPU = 0; // z ∈ [0, 1]\n\n// Visibility results\nexport const INVISIBLE = 0;\nexport const VISIBLE = 1;\nexport const SEMIVISIBLE = 2;\n\n// Basis vectors (frozen plain arrays — duck-typed Vec3)\nexport const ORIGIN = Object.freeze([0, 0, 0]);\nexport const i = Object.freeze([1, 0, 0]);\nexport const j = Object.freeze([0, 1, 0]);\nexport const k = Object.freeze([0, 0, 1]);\nexport const _i = Object.freeze([-1, 0, 0]);\nexport const _j = Object.freeze([0, -1, 0]);\nexport const _k = Object.freeze([0, 0, -1]);\n","/**\n * @file Quaternion algebra and mat4/mat3 conversions.\n * @module tree/quat\n * @license AGPL-3.0-only\n *\n * Quaternions are stored as flat [x, y, z, w] arrays (w-last, glTF layout).\n *\n * All functions follow the out-first, zero-allocation contract.\n * Conversion functions bridge between quaternion and matrix representations\n * but do not perform any higher-level graphics operations — those belong\n * in form.js (matrix construction from specs) or track.js (animation).\n */\n\n'use strict';\n\n// =========================================================================\n// Basic ops\n// =========================================================================\n\n/** Set all four components. @returns {number[]} out */\nexport const qSet = (out, x, y, z, w) => {\n out[0] = x; out[1] = y; out[2] = z; out[3] = w; return out;\n};\n\n/** Copy quaternion a into out. @returns {number[]} out */\nexport const qCopy = (out, a) => {\n out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3]; return out;\n};\n\n/** Dot product of two quaternions. */\nexport const qDot = (a, b) => a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];\n\n/** Normalise quaternion in-place. @returns {number[]} out */\nexport const qNormalize = (out) => {\n const l = Math.sqrt(out[0]*out[0]+out[1]*out[1]+out[2]*out[2]+out[3]*out[3]) || 1;\n out[0]/=l; out[1]/=l; out[2]/=l; out[3]/=l; return out;\n};\n\n/** Negate quaternion (same rotation, different hemisphere). @returns {number[]} out */\nexport const qNegate = (out, a) => {\n out[0]=-a[0]; out[1]=-a[1]; out[2]=-a[2]; out[3]=-a[3]; return out;\n};\n\n/** Hamilton product out = a * b. @returns {number[]} out */\nexport const qMul = (out, a, b) => {\n const ax=a[0],ay=a[1],az=a[2],aw=a[3], bx=b[0],by=b[1],bz=b[2],bw=b[3];\n out[0]=aw*bx+ax*bw+ay*bz-az*by;\n out[1]=aw*by-ax*bz+ay*bw+az*bx;\n out[2]=aw*bz+ax*by-ay*bx+az*bw;\n out[3]=aw*bw-ax*bx-ay*by-az*bz;\n return out;\n};\n\n// =========================================================================\n// Interpolation\n// =========================================================================\n\n/** Spherical linear interpolation. @returns {number[]} out */\nexport const qSlerp = (out, a, b, t) => {\n let bx=b[0],by=b[1],bz=b[2],bw=b[3];\n let d = a[0]*bx+a[1]*by+a[2]*bz+a[3]*bw;\n if (d < 0) { bx=-bx; by=-by; bz=-bz; bw=-bw; d=-d; }\n let f0, f1;\n if (1-d > 1e-10) {\n const th=Math.acos(d), st=Math.sin(th);\n f0=Math.sin((1-t)*th)/st; f1=Math.sin(t*th)/st;\n } else {\n f0=1-t; f1=t;\n }\n out[0]=a[0]*f0+bx*f1; out[1]=a[1]*f0+by*f1;\n out[2]=a[2]*f0+bz*f1; out[3]=a[3]*f0+bw*f1;\n return qNormalize(out);\n};\n\n/**\n * Normalised linear interpolation (nlerp).\n * Cheaper than slerp; slightly non-constant angular velocity.\n * Handles antipodal quats by flipping b when dot < 0.\n * @returns {number[]} out\n */\nexport const qNlerp = (out, a, b, t) => {\n let bx=b[0],by=b[1],bz=b[2],bw=b[3];\n if (a[0]*bx+a[1]*by+a[2]*bz+a[3]*bw < 0) { bx=-bx; by=-by; bz=-bz; bw=-bw; }\n out[0]=a[0]+t*(bx-a[0]); out[1]=a[1]+t*(by-a[1]);\n out[2]=a[2]+t*(bz-a[2]); out[3]=a[3]+t*(bw-a[3]);\n return qNormalize(out);\n};\n\n// =========================================================================\n// Construction\n// =========================================================================\n\n/**\n * Build a quaternion from axis-angle.\n * @param {number[]} out\n * @param {number} ax @param {number} ay @param {number} az Axis (need not be unit).\n * @param {number} angle Radians.\n * @returns {number[]} out\n */\nexport const qFromAxisAngle = (out, ax, ay, az, angle) => {\n const half = angle * 0.5;\n const s = Math.sin(half);\n const len = Math.sqrt(ax*ax + ay*ay + az*az) || 1;\n out[0] = s * ax / len; out[1] = s * ay / len; out[2] = s * az / len;\n out[3] = Math.cos(half);\n return out;\n};\n\n/**\n * Build a quaternion from a look direction (−Z forward) and optional up (default +Y).\n * @param {number[]} out\n * @param {number[]} dir Forward direction [x,y,z].\n * @param {number[]} [up] Up vector [x,y,z].\n * @returns {number[]} out\n */\nexport const qFromLookDir = (out, dir, up) => {\n let fx=dir[0],fy=dir[1],fz=dir[2];\n const fl=Math.sqrt(fx*fx+fy*fy+fz*fz)||1;\n fx/=fl; fy/=fl; fz/=fl;\n let ux=up?up[0]:0, uy=up?up[1]:1, uz=up?up[2]:0;\n let rx=uy*fz-uz*fy, ry=uz*fx-ux*fz, rz=ux*fy-uy*fx;\n const rl=Math.sqrt(rx*rx+ry*ry+rz*rz)||1;\n rx/=rl; ry/=rl; rz/=rl;\n ux=fy*rz-fz*ry; uy=fz*rx-fx*rz; uz=fx*ry-fy*rx;\n return qFromRotMat3x3(out, rx,ry,rz, ux,uy,uz, -fx,-fy,-fz);\n};\n\n/**\n * Build a quaternion from a 3×3 rotation matrix (9 row-major scalars).\n * @returns {number[]} out (normalised)\n */\nexport const qFromRotMat3x3 = (out, m00,m01,m02, m10,m11,m12, m20,m21,m22) => {\n const tr = m00+m11+m22;\n if (tr > 0) {\n const s=0.5/Math.sqrt(tr+1);\n out[3]=0.25/s; out[0]=(m21-m12)*s; out[1]=(m02-m20)*s; out[2]=(m10-m01)*s;\n } else if (m00>m11 && m00>m22) {\n const s=2*Math.sqrt(1+m00-m11-m22);\n out[3]=(m21-m12)/s; out[0]=0.25*s; out[1]=(m01+m10)/s; out[2]=(m02+m20)/s;\n } else if (m11>m22) {\n const s=2*Math.sqrt(1+m11-m00-m22);\n out[3]=(m02-m20)/s; out[0]=(m01+m10)/s; out[1]=0.25*s; out[2]=(m12+m21)/s;\n } else {\n const s=2*Math.sqrt(1+m22-m00-m11);\n out[3]=(m10-m01)/s; out[0]=(m02+m20)/s; out[1]=(m12+m21)/s; out[2]=0.25*s;\n }\n return qNormalize(out);\n};\n\n/**\n * Extract a unit quaternion from the upper-left 3×3 of a column-major mat4.\n * @param {number[]} out\n * @param {Float32Array|number[]} m Column-major mat4.\n * @returns {number[]} out\n */\nexport const qFromMat4 = (out, m) =>\n qFromRotMat3x3(out, m[0],m[4],m[8], m[1],m[5],m[9], m[2],m[6],m[10]);\n\n/**\n * Write a quaternion into the rotation block of a column-major mat4.\n * Translation and perspective rows/cols are set to identity values.\n * @param {Float32Array|number[]} out 16-element array.\n * @param {number[]} q [x,y,z,w].\n * @returns {Float32Array|number[]} out\n */\nexport const qToMat4 = (out, q) => {\n const x=q[0],y=q[1],z=q[2],w=q[3];\n const x2=x+x,y2=y+y,z2=z+z;\n const xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;\n out[0]=1-(yy+zz); out[1]=xy+wz; out[2]=xz-wy; out[3]=0;\n out[4]=xy-wz; out[5]=1-(xx+zz); out[6]=yz+wx; out[7]=0;\n out[8]=xz+wy; out[9]=yz-wx; out[10]=1-(xx+yy); out[11]=0;\n out[12]=0; out[13]=0; out[14]=0; out[15]=1;\n return out;\n};\n\n// =========================================================================\n// Decomposition\n// =========================================================================\n\n/**\n * Decompose a unit quaternion into { axis:[x,y,z], angle } (radians).\n * @param {number[]} q [x,y,z,w].\n * @param {Object} [out]\n * @returns {{ axis: number[], angle: number }}\n */\nexport const quatToAxisAngle = (q, out) => {\n out = out || {};\n const x=q[0],y=q[1],z=q[2],w=q[3];\n const sinHalf = Math.sqrt(x*x+y*y+z*z);\n if (sinHalf < 1e-8) { out.axis=[0,1,0]; out.angle=0; return out; }\n out.angle = 2*Math.atan2(sinHalf, w);\n out.axis = [x/sinHalf, y/sinHalf, z/sinHalf];\n return out;\n};\n","/**\n * @file Matrix construction from geometric specs and partial decomposition.\n * @module tree/form\n * @license AGPL-3.0-only\n *\n * Constructs mat4s from higher-level specs: TRS transforms, orthonormal\n * bases, lookat parameters, projection parameters, and special-purpose\n * matrices (bias, reflection).\n *\n * Design invariant: form.js has no dependency on query.js. Construction\n * from specs requires only scalar arithmetic and quaternion conversions.\n * Callers compose the resulting matrices using query.js (mat4Mul etc.).\n *\n * Lookat constructors live here because a camera is just a frame — the eye\n * matrix is the camera object's model matrix, not a camera-specific concept.\n * There is no camera module; mat4View and mat4Eye are frame\n * constructions that happen to use lookat parameterisation.\n *\n * Projection constructors live here because they construct matrices from\n * geometric parameters. Projection scalar reads (projNear, projFov, etc.)\n * live in query.js — they interrogate an existing projection matrix.\n *\n * Partial decomposers (mat4To___) are the inverse of construction — they\n * extract a single component from an existing matrix. Kept alongside\n * constructors because they are paired operations on the same components.\n *\n * Imports quat.js only. No dependency on query.js, visibility.js, or track.js.\n *\n * All functions follow the out-first, zero-allocation contract.\n * Returns null on degeneracy where applicable.\n */\n\n'use strict';\n\nimport { qFromRotMat3x3 } from './quat.js';\n\n// =========================================================================\n// Frame construction\n// =========================================================================\n\n/**\n * Rigid frame from orthonormal basis + translation.\n * The primitive that lookat constructors use internally.\n *\n * Column-major layout: col0=right, col1=up, col2=forward, col3=translation.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} rx,ry,rz Right vector (col 0).\n * @param {number} ux,uy,uz Up vector (col 1).\n * @param {number} fx,fy,fz Forward vec (col 2).\n * @param {number} tx,ty,tz Translation (col 3).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4FromBasis(out, rx,ry,rz, ux,uy,uz, fx,fy,fz, tx,ty,tz) {\n out[0]=rx; out[1]=ry; out[2]=rz; out[3]=0;\n out[4]=ux; out[5]=uy; out[6]=uz; out[7]=0;\n out[8]=fx; out[9]=fy; out[10]=fz; out[11]=0;\n out[12]=tx; out[13]=ty; out[14]=tz; out[15]=1;\n return out;\n}\n\n/**\n * View matrix (world→eye) from lookat parameters.\n * Cheaper than building the eye matrix and inverting.\n *\n * Convention: −Z axis points toward center (camera looks along −Z in eye space).\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ex,ey,ez Eye (camera) position.\n * @param {number} cx,cy,cz Center (look-at target).\n * @param {number} ux,uy,uz World up hint (need not be unit).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4View(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {\n // z = normalize(eye - center) (camera +Z away from target)\n let zx=ex-cx, zy=ey-cy, zz=ez-cz;\n const zl=Math.sqrt(zx*zx+zy*zy+zz*zz)||1;\n zx/=zl; zy/=zl; zz/=zl;\n // x = normalize(up × z) (right)\n let xx=uy*zz-uz*zy, xy=uz*zx-ux*zz, xz=ux*zy-uy*zx;\n const xl=Math.sqrt(xx*xx+xy*xy+xz*xz)||1;\n xx/=xl; xy/=xl; xz/=xl;\n // y = z × x (up_ortho, guaranteed perpendicular)\n const yx=zy*xz-zz*xy, yy=zz*xx-zx*xz, yz=zx*xy-zy*xx;\n // View = [R | -R·t] (column-major)\n out[0]=xx; out[1]=yx; out[2]=zx; out[3]=0;\n out[4]=xy; out[5]=yy; out[6]=zy; out[7]=0;\n out[8]=xz; out[9]=yz; out[10]=zz; out[11]=0;\n out[12]=-(xx*ex+xy*ey+xz*ez);\n out[13]=-(yx*ex+yy*ey+yz*ez);\n out[14]=-(zx*ex+zy*ey+zz*ez);\n out[15]=1;\n return out;\n}\n\n/**\n * Eye matrix (eye→world) from lookat parameters.\n * Transpose of the rotation block + direct translation column.\n * Same inputs as mat4View.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ex,ey,ez Eye (camera) position.\n * @param {number} cx,cy,cz Center (look-at target).\n * @param {number} ux,uy,uz World up hint (need not be unit).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Eye(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {\n // Same basis computation as mat4View.\n let zx=ex-cx, zy=ey-cy, zz=ez-cz;\n const zl=Math.sqrt(zx*zx+zy*zy+zz*zz)||1;\n zx/=zl; zy/=zl; zz/=zl;\n let xx=uy*zz-uz*zy, xy=uz*zx-ux*zz, xz=ux*zy-uy*zx;\n const xl=Math.sqrt(xx*xx+xy*xy+xz*xz)||1;\n xx/=xl; xy/=xl; xz/=xl;\n const yx=zy*xz-zz*xy, yy=zz*xx-zx*xz, yz=zx*xy-zy*xx;\n // Eye matrix = [R^T | t] (rotation transposed, translation = eye position)\n out[0]=xx; out[1]=xy; out[2]=xz; out[3]=0;\n out[4]=yx; out[5]=yy; out[6]=yz; out[7]=0;\n out[8]=zx; out[9]=zy; out[10]=zz; out[11]=0;\n out[12]=ex; out[13]=ey; out[14]=ez; out[15]=1;\n return out;\n}\n\n// =========================================================================\n// TRS construction\n// =========================================================================\n\n/**\n * Column-major mat4 from flat TRS scalars.\n * No struct allocation — all components passed as plain numbers.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} tx,ty,tz Translation.\n * @param {number} qx,qy,qz,qw Rotation quaternion [x,y,z,w].\n * @param {number} sx,sy,sz Scale.\n * @returns {Float32Array|number[]} out\n */\nexport function mat4FromTRS(out, tx,ty,tz, qx,qy,qz,qw, sx,sy,sz) {\n const x2=qx+qx,y2=qy+qy,z2=qz+qz;\n const xx=qx*x2,xy=qx*y2,xz=qx*z2,yy=qy*y2,yz=qy*z2,zz=qz*z2;\n const wx=qw*x2,wy=qw*y2,wz=qw*z2;\n out[0]=(1-(yy+zz))*sx; out[1]=(xy+wz)*sx; out[2]=(xz-wy)*sx; out[3]=0;\n out[4]=(xy-wz)*sy; out[5]=(1-(xx+zz))*sy; out[6]=(yz+wx)*sy; out[7]=0;\n out[8]=(xz+wy)*sz; out[9]=(yz-wx)*sz; out[10]=(1-(xx+yy))*sz; out[11]=0;\n out[12]=tx; out[13]=ty; out[14]=tz; out[15]=1;\n return out;\n}\n\n/**\n * Translation-only mat4.\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} tx,ty,tz\n * @returns {Float32Array|number[]} out\n */\nexport function mat4FromTranslation(out, tx,ty,tz) {\n out[0]=1; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=1; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0; out[10]=1; out[11]=0;\n out[12]=tx; out[13]=ty; out[14]=tz; out[15]=1;\n return out;\n}\n\n/**\n * Scale-only mat4.\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} sx,sy,sz\n * @returns {Float32Array|number[]} out\n */\nexport function mat4FromScale(out, sx,sy,sz) {\n out[0]=sx; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=sy; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0; out[10]=sz; out[11]=0;\n out[12]=0; out[13]=0; out[14]=0; out[15]=1;\n return out;\n}\n\n// =========================================================================\n// Projection construction\n// =========================================================================\n\n/**\n * Perspective projection matrix.\n *\n * NDC convention: ndcZMin = WEBGL (−1) or WEBGPU (0).\n * near maps to ndcZMin, far maps to +1.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} fov Vertical field of view (radians).\n * @param {number} aspect Width / height.\n * @param {number} near Near plane distance (positive).\n * @param {number} far Far plane distance (positive, > near).\n * @param {number} ndcZMin -1 (WEBGL) or 0 (WEBGPU).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Perspective(out, fov, aspect, near, far, ndcZMin) {\n const f = 1 / Math.tan(fov * 0.5);\n out[0]=f/aspect; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=f; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0;\n out[10]=(ndcZMin*near-far)/(far-near);\n out[11]=-1;\n out[12]=0; out[13]=0;\n out[14]=(ndcZMin-1)*far*near/(far-near);\n out[15]=0;\n return out;\n}\n\n/**\n * Orthographic projection matrix.\n *\n * NDC convention: ndcZMin = WEBGL (−1) or WEBGPU (0).\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} left,right,bottom,top Frustum extents.\n * @param {number} near,far Clip plane distances (positive).\n * @param {number} ndcZMin -1 (WEBGL) or 0 (WEBGPU).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Ortho(out, left, right, bottom, top, near, far, ndcZMin) {\n const rl=1/(right-left), tb=1/(top-bottom), fn=1/(far-near);\n out[0]=2*rl; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=2*tb; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0;\n out[10]=(ndcZMin-1)*fn;\n out[11]=0;\n out[12]=-(right+left)*rl; out[13]=-(top+bottom)*tb;\n out[14]=(ndcZMin*far-near)*fn;\n out[15]=1;\n return out;\n}\n\n/**\n * Frustum (off-centre perspective) projection matrix.\n *\n * NDC convention: ndcZMin = WEBGL (−1) or WEBGPU (0).\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} left,right,bottom,top Near-plane extents.\n * @param {number} near,far Clip plane distances (positive).\n * @param {number} ndcZMin -1 (WEBGL) or 0 (WEBGPU).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Frustum(out, left, right, bottom, top, near, far, ndcZMin) {\n const rl=1/(right-left), tb=1/(top-bottom);\n out[0]=2*near*rl; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=2*near*tb; out[6]=0; out[7]=0;\n out[8]=(right+left)*rl; out[9]=(top+bottom)*tb;\n out[10]=(ndcZMin*near-far)/(far-near);\n out[11]=-1;\n out[12]=0; out[13]=0;\n out[14]=(ndcZMin-1)*far*near/(far-near);\n out[15]=0;\n return out;\n}\n\n// =========================================================================\n// Special-purpose construction\n// =========================================================================\n\n/**\n * Bias matrix: remaps xyz from NDC to texture/UV space [0,1].\n * xy always remap from [−1,1]; z remaps from [ndcZMin,1].\n * Used to transform light-space NDC coordinates for shadow map sampling.\n *\n * Column-major (WebGL, ndcZMin=−1):\n * [ 0.5 0 0 0.5 ]\n * [ 0 0.5 0 0.5 ]\n * [ 0 0 0.5 0.5 ]\n * [ 0 0 0 1 ]\n *\n * Column-major (WebGPU, ndcZMin=0):\n * [ 0.5 0 0 0.5 ]\n * [ 0 0.5 0 0.5 ]\n * [ 0 0 1 0 ]\n * [ 0 0 0 1 ]\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Bias(out, ndcZMin) {\n const sz = 1 / (1 - ndcZMin);\n const tz = -ndcZMin / (1 - ndcZMin);\n out[0]=0.5; out[1]=0; out[2]=0; out[3]=0;\n out[4]=0; out[5]=0.5; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0; out[10]=sz; out[11]=0;\n out[12]=0.5; out[13]=0.5; out[14]=tz; out[15]=1;\n return out;\n}\n\n/**\n * Reflection matrix across a plane ax + by + cz = d.\n * [nx, ny, nz] must be a unit normal.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} nx,ny,nz Unit plane normal.\n * @param {number} d Plane offset (dot(point_on_plane, normal)).\n * @returns {Float32Array|number[]} out\n */\nexport function mat4Reflect(out, nx,ny,nz,d) {\n out[0]=1-2*nx*nx; out[1]=-2*ny*nx; out[2]=-2*nz*nx; out[3]=0;\n out[4]=-2*nx*ny; out[5]=1-2*ny*ny; out[6]=-2*nz*ny; out[7]=0;\n out[8]=-2*nx*nz; out[9]=-2*ny*nz; out[10]=1-2*nz*nz; out[11]=0;\n out[12]=2*d*nx; out[13]=2*d*ny; out[14]=2*d*nz; out[15]=1;\n return out;\n}\n\n// =========================================================================\n// Partial decomposition (mat4To___ mirrors mat4From___)\n// =========================================================================\n\n/**\n * Extract translation from a column-major mat4 (column 3).\n * @param {Float32Array|number[]} out3 3-element destination.\n * @param {Float32Array|number[]} m 16-element source.\n * @returns {Float32Array|number[]} out3\n */\nexport function mat4ToTranslation(out3, m) {\n out3[0]=m[12]; out3[1]=m[13]; out3[2]=m[14];\n return out3;\n}\n\n/**\n * Extract scale from a column-major mat4 (column lengths of rotation block).\n * Assumes no shear.\n * @param {Float32Array|number[]} out3 3-element destination.\n * @param {Float32Array|number[]} m 16-element source.\n * @returns {Float32Array|number[]} out3\n */\nexport function mat4ToScale(out3, m) {\n out3[0]=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);\n out3[1]=Math.sqrt(m[4]*m[4]+m[5]*m[5]+m[6]*m[6]);\n out3[2]=Math.sqrt(m[8]*m[8]+m[9]*m[9]+m[10]*m[10]);\n return out3;\n}\n\n/**\n * Extract rotation as a unit quaternion from a column-major mat4.\n * Scale is factored out from each column before extraction.\n * Assumes no shear.\n * @param {number[]} out4 4-element [x,y,z,w] destination.\n * @param {Float32Array|number[]} m 16-element source.\n * @returns {number[]} out4\n */\nexport function mat4ToRotation(out4, m) {\n const sx=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2])||1;\n const sy=Math.sqrt(m[4]*m[4]+m[5]*m[5]+m[6]*m[6])||1;\n const sz=Math.sqrt(m[8]*m[8]+m[9]*m[9]+m[10]*m[10])||1;\n return qFromRotMat3x3(out4,\n m[0]/sx, m[4]/sy, m[8]/sz,\n m[1]/sx, m[5]/sy, m[9]/sz,\n m[2]/sx, m[6]/sy, m[10]/sz);\n}\n","/**\n * @file Matrix arithmetic, space-transform dispatch, and projection queries.\n * @module tree/query\n * @license AGPL-3.0-only\n *\n * The operative layer — receives existing matrices and extracts information.\n * Contrast with form.js which constructs matrices from specs.\n *\n * form.js — you have specs, you want a matrix\n * query.js — you have a matrix, you want information\n *\n * No dependency on form.js. Operating on matrices requires no knowledge\n * of how they were constructed.\n *\n * Storage: column-major Float32Array / ArrayLike<number>.\n * Element [col*4 + row] = M[row, col].\n *\n * Multiply: mat4Mul(out, A, B) = A · B (standard math order).\n *\n * Pipeline: clip = P · V · M · v\n * P = projection (eye → clip)\n * V = view (world → eye)\n * M = model (local → world)\n *\n * NDC convention parameter (ndcZMin):\n * WEBGL = -1 z ∈ [−1, 1]\n * WEBGPU = 0 z ∈ [0, 1]\n *\n * All functions follow the out-first, zero-allocation contract.\n * Returns null on degeneracy (singular matrix, etc.).\n */\n\n'use strict';\n\nimport {\n WORLD, EYE, NDC, SCREEN, MATRIX,\n} from './constants.js';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Mat4 math\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = A · B (column-major, standard math order) */\nexport function mat4Mul(out, A, B) {\n const a0=A[0],a1=A[1],a2=A[2],a3=A[3],\n a4=A[4],a5=A[5],a6=A[6],a7=A[7],\n a8=A[8],a9=A[9],a10=A[10],a11=A[11],\n a12=A[12],a13=A[13],a14=A[14],a15=A[15];\n let b0=B[0],b1=B[1],b2=B[2],b3=B[3];\n out[0]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[1]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[2]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[3]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[4];b1=B[5];b2=B[6];b3=B[7];\n out[4]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[5]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[6]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[7]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[8];b1=B[9];b2=B[10];b3=B[11];\n out[8]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[9]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[10]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[11]=a3*b0+a7*b1+a11*b2+a15*b3;\n b0=B[12];b1=B[13];b2=B[14];b3=B[15];\n out[12]=a0*b0+a4*b1+a8*b2+a12*b3;\n out[13]=a1*b0+a5*b1+a9*b2+a13*b3;\n out[14]=a2*b0+a6*b1+a10*b2+a14*b3;\n out[15]=a3*b0+a7*b1+a11*b2+a15*b3;\n return out;\n}\n\n/** out = inverse(src). Returns null if singular. */\nexport function mat4Invert(out, src) {\n const s=src;\n const a00=s[0],a01=s[1],a02=s[2],a03=s[3],\n a10=s[4],a11=s[5],a12=s[6],a13=s[7],\n a20=s[8],a21=s[9],a22=s[10],a23=s[11],\n a30=s[12],a31=s[13],a32=s[14],a33=s[15];\n const b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,\n b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,\n b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,\n b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,\n b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,\n b10=a21*a33-a23*a31,b11=a22*a33-a23*a32;\n let det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;\n if (Math.abs(det) < 1e-12) return null;\n det=1/det;\n out[0]=(a11*b11-a12*b10+a13*b09)*det;\n out[1]=(a02*b10-a01*b11-a03*b09)*det;\n out[2]=(a31*b05-a32*b04+a33*b03)*det;\n out[3]=(a22*b04-a21*b05-a23*b03)*det;\n out[4]=(a12*b08-a10*b11-a13*b07)*det;\n out[5]=(a00*b11-a02*b08+a03*b07)*det;\n out[6]=(a32*b02-a30*b05-a33*b01)*det;\n out[7]=(a20*b05-a22*b02+a23*b01)*det;\n out[8]=(a10*b10-a11*b08+a13*b06)*det;\n out[9]=(a01*b08-a00*b10-a03*b06)*det;\n out[10]=(a30*b04-a31*b02+a33*b00)*det;\n out[11]=(a21*b02-a20*b04-a23*b00)*det;\n out[12]=(a11*b07-a10*b09-a12*b06)*det;\n out[13]=(a00*b09-a01*b07+a02*b06)*det;\n out[14]=(a31*b01-a30*b03-a32*b00)*det;\n out[15]=(a20*b03-a21*b01+a22*b00)*det;\n return out;\n}\n\n/** out = transpose(src) */\nexport function mat4Transpose(out, src) {\n if (out === src) {\n let t;\n t=src[1];out[1]=src[4];out[4]=t;\n t=src[2];out[2]=src[8];out[8]=t;\n t=src[3];out[3]=src[12];out[12]=t;\n t=src[6];out[6]=src[9];out[9]=t;\n t=src[7];out[7]=src[13];out[13]=t;\n t=src[11];out[11]=src[14];out[14]=t;\n } else {\n out[0]=src[0];out[1]=src[4];out[2]=src[8];out[3]=src[12];\n out[4]=src[1];out[5]=src[5];out[6]=src[9];out[7]=src[13];\n out[8]=src[2];out[9]=src[6];out[10]=src[10];out[11]=src[14];\n out[12]=src[3];out[13]=src[7];out[14]=src[11];out[15]=src[15];\n }\n return out;\n}\n\n/** out[0..8] = inverseTranspose(upper3×3(src)) (normal matrix) */\nexport function mat3NormalFromMat4(out, src) {\n const a00=src[0],a01=src[1],a02=src[2],\n a10=src[4],a11=src[5],a12=src[6],\n a20=src[8],a21=src[9],a22=src[10];\n const b01=a22*a11-a12*a21,\n b11=-a22*a01+a02*a21,\n b21=a12*a01-a02*a11;\n let det=a00*b01+a10*b11+a20*b21;\n if (Math.abs(det) < 1e-12) { for(let i=0;i<9;i++)out[i]=0; return out; }\n det=1/det;\n out[0]=b01*det;\n out[1]=(-a22*a10+a12*a20)*det;\n out[2]=(a21*a10-a11*a20)*det;\n out[3]=b11*det;\n out[4]=(a22*a00-a02*a20)*det;\n out[5]=(-a21*a00+a01*a20)*det;\n out[6]=b21*det;\n out[7]=(-a12*a00+a02*a10)*det;\n out[8]=(a11*a00-a01*a10)*det;\n return out;\n}\n\n/** out = mat4 * [x,y,z,1], perspective-divides, writes xyz */\nexport function mat4MulPoint(out, m, x, y, z) {\n const rx = m[0]*x + m[4]*y + m[8]*z + m[12];\n const ry = m[1]*x + m[5]*y + m[9]*z + m[13];\n const rz = m[2]*x + m[6]*y + m[10]*z + m[14];\n const rw = m[3]*x + m[7]*y + m[11]*z + m[15];\n if (rw !== 0 && rw !== 1) {\n out[0] = rx/rw; out[1] = ry/rw; out[2] = rz/rw;\n } else {\n out[0] = rx; out[1] = ry; out[2] = rz;\n }\n return out;\n}\n\n/**\n * Apply only the 3×3 linear block of a mat4 to a direction vector.\n * No translation, no perspective divide. Suitable for directions and normals\n * when the matrix is known to be orthogonal (use mat3NormalFromMat4 for normals\n * under non-uniform scale).\n *\n * @param {Float32Array|number[]} out 3-element destination.\n * @param {Float32Array|number[]} m 16-element mat4.\n * @param {number} dx,dy,dz Input direction.\n * @returns {Float32Array|number[]} out\n */\nexport function mat4MulDir(out, m, dx, dy, dz) {\n out[0] = m[0]*dx + m[4]*dy + m[8]*dz;\n out[1] = m[1]*dx + m[5]*dy + m[9]*dz;\n out[2] = m[2]*dx + m[6]*dy + m[10]*dz;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Projection queries (read scalars from a projection mat4)\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** @returns {boolean} true if orthographic */\nexport function projIsOrtho(p) { return p[15] !== 0; }\n\n/**\n * Near plane distance.\n * @param {ArrayLike<number>} p Projection Mat4.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function projNear(p, ndcZMin) {\n return p[15] === 0\n ? p[14] / (p[10] + ndcZMin)\n : (p[14] - ndcZMin) / p[10];\n}\n\n/** Far plane distance (convention-independent: far always maps to NDC z=1). */\nexport function projFar(p) {\n return p[15] === 0\n ? p[14] / (1 + p[10])\n : (p[14] - 1) / p[10];\n}\n\nexport function projLeft(p, ndcZMin) {\n return p[15] === 1\n ? -(1 + p[12]) / p[0]\n : projNear(p, ndcZMin) * (p[8] - 1) / p[0];\n}\n\nexport function projRight(p, ndcZMin) {\n return p[15] === 1\n ? (1 - p[12]) / p[0]\n : projNear(p, ndcZMin) * (1 + p[8]) / p[0];\n}\n\nexport function projTop(p, ndcZMin) {\n return p[15] === 1\n ? (p[13] - 1) / p[5]\n : projNear(p, ndcZMin) * (p[9] - 1) / p[5];\n}\n\nexport function projBottom(p, ndcZMin) {\n return p[15] === 1\n ? (1 + p[13]) / p[5]\n : projNear(p, ndcZMin) * (1 + p[9]) / p[5];\n}\n\n/** Vertical fov (radians, perspective only). */\nexport function projFov(p) {\n return Math.abs(2 * Math.atan(1 / p[5]));\n}\n\n/** Horizontal fov (radians, perspective only). */\nexport function projHfov(p) {\n return Math.abs(2 * Math.atan(1 / p[0]));\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Derived matrices (convenience)\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = P · V */\nexport function mat4PV(out, proj, view) { return mat4Mul(out, proj, view); }\n\n/** out = V · M */\nexport function mat4MV(out, model, view) { return mat4Mul(out, view, model); }\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Location / Direction transforms\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Relative transform for locations (points): out = inv(to) · from.\n * @param {ArrayLike<number>} out 16-element destination.\n * @param {ArrayLike<number>} from Source frame transform.\n * @param {ArrayLike<number>} to Destination frame transform.\n * @returns {ArrayLike<number>|null} out, or null if to is singular.\n */\nexport function mat4Location(out, from, to) {\n return mat4Invert(out, to) && mat4Mul(out, out, from);\n}\n\n/**\n * Relative transform for directions (vectors): out = to₃ · inv(from₃).\n * Uses only the upper-left 3×3 blocks, ignoring translation.\n * @param {ArrayLike<number>} out 9-element destination.\n * @param {ArrayLike<number>} from Source frame transform.\n * @param {ArrayLike<number>} to Destination frame transform.\n * @returns {ArrayLike<number>|null} out, or null if from is singular.\n */\nexport function mat3Direction(out, from, to) {\n const a00=from[0], a01=from[1], a02=from[2],\n a10=from[4], a11=from[5], a12=from[6],\n a20=from[8], a21=from[9], a22=from[10];\n const b01=a22*a11-a12*a21,\n b11=a12*a20-a22*a10,\n b21=a21*a10-a11*a20;\n let det=a00*b01+a01*b11+a02*b21;\n if (Math.abs(det) < 1e-12) return null;\n det=1/det;\n const i00=b01*det, i01=(a02*a21-a22*a01)*det, i02=(a12*a01-a02*a11)*det;\n const i10=b11*det, i11=(a22*a00-a02*a20)*det, i12=(a02*a10-a12*a00)*det;\n const i20=b21*det, i21=(a01*a20-a21*a00)*det, i22=(a11*a00-a01*a10)*det;\n const t00=to[0], t01=to[1], t02=to[2],\n t10=to[4], t11=to[5], t12=to[6],\n t20=to[8], t21=to[9], t22=to[10];\n const m00=t00*i00+t10*i01+t20*i02, m01=t01*i00+t11*i01+t21*i02, m02=t02*i00+t12*i01+t22*i02;\n const m10=t00*i10+t10*i11+t20*i12, m11=t01*i10+t11*i11+t21*i12, m12=t02*i10+t12*i11+t22*i12;\n const m20=t00*i20+t10*i21+t20*i22, m21=t01*i20+t11*i21+t21*i22, m22=t02*i20+t12*i21+t22*i22;\n out[0]=m00; out[1]=m10; out[2]=m20;\n out[3]=m01; out[4]=m11; out[5]=m21;\n out[6]=m02; out[7]=m12; out[8]=m22;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Space transforms — mapLocation / mapDirection\n// ═══════════════════════════════════════════════════════════════════════════\n//\n// FLAT DISPATCH: every from→to pair is a self-contained leaf.\n// No path calls back into mapLocation/mapDirection (no reentrancy).\n// All intermediates are stack locals (zero shared state).\n//\n// Matrices bag m:\n// {\n// pMatrix: Float32Array(16) — projection (eye → clip)\n// vMatrix: Float32Array(16) — view (world → eye)\n// eMatrix?: Float32Array(16) — eye (eye → world, inv view); lazy\n// pvMatrix?: Float32Array(16) — P · V; lazy\n// ipvMatrix?: Float32Array(16) — inv(P · V); lazy\n// fromFrame?: Float32Array(16) — MATRIX source frame (custom space)\n// toFrameInv?:Float32Array(16) — inv(MATRIX dest frame)\n// }\n//\n\n// ── Location leaf helpers ────────────────────────────────────────────────\n\nfunction _worldToScreen(out, px, py, pz, pv, vp, ndcZMin) {\n const x = pv[0]*px+pv[4]*py+pv[8]*pz+pv[12];\n const y = pv[1]*px+pv[5]*py+pv[9]*pz+pv[13];\n const z = pv[2]*px+pv[6]*py+pv[10]*pz+pv[14];\n const w = pv[3]*px+pv[7]*py+pv[11]*pz+pv[15];\n const xi = (w !== 0 && w !== 1) ? 1/w : 1;\n const nx = x*xi, ny = y*xi, nz = z*xi;\n const vpX=vp[0], vpY=vp[1], vpW=Math.abs(vp[2]), vpH=Math.abs(vp[3]);\n out[0] = vpX + vpW * (nx + 1) * 0.5;\n out[1] = vpY + vpH * (1 - (ny + 1) * 0.5);\n out[2] = (nz - ndcZMin) / (1 - ndcZMin);\n return out;\n}\n\nfunction _screenToWorld(out, sx, sy, sz, ipv, vp, ndcZMin) {\n const vpX=vp[0], vpY=vp[1], vpW=Math.abs(vp[2]), vpH=Math.abs(vp[3]);\n const nx = (sx - vpX) / vpW * 2 - 1;\n const ny = 1 - (sy - vpY) / vpH * 2;\n const nz = sz * (1 - ndcZMin) + ndcZMin;\n return mat4MulPoint(out, ipv, nx, ny, nz);\n}\n\nfunction _worldToNDC(out, px, py, pz, pv) {\n const x=pv[0]*px+pv[4]*py+pv[8]*pz+pv[12];\n const y=pv[1]*px+pv[5]*py+pv[9]*pz+pv[13];\n const z=pv[2]*px+pv[6]*py+pv[10]*pz+pv[14];\n const w=pv[3]*px+pv[7]*py+pv[11]*pz+pv[15];\n const xi = (w !== 0 && w !== 1) ? 1/w : 1;\n out[0]=x*xi; out[1]=y*xi; out[2]=z*xi;\n return out;\n}\n\nfunction _ndcToWorld(out, nx, ny, nz, ipv) {\n return mat4MulPoint(out, ipv, nx, ny, nz);\n}\n\nfunction _screenToNDC(out, sx, sy, sz, vp, ndcZMin) {\n const vpX=vp[0], vpY=vp[1], vpW=Math.abs(vp[2]), vpH=Math.abs(vp[3]);\n out[0] = (sx - vpX) / vpW * 2 - 1;\n out[1] = 1 - (sy - vpY) / vpH * 2;\n out[2] = sz * (1 - ndcZMin) + ndcZMin;\n return out;\n}\n\nfunction _ndcToScreen(out, nx, ny, nz, vp, ndcZMin) {\n const vpX=vp[0], vpY=vp[1], vpW=Math.abs(vp[2]), vpH=Math.abs(vp[3]);\n out[0] = vpX + vpW * (nx + 1) * 0.5;\n out[1] = vpY + vpH * (1 - (ny + 1) * 0.5);\n out[2] = (nz - ndcZMin) / (1 - ndcZMin);\n return out;\n}\n\nfunction _ensurePV(m) {\n if (m.pvMatrix) return m.pvMatrix;\n m.pvMatrix = new Float32Array(16);\n mat4Mul(m.pvMatrix, m.pMatrix, m.vMatrix);\n return m.pvMatrix;\n}\n\n/**\n * Map a point between named coordinate spaces.\n *\n * @param {Vec3} out Result written here.\n * @param {number} px,py,pz Input point.\n * @param {string} from Source space constant.\n * @param {string} to Target space constant.\n * @param {object} m Matrices bag:\n * { pMatrix, vMatrix, eMatrix?, pvMatrix?, ipvMatrix?, fromFrame?, toFrameInv? }\n * @param {Vec4} vp Viewport [x, y, width, height].\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function mapLocation(out, px, py, pz, from, to, m, vp, ndcZMin) {\n // WORLD ↔ SCREEN\n if (from === WORLD && to === SCREEN)\n return _worldToScreen(out, px,py,pz, _ensurePV(m), vp, ndcZMin);\n if (from === SCREEN && to === WORLD)\n return _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n\n // WORLD ↔ NDC\n if (from === WORLD && to === NDC)\n return _worldToNDC(out, px,py,pz, _ensurePV(m));\n if (from === NDC && to === WORLD)\n return _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n\n // SCREEN ↔ NDC\n if (from === SCREEN && to === NDC)\n return _screenToNDC(out, px,py,pz, vp, ndcZMin);\n if (from === NDC && to === SCREEN)\n return _ndcToScreen(out, px,py,pz, vp, ndcZMin);\n\n // WORLD ↔ EYE\n if (from === WORLD && to === EYE)\n return mat4MulPoint(out, m.vMatrix, px,py,pz);\n if (from === EYE && to === WORLD)\n return mat4MulPoint(out, m.eMatrix, px,py,pz);\n\n // EYE ↔ SCREEN\n if (from === EYE && to === SCREEN) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return _worldToScreen(out, ex,ey,ez, _ensurePV(m), vp, ndcZMin);\n }\n if (from === SCREEN && to === EYE) {\n _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.vMatrix, wx,wy,wz);\n }\n\n // EYE ↔ NDC\n if (from === EYE && to === NDC) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return _worldToNDC(out, ex,ey,ez, _ensurePV(m));\n }\n if (from === NDC && to === EYE) {\n _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.vMatrix, wx,wy,wz);\n }\n\n // MATRIX (custom frame) ↔ WORLD\n if (from === MATRIX && to === WORLD)\n return mat4MulPoint(out, m.fromFrame, px,py,pz);\n if (from === WORLD && to === MATRIX)\n return mat4MulPoint(out, m.toFrameInv, px,py,pz);\n\n // MATRIX ↔ EYE\n if (from === MATRIX && to === EYE) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return mat4MulPoint(out, m.vMatrix, fx,fy,fz);\n }\n if (from === EYE && to === MATRIX) {\n const e = m.eMatrix;\n const ex=e[0]*px+e[4]*py+e[8]*pz+e[12],\n ey=e[1]*px+e[5]*py+e[9]*pz+e[13],\n ez=e[2]*px+e[6]*py+e[10]*pz+e[14];\n return mat4MulPoint(out, m.toFrameInv, ex,ey,ez);\n }\n\n // MATRIX ↔ SCREEN\n if (from === MATRIX && to === SCREEN) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return _worldToScreen(out, fx,fy,fz, _ensurePV(m), vp, ndcZMin);\n }\n if (from === SCREEN && to === MATRIX) {\n _screenToWorld(out, px,py,pz, m.ipvMatrix, vp, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ NDC\n if (from === MATRIX && to === NDC) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return _worldToNDC(out, fx,fy,fz, _ensurePV(m));\n }\n if (from === NDC && to === MATRIX) {\n _ndcToWorld(out, px,py,pz, m.ipvMatrix);\n const wx=out[0],wy=out[1],wz=out[2];\n return mat4MulPoint(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ MATRIX\n if (from === MATRIX && to === MATRIX) {\n const f = m.fromFrame;\n const fx=f[0]*px+f[4]*py+f[8]*pz+f[12],\n fy=f[1]*px+f[5]*py+f[9]*pz+f[13],\n fz=f[2]*px+f[6]*py+f[10]*pz+f[14];\n return mat4MulPoint(out, m.toFrameInv, fx,fy,fz);\n }\n\n // Fallback\n out[0]=px; out[1]=py; out[2]=pz;\n return out;\n}\n\n// ── Direction leaf helpers ───────────────────────────────────────────────\n\n/** Apply the 3×3 linear part of a mat4 (rotation/scale, no translation). */\nfunction _applyDir(out, m, dx, dy, dz) {\n out[0]=m[0]*dx+m[4]*dy+m[8]*dz;\n out[1]=m[1]*dx+m[5]*dy+m[9]*dz;\n out[2]=m[2]*dx+m[6]*dy+m[10]*dz;\n return out;\n}\n\nfunction _worldToScreenDir(out, dx, dy, dz, proj, view, vpW, vpH, ndcZMin) {\n // Transform to clip space (no w divide for direction).\n const vx=view[0]*dx+view[4]*dy+view[8]*dz;\n const vy=view[1]*dx+view[5]*dy+view[9]*dz;\n const vz=view[2]*dx+view[6]*dy+view[10]*dz;\n const cx=proj[0]*vx+proj[4]*vy+proj[8]*vz;\n const cy=proj[1]*vx+proj[5]*vy+proj[9]*vz;\n const cz=proj[2]*vx+proj[6]*vy+proj[10]*vz;\n // NDC→screen scale (direction, no offset).\n out[0]=cx*vpW*0.5; out[1]=-cy*vpH*0.5;\n out[2]=cz*(1-ndcZMin)*0.5;\n return out;\n}\n\nfunction _screenToWorldDir(out, dx, dy, dz, proj, eMatrix, vpW, vpH, ndcZMin) {\n // Screen direction → NDC direction.\n const nx=dx/(vpW*0.5), ny=-dy/(vpH*0.5);\n const nz=dz/((1-ndcZMin)*0.5);\n // NDC direction → eye direction (inverse projection, linear only).\n const ex=nx/proj[0], ey=ny/proj[5], ez=nz;\n // Eye direction → world direction.\n _applyDir(out, eMatrix, ex, ey, ez);\n return out;\n}\n\nfunction _screenToNDCDir(out, dx, dy, dz, vpW, vpH, ndcZMin) {\n out[0]=dx/(vpW*0.5); out[1]=-dy/(vpH*0.5);\n out[2]=dz/((1-ndcZMin)*0.5);\n return out;\n}\n\nfunction _ndcToScreenDir(out, dx, dy, dz, vpW, vpH, ndcZMin) {\n out[0]=dx*vpW*0.5; out[1]=-dy*vpH*0.5;\n out[2]=dz*(1-ndcZMin)*0.5;\n return out;\n}\n\n/**\n * Map a direction between named coordinate spaces.\n * Same bag contract as mapLocation.\n */\nexport function mapDirection(out, dx, dy, dz, from, to, m, vp, ndcZMin) {\n const vpW = Math.abs(vp[2]), vpH = Math.abs(vp[3]);\n\n // EYE ↔ WORLD (most common)\n if (from === EYE && to === WORLD) return _applyDir(out, m.eMatrix, dx, dy, dz);\n if (from === WORLD && to === EYE) return _applyDir(out, m.vMatrix, dx, dy, dz);\n\n // WORLD ↔ SCREEN\n if (from === WORLD && to === SCREEN)\n return _worldToScreenDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n if (from === SCREEN && to === WORLD)\n return _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n\n // SCREEN ↔ NDC\n if (from === SCREEN && to === NDC)\n return _screenToNDCDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n if (from === NDC && to === SCREEN)\n return _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n\n // WORLD ↔ NDC\n if (from === WORLD && to === NDC) {\n _worldToScreenDir(out, dx,dy,dz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === WORLD) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n }\n\n // EYE ↔ SCREEN\n if (from === EYE && to === SCREEN) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n }\n if (from === SCREEN && to === EYE) {\n _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n\n // EYE ↔ NDC\n if (from === EYE && to === NDC) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === EYE) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n\n // MATRIX ↔ WORLD\n if (from === MATRIX && to === WORLD) return _applyDir(out, m.fromFrame, dx,dy,dz);\n if (from === WORLD && to === MATRIX) return _applyDir(out, m.toFrameInv, dx,dy,dz);\n\n // MATRIX ↔ EYE\n if (from === MATRIX && to === EYE) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.vMatrix, wx,wy,wz);\n }\n if (from === EYE && to === MATRIX) {\n _applyDir(out, m.eMatrix, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ SCREEN\n if (from === MATRIX && to === SCREEN) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n }\n if (from === SCREEN && to === MATRIX) {\n _screenToWorldDir(out, dx,dy,dz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ NDC\n if (from === MATRIX && to === NDC) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n _worldToScreenDir(out, wx,wy,wz, m.pMatrix, m.vMatrix, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n return _screenToNDCDir(out, sx,sy,sz, vpW, vpH, ndcZMin);\n }\n if (from === NDC && to === MATRIX) {\n _ndcToScreenDir(out, dx,dy,dz, vpW, vpH, ndcZMin);\n const sx=out[0],sy=out[1],sz=out[2];\n _screenToWorldDir(out, sx,sy,sz, m.pMatrix, m.eMatrix, vpW, vpH, ndcZMin);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // MATRIX ↔ MATRIX\n if (from === MATRIX && to === MATRIX) {\n _applyDir(out, m.fromFrame, dx,dy,dz);\n const wx=out[0],wy=out[1],wz=out[2];\n return _applyDir(out, m.toFrameInv, wx,wy,wz);\n }\n\n // Fallback\n out[0]=dx; out[1]=dy; out[2]=dz;\n return out;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// pixelRatio\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * World-units-per-pixel at a given eye-space Z depth.\n * @param {ArrayLike<number>} proj Projection mat4.\n * @param {number} vpH Viewport height (pixels).\n * @param {number} eyeZ Eye-space Z (negative for in-front-of camera).\n * @param {number} ndcZMin WEBGL or WEBGPU.\n */\nexport function pixelRatio(proj, vpH, eyeZ, ndcZMin) {\n if (projIsOrtho(proj)) {\n return Math.abs(projTop(proj, ndcZMin) - projBottom(proj, ndcZMin)) / vpH;\n }\n return 2 * Math.abs(eyeZ) * Math.tan(projFov(proj) / 2) / vpH;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Pick-matrix\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Apply the pick-matrix in-place: proj ← M_pick · proj\n *\n * Zooms the frustum so that pixel (px, py) maps to the full NDC square,\n * making a 1×1 framebuffer render contain exactly that pixel's content.\n * Convention-independent — correct for both perspective and orthographic.\n *\n * M_pick (column-major):\n * [ sx 0 0 tx ] sx = W, sy = H\n * [ 0 sy 0 ty ] cx = NDC X of pixel centre = 2*(px+0.5)/W − 1\n * [ 0 0 1 0 ] cy = NDC Y of pixel centre = 1 − 2*(py+0.5)/H\n * [ 0 0 0 1 ] tx = −cx·W, ty = −cy·H\n *\n * @param {Float32Array} proj Projection mat4 — mutated in place.\n * @param {number} px Query X (CSS pixels).\n * @param {number} py Query Y (CSS pixels).\n * @param {number} W Canvas width (CSS pixels).\n * @param {number} H Canvas height (CSS pixels).\n * @returns {Float32Array} proj (same reference)\n */\nexport function mat4Pick(proj, px, py, W, H) {\n const cx = 2 * (px + 0.5) / W - 1;\n const cy = -2 * (py + 0.5) / H + 1;\n const sx = W;\n const sy = H;\n const tx = -cx * W;\n const ty = -cy * H;\n for (let j = 0; j < 4; j++) {\n const a = proj[j * 4];\n const b = proj[j * 4 + 1];\n const d = proj[j * 4 + 3];\n proj[j * 4] = sx * a + tx * d;\n proj[j * 4 + 1] = sy * b + ty * d;\n }\n return proj;\n}\n","/**\n * @file Spline math and keyframe animation state machines.\n * @module tree/track\n * @license AGPL-3.0-only\n *\n * Quaternion algebra is provided by quat.js — this module imports and uses\n * it but does not define it. Spline helpers (hermiteVec3, lerpVec3) and\n * TRS↔mat4 conversions (transformToMat4, mat4ToTransform) remain here\n * because they are tightly coupled to the PoseTrack keyframe shape.\n *\n * Zero dependencies on p5, DOM, WebGL, or WebGPU.\n *\n * ── Exports ──────────────────────────────────────────────────────────────────\n * Quaternion helpers (re-exported from quat.js)\n * qSet qCopy qDot qNormalize qNegate qMul qSlerp qNlerp\n * qFromAxisAngle qFromLookDir qFromRotMat3x3 qFromMat4 qToMat4\n * quatToAxisAngle\n * Spline / vector helpers\n * hermiteVec3 lerpVec3\n * Transform / mat4 helpers\n * transformToMat4 mat4ToTransform\n * Tracks\n * PoseTrack — { pos, rot, scl } TRS keyframes\n * CameraTrack — { eye, center, up } lookat keyframes\n *\n * ── Class hierarchy ───────────────────────────────────────────────────────────\n * Track (unexported, never instantiated directly)\n * └── PoseTrack (exported)\n * └── CameraTrack (exported)\n *\n * Track holds all transport machinery: cursor, play/stop/seek/tick,\n * hooks, rate semantics. Subclasses add only keyframe storage and\n * add() / eval() for their respective data shape.\n *\n * ── Hook architecture ─────────────────────────────────────────────────────────\n * Lib-space hooks (underscore prefix — reserved for host layer / UI layer):\n * _onActivate / _onDeactivate — fire on playing transitions false→true / true→false.\n * _onPlay / _onEnd / _onStop — mirror the user-space hooks; used by the UI layer\n * so it can sync without chaining the public slots.\n *\n * User-space hooks (public):\n * onPlay : fires in play() on false→true transition.\n * onEnd : fires in tick() at natural boundary (once mode only).\n * onStop : fires in stop() / reset() — explicit deactivation.\n * onEnd and onStop are mutually exclusive per event.\n *\n * Firing order:\n * play() → onPlay → _onPlay → _onActivate\n * tick() → onEnd → _onEnd → _onDeactivate\n * stop() → onStop → _onStop → _onDeactivate\n * reset() → onStop → _onStop → _onDeactivate\n *\n * ── Loop modes ────────────────────────────────────────────────────────────────\n * loop:false, bounce:false — play once, stop at end (fires onEnd)\n * loop:true, bounce:false — repeat, wrap back to start\n * loop:true, bounce:true — bounce forever at boundaries\n * loop:false, bounce:true — bounce once: flip at far boundary, stop at origin\n *\n * bounce and loop are fully independent flags — no exclusivity enforced.\n *\n * ── Playback semantics (rate + _dir) ─────────────────────────────────────────\n * rate > 0 forward\n * rate < 0 backward\n * rate === 0 frozen: tick() no-op; playing unchanged\n *\n * play() is the sole setter of playing = true.\n * stop() is the sole setter of playing = false.\n * Assigning rate never starts or stops playback.\n *\n * _dir (internal, ±1) tracks the current bounce travel direction.\n * tick() advances by rate * _dir and flips _dir at boundaries.\n * rate always holds the user-set value — it is never mutated by bounce.\n * _dir is reset to 1 only in reset() (keyframes cleared) — stop/replay\n * preserves the current travel direction.\n *\n * ── One-keyframe behaviour ────────────────────────────────────────────────────\n * play() with exactly one keyframe snaps eval() to that keyframe without\n * setting playing = true and without firing hooks.\n */\n\n'use strict';\n\nexport {\n qSet, qCopy, qDot, qNormalize, qNegate, qMul,\n qSlerp, qNlerp,\n qFromAxisAngle, qFromLookDir, qFromRotMat3x3, qFromMat4,\n quatToAxisAngle,\n} from './quat.js';\n\nimport {\n qSlerp, qNlerp, qMul, qFromAxisAngle, qFromLookDir, qFromRotMat3x3, qToMat4,\n} from './quat.js';\n\n// =========================================================================\n// S2 Spline / vector helpers\n// =========================================================================\n\nfunction _dist3(a, b) {\n const dx=a[0]-b[0], dy=a[1]-b[1], dz=a[2]-b[2];\n return Math.sqrt(dx*dx+dy*dy+dz*dz);\n}\n\n/**\n * Cubic Hermite interpolation between p0 and p1 with explicit tangents.\n * Catmull-Rom is a special case where m0/m1 are auto-computed from neighbors.\n * @param {number[]} out 3-element result.\n * @param {number[]} p0 Segment start.\n * @param {number[]} m0 Outgoing tangent at p0 (world-space, dp/dt scaled to segment).\n * @param {number[]} p1 Segment end.\n * @param {number[]} m1 Incoming tangent at p1 (world-space, dp/dt scaled to segment).\n * @param {number} t Blend [0, 1].\n * @returns {number[]} out\n */\nexport const hermiteVec3 = (out, p0, m0, p1, m1, t) => {\n const t2=t*t, t3=t2*t;\n const h00=2*t3-3*t2+1, h10=t3-2*t2+t, h01=-2*t3+3*t2, h11=t3-t2;\n out[0]=h00*p0[0]+h10*m0[0]+h01*p1[0]+h11*m1[0];\n out[1]=h00*p0[1]+h10*m0[1]+h01*p1[1]+h11*m1[1];\n out[2]=h00*p0[2]+h10*m0[2]+h01*p1[2]+h11*m1[2];\n return out;\n};\n\n// Centripetal CR outgoing tangent at p1 for segment p1→p2, scaled by dt1.\nconst _crTanOut = (out, p0, p1, p2, p3) => {\n const dt0=Math.pow(_dist3(p0,p1),0.5)||1, dt1=Math.pow(_dist3(p1,p2),0.5)||1;\n for (let i=0;i<3;i++) out[i]=((p1[i]-p0[i])/dt0-(p2[i]-p0[i])/(dt0+dt1)+(p2[i]-p1[i])/dt1)*dt1;\n return out;\n};\n\nconst _crTanIn = (out, p0, p1, p2, p3) => {\n const dt1=Math.pow(_dist3(p1,p2),0.5)||1, dt2=Math.pow(_dist3(p2,p3),0.5)||1;\n for (let i=0;i<3;i++) out[i]=((p2[i]-p1[i])/dt1-(p3[i]-p1[i])/(dt1+dt2)+(p3[i]-p2[i])/dt2)*dt1;\n return out;\n};\n\n// Module-level scratch — shared by eval() across all track instances (non-reentrant hot path).\nconst _m0=[0,0,0], _m1=[0,0,0];\n\n/**\n * Linear interpolation between two vec3s.\n * @param {number[]} out\n * @param {number[]} a\n * @param {number[]} b\n * @param {number} t Blend [0, 1].\n * @returns {number[]} out\n */\nexport const lerpVec3 = (out, a, b, t) => {\n out[0]=a[0]+t*(b[0]-a[0]);\n out[1]=a[1]+t*(b[1]-a[1]);\n out[2]=a[2]+t*(b[2]-a[2]);\n return out;\n};\n\n// =========================================================================\n// S3 Transform <-> Mat4\n// =========================================================================\n\n/**\n * Write a TRS transform into a column-major mat4.\n * @param {Float32Array|number[]} out 16-element column-major mat4.\n * @param {{ pos:number[], rot:number[], scl:number[] }} xform\n * @returns {Float32Array|number[]} out\n */\nexport const transformToMat4 = (out, xform) => {\n qToMat4(out, xform.rot);\n const sx=xform.scl[0], sy=xform.scl[1], sz=xform.scl[2];\n out[0]*=sx; out[1]*=sx; out[2]*=sx;\n out[4]*=sy; out[5]*=sy; out[6]*=sy;\n out[8]*=sz; out[9]*=sz; out[10]*=sz;\n out[12]=xform.pos[0]; out[13]=xform.pos[1]; out[14]=xform.pos[2];\n return out;\n};\n\n/**\n * Decompose a column-major mat4 into a TRS transform.\n * Assumes no shear. Scale extracted from column lengths.\n * @param {{ pos:number[], rot:number[], scl:number[] }} out\n * @param {Float32Array|number[]} m Column-major mat4.\n * @returns {{ pos:number[], rot:number[], scl:number[] }} out\n */\nexport const mat4ToTransform = (out, m) => {\n out.pos[0]=m[12]; out.pos[1]=m[13]; out.pos[2]=m[14];\n const sx=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);\n const sy=Math.sqrt(m[4]*m[4]+m[5]*m[5]+m[6]*m[6]);\n const sz=Math.sqrt(m[8]*m[8]+m[9]*m[9]+m[10]*m[10]);\n out.scl[0]=sx; out.scl[1]=sy; out.scl[2]=sz;\n qFromRotMat3x3(out.rot,\n m[0]/sx,m[4]/sy,m[8]/sz,\n m[1]/sx,m[5]/sy,m[9]/sz,\n m[2]/sx,m[6]/sy,m[10]/sz);\n return out;\n};\n\n// =========================================================================\n// S4a Spec parser — PoseTrack\n// =========================================================================\n\nconst _isNum = (x) => typeof x === 'number' && Number.isFinite(x);\nconst _clamp01 = (x) => x < 0 ? 0 : (x > 1 ? 1 : x);\nconst _clampS = (x, lo, hi) => x < lo ? lo : (x > hi ? hi : x);\n\nfunction _parseVec3(v) {\n if (!v) return null;\n if (ArrayBuffer.isView(v) && v.length >= 3) return [v[0], v[1], v[2]];\n if (Array.isArray(v) && v.length >= 3 && v.every(n => typeof n === 'number')) return [v[0], v[1], v[2]];\n if (typeof v === 'object' && 'x' in v) return [v.x || 0, v.y || 0, v.z || 0];\n return null;\n}\n\n// Euler: unit axis vectors and the six valid intrinsic orderings.\nconst _EULER_AXES = { X:[1,0,0], Y:[0,1,0], Z:[0,0,1] };\nconst _EULER_ORDERS = new Set(['XYZ','XZY','YXZ','YZX','ZXY','ZYX']);\n\n/**\n * Parse any rotation representation into a unit quaternion [x,y,z,w].\n *\n * Accepted forms:\n *\n * [x,y,z,w] — raw quaternion array\n * { axis:[x,y,z], angle } — axis-angle\n * { dir:[x,y,z], up?:[x,y,z] } — forward direction (−Z) with optional up\n * { eMatrix: mat4 } — rotation block of an eye matrix\n * { mat3: mat3 } — column-major 3×3 rotation matrix\n * { euler:[rx,ry,rz], order? } — intrinsic Euler (default order: YXZ)\n * { from:[x,y,z], to:[x,y,z] } — shortest-arc rotation\n *\n * @param {*} v\n * @returns {number[]|null} [x,y,z,w] or null if unparseable.\n */\nfunction _parseQuat(v) {\n if (!v) return null;\n\n // Raw array [x,y,z,w]\n if (Array.isArray(v) && v.length === 4) return [v[0],v[1],v[2],v[3]];\n if (ArrayBuffer.isView(v) && v.length >= 4) return [v[0],v[1],v[2],v[3]];\n\n if (typeof v !== 'object') return null;\n\n // { axis, angle }\n if (v.axis != null && v.angle != null) {\n const ax = Array.isArray(v.axis) ? v.axis : [v.axis.x||0, v.axis.y||0, v.axis.z||0];\n return qFromAxisAngle([0,0,0,1], ax[0],ax[1],ax[2], v.angle);\n }\n\n // { dir, up? }\n if (v.dir != null) {\n const d = Array.isArray(v.dir) ? v.dir : [v.dir.x||0, v.dir.y||0, v.dir.z||0];\n const u = v.up ? (Array.isArray(v.up) ? v.up : [v.up.x||0, v.up.y||0, v.up.z||0]) : null;\n return qFromLookDir([0,0,0,1], d, u);\n }\n\n // { eMatrix }\n if (v.eMatrix != null) {\n const m = (ArrayBuffer.isView(v.eMatrix) || Array.isArray(v.eMatrix))\n ? v.eMatrix : (v.eMatrix.mat4 ?? null);\n if (!m || m.length < 16) return null;\n return qFromRotMat3x3([0,0,0,1], m[0],m[4],m[8], m[1],m[5],m[9], m[2],m[6],m[10]);\n }\n\n // { mat3 }\n if (v.mat3 != null) {\n const m = (ArrayBuffer.isView(v.mat3) || Array.isArray(v.mat3))\n ? v.mat3 : null;\n if (!m || m.length < 9) return null;\n return qFromRotMat3x3([0,0,0,1], m[0],m[3],m[6], m[1],m[4],m[7], m[2],m[5],m[8]);\n }\n\n // { euler, order? }\n if (v.euler != null) {\n const e = v.euler;\n if (!Array.isArray(e) || e.length < 3) return null;\n const order = (v.order && _EULER_ORDERS.has(v.order)) ? v.order : 'YXZ';\n const q = [0,0,0,1];\n const s = [0,0,0,1];\n for (let i = 0; i < 3; i++) {\n const ax = _EULER_AXES[order[i]];\n qMul(q, q, qFromAxisAngle(s, ax[0],ax[1],ax[2], e[i]));\n }\n return q;\n }\n\n // { from, to }\n if (v.from != null && v.to != null) {\n const f = Array.isArray(v.from) ? v.from : [v.from.x||0, v.from.y||0, v.from.z||0];\n const t = Array.isArray(v.to) ? v.to : [v.to.x||0, v.to.y||0, v.to.z||0];\n const fl = Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]) || 1;\n const tl = Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]) || 1;\n const fx=f[0]/fl, fy=f[1]/fl, fz=f[2]/fl;\n const tx=t[0]/tl, ty=t[1]/tl, tz=t[2]/tl;\n const dot = fx*tx + fy*ty + fz*tz;\n if (dot >= 1 - 1e-8) return [0,0,0,1];\n if (dot <= -1 + 1e-8) {\n let px=0, py=fz, pz=-fy;\n let pl = Math.sqrt(px*px+py*py+pz*pz);\n if (pl < 1e-8) { px=fy; py=-fx; pz=0; pl = Math.sqrt(px*px+py*py+pz*pz); }\n if (pl < 1e-8) return [0,0,0,1];\n return qFromAxisAngle([0,0,0,1], px/pl,py/pl,pz/pl, Math.PI);\n }\n let ax=fy*tz-fz*ty, ay=fz*tx-fx*tz, az=fx*ty-fy*tx;\n const al = Math.sqrt(ax*ax+ay*ay+az*az) || 1;\n return qFromAxisAngle([0,0,0,1], ax/al,ay/al,az/al,\n Math.acos(Math.max(-1, Math.min(1, dot))));\n }\n\n return null;\n}\n\n/**\n * Parse a PoseTrack keyframe spec.\n *\n * Accepted forms:\n *\n * { mMatrix }\n * Decompose a column-major mat4 into TRS via mat4ToTransform.\n * Float32Array(16), plain Array, or { mat4 } wrapper.\n *\n * { pos?, rot?, scl?, tanIn?, tanOut? }\n * Explicit TRS. pos and scl are vec3, rot accepts any form from _parseQuat.\n * All fields are optional — missing pos/scl default to [0,0,0] / [1,1,1],\n * missing rot defaults to identity.\n * tanIn/tanOut are optional vec3 tangents for Hermite interpolation.\n *\n * @param {Object} spec\n * @returns {{ pos:number[], rot:number[], scl:number[], tanIn:number[]|null, tanOut:number[]|null }|null}\n */\nfunction _parseSpec(spec) {\n if (!spec || typeof spec !== 'object') return null;\n\n // { mMatrix } — full TRS decomposition from model matrix\n if (spec.mMatrix != null) {\n const m = (ArrayBuffer.isView(spec.mMatrix) || Array.isArray(spec.mMatrix))\n ? spec.mMatrix : (spec.mMatrix.mat4 ?? null);\n if (!m || m.length < 16) return null;\n const kf = mat4ToTransform({ pos:[0,0,0], rot:[0,0,0,1], scl:[1,1,1] }, m);\n kf.tanIn = null; kf.tanOut = null;\n return kf;\n }\n\n const pos = _parseVec3(spec.pos) || [0,0,0];\n const rot = _parseQuat(spec.rot) || [0,0,0,1];\n const scl = _parseVec3(spec.scl) || [1,1,1];\n const tanIn = _parseVec3(spec.tanIn) || null;\n const tanOut = _parseVec3(spec.tanOut) || null;\n return { pos, rot, scl, tanIn, tanOut };\n}\n\nfunction _sameTransform(a, b) {\n for (let i=0;i<3;i++) if (a.pos[i]!==b.pos[i]||a.scl[i]!==b.scl[i]) return false;\n for (let i=0;i<4;i++) if (a.rot[i]!==b.rot[i]) return false;\n return true;\n}\n\n// =========================================================================\n// S4b Spec parser — CameraTrack\n// =========================================================================\n\n/**\n * Parse a camera keyframe spec into internal { eye, center, up } form.\n *\n * Accepted forms:\n *\n * { eye, center?, up?, fov?, halfHeight?,\n * eyeTanIn?, eyeTanOut?, centerTanIn?, centerTanOut? }\n * Explicit lookat. center defaults to [0,0,0], up defaults to [0,1,0].\n * eyeTanIn/Out and centerTanIn/Out are optional vec3 tangents for Hermite.\n * When absent, centripetal Catmull-Rom tangents are auto-computed at eval time.\n *\n * Removed forms (task 2):\n * { vMatrix } and { eMatrix } — use PoseTrack.add({ mMatrix: eMatrix }) for\n * full-fidelity capture including roll, or cam.capturePose() for lookat-style.\n *\n * @param {Object} spec\n * @returns {{ eye:number[], center:number[], up:number[],\n * fov:number|null, halfHeight:number|null,\n * eyeTanIn:number[]|null, eyeTanOut:number[]|null,\n * centerTanIn:number[]|null, centerTanOut:number[]|null }|null}\n */\nfunction _parseCameraSpec(spec) {\n if (!spec || typeof spec !== 'object') return null;\n\n // { eye, center?, up? } — explicit lookat\n const eye = _parseVec3(spec.eye);\n if (!eye) return null;\n const center = _parseVec3(spec.center) || [0,0,0];\n const upRaw = spec.up ? _parseVec3(spec.up) : null;\n const up = upRaw || [0,1,0];\n const ul = Math.sqrt(up[0]*up[0]+up[1]*up[1]+up[2]*up[2]) || 1;\n return {\n eye, center,\n up: [up[0]/ul, up[1]/ul, up[2]/ul],\n fov: typeof spec.fov === 'number' ? spec.fov : null,\n halfHeight: typeof spec.halfHeight === 'number' ? spec.halfHeight : null,\n eyeTanIn: _parseVec3(spec.eyeTanIn) || null,\n eyeTanOut: _parseVec3(spec.eyeTanOut) || null,\n centerTanIn: _parseVec3(spec.centerTanIn) || null,\n centerTanOut:_parseVec3(spec.centerTanOut)|| null,\n };\n}\n\nfunction _sameCameraKeyframe(a, b) {\n for (let i=0;i<3;i++) {\n if (a.eye[i]!==b.eye[i]) return false;\n if (a.center[i]!==b.center[i]) return false;\n if (a.up[i]!==b.up[i]) return false;\n }\n if (a.fov !== b.fov) return false;\n if (a.halfHeight !== b.halfHeight) return false;\n return true;\n}\n\n// =========================================================================\n// S5 Track — unexported base class (transport machinery only)\n// =========================================================================\n\nclass Track {\n constructor() {\n /** @type {Array} Keyframe array — shape depends on subclass. */\n this.keyframes = [];\n /** Whether playback is active. @type {boolean} */\n this.playing = false;\n /** Loop at boundaries. @type {boolean} */\n this.loop = false;\n /** Ping-pong bounce (takes precedence over loop). @type {boolean} */\n this.bounce = false;\n /** Frames per segment (≥1). @type {number} */\n this.duration = 30;\n /** Current segment index. @type {number} */\n this.seg = 0;\n /** Frame offset within segment (can be fractional). @type {number} */\n this.f = 0;\n\n // Internal rate — never directly starts/stops playback\n this._rate = 1;\n // Internal bounce direction: +1 forward, -1 backward.\n this._dir = 1;\n // Scratch: true once _dir has been flipped in bounce-once mode.\n this._bounced = false;\n\n // User-space hooks\n /** @type {Function|null} */ this.onPlay = null;\n /** @type {Function|null} */ this.onEnd = null;\n /** @type {Function|null} */ this.onStop = null;\n\n // Lib-space hooks (set by host layer, e.g. p5 bridge)\n /** @type {Function|null} */ this._onActivate = null;\n /** @type {Function|null} */ this._onDeactivate = null;\n // Lib-space event mirrors — set by UI layer (trackUI), never touched by user code\n /** @type {Function|null} */ this._onPlay = null;\n /** @type {Function|null} */ this._onEnd = null;\n /** @type {Function|null} */ this._onStop = null;\n }\n\n /** Playback rate. Assigning never starts/stops playback. @type {number} */\n get rate() { return this._rate; }\n set rate(v) { this._rate = (_isNum(v)) ? v : 1; }\n\n /** Number of interpolatable segments (keyframes.length − 1, min 0). @type {number} */\n get segments() { return Math.max(0, this.keyframes.length - 1); }\n\n /**\n * Start or update playback.\n * @param {number|Object} [rateOrOpts] Numeric rate or options object:\n * { rate, duration, loop, bounce, onPlay, onEnd, onStop }\n * @returns {Track} this\n */\n play(rateOrOpts) {\n if (this.keyframes.length === 0) return this;\n\n // One keyframe: snap cursor, no animation\n if (this.keyframes.length === 1) {\n this.seg = 0; this.f = 0;\n return this;\n }\n\n if (typeof rateOrOpts === 'number' && Number.isFinite(rateOrOpts)) {\n this._rate = rateOrOpts;\n } else if (rateOrOpts && typeof rateOrOpts === 'object') {\n const o = rateOrOpts;\n if (_isNum(o.duration)) this.duration = Math.max(1, o.duration | 0);\n if ('loop' in o) this.loop = !!o.loop;\n if ('bounce' in o) this.bounce = !!o.bounce;\n if (typeof o.onPlay === 'function') this.onPlay = o.onPlay;\n if (typeof o.onEnd === 'function') this.onEnd = o.onEnd;\n if (typeof o.onStop === 'function') this.onStop = o.onStop;\n if (_isNum(o.rate)) this._rate = o.rate;\n }\n\n const nSeg = this.segments, dur = Math.max(1, this.duration | 0);\n if (this.seg < 0) this.seg = 0;\n if (this.seg >= nSeg) this.seg = nSeg - 1;\n if (this.f < 0) this.f = 0;\n if (this.f > dur) this.f = dur;\n\n const wasPlaying = this.playing;\n this.playing = true;\n if (!wasPlaying) {\n this._bounced = false;\n if (typeof this.onPlay === 'function') { try { this.onPlay(this); } catch (_) {} }\n this._onPlay?.();\n this._onActivate?.();\n }\n return this;\n }\n\n /**\n * Stop playback.\n * @param {boolean} [rewind=false] Seek to origin after stopping.\n * @returns {Track} this\n */\n stop(rewind) {\n const wasPlaying = this.playing;\n this.playing = false;\n if (wasPlaying) {\n this._bounced = false;\n if (typeof this.onStop === 'function') { try { this.onStop(this); } catch (_) {} }\n this._onStop?.();\n this._onDeactivate?.();\n if (rewind && this.keyframes.length > 1) this.seek(this._rate * this._dir < 0 ? 1 : 0);\n }\n return this;\n }\n\n /**\n * Clear all keyframes and stop.\n * @returns {Track} this\n */\n reset() {\n const wasPlaying = this.playing;\n this.playing = false;\n if (wasPlaying) {\n if (typeof this.onStop === 'function') { try { this.onStop(this); } catch (_) {} }\n this._onStop?.();\n this._onDeactivate?.();\n }\n this.keyframes.length = 0;\n this.seg = 0; this.f = 0; this._dir = 1; this._bounced = false;\n return this;\n }\n\n /**\n * Remove the keyframe at index. Adjusts cursor if needed.\n * @param {number} index\n * @returns {boolean}\n */\n remove(index) {\n if (!_isNum(index)) return false;\n const i = index | 0;\n if (i < 0 || i >= this.keyframes.length) return false;\n this.keyframes.splice(i, 1);\n const nSeg = this.segments;\n if (nSeg === 0) { this.seg = 0; this.f = 0; }\n else if (this.seg >= nSeg) { this.seg = nSeg - 1; }\n return true;\n }\n\n /**\n * Seek to a normalised position [0,1] across the full path.\n * @param {number} t Normalised time [0, 1].\n * @param {number} [segIndex] Optional segment override.\n * @returns {Track} this\n */\n seek(t, segIndex) {\n const nSeg = this.segments;\n if (nSeg === 0) { this.seg = 0; this.f = 0; return this; }\n const dur = Math.max(1, this.duration | 0);\n if (_isNum(segIndex)) {\n this.seg = _clampS(segIndex | 0, 0, nSeg - 1);\n this.f = _clamp01(t) * dur;\n } else {\n this._setCursorFromScalar(_clamp01(t) * nSeg * dur);\n }\n return this;\n }\n\n /**\n * Normalised playback position [0,1].\n * @returns {number}\n */\n time() {\n const nSeg = this.segments;\n if (nSeg === 0) return 0;\n const dur = Math.max(1, this.duration | 0);\n return _clamp01((this.seg * dur + this.f) / (nSeg * dur));\n }\n\n /**\n * Snapshot of transport state.\n * @returns {Object}\n */\n info() {\n return {\n keyframes: this.keyframes.length,\n segments: this.segments,\n seg: this.seg,\n f: this.f,\n playing: this.playing,\n loop: this.loop,\n bounce: this.bounce,\n rate: this._rate,\n duration: this.duration,\n time: this.segments > 0 ? this.time() : 0\n };\n }\n\n /**\n * Advance cursor by rate frames.\n * Returns true while playing, false when stopping.\n * @returns {boolean}\n */\n tick() {\n if (!this.playing) return false;\n const nSeg = this.segments;\n if (nSeg === 0) {\n this.playing = false; this._onDeactivate?.(); return false;\n }\n if (this._rate === 0) return true;\n\n const dur = Math.max(1, this.duration | 0);\n const total = nSeg * dur;\n const s = _clampS(this.seg * dur + this.f, 0, total);\n const next = s + this._rate * this._dir;\n\n // ── loop:true, bounce:true — bounce forever ───────────────────────────\n if (this.loop && this.bounce) {\n let pos = next, flips = 0;\n while (pos < 0 || pos > total) {\n if (pos < 0) { pos = -pos; flips++; }\n else { pos = 2 * total - pos; flips++; }\n }\n if (flips & 1) this._dir = -this._dir;\n this._setCursorFromScalar(pos);\n return true;\n }\n\n // ── loop:false, bounce:true — bounce once, stop at origin ────────────\n if (!this.loop && this.bounce) {\n if (next >= total) {\n // far boundary: reflect and flip direction once\n this._setCursorFromScalar(Math.min(total, 2 * total - next));\n this._dir = -this._dir;\n this._bounced = true;\n return true;\n }\n if (next <= 0) {\n // origin: stop (whether we bounced or started backward)\n this._setCursorFromScalar(0);\n this.playing = false;\n this._dir = 1; this._bounced = false;\n if (typeof this.onEnd === 'function') { try { this.onEnd(this); } catch (_) {} }\n this._onEnd?.();\n this._onDeactivate?.();\n return false;\n }\n this._setCursorFromScalar(next);\n return true;\n }\n\n // ── loop:true, bounce:false — repeat forever ──────────────────────────\n if (this.loop) {\n this._setCursorFromScalar(((next % total) + total) % total);\n return true;\n }\n\n // ── loop:false, bounce:false — play once, stop at boundary ───────────\n if (next <= 0) {\n this._setCursorFromScalar(0);\n this.playing = false;\n if (typeof this.onEnd === 'function') { try { this.onEnd(this); } catch (_) {} }\n this._onEnd?.();\n this._onDeactivate?.();\n return false;\n }\n if (next >= total) {\n this._setCursorFromScalar(total);\n this.playing = false;\n if (typeof this.onEnd === 'function') { try { this.onEnd(this); } catch (_) {} }\n this._onEnd?.();\n this._onDeactivate?.();\n return false;\n }\n\n this._setCursorFromScalar(next);\n return true;\n }\n\n /** @private */\n _setCursorFromScalar(s) {\n const dur = Math.max(1, this.duration | 0);\n const nSeg = this.segments;\n this.seg = Math.floor(s / dur);\n this.f = s - this.seg * dur;\n if (this.seg >= nSeg) { this.seg = nSeg - 1; this.f = dur; }\n if (this.seg < 0) { this.seg = 0; this.f = 0; }\n }\n}\n\n// =========================================================================\n// S6 PoseTrack\n// =========================================================================\n\n/**\n * Renderer-agnostic TRS keyframe track.\n *\n * Keyframe shape: { pos:[x,y,z], rot:[x,y,z,w], scl:[x,y,z],\n * tanIn?:[x,y,z], tanOut?:[x,y,z] }\n *\n * tanIn — incoming position tangent at this keyframe (Hermite mode).\n * tanOut — outgoing position tangent at this keyframe (Hermite mode).\n * When only one is supplied, the other mirrors it.\n * When neither is supplied, centripetal Catmull-Rom tangents are auto-computed.\n */\nexport class PoseTrack extends Track {\n constructor() {\n super();\n /**\n * Position interpolation mode.\n * - 'hermite' — cubic Hermite; auto-computes centripetal Catmull-Rom tangents\n * when none are stored (default)\n * - 'linear' — lerp\n * - 'step' — snap to k0; useful for discrete state changes\n * @type {'hermite'|'linear'|'step'}\n */\n this.posInterp = 'hermite';\n /**\n * Rotation interpolation mode.\n * - 'slerp' — constant angular velocity (default)\n * - 'nlerp' — normalised lerp; cheaper, slightly non-constant speed\n * - 'step' — snap to k0 quaternion; useful for discrete state changes\n * @type {'slerp'|'nlerp'|'step'}\n */\n this.rotInterp = 'slerp';\n // Scratch for toMatrix() — avoids hot-path allocations\n this._pos = [0,0,0];\n this._rot = [0,0,0,1];\n this._scl = [1,1,1];\n }\n\n /**\n * Append one or more keyframes. Adjacent duplicates are skipped by default.\n * @param {Object|Object[]} spec\n * @param {{ deduplicate?: boolean }} [opts]\n */\n add(spec, opts) {\n if (Array.isArray(spec)) {\n for (const s of spec) this.add(s, opts);\n return;\n }\n const kf = _parseSpec(spec);\n if (!kf) return;\n const dedup = !opts || opts.deduplicate !== false;\n if (dedup && this.keyframes.length > 0) {\n if (_sameTransform(this.keyframes[this.keyframes.length - 1], kf)) return;\n }\n this.keyframes.push(kf);\n }\n\n /**\n * Replace (or append at end) the keyframe at index.\n * @param {number} index\n * @param {Object} spec\n * @returns {boolean}\n */\n set(index, spec) {\n if (!_isNum(index)) return false;\n const i = index | 0, kf = _parseSpec(spec);\n if (!kf || i < 0 || i > this.keyframes.length) return false;\n if (i === this.keyframes.length) this.keyframes.push(kf);\n else this.keyframes[i] = kf;\n return true;\n }\n\n /**\n * Evaluate interpolated TRS pose at current cursor.\n * @param {{ pos:number[], rot:number[], scl:number[] }} [out]\n * @returns {{ pos:number[], rot:number[], scl:number[] }} out\n */\n eval(out) {\n out = out || { pos:[0,0,0], rot:[0,0,0,1], scl:[1,1,1] };\n const n = this.keyframes.length;\n if (n === 0) return out;\n\n if (n === 1) {\n const k = this.keyframes[0];\n out.pos[0]=k.pos[0]; out.pos[1]=k.pos[1]; out.pos[2]=k.pos[2];\n out.rot[0]=k.rot[0]; out.rot[1]=k.rot[1]; out.rot[2]=k.rot[2]; out.rot[3]=k.rot[3];\n out.scl[0]=k.scl[0]; out.scl[1]=k.scl[1]; out.scl[2]=k.scl[2];\n return out;\n }\n\n const nSeg = n - 1;\n const dur = Math.max(1, this.duration | 0);\n const seg = _clampS(this.seg, 0, nSeg - 1);\n const t = _clamp01(this.f / dur);\n const k0 = this.keyframes[seg];\n const k1 = this.keyframes[seg + 1];\n\n // pos — Hermite (auto-CR tangents when none stored), linear, or step\n if (this.posInterp === 'step') {\n out.pos[0]=k0.pos[0]; out.pos[1]=k0.pos[1]; out.pos[2]=k0.pos[2];\n } else if (this.posInterp === 'linear') {\n lerpVec3(out.pos, k0.pos, k1.pos, t);\n } else {\n const p0 = seg > 0 ? this.keyframes[seg - 1].pos : k0.pos;\n const p3 = seg + 2 < n ? this.keyframes[seg + 2].pos : k1.pos;\n const m0 = k0.tanOut != null ? k0.tanOut\n : k0.tanIn != null ? k0.tanIn\n : _crTanOut(_m0, p0, k0.pos, k1.pos, p3);\n const m1 = k1.tanIn != null ? k1.tanIn\n : k1.tanOut != null ? k1.tanOut\n : _crTanIn(_m1, p0, k0.pos, k1.pos, p3);\n hermiteVec3(out.pos, k0.pos, m0, k1.pos, m1, t);\n }\n\n // rot — step, slerp, or nlerp\n if (this.rotInterp === 'step') {\n out.rot[0]=k0.rot[0]; out.rot[1]=k0.rot[1]; out.rot[2]=k0.rot[2]; out.rot[3]=k0.rot[3];\n } else if (this.rotInterp === 'nlerp') {\n qNlerp(out.rot, k0.rot, k1.rot, t);\n } else {\n qSlerp(out.rot, k0.rot, k1.rot, t);\n }\n\n // scl — lerp\n lerpVec3(out.scl, k0.scl, k1.scl, t);\n\n return out;\n }\n\n /**\n * Evaluate into an existing column-major mat4.\n * @param {Float32Array|number[]} outMat4 16-element array.\n * @returns {Float32Array|number[]} outMat4\n */\n toMatrix(outMat4) {\n const xf = this.eval({ pos: this._pos, rot: this._rot, scl: this._scl });\n return transformToMat4(outMat4, xf);\n }\n}\n\n// =========================================================================\n// S7 CameraTrack\n// =========================================================================\n\n/**\n * Lookat camera keyframe track.\n *\n * Keyframe shape: { eye:[x,y,z], center:[x,y,z], up:[x,y,z],\n * fov?:number, halfHeight?:number,\n * eyeTanIn?:[x,y,z], eyeTanOut?:[x,y,z],\n * centerTanIn?:[x,y,z], centerTanOut?:[x,y,z] }\n *\n * fov — vertical fov (radians) for perspective cameras; null for ortho.\n * halfHeight — world-unit half-height of ortho frustum; null for perspective.\n * Both are optional and nullable. eval() lerps each only when both adjacent\n * keyframes carry a non-null value for that field.\n *\n * eyeTanIn/Out and centerTanIn/Out are optional vec3 tangents for Hermite\n * interpolation of the eye and center paths respectively.\n * When absent, centripetal Catmull-Rom tangents are auto-computed at eval time.\n *\n * Missing fields default to: center → [0,0,0], up → [0,1,0].\n *\n * add() accepts individual specs or a bulk array of specs:\n *\n * { eye, center?, up?, fov?, halfHeight?,\n * eyeTanIn?, eyeTanOut?, centerTanIn?, centerTanOut? }\n *\n * To capture a matrix-based pose, use PoseTrack.add({ mMatrix: eMatrix })\n * for full-fidelity including roll, or cam.capturePose() for lookat-style.\n */\nexport class CameraTrack extends Track {\n constructor() {\n super();\n /**\n * Eye-path interpolation mode.\n * @type {'hermite'|'linear'|'step'}\n */\n this.eyeInterp = 'hermite';\n /**\n * Center-path interpolation mode.\n * @type {'hermite'|'linear'|'step'}\n */\n this.centerInterp = 'linear';\n }\n\n /**\n * Append one or more camera keyframes. Adjacent duplicates are skipped by default.\n * @param {Object|Object[]} spec\n * @param {{ deduplicate?: boolean }} [opts]\n */\n add(spec, opts) {\n if (Array.isArray(spec)) {\n for (const s of spec) this.add(s, opts);\n return;\n }\n const kf = _parseCameraSpec(spec);\n if (!kf) return;\n const dedup = !opts || opts.deduplicate !== false;\n if (dedup && this.keyframes.length > 0) {\n if (_sameCameraKeyframe(this.keyframes[this.keyframes.length - 1], kf)) return;\n }\n this.keyframes.push(kf);\n }\n\n /**\n * Replace (or append at end) the camera keyframe at index.\n * @param {number} index\n * @param {Object} spec\n * @returns {boolean}\n */\n set(index, spec) {\n if (!_isNum(index)) return false;\n const i = index | 0, kf = _parseCameraSpec(spec);\n if (!kf || i < 0 || i > this.keyframes.length) return false;\n if (i === this.keyframes.length) this.keyframes.push(kf);\n else this.keyframes[i] = kf;\n return true;\n }\n\n /**\n * Evaluate interpolated camera pose at current cursor.\n *\n * @param {{ eye:number[], center:number[], up:number[] }} [out]\n * @returns {{ eye:number[], center:number[], up:number[] }} out\n */\n eval(out) {\n out = out || { eye:[0,0,0], center:[0,0,0], up:[0,1,0], fov:null, halfHeight:null };\n const n = this.keyframes.length;\n if (n === 0) return out;\n\n if (n === 1) {\n const k = this.keyframes[0];\n out.eye[0]=k.eye[0]; out.eye[1]=k.eye[1]; out.eye[2]=k.eye[2];\n out.center[0]=k.center[0]; out.center[1]=k.center[1]; out.center[2]=k.center[2];\n out.up[0]=k.up[0]; out.up[1]=k.up[1]; out.up[2]=k.up[2];\n out.fov = k.fov;\n out.halfHeight = k.halfHeight;\n return out;\n }\n\n const nSeg = n - 1;\n const dur = Math.max(1, this.duration | 0);\n const seg = _clampS(this.seg, 0, nSeg - 1);\n const t = _clamp01(this.f / dur);\n const k0 = this.keyframes[seg];\n const k1 = this.keyframes[seg + 1];\n\n // eye — Hermite (auto-CR tangents when none stored), linear, or step\n if (this.eyeInterp === 'step') {\n out.eye[0]=k0.eye[0]; out.eye[1]=k0.eye[1]; out.eye[2]=k0.eye[2];\n } else if (this.eyeInterp === 'linear') {\n lerpVec3(out.eye, k0.eye, k1.eye, t);\n } else {\n const p0 = seg > 0 ? this.keyframes[seg - 1].eye : k0.eye;\n const p3 = seg + 2 < n ? this.keyframes[seg + 2].eye : k1.eye;\n const m0 = k0.eyeTanOut != null ? k0.eyeTanOut\n : k0.eyeTanIn != null ? k0.eyeTanIn\n : _crTanOut(_m0, p0, k0.eye, k1.eye, p3);\n const m1 = k1.eyeTanIn != null ? k1.eyeTanIn\n : k1.eyeTanOut != null ? k1.eyeTanOut\n : _crTanIn(_m1, p0, k0.eye, k1.eye, p3);\n hermiteVec3(out.eye, k0.eye, m0, k1.eye, m1, t);\n }\n\n // center — Hermite, linear, or step (independent lookat target)\n if (this.centerInterp === 'step') {\n out.center[0]=k0.center[0]; out.center[1]=k0.center[1]; out.center[2]=k0.center[2];\n } else if (this.centerInterp === 'hermite') {\n const c0 = seg > 0 ? this.keyframes[seg - 1].center : k0.center;\n const c3 = seg + 2 < n ? this.keyframes[seg + 2].center : k1.center;\n const m0 = k0.centerTanOut != null ? k0.centerTanOut\n : k0.centerTanIn != null ? k0.centerTanIn\n : _crTanOut(_m0, c0, k0.center, k1.center, c3);\n const m1 = k1.centerTanIn != null ? k1.centerTanIn\n : k1.centerTanOut != null ? k1.centerTanOut\n : _crTanIn(_m1, c0, k0.center, k1.center, c3);\n hermiteVec3(out.center, k0.center, m0, k1.center, m1, t);\n } else {\n lerpVec3(out.center, k0.center, k1.center, t);\n }\n\n // up — nlerp on unit sphere\n lerpVec3(out.up, k0.up, k1.up, t);\n const ul=Math.sqrt(out.up[0]*out.up[0]+out.up[1]*out.up[1]+out.up[2]*out.up[2])||1;\n out.up[0]/=ul; out.up[1]/=ul; out.up[2]/=ul;\n\n // fov / halfHeight — lerp when both keyframes carry non-null values\n out.fov = (k0.fov != null && k1.fov != null)\n ? k0.fov + t * (k1.fov - k0.fov) : (k0.fov ?? k1.fov ?? null);\n out.halfHeight = (k0.halfHeight != null && k1.halfHeight != null)\n ? k0.halfHeight + t * (k1.halfHeight - k0.halfHeight)\n : (k0.halfHeight ?? k1.halfHeight ?? null);\n\n return out;\n }\n}\n","/**\n * @file Frustum planes and visibility tests — zero allocations.\n * @module tree/visibility\n * @license AGPL-3.0-only\n *\n * Planes are a flat Float64Array(24): 6 planes × 4 floats [a, b, c, d].\n * All inputs are scalars. All outputs are INVISIBLE | VISIBLE | SEMIVISIBLE.\n */\n\nimport { INVISIBLE, VISIBLE, SEMIVISIBLE } from './constants.js';\n\n// Plane indices\nexport const PLANE_LEFT = 0, PLANE_RIGHT = 1, PLANE_NEAR = 2,\n PLANE_FAR = 3, PLANE_TOP = 4, PLANE_BOTTOM = 5;\n\n/**\n * Compute 6 frustum planes from camera basis (world space) + projection params.\n * All inputs are scalars — the addon extracts them from the inverse view matrix\n * and projection queries before calling.\n *\n * @param {Float64Array} out 24-float output.\n * @param {number} posX,posY,posZ Camera world position.\n * @param {number} vdX,vdY,vdZ View direction (−Z in eye space, world).\n * @param {number} upX,upY,upZ Camera up.\n * @param {number} rtX,rtY,rtZ Camera right.\n * @param {boolean} ortho true if orthographic.\n * @param {number} near,far,left,right,top,bottom Projection plane values.\n */\nexport function frustumPlanes(\n out,\n posX, posY, posZ,\n vdX, vdY, vdZ,\n upX, upY, upZ,\n rtX, rtY, rtZ,\n ortho,\n near, far, left, right, top, bottom\n) {\n const posViewDir = posX*vdX + posY*vdY + posZ*vdZ;\n const posRight = posX*rtX + posY*rtY + posZ*rtZ;\n const posUp = posX*upX + posY*upY + posZ*upZ;\n\n if (ortho) {\n // Left: normal = −right\n out[0] = -rtX; out[1] = -rtY; out[2] = -rtZ;\n out[3] = -(posRight - left) * -1; // dot(pos - right*left, -right) ... simplified:\n // Actually: d = dot(pointOnPlane, normal)\n // pointOnPlane = pos + right*left (left is negative for standard ortho)\n // normal = -right\n // d = dot(pos + right*left, -right) = -posRight - left\n out[3] = -posRight - left;\n\n // Right: normal = right\n out[4] = rtX; out[5] = rtY; out[6] = rtZ;\n out[7] = posRight + right;\n\n // Top: normal = up\n out[16] = upX; out[17] = upY; out[18] = upZ;\n out[19] = posUp - bottom; // note: p5 top/bottom are swapped in sign convention\n\n // Bottom: normal = -up\n out[20] = -upX; out[21] = -upY; out[22] = -upZ;\n out[23] = -posUp + top;\n } else {\n // Left\n const hfovl = Math.atan2(left, near);\n const shfovl = Math.sin(hfovl), chfovl = Math.cos(hfovl);\n out[0] = vdX*shfovl - rtX*chfovl;\n out[1] = vdY*shfovl - rtY*chfovl;\n out[2] = vdZ*shfovl - rtZ*chfovl;\n out[3] = shfovl*posViewDir - chfovl*posRight;\n\n // Right\n const hfovr = Math.atan2(right, near);\n const shfovr = Math.sin(hfovr), chfovr = Math.cos(hfovr);\n out[4] = -vdX*shfovr + rtX*chfovr;\n out[5] = -vdY*shfovr + rtY*chfovr;\n out[6] = -vdZ*shfovr + rtZ*chfovr;\n out[7] = -shfovr*posViewDir + chfovr*posRight;\n\n // Top\n const fovt = Math.atan2(top, near);\n const sfovt = Math.sin(fovt), cfovt = Math.cos(fovt);\n out[16] = -vdX*sfovt + upX*cfovt;\n out[17] = -vdY*sfovt + upY*cfovt;\n out[18] = -vdZ*sfovt + upZ*cfovt;\n out[19] = -sfovt*posViewDir + cfovt*posUp;\n\n // Bottom\n const fovb = Math.atan2(bottom, near);\n const sfovb = Math.sin(fovb), cfovb = Math.cos(fovb);\n out[20] = vdX*sfovb - upX*cfovb;\n out[21] = vdY*sfovb - upY*cfovb;\n out[22] = vdZ*sfovb - upZ*cfovb;\n out[23] = sfovb*posViewDir - cfovb*posUp;\n }\n\n // Near plane: normal = −viewDir\n out[8] = -vdX; out[9] = -vdY; out[10] = -vdZ;\n out[11] = -posViewDir - near;\n\n // Far plane: normal = viewDir\n out[12] = vdX; out[13] = vdY; out[14] = vdZ;\n out[15] = posViewDir + far;\n\n return out;\n}\n\n/**\n * Signed distance from point to one frustum plane.\n * @param {Float64Array} planes 24-float planes buffer.\n * @param {number} planeIdx 0–5 (LEFT, RIGHT, NEAR, FAR, TOP, BOTTOM).\n * @param {number} px,py,pz Point coordinates.\n * @returns {number}\n */\nexport function distanceToPlane(planes, planeIdx, px, py, pz) {\n const b = planeIdx * 4;\n return planes[b]*px + planes[b+1]*py + planes[b+2]*pz - planes[b+3];\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function pointVisibility(planes, px, py, pz) {\n for (let i = 0; i < 6; i++) {\n if (distanceToPlane(planes, i, px, py, pz) > 0) return INVISIBLE;\n }\n return VISIBLE;\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function sphereVisibility(planes, cx, cy, cz, radius) {\n let allIn = true;\n for (let i = 0; i < 6; i++) {\n const d = distanceToPlane(planes, i, cx, cy, cz);\n if (d > radius) return INVISIBLE;\n if (d > 0 || -d < radius) allIn = false;\n }\n return allIn ? VISIBLE : SEMIVISIBLE;\n}\n\n/** @returns {number} INVISIBLE | VISIBLE | SEMIVISIBLE */\nexport function boxVisibility(planes, x0, y0, z0, x1, y1, z1) {\n let allIn = true;\n for (let i = 0; i < 6; i++) {\n const b = i * 4;\n const a = planes[b], bv = planes[b+1], c = planes[b+2], d = planes[b+3];\n let allOut = true;\n for (let corner = 0; corner < 8; corner++) {\n const cx = (corner & 4) ? x0 : x1;\n const cy = (corner & 2) ? y0 : y1;\n const cz = (corner & 1) ? z0 : z1;\n const dist = a*cx + bv*cy + c*cz - d;\n if (dist > 0) { allIn = false; }\n else { allOut = false; }\n }\n if (allOut) return INVISIBLE;\n }\n return allIn ? VISIBLE : SEMIVISIBLE;\n}\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACY,MAAC,KAAK,IAAI;AACV,MAAC,GAAG,MAAM;AACV,MAAC,GAAG,MAAM;AACV,MAAC,MAAM,GAAG;AACV,MAAC,KAAK,IAAI;AACV,MAAC,MAAM,GAAG;;AAEtB;AACY,MAAC,KAAK,IAAI,GAAG;AACb,MAAC,MAAM,IAAI,EAAE;;AAEzB;AACY,MAAC,SAAS,KAAK;AACf,MAAC,OAAO,OAAO;AACf,MAAC,WAAW,GAAG;;AAE3B;AACY,MAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACjC,MAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,MAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,MAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,MAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,MAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9B,MAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;;AC9B1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AACA;;AAEA;AACY,MAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK;AACzC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG;AAC5D;;AAEA;AACY,MAAC,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG;AACxE;;AAEA;AACY,MAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE1E;AACY,MAAC,UAAU,GAAG,CAAC,GAAG,KAAK;AACnC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnF,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG;AACxD;;AAEA;AACY,MAAC,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK;AACnC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG;AACpE;;AAEA;AACY,MAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK;AACnC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAChC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAChC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAChC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAChC,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;;AAEA;AACY,MAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK;AACxC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACzC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,EAAE,IAAI,EAAE,EAAE,EAAE;AACZ,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE;AACnB,IAAI,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1C,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAClD,EAAE,CAAC,MAAM;AACT,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAChB,EAAE;AACF,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC5C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC5C,EAAE,OAAO,UAAU,CAAC,GAAG,CAAC;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK;AACxC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7E,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,EAAE,OAAO,UAAU,CAAC,GAAG,CAAC;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,cAAc,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,KAAK;AAC1D,EAAE,MAAM,IAAI,GAAG,KAAK,GAAG,GAAG;AAC1B,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,EAAE,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;AACpD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG;AACrE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK;AAC9C,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1C,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;AACxB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpD,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1C,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;AACxB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAChD,EAAE,OAAO,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC7D;;AAEA;AACA;AACA;AACA;AACY,MAAC,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;AAC9E,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG;AACxB,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;AACd,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC7E,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE;AACjC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACtC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC7E,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;AACtB,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACtC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC7E,EAAE,CAAC,MAAM;AACT,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACtC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7E,EAAE;AACF,EAAE,OAAO,UAAU,CAAC,GAAG,CAAC;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC;AAChC,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK;AACnC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5B,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AAC/E,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAClE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACnE,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK;AAC3C,EAAE,GAAG,GAAG,GAAG,IAAI,EAAE;AACjB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,EAAE,IAAI,OAAO,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;AACnE,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACtC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;AAC/C,EAAE,OAAO,GAAG;AACZ;;AClMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3E,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5D;AACA,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;AAClC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1C,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;AACxB;AACA,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpD,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1C,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;AACxB;AACA,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtD;AACA,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACnF,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACX,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3D;AACA,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;AAClC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1C,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;AACxB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpD,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1C,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;AACxB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtD;AACA,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AAClE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAClC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC7D,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/E,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/E,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACjF,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE;AACtE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACnC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE;AACZ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;AACzC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACX,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE;AAC7E,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;AAC7D,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3F,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3F,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE;AACxB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACX,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE;AACpD,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE;AAC/B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACX,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE;AAC/E,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;AAC5C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE;AAClD,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;AACvC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE;AACZ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;AACzC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACX,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE;AACvC,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AAC9B,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,OAAO,CAAC;AACrC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAC7C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAChE,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE;AAC3C,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7C,EAAE,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE;AACrC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpD,EAAE,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE;AACxC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACxD,EAAE,OAAO,cAAc,CAAC,IAAI;AAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC/B;;AChWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAQA;AACA;AACA;;AAEA;AACO,SAAS,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;AACnC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,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CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACxC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC7F,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC7F,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAC7F,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;AACpC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;AACpC,EAAE,GAAG,CAAC,CA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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nakednous/tree",
3
- "version": "0.0.11",
3
+ "version": "0.0.12",
4
4
  "description": "tree — pure numeric core. Zero dependencies.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",