@nakednous/tree 0.0.13 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +16 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -722,8 +722,22 @@ function projFar(p) {
|
|
|
722
722
|
|
|
723
723
|
function projLeft (p, ndcZMin) { return p[15]===1 ? -(1+p[12])/p[0] : projNear(p,ndcZMin)*(p[8]-1)/p[0]; }
|
|
724
724
|
function projRight (p, ndcZMin) { return p[15]===1 ? (1-p[12])/p[0] : projNear(p,ndcZMin)*(1+p[8])/p[0]; }
|
|
725
|
-
|
|
726
|
-
|
|
725
|
+
|
|
726
|
+
/**
|
|
727
|
+
* Top extent of the near plane in camera space (y_max).
|
|
728
|
+
* Positive for a standard y-up camera.
|
|
729
|
+
* @param {ArrayLike<number>} p Projection mat4.
|
|
730
|
+
* @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).
|
|
731
|
+
*/
|
|
732
|
+
function projTop (p, ndcZMin) { return p[15]===1 ? (1+p[13])/p[5] : projNear(p,ndcZMin)*(1+p[9])/p[5]; }
|
|
733
|
+
|
|
734
|
+
/**
|
|
735
|
+
* Bottom extent of the near plane in camera space (y_min).
|
|
736
|
+
* Negative for a standard y-up camera.
|
|
737
|
+
* @param {ArrayLike<number>} p Projection mat4.
|
|
738
|
+
* @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).
|
|
739
|
+
*/
|
|
740
|
+
function projBottom(p, ndcZMin) { return p[15]===1 ? (p[13]-1)/p[5] : projNear(p,ndcZMin)*(p[9]-1)/p[5]; }
|
|
727
741
|
|
|
728
742
|
/** Vertical field of view in radians (perspective only). */
|
|
729
743
|
function projFov (p) { return Math.abs(2*Math.atan(1/p[5])); }
|
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 * ── NDC Z convention ──────────────────────────────────────────────────────\n * Controlled by `ndcZMin` in every projection constructor:\n * WEBGL = −1 near → NDC z = −1, far → NDC z = +1\n * WEBGPU = 0 near → NDC z = 0, far → NDC z = +1\n *\n * ── NDC Y convention ──────────────────────────────────────────────────────\n * Controlled by `ndcYSign` in every projection constructor (default +1):\n * +1 NDC y-up — standard: OpenGL / WebGL / WebGPU browser / Three.js / p5v2\n * −1 NDC y-down — native Vulkan clip space\n *\n * Negating ndcYSign flips row 1 of the projection matrix (elements\n * out[1], out[5], out[9], out[13]), reversing the y-axis in clip space.\n * mat4View, mat4Eye, and all non-projection constructors are convention-\n * agnostic — they produce the same matrix regardless of the NDC y direction.\n *\n * ── Screen Y convention ───────────────────────────────────────────────────\n * Screen-y direction (DOM y-down vs OpenGL y-up) is a separate concern from\n * NDC-y direction and is handled in query.js via the signed viewport height.\n * See the query.js module header for details.\n *\n * All functions follow the out-first, zero-allocation contract.\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 * 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 */\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 * Camera looks along −Z in eye space; right = normalize(up × (−Z)).\n * Cheaper than building the eye matrix and inverting.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ex,ey,ez Eye (camera) position.\n * @param {number} cx,cy,cz Look-at target.\n * @param {number} ux,uy,uz World up hint (need not be unit).\n */\nexport function mat4View(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {\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 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 parameters as mat4View.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ex,ey,ez Eye position.\n * @param {number} cx,cy,cz Look-at target.\n * @param {number} ux,uy,uz World up hint.\n */\nexport function mat4Eye(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {\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 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. No struct allocation.\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 */\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 */\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 */\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 * @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 * @param {number} [ndcYSign=1] +1 = NDC y-up (default); −1 = NDC y-down (native Vulkan).\n */\nexport function mat4Perspective(out, fov, aspect, near, far, ndcZMin, ndcYSign=1) {\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]=ndcYSign*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 * @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 * @param {number} [ndcYSign=1] +1 = NDC y-up (default); −1 = NDC y-down (native Vulkan).\n */\nexport function mat4Ortho(out, left, right, bottom, top, near, far, ndcZMin, ndcYSign=1) {\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]=ndcYSign*2*tb; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0; out[10]=(ndcZMin-1)*fn; out[11]=0;\n out[12]=-(right+left)*rl; out[13]=ndcYSign*(-(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 * @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 * @param {number} [ndcYSign=1] +1 = NDC y-up (default); −1 = NDC y-down (native Vulkan).\n */\nexport function mat4Frustum(out, left, right, bottom, top, near, far, ndcZMin, ndcYSign=1) {\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]=ndcYSign*2*near*tb; out[6]=0; out[7]=0;\n out[8]=(right+left)*rl; out[9]=ndcYSign*(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 remap from [−1, 1]; z remaps from [ndcZMin, 1].\n * Used to convert light-space NDC coordinates to shadow map UV.\n *\n * Convention note: the standard bias maps NDC y = −1 → texture v = 0 and\n * NDC y = +1 → texture v = 1. This is correct for both NDC y-up and y-down\n * conventions because the shadow map was rendered with the same projection.\n *\n * Column-major (WEBGL, ndcZMin=−1): Column-major (WEBGPU, ndcZMin=0):\n * [ 0.5 0 0 0.5 ] [ 0.5 0 0 0.5 ]\n * [ 0 0.5 0 0.5 ] [ 0 0.5 0 0.5 ]\n * [ 0 0 0.5 0.5 ] [ 0 0 1 0 ]\n * [ 0 0 0 1 ] [ 0 0 0 1 ]\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function mat4Bias(out, ndcZMin) {\n const sz=1/(1-ndcZMin), 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 */\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 */\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 the rotation block).\n * Assumes no shear.\n * @param {Float32Array|number[]} out3 3-element destination.\n * @param {Float32Array|number[]} m 16-element source.\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. Assumes no shear.\n * @param {number[]} out4 4-element [x,y,z,w] destination.\n * @param {Float32Array|number[]} m 16-element source.\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 matrices and extracts information.\n * Contrast with form.js which constructs matrices from specs.\n *\n * form.js — specs → matrix\n * query.js — matrix → information\n *\n * Storage: column-major Float32Array / ArrayLike<number>.\n * Multiply: mat4Mul(out, A, B) = A · B (standard math order).\n * Pipeline: clip = P · V · M · v\n *\n * ── NDC Z convention ──────────────────────────────────────────────────────\n * Passed as `ndcZMin` to every space-transform function:\n * WEBGL = −1 z ∈ [−1, 1]\n * WEBGPU = 0 z ∈ [ 0, 1]\n *\n * ── NDC Y convention ──────────────────────────────────────────────────────\n * Standard (OpenGL / WebGL / WebGPU browser / Three.js / p5v2):\n * NDC y-up — y = +1 at top, y = −1 at bottom.\n * Native Vulkan: NDC y-down — projections constructed with ndcYSign = −1\n * (see form.js). Query functions are convention-agnostic: they work on\n * whatever matrices are passed in.\n *\n * ── Viewport convention ───────────────────────────────────────────────────\n * vp = [x, y, w, h] — w and h are SIGNED.\n *\n * The sign of h encodes the relationship between NDC y and screen y:\n * h < 0 (e.g. −canvasH): screen y-DOWN (DOM / p5 mouseX·mouseY / Vulkan surface)\n * NDC y=+1 → screen y=0 (top)\n * NDC y=−1 → screen y=H (bottom)\n * h > 0 (e.g. +canvasH): screen y-UP (OpenGL desktop / WebGL gl_FragCoord)\n * NDC y=−1 → screen y=0 (bottom)\n * NDC y=+1 → screen y=H (top)\n *\n * Pass [0, canvasH, canvasW, −canvasH] for p5/DOM coordinates.\n * Pass [0, 0, canvasW, canvasH] for WebGL gl_FragCoord / OpenGL bottom-left.\n * All helpers use vp[2]/vp[3] signed — no Math.abs — so both conventions\n * work automatically without any branching.\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 { WORLD, EYE, NDC, SCREEN, MATRIX } from './constants.js';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Mat4 arithmetic\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = A · B (column-major) */\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 (|det| < 1e-12). */\nexport function mat4Invert(out, src) {\n const s0=src[0],s1=src[1],s2=src[2],s3=src[3],\n s4=src[4],s5=src[5],s6=src[6],s7=src[7],\n s8=src[8],s9=src[9],s10=src[10],s11=src[11],\n s12=src[12],s13=src[13],s14=src[14],s15=src[15];\n const b0=s0*s5-s1*s4, b1=s0*s6-s2*s4, b2=s0*s7-s3*s4,\n b3=s1*s6-s2*s5, b4=s1*s7-s3*s5, b5=s2*s7-s3*s6,\n b6=s8*s13-s9*s12, b7=s8*s14-s10*s12, b8=s8*s15-s11*s12,\n b9=s9*s14-s10*s13, b10=s9*s15-s11*s13, b11=s10*s15-s11*s14;\n let det=b0*b11-b1*b10+b2*b9+b3*b8-b4*b7+b5*b6;\n if (Math.abs(det) < 1e-12) return null;\n det = 1/det;\n out[0]=(s5*b11-s6*b10+s7*b9)*det;\n out[1]=(s2*b10-s1*b11-s3*b9)*det;\n out[2]=(s13*b5-s14*b4+s15*b3)*det;\n out[3]=(s10*b4-s9*b5-s11*b3)*det;\n out[4]=(s6*b8-s4*b11-s7*b7)*det;\n out[5]=(s0*b11-s2*b8+s3*b7)*det;\n out[6]=(s14*b2-s12*b5-s15*b1)*det;\n out[7]=(s8*b5-s10*b2+s11*b1)*det;\n out[8]=(s4*b10-s5*b8+s7*b6)*det;\n out[9]=(s1*b8-s0*b10-s3*b6)*det;\n out[10]=(s12*b4-s13*b2+s15*b0)*det;\n out[11]=(s9*b2-s8*b4-s11*b0)*det;\n out[12]=(s5*b7-s4*b9-s6*b6)*det;\n out[13]=(s0*b9-s1*b7+s2*b6)*det;\n out[14]=(s13*b1-s12*b3-s14*b0)*det;\n out[15]=(s8*b3-s9*b1+s10*b0)*det;\n return out;\n}\n\n/**\n * Normal matrix: inverseTranspose(upper-left 3×3 of src).\n * On degeneracy writes zeros and returns out.\n * @param {Float32Array|number[]} out 9-element destination.\n * @param {Float32Array|number[]} src 16-element mat4.\n */\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, b11=-a22*a01+a02*a21, 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; out[1]=(-a22*a10+a12*a20)*det; out[2]=(a21*a10-a11*a20)*det;\n out[3]=b11*det; out[4]=(a22*a00-a02*a20)*det; out[5]=(-a21*a00+a01*a20)*det;\n out[6]=b21*det; out[7]=(-a12*a00+a02*a10)*det; 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], ry=m[1]*x+m[5]*y+m[9]*z+m[13],\n rz=m[2]*x+m[6]*y+m[10]*z+m[14], rw=m[3]*x+m[7]*y+m[11]*z+m[15];\n if (rw!==0&&rw!==1) { out[0]=rx/rw; out[1]=ry/rw; out[2]=rz/rw; }\n else { out[0]=rx; out[1]=ry; out[2]=rz; }\n return out;\n}\n\n/**\n * Apply only the 3×3 linear block of a mat4 to a direction (no translation,\n * no perspective divide). Use mat3NormalFromMat4 for normals under non-uniform scale.\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\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 ? p[14]/(p[10]+ndcZMin) : (p[14]-ndcZMin)/p[10];\n}\n\n/** Far plane distance (far always maps to NDC z = 1, convention-independent). */\nexport function projFar(p) {\n return p[15]===0 ? p[14]/(1+p[10]) : (p[14]-1)/p[10];\n}\n\nexport function projLeft (p, ndcZMin) { return p[15]===1 ? -(1+p[12])/p[0] : projNear(p,ndcZMin)*(p[8]-1)/p[0]; }\nexport function projRight (p, ndcZMin) { return p[15]===1 ? (1-p[12])/p[0] : projNear(p,ndcZMin)*(1+p[8])/p[0]; }\nexport function projTop (p, ndcZMin) { return p[15]===1 ? (p[13]-1)/p[5] : projNear(p,ndcZMin)*(p[9]-1)/p[5]; }\nexport function projBottom(p, ndcZMin) { return p[15]===1 ? (1+p[13])/p[5] : projNear(p,ndcZMin)*(1+p[9])/p[5]; }\n\n/** Vertical field of view in radians (perspective only). */\nexport function projFov (p) { return Math.abs(2*Math.atan(1/p[5])); }\n/** Horizontal field of view in radians (perspective only). */\nexport function projHfov(p) { return Math.abs(2*Math.atan(1/p[0])); }\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Derived matrices\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = P · V */\nexport function mat4PV(out, proj, view) { return mat4Mul(out, proj, view); }\n/** out = V · M */\nexport function mat4MV(out, model, view) { return mat4Mul(out, view, model); }\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Frame-relative transforms\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Location transform between frames: out = inv(to) · from.\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 * Direction transform between frames: out = to₃ · inv(from₃).\n * Uses only the upper-left 3×3 blocks (rotation/scale, no translation).\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, b11=a12*a20-a22*a10, 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], t10=to[4],t11=to[5],t12=to[6], t20=to[8],t21=to[9],t22=to[10];\n out[0]=t00*i00+t10*i01+t20*i02; out[1]=t01*i00+t11*i01+t21*i02; out[2]=t02*i00+t12*i01+t22*i02;\n out[3]=t00*i10+t10*i11+t20*i12; out[4]=t01*i10+t11*i11+t21*i12; out[5]=t02*i10+t12*i11+t22*i12;\n out[6]=t00*i20+t10*i21+t20*i22; out[7]=t01*i20+t11*i21+t21*i22; out[8]=t02*i20+t12*i21+t22*i22;\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 with only stack\n// locals — no reentrancy, no shared state between calls.\n//\n// Matrices bag `m`:\n// mat4Proj Float32Array(16) projection (eye → clip)\n// mat4View Float32Array(16) view (world → eye)\n// mat4Eye? Float32Array(16) eye (eye → world); caller fills before passing\n// mat4PV? Float32Array(16) P · V; caller fills or _ensurePV allocates once\n// mat4PVInv? Float32Array(16) inv(P · V); caller fills\n// fromFrame? Float32Array(16) MATRIX source frame\n// toFrameInv? Float32Array(16) inv(MATRIX dest frame)\n//\n// Viewport `vp` = [x, y, w, h]:\n// Use SIGNED h to encode screen-y direction (see module header).\n// Core formula: screen = (ndc*0.5+0.5)*vp[k] + vp[k-2] (k=2 for x, k=3 for y)\n// Inverse: ndc = ((screen-vp[k-2])/vp[k])*2 - 1\n// Negative vp[3] flips NDC y-up to screen y-down automatically.\n//\n\n// ── Location 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], y=pv[1]*px+pv[5]*py+pv[9]*pz+pv[13],\n z=pv[2]*px+pv[6]*py+pv[10]*pz+pv[14], 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*0.5+0.5)*vp[2]+vp[0];\n out[1]=(y*xi*0.5+0.5)*vp[3]+vp[1];\n out[2]=(z*xi-ndcZMin)/(1-ndcZMin);\n return out;\n}\n\nfunction _screenToWorld(out, sx, sy, sz, ipv, vp, ndcZMin) {\n return mat4MulPoint(out, ipv,\n ((sx-vp[0])/vp[2])*2-1,\n ((sy-vp[1])/vp[3])*2-1,\n sz*(1-ndcZMin)+ndcZMin);\n}\n\nfunction _worldToNDC(out, px, py, pz, pv) {\n const x=pv[0]*px+pv[4]*py+pv[8]*pz+pv[12], y=pv[1]*px+pv[5]*py+pv[9]*pz+pv[13],\n z=pv[2]*px+pv[6]*py+pv[10]*pz+pv[14], 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) { return mat4MulPoint(out,ipv,nx,ny,nz); }\n\nfunction _screenToNDC(out, sx, sy, sz, vp, ndcZMin) {\n out[0]=((sx-vp[0])/vp[2])*2-1;\n out[1]=((sy-vp[1])/vp[3])*2-1;\n out[2]=sz*(1-ndcZMin)+ndcZMin;\n return out;\n}\n\nfunction _ndcToScreen(out, nx, ny, nz, vp, ndcZMin) {\n out[0]=(nx*0.5+0.5)*vp[2]+vp[0];\n out[1]=(ny*0.5+0.5)*vp[3]+vp[1];\n out[2]=(nz-ndcZMin)/(1-ndcZMin);\n return out;\n}\n\nfunction _ensurePV(m) {\n if (m.mat4PV) return m.mat4PV;\n m.mat4PV = new Float32Array(16);\n mat4Mul(m.mat4PV, m.mat4Proj, m.mat4View);\n return m.mat4PV;\n}\n\n/**\n * Map a point between named coordinate spaces.\n *\n * @param {number[]} out 3-element destination — written and returned.\n * @param {number} px,py,pz Input point.\n * @param {string} from Source space (WORLD, EYE, SCREEN, NDC, MATRIX).\n * @param {string} to Destination space.\n * @param {object} m Matrices bag — see module header.\n * @param {number[]} vp Viewport [x, y, w, h]; sign of h encodes screen-y direction.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n * @returns {number[]} out\n */\nexport function mapLocation(out, px, py, pz, from, to, m, vp, ndcZMin) {\n if (from===WORLD && to===SCREEN) return _worldToScreen(out,px,py,pz,_ensurePV(m),vp,ndcZMin);\n if (from===SCREEN && to===WORLD) return _screenToWorld(out,px,py,pz,m.mat4PVInv,vp,ndcZMin);\n\n if (from===WORLD && to===NDC) return _worldToNDC(out,px,py,pz,_ensurePV(m));\n if (from===NDC && to===WORLD) return _ndcToWorld(out,px,py,pz,m.mat4PVInv);\n\n if (from===SCREEN && to===NDC) return _screenToNDC(out,px,py,pz,vp,ndcZMin);\n if (from===NDC && to===SCREEN) return _ndcToScreen(out,px,py,pz,vp,ndcZMin);\n\n if (from===WORLD && to===EYE) return mat4MulPoint(out,m.mat4View,px,py,pz);\n if (from===EYE && to===WORLD) return mat4MulPoint(out,m.mat4Eye,px,py,pz);\n\n if (from===EYE && to===SCREEN) {\n const e=m.mat4Eye;\n return _worldToScreen(out,e[0]*px+e[4]*py+e[8]*pz+e[12],\n e[1]*px+e[5]*py+e[9]*pz+e[13],\n e[2]*px+e[6]*py+e[10]*pz+e[14],_ensurePV(m),vp,ndcZMin);\n }\n if (from===SCREEN && to===EYE) {\n _screenToWorld(out,px,py,pz,m.mat4PVInv,vp,ndcZMin);\n return mat4MulPoint(out,m.mat4View,out[0],out[1],out[2]);\n }\n\n if (from===EYE && to===NDC) {\n const e=m.mat4Eye;\n return _worldToNDC(out,e[0]*px+e[4]*py+e[8]*pz+e[12],\n e[1]*px+e[5]*py+e[9]*pz+e[13],\n e[2]*px+e[6]*py+e[10]*pz+e[14],_ensurePV(m));\n }\n if (from===NDC && to===EYE) {\n _ndcToWorld(out,px,py,pz,m.mat4PVInv);\n return mat4MulPoint(out,m.mat4View,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===WORLD) return mat4MulPoint(out,m.fromFrame,px,py,pz);\n if (from===WORLD && to===MATRIX) return mat4MulPoint(out,m.toFrameInv,px,py,pz);\n\n if (from===MATRIX && to===EYE) {\n const f=m.fromFrame;\n return mat4MulPoint(out,m.mat4View,f[0]*px+f[4]*py+f[8]*pz+f[12],\n f[1]*px+f[5]*py+f[9]*pz+f[13],\n f[2]*px+f[6]*py+f[10]*pz+f[14]);\n }\n if (from===EYE && to===MATRIX) {\n const e=m.mat4Eye;\n return mat4MulPoint(out,m.toFrameInv,e[0]*px+e[4]*py+e[8]*pz+e[12],\n e[1]*px+e[5]*py+e[9]*pz+e[13],\n e[2]*px+e[6]*py+e[10]*pz+e[14]);\n }\n\n if (from===MATRIX && to===SCREEN) {\n const f=m.fromFrame;\n return _worldToScreen(out,f[0]*px+f[4]*py+f[8]*pz+f[12],\n f[1]*px+f[5]*py+f[9]*pz+f[13],\n f[2]*px+f[6]*py+f[10]*pz+f[14],_ensurePV(m),vp,ndcZMin);\n }\n if (from===SCREEN && to===MATRIX) {\n _screenToWorld(out,px,py,pz,m.mat4PVInv,vp,ndcZMin);\n return mat4MulPoint(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===NDC) {\n const f=m.fromFrame;\n return _worldToNDC(out,f[0]*px+f[4]*py+f[8]*pz+f[12],\n f[1]*px+f[5]*py+f[9]*pz+f[13],\n f[2]*px+f[6]*py+f[10]*pz+f[14],_ensurePV(m));\n }\n if (from===NDC && to===MATRIX) {\n _ndcToWorld(out,px,py,pz,m.mat4PVInv);\n return mat4MulPoint(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===MATRIX) {\n const f=m.fromFrame;\n return mat4MulPoint(out,m.toFrameInv,f[0]*px+f[4]*py+f[8]*pz+f[12],\n f[1]*px+f[5]*py+f[9]*pz+f[13],\n f[2]*px+f[6]*py+f[10]*pz+f[14]);\n }\n\n out[0]=px; out[1]=py; out[2]=pz;\n return out;\n}\n\n// ── Direction helpers ────────────────────────────────────────────────────\n//\n// Directions use only the linear 3×3 block — no translation, no w-divide.\n// The signed vp[2]/vp[3] carries the y-convention automatically.\n//\n\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 const vx=view[0]*dx+view[4]*dy+view[8]*dz,\n vy=view[1]*dx+view[5]*dy+view[9]*dz,\n vz=view[2]*dx+view[6]*dy+view[10]*dz;\n // vpH is signed — negative flips y component automatically.\n out[0]=(proj[0]*vx+proj[4]*vy+proj[8]*vz)*vpW*0.5;\n out[1]=(proj[1]*vx+proj[5]*vy+proj[9]*vz)*vpH*0.5;\n out[2]=(proj[2]*vx+proj[6]*vy+proj[10]*vz)*(1-ndcZMin)*0.5;\n return out;\n}\n\nfunction _screenToWorldDir(out, dx, dy, dz, proj, eye, vpW, vpH, ndcZMin) {\n // Inverse of _worldToScreenDir; signed vpW/vpH cancel the y-flip.\n _applyDir(out, eye, dx/(vpW*0.5)/proj[0], dy/(vpH*0.5)/proj[5], dz/((1-ndcZMin)*0.5));\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); 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; out[2]=dz*(1-ndcZMin)*0.5;\n return out;\n}\n\n/**\n * Map a direction between named coordinate spaces.\n * Same bag and viewport contract as mapLocation.\n *\n * @param {number[]} out 3-element destination.\n * @param {number} dx,dy,dz Input direction.\n * @param {string} from Source space.\n * @param {string} to Destination space.\n * @param {object} m Matrices bag — see module header.\n * @param {number[]} vp Viewport [x, y, w, h]; sign of h encodes screen-y direction.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n * @returns {number[]} out\n */\nexport function mapDirection(out, dx, dy, dz, from, to, m, vp, ndcZMin) {\n const vpW=vp[2], vpH=vp[3]; // signed — carry y-convention through all helpers\n\n if (from===EYE && to===WORLD) return _applyDir(out,m.mat4Eye, dx,dy,dz);\n if (from===WORLD && to===EYE) return _applyDir(out,m.mat4View,dx,dy,dz);\n\n if (from===WORLD && to===SCREEN) return _worldToScreenDir(out,dx,dy,dz,m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n if (from===SCREEN && to===WORLD) return _screenToWorldDir(out,dx,dy,dz,m.mat4Proj,m.mat4Eye, vpW,vpH,ndcZMin);\n\n if (from===SCREEN && to===NDC) return _screenToNDCDir(out,dx,dy,dz,vpW,vpH,ndcZMin);\n if (from===NDC && to===SCREEN) return _ndcToScreenDir(out,dx,dy,dz,vpW,vpH,ndcZMin);\n\n if (from===WORLD && to===NDC) {\n _worldToScreenDir(out,dx,dy,dz,m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n return _screenToNDCDir(out,out[0],out[1],out[2],vpW,vpH,ndcZMin);\n }\n if (from===NDC && to===WORLD) {\n _ndcToScreenDir(out,dx,dy,dz,vpW,vpH,ndcZMin);\n return _screenToWorldDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4Eye,vpW,vpH,ndcZMin);\n }\n\n if (from===EYE && to===SCREEN) {\n _applyDir(out,m.mat4Eye,dx,dy,dz);\n return _worldToScreenDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n }\n if (from===SCREEN && to===EYE) {\n _screenToWorldDir(out,dx,dy,dz,m.mat4Proj,m.mat4Eye,vpW,vpH,ndcZMin);\n return _applyDir(out,m.mat4View,out[0],out[1],out[2]);\n }\n\n if (from===EYE && to===NDC) {\n _applyDir(out,m.mat4Eye,dx,dy,dz);\n _worldToScreenDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n return _screenToNDCDir(out,out[0],out[1],out[2],vpW,vpH,ndcZMin);\n }\n if (from===NDC && to===EYE) {\n _ndcToScreenDir(out,dx,dy,dz,vpW,vpH,ndcZMin);\n _screenToWorldDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4Eye,vpW,vpH,ndcZMin);\n return _applyDir(out,m.mat4View,out[0],out[1],out[2]);\n }\n\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 if (from===MATRIX && to===EYE) {\n _applyDir(out,m.fromFrame,dx,dy,dz);\n return _applyDir(out,m.mat4View,out[0],out[1],out[2]);\n }\n if (from===EYE && to===MATRIX) {\n _applyDir(out,m.mat4Eye,dx,dy,dz);\n return _applyDir(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===SCREEN) {\n _applyDir(out,m.fromFrame,dx,dy,dz);\n return _worldToScreenDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n }\n if (from===SCREEN && to===MATRIX) {\n _screenToWorldDir(out,dx,dy,dz,m.mat4Proj,m.mat4Eye,vpW,vpH,ndcZMin);\n return _applyDir(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===NDC) {\n _applyDir(out,m.fromFrame,dx,dy,dz);\n _worldToScreenDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n return _screenToNDCDir(out,out[0],out[1],out[2],vpW,vpH,ndcZMin);\n }\n if (from===NDC && to===MATRIX) {\n _ndcToScreenDir(out,dx,dy,dz,vpW,vpH,ndcZMin);\n _screenToWorldDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4Eye,vpW,vpH,ndcZMin);\n return _applyDir(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===MATRIX) {\n _applyDir(out,m.fromFrame,dx,dy,dz);\n return _applyDir(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\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 in pixels (positive).\n * @param {number} eyeZ Eye-space Z — negative means in front of camera.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function pixelRatio(proj, vpH, eyeZ, ndcZMin) {\n return projIsOrtho(proj)\n ? Math.abs(projTop(proj,ndcZMin)-projBottom(proj,ndcZMin)) / vpH\n : 2*Math.abs(eyeZ)*Math.tan(projFov(proj)/2) / vpH;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Pick-matrix\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Mutate a projection matrix in-place so that the pixel at (px, py) maps to\n * the full NDC square — making a 1×1 FBO render contain exactly that pixel.\n *\n * Premultiplies by M_pick (column-major, rows 2 and 3 unchanged):\n *\n * ┌ sx 0 0 tx ┐ sx = |vp[2]|, sy = |vp[3]|\n * │ 0 sy 0 ty │ cx = ((px−vp[0])/vp[2])·2 − 1 (NDC x of pixel centre)\n * │ 0 0 1 0 │ cy = ((py−vp[1])/vp[3])·2 − 1 (NDC y, sign-aware)\n * └ 0 0 0 1 ┘ tx = −cx·sx, ty = −cy·sy\n *\n * Result: P_pick = M_pick · P_original.\n * The viewport sign convention (vp[3] < 0 for screen y-down) is preserved\n * automatically through cx/cy — no separate flip needed.\n *\n * @param {Float32Array} proj Projection mat4 — mutated in place.\n * @param {number} px Query pixel X in screen coordinates.\n * @param {number} py Query pixel Y in screen coordinates.\n * @param {number[]} vp Viewport [x, y, w, h]; same signed convention as mapLocation.\n */\nexport function mat4Pick(proj, px, py, vp) {\n const cx=((px-vp[0])/vp[2])*2-1;\n const cy=((py-vp[1])/vp[3])*2-1;\n const sx=Math.abs(vp[2]), sy=Math.abs(vp[3]);\n const tx=-cx*sx, ty=-cy*sy;\n for (let j=0; j<4; j++) {\n const a=proj[j*4], b=proj[j*4+1], d=proj[j*4+3];\n proj[j*4] = sx*a + tx*d;\n proj[j*4+1] = sy*b + ty*d;\n }\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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AC,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,CA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,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACrF,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACrF,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACrF,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACpG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAChG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC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"}
|
|
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 * ── NDC Z convention ──────────────────────────────────────────────────────\n * Controlled by `ndcZMin` in every projection constructor:\n * WEBGL = −1 near → NDC z = −1, far → NDC z = +1\n * WEBGPU = 0 near → NDC z = 0, far → NDC z = +1\n *\n * ── NDC Y convention ──────────────────────────────────────────────────────\n * Controlled by `ndcYSign` in every projection constructor (default +1):\n * +1 NDC y-up — standard: OpenGL / WebGL / WebGPU browser / Three.js / p5v2\n * −1 NDC y-down — native Vulkan clip space\n *\n * Negating ndcYSign flips row 1 of the projection matrix (elements\n * out[1], out[5], out[9], out[13]), reversing the y-axis in clip space.\n * mat4View, mat4Eye, and all non-projection constructors are convention-\n * agnostic — they produce the same matrix regardless of the NDC y direction.\n *\n * ── Screen Y convention ───────────────────────────────────────────────────\n * Screen-y direction (DOM y-down vs OpenGL y-up) is a separate concern from\n * NDC-y direction and is handled in query.js via the signed viewport height.\n * See the query.js module header for details.\n *\n * All functions follow the out-first, zero-allocation contract.\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 * 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 */\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 * Camera looks along −Z in eye space; right = normalize(up × (−Z)).\n * Cheaper than building the eye matrix and inverting.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ex,ey,ez Eye (camera) position.\n * @param {number} cx,cy,cz Look-at target.\n * @param {number} ux,uy,uz World up hint (need not be unit).\n */\nexport function mat4View(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {\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 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 parameters as mat4View.\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ex,ey,ez Eye position.\n * @param {number} cx,cy,cz Look-at target.\n * @param {number} ux,uy,uz World up hint.\n */\nexport function mat4Eye(out, ex,ey,ez, cx,cy,cz, ux,uy,uz) {\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 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. No struct allocation.\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 */\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 */\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 */\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 * @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 * @param {number} [ndcYSign=1] +1 = NDC y-up (default); −1 = NDC y-down (native Vulkan).\n */\nexport function mat4Perspective(out, fov, aspect, near, far, ndcZMin, ndcYSign=1) {\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]=ndcYSign*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 * @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 * @param {number} [ndcYSign=1] +1 = NDC y-up (default); −1 = NDC y-down (native Vulkan).\n */\nexport function mat4Ortho(out, left, right, bottom, top, near, far, ndcZMin, ndcYSign=1) {\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]=ndcYSign*2*tb; out[6]=0; out[7]=0;\n out[8]=0; out[9]=0; out[10]=(ndcZMin-1)*fn; out[11]=0;\n out[12]=-(right+left)*rl; out[13]=ndcYSign*(-(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 * @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 * @param {number} [ndcYSign=1] +1 = NDC y-up (default); −1 = NDC y-down (native Vulkan).\n */\nexport function mat4Frustum(out, left, right, bottom, top, near, far, ndcZMin, ndcYSign=1) {\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]=ndcYSign*2*near*tb; out[6]=0; out[7]=0;\n out[8]=(right+left)*rl; out[9]=ndcYSign*(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 remap from [−1, 1]; z remaps from [ndcZMin, 1].\n * Used to convert light-space NDC coordinates to shadow map UV.\n *\n * Convention note: the standard bias maps NDC y = −1 → texture v = 0 and\n * NDC y = +1 → texture v = 1. This is correct for both NDC y-up and y-down\n * conventions because the shadow map was rendered with the same projection.\n *\n * Column-major (WEBGL, ndcZMin=−1): Column-major (WEBGPU, ndcZMin=0):\n * [ 0.5 0 0 0.5 ] [ 0.5 0 0 0.5 ]\n * [ 0 0.5 0 0.5 ] [ 0 0.5 0 0.5 ]\n * [ 0 0 0.5 0.5 ] [ 0 0 1 0 ]\n * [ 0 0 0 1 ] [ 0 0 0 1 ]\n *\n * @param {Float32Array|number[]} out 16-element destination.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function mat4Bias(out, ndcZMin) {\n const sz=1/(1-ndcZMin), 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 */\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 */\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 the rotation block).\n * Assumes no shear.\n * @param {Float32Array|number[]} out3 3-element destination.\n * @param {Float32Array|number[]} m 16-element source.\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. Assumes no shear.\n * @param {number[]} out4 4-element [x,y,z,w] destination.\n * @param {Float32Array|number[]} m 16-element source.\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 matrices and extracts information.\n * Contrast with form.js which constructs matrices from specs.\n *\n * form.js — specs → matrix\n * query.js — matrix → information\n *\n * Storage: column-major Float32Array / ArrayLike<number>.\n * Multiply: mat4Mul(out, A, B) = A · B (standard math order).\n * Pipeline: clip = P · V · M · v\n *\n * ── NDC Z convention ──────────────────────────────────────────────────────\n * Passed as `ndcZMin` to every space-transform function:\n * WEBGL = −1 z ∈ [−1, 1]\n * WEBGPU = 0 z ∈ [ 0, 1]\n *\n * ── NDC Y convention ──────────────────────────────────────────────────────\n * Standard (OpenGL / WebGL / WebGPU browser / Three.js / p5v2):\n * NDC y-up — y = +1 at top, y = −1 at bottom.\n * Native Vulkan: NDC y-down — projections constructed with ndcYSign = −1\n * (see form.js). Query functions are convention-agnostic: they work on\n * whatever matrices are passed in.\n *\n * ── Viewport convention ───────────────────────────────────────────────────\n * vp = [x, y, w, h] — w and h are SIGNED.\n *\n * The sign of h encodes the relationship between NDC y and screen y:\n * h < 0 (e.g. −canvasH): screen y-DOWN (DOM / p5 mouseX·mouseY / Vulkan surface)\n * NDC y=+1 → screen y=0 (top)\n * NDC y=−1 → screen y=H (bottom)\n * h > 0 (e.g. +canvasH): screen y-UP (OpenGL desktop / WebGL gl_FragCoord)\n * NDC y=−1 → screen y=0 (bottom)\n * NDC y=+1 → screen y=H (top)\n *\n * Pass [0, canvasH, canvasW, −canvasH] for p5/DOM coordinates.\n * Pass [0, 0, canvasW, canvasH] for WebGL gl_FragCoord / OpenGL bottom-left.\n * All helpers use vp[2]/vp[3] signed — no Math.abs — so both conventions\n * work automatically without any branching.\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 { WORLD, EYE, NDC, SCREEN, MATRIX } from './constants.js';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Mat4 arithmetic\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = A · B (column-major) */\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 (|det| < 1e-12). */\nexport function mat4Invert(out, src) {\n const s0=src[0],s1=src[1],s2=src[2],s3=src[3],\n s4=src[4],s5=src[5],s6=src[6],s7=src[7],\n s8=src[8],s9=src[9],s10=src[10],s11=src[11],\n s12=src[12],s13=src[13],s14=src[14],s15=src[15];\n const b0=s0*s5-s1*s4, b1=s0*s6-s2*s4, b2=s0*s7-s3*s4,\n b3=s1*s6-s2*s5, b4=s1*s7-s3*s5, b5=s2*s7-s3*s6,\n b6=s8*s13-s9*s12, b7=s8*s14-s10*s12, b8=s8*s15-s11*s12,\n b9=s9*s14-s10*s13, b10=s9*s15-s11*s13, b11=s10*s15-s11*s14;\n let det=b0*b11-b1*b10+b2*b9+b3*b8-b4*b7+b5*b6;\n if (Math.abs(det) < 1e-12) return null;\n det = 1/det;\n out[0]=(s5*b11-s6*b10+s7*b9)*det;\n out[1]=(s2*b10-s1*b11-s3*b9)*det;\n out[2]=(s13*b5-s14*b4+s15*b3)*det;\n out[3]=(s10*b4-s9*b5-s11*b3)*det;\n out[4]=(s6*b8-s4*b11-s7*b7)*det;\n out[5]=(s0*b11-s2*b8+s3*b7)*det;\n out[6]=(s14*b2-s12*b5-s15*b1)*det;\n out[7]=(s8*b5-s10*b2+s11*b1)*det;\n out[8]=(s4*b10-s5*b8+s7*b6)*det;\n out[9]=(s1*b8-s0*b10-s3*b6)*det;\n out[10]=(s12*b4-s13*b2+s15*b0)*det;\n out[11]=(s9*b2-s8*b4-s11*b0)*det;\n out[12]=(s5*b7-s4*b9-s6*b6)*det;\n out[13]=(s0*b9-s1*b7+s2*b6)*det;\n out[14]=(s13*b1-s12*b3-s14*b0)*det;\n out[15]=(s8*b3-s9*b1+s10*b0)*det;\n return out;\n}\n\n/**\n * Normal matrix: inverseTranspose(upper-left 3×3 of src).\n * On degeneracy writes zeros and returns out.\n * @param {Float32Array|number[]} out 9-element destination.\n * @param {Float32Array|number[]} src 16-element mat4.\n */\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, b11=-a22*a01+a02*a21, 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; out[1]=(-a22*a10+a12*a20)*det; out[2]=(a21*a10-a11*a20)*det;\n out[3]=b11*det; out[4]=(a22*a00-a02*a20)*det; out[5]=(-a21*a00+a01*a20)*det;\n out[6]=b21*det; out[7]=(-a12*a00+a02*a10)*det; 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], ry=m[1]*x+m[5]*y+m[9]*z+m[13],\n rz=m[2]*x+m[6]*y+m[10]*z+m[14], rw=m[3]*x+m[7]*y+m[11]*z+m[15];\n if (rw!==0&&rw!==1) { out[0]=rx/rw; out[1]=ry/rw; out[2]=rz/rw; }\n else { out[0]=rx; out[1]=ry; out[2]=rz; }\n return out;\n}\n\n/**\n * Apply only the 3×3 linear block of a mat4 to a direction (no translation,\n * no perspective divide). Use mat3NormalFromMat4 for normals under non-uniform scale.\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\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 ? p[14]/(p[10]+ndcZMin) : (p[14]-ndcZMin)/p[10];\n}\n\n/** Far plane distance (far always maps to NDC z = 1, convention-independent). */\nexport function projFar(p) {\n return p[15]===0 ? p[14]/(1+p[10]) : (p[14]-1)/p[10];\n}\n\nexport function projLeft (p, ndcZMin) { return p[15]===1 ? -(1+p[12])/p[0] : projNear(p,ndcZMin)*(p[8]-1)/p[0]; }\nexport function projRight (p, ndcZMin) { return p[15]===1 ? (1-p[12])/p[0] : projNear(p,ndcZMin)*(1+p[8])/p[0]; }\n\n/**\n * Top extent of the near plane in camera space (y_max).\n * Positive for a standard y-up camera.\n * @param {ArrayLike<number>} p Projection mat4.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function projTop (p, ndcZMin) { return p[15]===1 ? (1+p[13])/p[5] : projNear(p,ndcZMin)*(1+p[9])/p[5]; }\n\n/**\n * Bottom extent of the near plane in camera space (y_min).\n * Negative for a standard y-up camera.\n * @param {ArrayLike<number>} p Projection mat4.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function projBottom(p, ndcZMin) { return p[15]===1 ? (p[13]-1)/p[5] : projNear(p,ndcZMin)*(p[9]-1)/p[5]; }\n\n/** Vertical field of view in radians (perspective only). */\nexport function projFov (p) { return Math.abs(2*Math.atan(1/p[5])); }\n/** Horizontal field of view in radians (perspective only). */\nexport function projHfov(p) { return Math.abs(2*Math.atan(1/p[0])); }\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Derived matrices\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** out = P · V */\nexport function mat4PV(out, proj, view) { return mat4Mul(out, proj, view); }\n/** out = V · M */\nexport function mat4MV(out, model, view) { return mat4Mul(out, view, model); }\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Frame-relative transforms\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Location transform between frames: out = inv(to) · from.\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 * Direction transform between frames: out = to₃ · inv(from₃).\n * Uses only the upper-left 3×3 blocks (rotation/scale, no translation).\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, b11=a12*a20-a22*a10, 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], t10=to[4],t11=to[5],t12=to[6], t20=to[8],t21=to[9],t22=to[10];\n out[0]=t00*i00+t10*i01+t20*i02; out[1]=t01*i00+t11*i01+t21*i02; out[2]=t02*i00+t12*i01+t22*i02;\n out[3]=t00*i10+t10*i11+t20*i12; out[4]=t01*i10+t11*i11+t21*i12; out[5]=t02*i10+t12*i11+t22*i12;\n out[6]=t00*i20+t10*i21+t20*i22; out[7]=t01*i20+t11*i21+t21*i22; out[8]=t02*i20+t12*i21+t22*i22;\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 with only stack\n// locals — no reentrancy, no shared state between calls.\n//\n// Matrices bag `m`:\n// mat4Proj Float32Array(16) projection (eye → clip)\n// mat4View Float32Array(16) view (world → eye)\n// mat4Eye? Float32Array(16) eye (eye → world); caller fills before passing\n// mat4PV? Float32Array(16) P · V; caller fills or _ensurePV allocates once\n// mat4PVInv? Float32Array(16) inv(P · V); caller fills\n// fromFrame? Float32Array(16) MATRIX source frame\n// toFrameInv? Float32Array(16) inv(MATRIX dest frame)\n//\n// Viewport `vp` = [x, y, w, h]:\n// Use SIGNED h to encode screen-y direction (see module header).\n// Core formula: screen = (ndc*0.5+0.5)*vp[k] + vp[k-2] (k=2 for x, k=3 for y)\n// Inverse: ndc = ((screen-vp[k-2])/vp[k])*2 - 1\n// Negative vp[3] flips NDC y-up to screen y-down automatically.\n//\n\n// ── Location 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], y=pv[1]*px+pv[5]*py+pv[9]*pz+pv[13],\n z=pv[2]*px+pv[6]*py+pv[10]*pz+pv[14], 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*0.5+0.5)*vp[2]+vp[0];\n out[1]=(y*xi*0.5+0.5)*vp[3]+vp[1];\n out[2]=(z*xi-ndcZMin)/(1-ndcZMin);\n return out;\n}\n\nfunction _screenToWorld(out, sx, sy, sz, ipv, vp, ndcZMin) {\n return mat4MulPoint(out, ipv,\n ((sx-vp[0])/vp[2])*2-1,\n ((sy-vp[1])/vp[3])*2-1,\n sz*(1-ndcZMin)+ndcZMin);\n}\n\nfunction _worldToNDC(out, px, py, pz, pv) {\n const x=pv[0]*px+pv[4]*py+pv[8]*pz+pv[12], y=pv[1]*px+pv[5]*py+pv[9]*pz+pv[13],\n z=pv[2]*px+pv[6]*py+pv[10]*pz+pv[14], 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) { return mat4MulPoint(out,ipv,nx,ny,nz); }\n\nfunction _screenToNDC(out, sx, sy, sz, vp, ndcZMin) {\n out[0]=((sx-vp[0])/vp[2])*2-1;\n out[1]=((sy-vp[1])/vp[3])*2-1;\n out[2]=sz*(1-ndcZMin)+ndcZMin;\n return out;\n}\n\nfunction _ndcToScreen(out, nx, ny, nz, vp, ndcZMin) {\n out[0]=(nx*0.5+0.5)*vp[2]+vp[0];\n out[1]=(ny*0.5+0.5)*vp[3]+vp[1];\n out[2]=(nz-ndcZMin)/(1-ndcZMin);\n return out;\n}\n\nfunction _ensurePV(m) {\n if (m.mat4PV) return m.mat4PV;\n m.mat4PV = new Float32Array(16);\n mat4Mul(m.mat4PV, m.mat4Proj, m.mat4View);\n return m.mat4PV;\n}\n\n/**\n * Map a point between named coordinate spaces.\n *\n * @param {number[]} out 3-element destination — written and returned.\n * @param {number} px,py,pz Input point.\n * @param {string} from Source space (WORLD, EYE, SCREEN, NDC, MATRIX).\n * @param {string} to Destination space.\n * @param {object} m Matrices bag — see module header.\n * @param {number[]} vp Viewport [x, y, w, h]; sign of h encodes screen-y direction.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n * @returns {number[]} out\n */\nexport function mapLocation(out, px, py, pz, from, to, m, vp, ndcZMin) {\n if (from===WORLD && to===SCREEN) return _worldToScreen(out,px,py,pz,_ensurePV(m),vp,ndcZMin);\n if (from===SCREEN && to===WORLD) return _screenToWorld(out,px,py,pz,m.mat4PVInv,vp,ndcZMin);\n\n if (from===WORLD && to===NDC) return _worldToNDC(out,px,py,pz,_ensurePV(m));\n if (from===NDC && to===WORLD) return _ndcToWorld(out,px,py,pz,m.mat4PVInv);\n\n if (from===SCREEN && to===NDC) return _screenToNDC(out,px,py,pz,vp,ndcZMin);\n if (from===NDC && to===SCREEN) return _ndcToScreen(out,px,py,pz,vp,ndcZMin);\n\n if (from===WORLD && to===EYE) return mat4MulPoint(out,m.mat4View,px,py,pz);\n if (from===EYE && to===WORLD) return mat4MulPoint(out,m.mat4Eye,px,py,pz);\n\n if (from===EYE && to===SCREEN) {\n const e=m.mat4Eye;\n return _worldToScreen(out,e[0]*px+e[4]*py+e[8]*pz+e[12],\n e[1]*px+e[5]*py+e[9]*pz+e[13],\n e[2]*px+e[6]*py+e[10]*pz+e[14],_ensurePV(m),vp,ndcZMin);\n }\n if (from===SCREEN && to===EYE) {\n _screenToWorld(out,px,py,pz,m.mat4PVInv,vp,ndcZMin);\n return mat4MulPoint(out,m.mat4View,out[0],out[1],out[2]);\n }\n\n if (from===EYE && to===NDC) {\n const e=m.mat4Eye;\n return _worldToNDC(out,e[0]*px+e[4]*py+e[8]*pz+e[12],\n e[1]*px+e[5]*py+e[9]*pz+e[13],\n e[2]*px+e[6]*py+e[10]*pz+e[14],_ensurePV(m));\n }\n if (from===NDC && to===EYE) {\n _ndcToWorld(out,px,py,pz,m.mat4PVInv);\n return mat4MulPoint(out,m.mat4View,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===WORLD) return mat4MulPoint(out,m.fromFrame,px,py,pz);\n if (from===WORLD && to===MATRIX) return mat4MulPoint(out,m.toFrameInv,px,py,pz);\n\n if (from===MATRIX && to===EYE) {\n const f=m.fromFrame;\n return mat4MulPoint(out,m.mat4View,f[0]*px+f[4]*py+f[8]*pz+f[12],\n f[1]*px+f[5]*py+f[9]*pz+f[13],\n f[2]*px+f[6]*py+f[10]*pz+f[14]);\n }\n if (from===EYE && to===MATRIX) {\n const e=m.mat4Eye;\n return mat4MulPoint(out,m.toFrameInv,e[0]*px+e[4]*py+e[8]*pz+e[12],\n e[1]*px+e[5]*py+e[9]*pz+e[13],\n e[2]*px+e[6]*py+e[10]*pz+e[14]);\n }\n\n if (from===MATRIX && to===SCREEN) {\n const f=m.fromFrame;\n return _worldToScreen(out,f[0]*px+f[4]*py+f[8]*pz+f[12],\n f[1]*px+f[5]*py+f[9]*pz+f[13],\n f[2]*px+f[6]*py+f[10]*pz+f[14],_ensurePV(m),vp,ndcZMin);\n }\n if (from===SCREEN && to===MATRIX) {\n _screenToWorld(out,px,py,pz,m.mat4PVInv,vp,ndcZMin);\n return mat4MulPoint(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===NDC) {\n const f=m.fromFrame;\n return _worldToNDC(out,f[0]*px+f[4]*py+f[8]*pz+f[12],\n f[1]*px+f[5]*py+f[9]*pz+f[13],\n f[2]*px+f[6]*py+f[10]*pz+f[14],_ensurePV(m));\n }\n if (from===NDC && to===MATRIX) {\n _ndcToWorld(out,px,py,pz,m.mat4PVInv);\n return mat4MulPoint(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===MATRIX) {\n const f=m.fromFrame;\n return mat4MulPoint(out,m.toFrameInv,f[0]*px+f[4]*py+f[8]*pz+f[12],\n f[1]*px+f[5]*py+f[9]*pz+f[13],\n f[2]*px+f[6]*py+f[10]*pz+f[14]);\n }\n\n out[0]=px; out[1]=py; out[2]=pz;\n return out;\n}\n\n// ── Direction helpers ────────────────────────────────────────────────────\n//\n// Directions use only the linear 3×3 block — no translation, no w-divide.\n// The signed vp[2]/vp[3] carries the y-convention automatically.\n//\n\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 const vx=view[0]*dx+view[4]*dy+view[8]*dz,\n vy=view[1]*dx+view[5]*dy+view[9]*dz,\n vz=view[2]*dx+view[6]*dy+view[10]*dz;\n // vpH is signed — negative flips y component automatically.\n out[0]=(proj[0]*vx+proj[4]*vy+proj[8]*vz)*vpW*0.5;\n out[1]=(proj[1]*vx+proj[5]*vy+proj[9]*vz)*vpH*0.5;\n out[2]=(proj[2]*vx+proj[6]*vy+proj[10]*vz)*(1-ndcZMin)*0.5;\n return out;\n}\n\nfunction _screenToWorldDir(out, dx, dy, dz, proj, eye, vpW, vpH, ndcZMin) {\n // Inverse of _worldToScreenDir; signed vpW/vpH cancel the y-flip.\n _applyDir(out, eye, dx/(vpW*0.5)/proj[0], dy/(vpH*0.5)/proj[5], dz/((1-ndcZMin)*0.5));\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); 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; out[2]=dz*(1-ndcZMin)*0.5;\n return out;\n}\n\n/**\n * Map a direction between named coordinate spaces.\n * Same bag and viewport contract as mapLocation.\n *\n * @param {number[]} out 3-element destination.\n * @param {number} dx,dy,dz Input direction.\n * @param {string} from Source space.\n * @param {string} to Destination space.\n * @param {object} m Matrices bag — see module header.\n * @param {number[]} vp Viewport [x, y, w, h]; sign of h encodes screen-y direction.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n * @returns {number[]} out\n */\nexport function mapDirection(out, dx, dy, dz, from, to, m, vp, ndcZMin) {\n const vpW=vp[2], vpH=vp[3]; // signed — carry y-convention through all helpers\n\n if (from===EYE && to===WORLD) return _applyDir(out,m.mat4Eye, dx,dy,dz);\n if (from===WORLD && to===EYE) return _applyDir(out,m.mat4View,dx,dy,dz);\n\n if (from===WORLD && to===SCREEN) return _worldToScreenDir(out,dx,dy,dz,m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n if (from===SCREEN && to===WORLD) return _screenToWorldDir(out,dx,dy,dz,m.mat4Proj,m.mat4Eye, vpW,vpH,ndcZMin);\n\n if (from===SCREEN && to===NDC) return _screenToNDCDir(out,dx,dy,dz,vpW,vpH,ndcZMin);\n if (from===NDC && to===SCREEN) return _ndcToScreenDir(out,dx,dy,dz,vpW,vpH,ndcZMin);\n\n if (from===WORLD && to===NDC) {\n _worldToScreenDir(out,dx,dy,dz,m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n return _screenToNDCDir(out,out[0],out[1],out[2],vpW,vpH,ndcZMin);\n }\n if (from===NDC && to===WORLD) {\n _ndcToScreenDir(out,dx,dy,dz,vpW,vpH,ndcZMin);\n return _screenToWorldDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4Eye,vpW,vpH,ndcZMin);\n }\n\n if (from===EYE && to===SCREEN) {\n _applyDir(out,m.mat4Eye,dx,dy,dz);\n return _worldToScreenDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n }\n if (from===SCREEN && to===EYE) {\n _screenToWorldDir(out,dx,dy,dz,m.mat4Proj,m.mat4Eye,vpW,vpH,ndcZMin);\n return _applyDir(out,m.mat4View,out[0],out[1],out[2]);\n }\n\n if (from===EYE && to===NDC) {\n _applyDir(out,m.mat4Eye,dx,dy,dz);\n _worldToScreenDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n return _screenToNDCDir(out,out[0],out[1],out[2],vpW,vpH,ndcZMin);\n }\n if (from===NDC && to===EYE) {\n _ndcToScreenDir(out,dx,dy,dz,vpW,vpH,ndcZMin);\n _screenToWorldDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4Eye,vpW,vpH,ndcZMin);\n return _applyDir(out,m.mat4View,out[0],out[1],out[2]);\n }\n\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 if (from===MATRIX && to===EYE) {\n _applyDir(out,m.fromFrame,dx,dy,dz);\n return _applyDir(out,m.mat4View,out[0],out[1],out[2]);\n }\n if (from===EYE && to===MATRIX) {\n _applyDir(out,m.mat4Eye,dx,dy,dz);\n return _applyDir(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===SCREEN) {\n _applyDir(out,m.fromFrame,dx,dy,dz);\n return _worldToScreenDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n }\n if (from===SCREEN && to===MATRIX) {\n _screenToWorldDir(out,dx,dy,dz,m.mat4Proj,m.mat4Eye,vpW,vpH,ndcZMin);\n return _applyDir(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===NDC) {\n _applyDir(out,m.fromFrame,dx,dy,dz);\n _worldToScreenDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4View,vpW,vpH,ndcZMin);\n return _screenToNDCDir(out,out[0],out[1],out[2],vpW,vpH,ndcZMin);\n }\n if (from===NDC && to===MATRIX) {\n _ndcToScreenDir(out,dx,dy,dz,vpW,vpH,ndcZMin);\n _screenToWorldDir(out,out[0],out[1],out[2],m.mat4Proj,m.mat4Eye,vpW,vpH,ndcZMin);\n return _applyDir(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\n if (from===MATRIX && to===MATRIX) {\n _applyDir(out,m.fromFrame,dx,dy,dz);\n return _applyDir(out,m.toFrameInv,out[0],out[1],out[2]);\n }\n\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 in pixels (positive).\n * @param {number} eyeZ Eye-space Z — negative means in front of camera.\n * @param {number} ndcZMin WEBGL (−1) or WEBGPU (0).\n */\nexport function pixelRatio(proj, vpH, eyeZ, ndcZMin) {\n return projIsOrtho(proj)\n ? Math.abs(projTop(proj,ndcZMin)-projBottom(proj,ndcZMin)) / vpH\n : 2*Math.abs(eyeZ)*Math.tan(projFov(proj)/2) / vpH;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Pick-matrix\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Mutate a projection matrix in-place so that the pixel at (px, py) maps to\n * the full NDC square — making a 1×1 FBO render contain exactly that pixel.\n *\n * Premultiplies by M_pick (column-major, rows 2 and 3 unchanged):\n *\n * ┌ sx 0 0 tx ┐ sx = |vp[2]|, sy = |vp[3]|\n * │ 0 sy 0 ty │ cx = ((px−vp[0])/vp[2])·2 − 1 (NDC x of pixel centre)\n * │ 0 0 1 0 │ cy = ((py−vp[1])/vp[3])·2 − 1 (NDC y, sign-aware)\n * └ 0 0 0 1 ┘ tx = −cx·sx, ty = −cy·sy\n *\n * Result: P_pick = M_pick · P_original.\n * The viewport sign convention (vp[3] < 0 for screen y-down) is preserved\n * automatically through cx/cy — no separate flip needed.\n *\n * @param {Float32Array} proj Projection mat4 — mutated in place.\n * @param {number} px Query pixel X in screen coordinates.\n * @param {number} py Query pixel Y in screen coordinates.\n * @param {number[]} vp Viewport [x, y, w, h]; same signed convention as mapLocation.\n */\nexport function mat4Pick(proj, px, py, vp) {\n const cx=((px-vp[0])/vp[2])*2-1;\n const cy=((py-vp[1])/vp[3])*2-1;\n const sx=Math.abs(vp[2]), sy=Math.abs(vp[3]);\n const tx=-cx*sx, ty=-cy*sy;\n for (let j=0; j<4; j++) {\n const a=proj[j*4], b=proj[j*4+1], d=proj[j*4+3];\n proj[j*4] = sx*a + tx*d;\n proj[j*4+1] = sy*b + ty*d;\n }\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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AC,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,CA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AC,CAAC,CAAC,GAAG;AACX,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACrF,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACrF,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG;AACrF,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACpG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAChG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAChG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAChG,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;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,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,EAAE,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;AAChF,QAAQ,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,EAAE,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;AAClF,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;AACnC,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE;AAC3D,EAAE,OAAO,YAAY,CAAC,GAAG,EAAE,GAAG;AAC9B,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AAC3B;;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,EAAE,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;AAChF,QAAQ,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,EAAE,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;AAClF,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,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,EAAE,OAAO,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEpF,SAAS,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;AACpD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO;AAC/B,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;AACpD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;AACjC,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,SAAS,CAAC,CAAC,EAAE;AACtB,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM;AAC/B,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC;AACjC,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;AAC3C,EAAE,OAAO,CAAC,CAAC,MAAM;AACjB;;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,EAAE,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,GAAG,MAAM,EAAE,OAAO,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AAC9F,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,KAAK,EAAE,OAAO,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC;;AAE7F,EAAE,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,IAAI,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/E,EAAE,IAAI,IAAI,GAAG,GAAG,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;;AAE9E,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,GAAG,KAAK,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;AAChF,EAAE,IAAI,IAAI,GAAG,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;;AAEhF,EAAE,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,EAAE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5E,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAE3E,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE;AACjC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;AACrB,IAAI,OAAO,cAAc,CAAC,GAAG,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;AAC3D,8BAA8B,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;AAC3D,8BAA8B,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,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AACrF,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,GAAG,EAAE;AACjC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC;AACvD,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5D,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE;AAC9B,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;AACrB,IAAI,OAAO,WAAW,CAAC,GAAG,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;AACxD,2BAA2B,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;AACxD,2BAA2B,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,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE;AAC9B,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzC,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5D,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,KAAK,EAAE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChF,EAAE,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,GAAG,MAAM,EAAE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAEjF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,GAAG,EAAE;AACjC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;AACvB,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,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;AACpE,uCAAuC,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;AACpE,uCAAuC,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,CAAC;AACtE,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE;AACjC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;AACrB,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,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;AACtE,yCAAyC,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;AACtE,yCAAyC,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,CAAC;AACxE,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,MAAM,EAAE;AACpC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;AACvB,IAAI,OAAO,cAAc,CAAC,GAAG,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;AAC3D,8BAA8B,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;AAC3D,8BAA8B,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,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AACrF,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,MAAM,EAAE;AACpC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC;AACvD,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9D,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,GAAG,EAAE;AACjC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;AACvB,IAAI,OAAO,WAAW,CAAC,GAAG,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;AACxD,2BAA2B,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;AACxD,2BAA2B,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,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE;AACjC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzC,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9D,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,MAAM,EAAE;AACpC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;AACvB,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,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;AACtE,yCAAyC,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;AACtE,yCAAyC,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,CAAC;AACxE,EAAE;;AAEF,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;AACA;AACA;;AAEA,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,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,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3C,QAAQ,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,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG;AACnD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG;AACnD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG;AAC5D,EAAE,OAAO,GAAG;AACZ;;AAEA,SAAS,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;AAC1E;AACA,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACvF,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,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AACvE,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,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG;AACjE,EAAE,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;AAE7B,EAAE,IAAI,IAAI,GAAG,GAAG,MAAM,EAAE,GAAG,KAAK,GAAG,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5E,EAAE,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,KAAK,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAE5E,EAAE,IAAI,IAAI,GAAG,KAAK,KAAK,EAAE,GAAG,MAAM,EAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AAChH,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,KAAK,GAAG,OAAO,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;;AAEhH,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,GAAG,KAAK,OAAO,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACxF,EAAE,IAAI,IAAI,GAAG,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;;AAExF,EAAE,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,EAAE;AAChC,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACzE,IAAI,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACpE,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE;AAChC,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACjD,IAAI,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3F,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE;AACjC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACrC,IAAI,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AAC5F,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,GAAG,EAAE;AACjC,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACxE,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE;AAC9B,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACrC,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACrF,IAAI,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACpE,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE;AAC9B,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACjD,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACpF,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,KAAK,GAAG,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/E,EAAE,IAAI,IAAI,GAAG,KAAK,KAAK,EAAE,GAAG,MAAM,EAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAE/E,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,GAAG,EAAE;AACjC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE;AACjC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACrC,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,MAAM,EAAE;AACpC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,IAAI,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AAC5F,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,MAAM,EAAE;AACpC,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACxE,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,GAAG,EAAE;AACjC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACrF,IAAI,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACpE,EAAE;AACF,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE;AACjC,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACjD,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AACpF,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,EAAE;;AAEF,EAAE,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,MAAM,EAAE;AACpC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvC,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,EAAE;;AAEF,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,OAAO,WAAW,CAAC,IAAI;AACzB,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG;AACjE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;AACtD;;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,EAAE,EAAE;AAC3C,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9C,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;AAC5B,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7B,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7B,EAAE;AACF;;ACxlBA;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;;;;"}
|