{"version":3,"file":"atmosphere-Be9SKRTV.js","sources":["../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-geospatial@0.9.1_@react-three+fiber@9.5.0_@types+react@19.2.7_react-dom@1_ed514df8ad1cef808343b50b329ada0e/node_modules/@takram/three-geospatial/build/shared.js","../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-geospatial@0.9.1_@react-three+fiber@9.5.0_@types+react@19.2.7_react-dom@1_ed514df8ad1cef808343b50b329ada0e/node_modules/@takram/three-geospatial/build/shared2.js","../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-geospatial@0.9.1_@react-three+fiber@9.5.0_@types+react@19.2.7_react-dom@1_ed514df8ad1cef808343b50b329ada0e/node_modules/@takram/three-geospatial/build/shared3.js","../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-geospatial@0.9.1_@react-three+fiber@9.5.0_@types+react@19.2.7_react-dom@1_ed514df8ad1cef808343b50b329ada0e/node_modules/@takram/three-geospatial/build/index.js","../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-geospatial@0.9.1_@react-three+fiber@9.5.0_@types+react@19.2.7_react-dom@1_ed514df8ad1cef808343b50b329ada0e/node_modules/@takram/three-geospatial/build/shaders.js","../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-atmosphere@0.19.1_@react-three+fiber@9.5.0_@types+react@19.2.7_react-dom@_d74a32a65ba5f77703476e8c3481c2dd/node_modules/@takram/three-atmosphere/build/shared2.js","../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-atmosphere@0.19.1_@react-three+fiber@9.5.0_@types+react@19.2.7_react-dom@_d74a32a65ba5f77703476e8c3481c2dd/node_modules/@takram/three-atmosphere/build/shared3.js","../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-atmosphere@0.19.1_@react-three+fiber@9.5.0_@types+react@19.2.7_react-dom@_d74a32a65ba5f77703476e8c3481c2dd/node_modules/@takram/three-atmosphere/build/shared.js","../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-atmosphere@0.19.1_@react-three+fiber@9.5.0_@types+react@19.2.7_react-dom@_d74a32a65ba5f77703476e8c3481c2dd/node_modules/@takram/three-atmosphere/build/shaders/bruneton.js","../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-clouds@0.7.6_@react-three+fiber@9.5.0_@types+react@19.2.7_react-dom@19.2._6810dd69358ea38067b34ae28f3336f8/node_modules/@takram/three-clouds/build/shared.js","../../../../home/roko/Documents/Projects/Adjacent/noclip-unified/earth/node_modules/.pnpm/@takram+three-geospatial-effects@0.6.4_@react-three+fiber@9.5.0_@types+react@19.2.7_rea_3317b1c55d5216c68b0bc1f124d6bc8b/node_modules/@takram/three-geospatial-effects/build/shared.js"],"sourcesContent":["var a = \"production\" === \"production\", n = \"Invariant failed\";\nfunction c(i, r) {\n  if (!i) {\n    if (a)\n      throw new Error(n);\n    var o = typeof r == \"function\" ? r() : r, t = o ? \"\".concat(n, \": \").concat(o) : n;\n    throw new Error(t);\n  }\n}\nexport {\n  c as i\n};\n//# sourceMappingURL=shared.js.map\n","import { BufferGeometry as h, Sphere as u, Vector3 as m, Float32BufferAttribute as r, Loader as T, Data3DTexture as g, FileLoader as f, UnsignedByteType as l, RedFormat as w, NearestFilter as i, RepeatWrapping as a } from \"three\";\nimport { i as b } from \"./shared.js\";\nconst S = 128, y = 128, E = 64, R = \"9627216cc50057994c98a2118f3c4a23765d43b9\", _ = `https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/${R}/packages/core/assets/stbn.bin`;\nclass F extends h {\n  constructor() {\n    super(), this.boundingSphere = new u(), this.boundingSphere.set(new m(), 1 / 0), this.setAttribute(\n      \"position\",\n      new r([-1, 3, 0, -1, -1, 0, 3, -1, 0], 3)\n    ), this.setAttribute(\"uv\", new r([0, -1, 0, 1, 2, 1], 2));\n  }\n}\nclass A extends T {\n  load(o, d, p, c) {\n    const e = new g(), t = new f(this.manager);\n    return t.setPath(this.path), t.setRequestHeader(this.requestHeader), t.setWithCredentials(this.withCredentials), t.setResponseType(\"arraybuffer\"), t.load(\n      o,\n      (s) => {\n        b(s instanceof ArrayBuffer), e.image.data = new Uint8Array(s), e.image.width = S, e.image.height = y, e.image.depth = E, e.type = l, e.format = w, e.minFilter = i, e.magFilter = i, e.wrapS = a, e.wrapT = a, e.wrapR = a, e.needsUpdate = !0, d?.(e);\n      },\n      p,\n      c\n    ), e;\n  }\n}\nexport {\n  _ as D,\n  F as Q,\n  A as S,\n  E as a,\n  y as b,\n  S as c\n};\n//# sourceMappingURL=shared2.js.map\n","import { Vector3 as a, Matrix4 as T, BufferGeometry as W, BufferAttribute as S } from \"three\";\nimport { i as O } from \"./shared.js\";\nconst $ = /* @__PURE__ */ new a();\nfunction D(q, t, i = new a(), s) {\n  const { x: r, y: e, z: n } = q, o = t.x, h = t.y, u = t.z, d = r * r * o, m = e * e * h, c = n * n * u, l = d + m + c, p = Math.sqrt(1 / l);\n  if (!Number.isFinite(p))\n    return;\n  const w = $.copy(q).multiplyScalar(p);\n  if (l < (s?.centerTolerance ?? 0.1))\n    return i.copy(w);\n  const f = w.multiply(t).multiplyScalar(2);\n  let y = (1 - p) * q.length() / (f.length() / 2), I = 0, x, M, g, v;\n  do {\n    y -= I, x = 1 / (1 + y * o), M = 1 / (1 + y * h), g = 1 / (1 + y * u);\n    const V = x * x, F = M * M, L = g * g, G = V * x, j = F * M, B = L * g;\n    v = d * V + m * F + c * L - 1, I = v / ((d * G * o + m * j * h + c * B * u) * -2);\n  } while (Math.abs(v) > 1e-12);\n  return i.set(r * x, e * M, n * g);\n}\nconst E = /* @__PURE__ */ new a(), R = /* @__PURE__ */ new a(), U = /* @__PURE__ */ new a(), b = class b {\n  constructor(t, i, s) {\n    this.radii = new a(t, i, s);\n  }\n  // TODO: Rename to semiMinorAxis\n  get minimumRadius() {\n    return Math.min(this.radii.x, this.radii.y, this.radii.z);\n  }\n  // TODO: Rename to semiMajorAxis\n  get maximumRadius() {\n    return Math.max(this.radii.x, this.radii.y, this.radii.z);\n  }\n  get flattening() {\n    return 1 - this.minimumRadius / this.maximumRadius;\n  }\n  get eccentricity() {\n    return Math.sqrt(this.eccentricitySquared);\n  }\n  get eccentricitySquared() {\n    const t = this.maximumRadius ** 2, i = this.minimumRadius ** 2;\n    return (t - i) / t;\n  }\n  reciprocalRadii(t = new a()) {\n    const { x: i, y: s, z: r } = this.radii;\n    return t.set(1 / i, 1 / s, 1 / r);\n  }\n  reciprocalRadiiSquared(t = new a()) {\n    const { x: i, y: s, z: r } = this.radii;\n    return t.set(1 / i ** 2, 1 / s ** 2, 1 / r ** 2);\n  }\n  projectOnSurface(t, i = new a(), s) {\n    return D(\n      t,\n      this.reciprocalRadiiSquared(),\n      i,\n      s\n    );\n  }\n  getSurfaceNormal(t, i = new a()) {\n    return i.multiplyVectors(this.reciprocalRadiiSquared(E), t).normalize();\n  }\n  getEastNorthUpVectors(t, i = new a(), s = new a(), r = new a()) {\n    this.getSurfaceNormal(t, r), i.set(-t.y, t.x, 0).normalize(), s.crossVectors(r, i).normalize();\n  }\n  getEastNorthUpFrame(t, i = new T()) {\n    const s = E, r = R, e = U;\n    return this.getEastNorthUpVectors(t, s, r, e), i.makeBasis(s, r, e).setPosition(t);\n  }\n  getNorthUpEastFrame(t, i = new T()) {\n    const s = E, r = R, e = U;\n    return this.getEastNorthUpVectors(t, s, r, e), i.makeBasis(r, e, s).setPosition(t);\n  }\n  getIntersection(t, i = new a()) {\n    const s = this.reciprocalRadii(E), r = R.copy(s).multiply(t.origin), e = U.copy(s).multiply(t.direction), n = r.lengthSq(), o = e.lengthSq(), h = r.dot(e), u = h ** 2 - o * (n - 1);\n    if (n === 1)\n      return i.copy(t.origin);\n    if (n > 1) {\n      if (h >= 0 || u < 0)\n        return;\n      const d = Math.sqrt(u), m = (-h - d) / o, c = (-h + d) / o;\n      return t.at(Math.min(m, c), i);\n    }\n    if (n < 1) {\n      const d = h ** 2 - o * (n - 1), m = Math.sqrt(d), c = (-h + m) / o;\n      return t.at(c, i);\n    }\n    if (h < 0)\n      return t.at(-h / o, i);\n  }\n  getOsculatingSphereCenter(t, i, s = new a()) {\n    O(this.radii.x === this.radii.y);\n    const r = this.radii.x ** 2, e = this.radii.z ** 2, n = E.set(\n      t.x / r,\n      t.y / r,\n      t.z / e\n    ).normalize();\n    return s.copy(n.multiplyScalar(-i).add(t));\n  }\n  getNormalAtHorizon(t, i, s = new a()) {\n    O(this.radii.x === this.radii.y);\n    const r = this.radii.x ** 2, e = this.radii.z ** 2, n = t, o = i;\n    let h = (n.x * o.x + n.y * o.y) / r + n.z * o.z / e;\n    h /= (n.x ** 2 + n.y ** 2) / r + n.z ** 2 / e;\n    const u = E.copy(o).multiplyScalar(-h).add(t);\n    return s.set(u.x / r, u.y / r, u.z / e).normalize();\n  }\n};\nb.WGS84 = /* @__PURE__ */ new b(\n  6378137,\n  6378137,\n  6356752314245179e-9\n);\nlet N = b;\nclass Q extends W {\n  constructor(t = new a(1, 1, 1), i = 32, s = 16) {\n    super(), this.type = \"EllipsoidGeometry\", this.parameters = {\n      radii: t,\n      longitudeSegments: i,\n      latitudeSegments: s\n    }, i = Math.max(3, Math.floor(i)), s = Math.max(2, Math.floor(s));\n    const r = (i + 1) * (s + 1), e = new a(), n = new a(), o = new Float32Array(r * 3), h = new Float32Array(r * 3), u = new Float32Array(r * 2), d = [], m = [];\n    for (let c = 0, l = 0, p = 0, w = 0; c <= s; ++c) {\n      const f = [], y = c / s, I = y * Math.PI;\n      let x = 0;\n      c === 0 ? x = 0.5 / i : c === s && (x = -0.5 / i);\n      for (let M = 0; M <= i; ++M, l += 3, p += 2, ++w) {\n        const g = M / i, v = (g - 0.5) * Math.PI * 2;\n        e.x = t.x * Math.cos(v) * Math.sin(I), e.y = t.y * Math.sin(v) * Math.sin(I), e.z = t.z * Math.cos(I), o[l] = e.x, o[l + 1] = e.y, o[l + 2] = e.z, n.copy(e).normalize(), h[l] = n.x, h[l + 1] = n.y, h[l + 2] = n.z, u[p] = g + x, u[p + 1] = 1 - y, f.push(w);\n      }\n      d.push(f);\n    }\n    for (let c = 0; c < s; ++c)\n      for (let l = 0; l < i; ++l) {\n        const p = d[c][l + 1], w = d[c][l], f = d[c + 1][l], y = d[c + 1][l + 1];\n        c !== 0 && m.push(p, w, y), c !== s - 1 && m.push(w, f, y);\n      }\n    this.setIndex(m), this.setAttribute(\"position\", new S(o, 3)), this.setAttribute(\"normal\", new S(h, 3)), this.setAttribute(\"uv\", new S(u, 2));\n  }\n  copy(t) {\n    return super.copy(t), this.parameters = { ...t.parameters }, this;\n  }\n}\nconst A = /* @__PURE__ */ new a(), P = /* @__PURE__ */ new a(), z = class z {\n  constructor(t = 0, i = 0, s = 0) {\n    this.longitude = t, this.latitude = i, this.height = s;\n  }\n  set(t, i, s) {\n    return this.longitude = t, this.latitude = i, s != null && (this.height = s), this;\n  }\n  clone() {\n    return new z(this.longitude, this.latitude, this.height);\n  }\n  copy(t) {\n    return this.longitude = t.longitude, this.latitude = t.latitude, this.height = t.height, this;\n  }\n  equals(t) {\n    return t.longitude === this.longitude && t.latitude === this.latitude && t.height === this.height;\n  }\n  setLongitude(t) {\n    return this.longitude = t, this;\n  }\n  setLatitude(t) {\n    return this.latitude = t, this;\n  }\n  setHeight(t) {\n    return this.height = t, this;\n  }\n  normalize() {\n    return this.longitude < z.MIN_LONGITUDE && (this.longitude += Math.PI * 2), this;\n  }\n  // See: https://en.wikipedia.org/wiki/Geographic_coordinate_conversion\n  // Reference: https://github.com/CesiumGS/cesium/blob/1.122/packages/engine/Source/Core/Geodetic.js#L119\n  setFromECEF(t, i) {\n    const r = (i?.ellipsoid ?? N.WGS84).reciprocalRadiiSquared(A), e = D(\n      t,\n      r,\n      P,\n      i\n    );\n    if (e == null)\n      throw new Error(\n        `Could not project position to ellipsoid surface: ${t.toArray()}`\n      );\n    const n = A.multiplyVectors(e, r).normalize();\n    this.longitude = Math.atan2(n.y, n.x), this.latitude = Math.asin(n.z);\n    const o = A.subVectors(t, e);\n    return this.height = Math.sign(o.dot(t)) * o.length(), this;\n  }\n  // See: https://en.wikipedia.org/wiki/Geographic_coordinate_conversion\n  // Reference: https://github.com/CesiumGS/cesium/blob/1.122/packages/engine/Source/Core/Cartesian3.js#L916\n  toECEF(t = new a(), i) {\n    const s = i?.ellipsoid ?? N.WGS84, r = A.multiplyVectors(\n      s.radii,\n      s.radii\n    ), e = Math.cos(this.latitude), n = P.set(\n      e * Math.cos(this.longitude),\n      e * Math.sin(this.longitude),\n      Math.sin(this.latitude)\n    ).normalize();\n    return t.multiplyVectors(r, n), t.divideScalar(Math.sqrt(n.dot(t))).add(n.multiplyScalar(this.height));\n  }\n  fromArray(t, i = 0) {\n    return this.longitude = t[i], this.latitude = t[i + 1], this.height = t[i + 2], this;\n  }\n  toArray(t = [], i = 0) {\n    return t[i] = this.longitude, t[i + 1] = this.latitude, t[i + 2] = this.height, t;\n  }\n  *[Symbol.iterator]() {\n    yield this.longitude, yield this.latitude, yield this.height;\n  }\n};\nz.MIN_LONGITUDE = -Math.PI, z.MAX_LONGITUDE = Math.PI, z.MIN_LATITUDE = -Math.PI / 2, z.MAX_LATITUDE = Math.PI / 2;\nlet C = z;\nexport {\n  N as E,\n  C as G,\n  Q as a\n};\n//# sourceMappingURL=shared3.js.map\n","import { Loader as K, FileLoader as ze, BufferGeometry as He, BufferAttribute as Ht, Box3 as We, Vector3 as U, Sphere as Ve, WebGLRenderer as Ye, LinearFilter as Wt, RGBAFormat as Xe, ByteType as qe, UnsignedByteType as Vt, ShortType as ke, UnsignedShortType as Je, IntType as $e, UnsignedIntType as Qe, HalfFloatType as Ze, FloatType as Yt, MathUtils as _, Material as pt, Data3DTexture as Ke, DataTexture as tn, Quaternion as en, Matrix4 as nn, Ray as rn, Vector2 as ue } from \"three\";\nimport { i as ye } from \"./shared.js\";\nimport { D as ns, Q as rs, S as ss, a as os, b as is, c as cs } from \"./shared2.js\";\nimport { E as Xt, G as V } from \"./shared3.js\";\nimport { a as hs } from \"./shared3.js\";\nimport { EXRLoader as de } from \"three/addons/loaders/EXRLoader.js\";\nclass sn extends K {\n  load(t, n, r, o) {\n    const s = new ze(this.manager);\n    s.setResponseType(\"arraybuffer\"), s.setRequestHeader(this.requestHeader), s.setPath(this.path), s.setWithCredentials(this.withCredentials), s.load(\n      t,\n      (i) => {\n        ye(i instanceof ArrayBuffer);\n        try {\n          n(i);\n        } catch (c) {\n          o != null ? o(c) : console.error(c), this.manager.itemError(t);\n        }\n      },\n      r,\n      o\n    );\n  }\n}\nfunction Ar(e) {\n  const { attributes: t, index: n, boundingBox: r, boundingSphere: o } = e;\n  return [\n    { attributes: t, index: n, boundingBox: r, boundingSphere: o },\n    [\n      ...Object.values(e.attributes).map(\n        (s) => s.array.buffer\n      ),\n      e.index?.array.buffer\n    ].filter((s) => s != null)\n  ];\n}\nfunction gr(e, t = new He()) {\n  for (const [n, r] of Object.entries(e.attributes))\n    t.setAttribute(\n      n,\n      new Ht(\n        r.array,\n        r.itemSize,\n        r.normalized\n      )\n    );\n  if (t.index = e.index != null ? new Ht(\n    e.index.array,\n    e.index.itemSize,\n    e.index.normalized\n  ) : null, e.boundingBox != null) {\n    const { min: n, max: r } = e.boundingBox;\n    t.boundingBox = new We(\n      new U(n.x, n.y, n.z),\n      new U(r.x, r.y, r.z)\n    );\n  }\n  if (e.boundingSphere != null) {\n    const { center: n, radius: r } = e.boundingSphere;\n    t.boundingSphere = new Ve(\n      new U(n.x, n.y, n.z),\n      r\n    );\n  }\n  return t;\n}\nfunction wr(e) {\n  return e instanceof Ye ? e.getContext().getExtension(\"OES_texture_float_linear\") != null : e.backend.hasFeature?.(\"float32-filterable\") ?? !1;\n}\nconst on = \"This is not an object\", cn = \"This is not a Float16Array object\", qt = \"This constructor is not a subclass of Float16Array\", pe = \"The constructor property value is not an object\", an = \"Species constructor didn't return TypedArray object\", hn = \"Derived constructor created TypedArray object which was too small length\", J = \"Attempting to access detached ArrayBuffer\", Pt = \"Cannot convert undefined or null to object\", xt = \"Cannot mix BigInt and other types, use explicit conversions\", kt = \"@@iterator property is not callable\", Jt = \"Reduce of empty array with no initial value\", fn = \"The comparison function must be either a function or undefined\", St = \"Offset is out of bounds\";\nfunction g(e) {\n  return (t, ...n) => S(e, t, n);\n}\nfunction H(e, t) {\n  return g(\n    v(\n      e,\n      t\n    ).get\n  );\n}\nconst {\n  apply: S,\n  construct: q,\n  defineProperty: $t,\n  get: mt,\n  getOwnPropertyDescriptor: v,\n  getPrototypeOf: tt,\n  has: Nt,\n  ownKeys: Ae,\n  set: Qt,\n  setPrototypeOf: ge\n} = Reflect, ln = Proxy, {\n  EPSILON: un,\n  MAX_SAFE_INTEGER: Zt,\n  isFinite: we,\n  isNaN: G\n} = Number, {\n  iterator: x,\n  species: yn,\n  toStringTag: Mt,\n  for: dn\n} = Symbol, j = Object, {\n  create: At,\n  defineProperty: et,\n  freeze: pn,\n  is: Kt\n} = j, Lt = j.prototype, An = (\n  /** @type {any} */\n  Lt.__lookupGetter__ ? g(\n    /** @type {any} */\n    Lt.__lookupGetter__\n  ) : (e, t) => {\n    if (e == null)\n      throw w(\n        Pt\n      );\n    let n = j(e);\n    do {\n      const r = v(n, t);\n      if (r !== void 0)\n        return R(r, \"get\") ? r.get : void 0;\n    } while ((n = tt(n)) !== null);\n  }\n), R = (\n  /** @type {any} */\n  j.hasOwn || g(Lt.hasOwnProperty)\n), Te = Array, be = Te.isArray, gt = Te.prototype, gn = g(gt.join), wn = g(gt.push), Tn = g(\n  gt.toLocaleString\n), Bt = gt[x], bn = g(Bt), {\n  abs: Sn,\n  trunc: Se\n} = Math, wt = ArrayBuffer, mn = wt.isView, me = wt.prototype, _n = g(me.slice), En = H(me, \"byteLength\"), Rt = typeof SharedArrayBuffer < \"u\" ? SharedArrayBuffer : null, In = Rt && H(Rt.prototype, \"byteLength\"), Ft = tt(Uint8Array), On = Ft.from, b = Ft.prototype, Pn = b[x], xn = g(b.keys), Nn = g(\n  b.values\n), Ln = g(\n  b.entries\n), Rn = g(b.set), te = g(\n  b.reverse\n), Un = g(b.fill), Cn = g(\n  b.copyWithin\n), ee = g(b.sort), Y = g(b.slice), Mn = g(\n  b.subarray\n), T = H(\n  b,\n  \"buffer\"\n), C = H(\n  b,\n  \"byteOffset\"\n), y = H(\n  b,\n  \"length\"\n), _e = H(\n  b,\n  Mt\n), Bn = Uint8Array, m = Uint16Array, ne = (...e) => S(On, m, e), Dt = Uint32Array, Fn = Float32Array, M = tt([][x]()), Tt = g(M.next), Dn = g((function* () {\n})().next), vn = tt(M), Gn = DataView.prototype, jn = g(\n  Gn.getUint16\n), w = TypeError, _t = RangeError, Ee = WeakSet, Ie = Ee.prototype, zn = g(Ie.add), Hn = g(Ie.has), bt = WeakMap, vt = bt.prototype, at = g(vt.get), Wn = g(vt.has), Gt = g(vt.set), Oe = new bt(), Vn = At(null, {\n  next: {\n    value: function() {\n      const t = at(Oe, this);\n      return Tt(t);\n    }\n  },\n  [x]: {\n    value: function() {\n      return this;\n    }\n  }\n});\nfunction k(e) {\n  if (e[x] === Bt && M.next === Tt)\n    return e;\n  const t = At(Vn);\n  return Gt(Oe, t, bn(e)), t;\n}\nconst Pe = new bt(), xe = At(vn, {\n  next: {\n    value: function() {\n      const t = at(Pe, this);\n      return Dn(t);\n    },\n    writable: !0,\n    configurable: !0\n  }\n});\nfor (const e of Ae(M))\n  e !== \"next\" && et(xe, e, v(M, e));\nfunction re(e) {\n  const t = At(xe);\n  return Gt(Pe, t, e), t;\n}\nfunction ht(e) {\n  return e !== null && typeof e == \"object\" || typeof e == \"function\";\n}\nfunction se(e) {\n  return e !== null && typeof e == \"object\";\n}\nfunction ft(e) {\n  return _e(e) !== void 0;\n}\nfunction Ut(e) {\n  const t = _e(e);\n  return t === \"BigInt64Array\" || t === \"BigUint64Array\";\n}\nfunction Yn(e) {\n  try {\n    return be(e) ? !1 : (En(\n      /** @type {any} */\n      e\n    ), !0);\n  } catch {\n    return !1;\n  }\n}\nfunction Ne(e) {\n  if (Rt === null)\n    return !1;\n  try {\n    return In(\n      /** @type {any} */\n      e\n    ), !0;\n  } catch {\n    return !1;\n  }\n}\nfunction Xn(e) {\n  return Yn(e) || Ne(e);\n}\nfunction oe(e) {\n  return be(e) ? e[x] === Bt && M.next === Tt : !1;\n}\nfunction qn(e) {\n  return ft(e) ? e[x] === Pn && M.next === Tt : !1;\n}\nfunction nt(e) {\n  if (typeof e != \"string\")\n    return !1;\n  const t = +e;\n  return e !== t + \"\" || !we(t) ? !1 : t === Se(t);\n}\nconst lt = dn(\"__Float16Array__\");\nfunction kn(e) {\n  if (!se(e))\n    return !1;\n  const t = tt(e);\n  if (!se(t))\n    return !1;\n  const n = t.constructor;\n  if (n === void 0)\n    return !1;\n  if (!ht(n))\n    throw w(pe);\n  return Nt(n, lt);\n}\nconst Ct = 1 / un;\nfunction Jn(e) {\n  return e + Ct - Ct;\n}\nconst Le = 6103515625e-14, $n = 65504, Re = 9765625e-10, ie = Re * Le, Qn = Re * Ct;\nfunction Zn(e) {\n  const t = +e;\n  if (!we(t) || t === 0)\n    return t;\n  const n = t > 0 ? 1 : -1, r = Sn(t);\n  if (r < Le)\n    return n * Jn(r / ie) * ie;\n  const o = (1 + Qn) * r, s = o - (o - r);\n  return s > $n || G(s) ? n * (1 / 0) : n * s;\n}\nconst Ue = new wt(4), Ce = new Fn(Ue), Me = new Dt(Ue), E = new m(512), I = new Bn(512);\nfor (let e = 0; e < 256; ++e) {\n  const t = e - 127;\n  t < -24 ? (E[e] = 0, E[e | 256] = 32768, I[e] = 24, I[e | 256] = 24) : t < -14 ? (E[e] = 1024 >> -t - 14, E[e | 256] = 1024 >> -t - 14 | 32768, I[e] = -t - 1, I[e | 256] = -t - 1) : t <= 15 ? (E[e] = t + 15 << 10, E[e | 256] = t + 15 << 10 | 32768, I[e] = 13, I[e | 256] = 13) : t < 128 ? (E[e] = 31744, E[e | 256] = 64512, I[e] = 24, I[e | 256] = 24) : (E[e] = 31744, E[e | 256] = 64512, I[e] = 13, I[e | 256] = 13);\n}\nfunction P(e) {\n  Ce[0] = Zn(e);\n  const t = Me[0], n = t >> 23 & 511;\n  return E[n] + ((t & 8388607) >> I[n]);\n}\nconst jt = new Dt(2048);\nfor (let e = 1; e < 1024; ++e) {\n  let t = e << 13, n = 0;\n  for (; (t & 8388608) === 0; )\n    t <<= 1, n -= 8388608;\n  t &= -8388609, n += 947912704, jt[e] = t | n;\n}\nfor (let e = 1024; e < 2048; ++e)\n  jt[e] = 939524096 + (e - 1024 << 13);\nconst W = new Dt(64);\nfor (let e = 1; e < 31; ++e)\n  W[e] = e << 23;\nW[31] = 1199570944;\nW[32] = 2147483648;\nfor (let e = 33; e < 63; ++e)\n  W[e] = 2147483648 + (e - 32 << 23);\nW[63] = 3347054592;\nconst Be = new m(64);\nfor (let e = 1; e < 64; ++e)\n  e !== 32 && (Be[e] = 1024);\nfunction p(e) {\n  const t = e >> 10;\n  return Me[0] = jt[Be[t] + (e & 1023)] + W[t], Ce[0];\n}\nfunction L(e) {\n  const t = +e;\n  return G(t) || t === 0 ? 0 : Se(t);\n}\nfunction Et(e) {\n  const t = L(e);\n  return t < 0 ? 0 : t < Zt ? t : Zt;\n}\nfunction rt(e, t) {\n  if (!ht(e))\n    throw w(on);\n  const n = e.constructor;\n  if (n === void 0)\n    return t;\n  if (!ht(n))\n    throw w(pe);\n  const r = n[yn];\n  return r ?? t;\n}\nfunction $(e) {\n  if (Ne(e))\n    return !1;\n  try {\n    return _n(e, 0, 0), !1;\n  } catch {\n  }\n  return !0;\n}\nfunction ce(e, t) {\n  const n = G(e), r = G(t);\n  if (n && r)\n    return 0;\n  if (n)\n    return 1;\n  if (r || e < t)\n    return -1;\n  if (e > t)\n    return 1;\n  if (e === 0 && t === 0) {\n    const o = Kt(e, 0), s = Kt(t, 0);\n    if (!o && s)\n      return -1;\n    if (o && !s)\n      return 1;\n  }\n  return 0;\n}\nconst zt = 2, ut = new bt();\nfunction D(e) {\n  return Wn(ut, e) || !mn(e) && kn(e);\n}\nfunction u(e) {\n  if (!D(e))\n    throw w(cn);\n}\nfunction st(e, t) {\n  const n = D(e), r = ft(e);\n  if (!n && !r)\n    throw w(an);\n  if (typeof t == \"number\") {\n    let o;\n    if (n) {\n      const s = l(e);\n      o = y(s);\n    } else\n      o = y(e);\n    if (o < t)\n      throw w(\n        hn\n      );\n  }\n  if (Ut(e))\n    throw w(xt);\n}\nfunction l(e) {\n  const t = at(ut, e);\n  if (t !== void 0) {\n    const o = T(t);\n    if ($(o))\n      throw w(J);\n    return t;\n  }\n  const n = (\n    /** @type {any} */\n    e.buffer\n  );\n  if ($(n))\n    throw w(J);\n  const r = q(A, [\n    n,\n    /** @type {any} */\n    e.byteOffset,\n    /** @type {any} */\n    e.length\n  ], e.constructor);\n  return at(ut, r);\n}\nfunction ae(e) {\n  const t = y(e), n = [];\n  for (let r = 0; r < t; ++r)\n    n[r] = p(e[r]);\n  return n;\n}\nconst Fe = new Ee();\nfor (const e of Ae(b)) {\n  if (e === Mt)\n    continue;\n  const t = v(b, e);\n  R(t, \"get\") && typeof t.get == \"function\" && zn(Fe, t.get);\n}\nconst Kn = pn(\n  /** @type {ProxyHandler<Float16BitsArray>} */\n  {\n    get(e, t, n) {\n      return nt(t) && R(e, t) ? p(mt(e, t)) : Hn(Fe, An(e, t)) ? mt(e, t) : mt(e, t, n);\n    },\n    set(e, t, n, r) {\n      return nt(t) && R(e, t) ? Qt(e, t, P(n)) : Qt(e, t, n, r);\n    },\n    getOwnPropertyDescriptor(e, t) {\n      if (nt(t) && R(e, t)) {\n        const n = v(e, t);\n        return n.value = p(n.value), n;\n      }\n      return v(e, t);\n    },\n    defineProperty(e, t, n) {\n      return nt(t) && R(e, t) && R(n, \"value\") && (n.value = P(n.value)), $t(e, t, n);\n    }\n  }\n);\nclass A {\n  /** @see https://tc39.es/ecma262/#sec-typedarray */\n  constructor(t, n, r) {\n    let o;\n    if (D(t))\n      o = q(m, [l(t)], new.target);\n    else if (ht(t) && !Xn(t)) {\n      let i, c;\n      if (ft(t)) {\n        i = t, c = y(t);\n        const a = T(t);\n        if ($(a))\n          throw w(J);\n        if (Ut(t))\n          throw w(xt);\n        const h = new wt(\n          c * zt\n        );\n        o = q(m, [h], new.target);\n      } else {\n        const a = t[x];\n        if (a != null && typeof a != \"function\")\n          throw w(kt);\n        a != null ? oe(t) ? (i = t, c = t.length) : (i = [.../** @type {Iterable<unknown>} */\n        t], c = i.length) : (i = /** @type {ArrayLike<unknown>} */\n        t, c = Et(i.length)), o = q(m, [c], new.target);\n      }\n      for (let a = 0; a < c; ++a)\n        o[a] = P(i[a]);\n    } else\n      o = q(m, arguments, new.target);\n    const s = (\n      /** @type {any} */\n      new ln(o, Kn)\n    );\n    return Gt(ut, s, o), s;\n  }\n  /**\n   * limitation: `Object.getOwnPropertyNames(Float16Array)` or `Reflect.ownKeys(Float16Array)` include this key\n   * @see https://tc39.es/ecma262/#sec-%typedarray%.from\n   */\n  static from(t, ...n) {\n    const r = this;\n    if (!Nt(r, lt))\n      throw w(\n        qt\n      );\n    if (r === A) {\n      if (D(t) && n.length === 0) {\n        const f = l(t), d = new m(\n          T(f),\n          C(f),\n          y(f)\n        );\n        return new A(\n          T(Y(d))\n        );\n      }\n      if (n.length === 0)\n        return new A(\n          T(\n            ne(t, P)\n          )\n        );\n      const a = n[0], h = n[1];\n      return new A(\n        T(\n          ne(t, function(f, ...d) {\n            return P(\n              S(a, this, [f, ...k(d)])\n            );\n          }, h)\n        )\n      );\n    }\n    let o, s;\n    const i = t[x];\n    if (i != null && typeof i != \"function\")\n      throw w(kt);\n    if (i != null)\n      oe(t) ? (o = t, s = t.length) : qn(t) ? (o = t, s = y(t)) : (o = [...t], s = o.length);\n    else {\n      if (t == null)\n        throw w(\n          Pt\n        );\n      o = j(t), s = Et(o.length);\n    }\n    const c = new r(s);\n    if (n.length === 0)\n      for (let a = 0; a < s; ++a)\n        c[a] = /** @type {number} */\n        o[a];\n    else {\n      const a = n[0], h = n[1];\n      for (let f = 0; f < s; ++f)\n        c[f] = S(a, h, [o[f], f]);\n    }\n    return c;\n  }\n  /**\n   * limitation: `Object.getOwnPropertyNames(Float16Array)` or `Reflect.ownKeys(Float16Array)` include this key\n   * @see https://tc39.es/ecma262/#sec-%typedarray%.of\n   */\n  static of(...t) {\n    const n = this;\n    if (!Nt(n, lt))\n      throw w(\n        qt\n      );\n    const r = t.length;\n    if (n === A) {\n      const s = new A(r), i = l(s);\n      for (let c = 0; c < r; ++c)\n        i[c] = P(t[c]);\n      return s;\n    }\n    const o = new n(r);\n    for (let s = 0; s < r; ++s)\n      o[s] = t[s];\n    return o;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys */\n  keys() {\n    u(this);\n    const t = l(this);\n    return xn(t);\n  }\n  /**\n   * limitation: returns a object whose prototype is not `%ArrayIteratorPrototype%`\n   * @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\n   */\n  values() {\n    u(this);\n    const t = l(this);\n    return re((function* () {\n      for (const n of Nn(t))\n        yield p(n);\n    })());\n  }\n  /**\n   * limitation: returns a object whose prototype is not `%ArrayIteratorPrototype%`\n   * @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\n   */\n  entries() {\n    u(this);\n    const t = l(this);\n    return re((function* () {\n      for (const [n, r] of Ln(t))\n        yield (\n          /** @type {[number, number]} */\n          [n, p(r)]\n        );\n    })());\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.at */\n  at(t) {\n    u(this);\n    const n = l(this), r = y(n), o = L(t), s = o >= 0 ? o : r + o;\n    if (!(s < 0 || s >= r))\n      return p(n[s]);\n  }\n  /** @see https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.with */\n  with(t, n) {\n    u(this);\n    const r = l(this), o = y(r), s = L(t), i = s >= 0 ? s : o + s, c = +n;\n    if (i < 0 || i >= o)\n      throw _t(St);\n    const a = new m(\n      T(r),\n      C(r),\n      y(r)\n    ), h = new A(\n      T(\n        Y(a)\n      )\n    ), f = l(h);\n    return f[i] = P(c), h;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.map */\n  map(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r), s = n[0], i = rt(r, A);\n    if (i === A) {\n      const a = new A(o), h = l(a);\n      for (let f = 0; f < o; ++f) {\n        const d = p(r[f]);\n        h[f] = P(\n          S(t, s, [d, f, this])\n        );\n      }\n      return a;\n    }\n    const c = new i(o);\n    st(c, o);\n    for (let a = 0; a < o; ++a) {\n      const h = p(r[a]);\n      c[a] = S(t, s, [h, a, this]);\n    }\n    return (\n      /** @type {any} */\n      c\n    );\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter */\n  filter(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r), s = n[0], i = [];\n    for (let h = 0; h < o; ++h) {\n      const f = p(r[h]);\n      S(t, s, [f, h, this]) && wn(i, f);\n    }\n    const c = rt(r, A), a = new c(i);\n    return st(a), /** @type {any} */\n    a;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce */\n  reduce(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r);\n    if (o === 0 && n.length === 0)\n      throw w(Jt);\n    let s, i;\n    n.length === 0 ? (s = p(r[0]), i = 1) : (s = n[0], i = 0);\n    for (let c = i; c < o; ++c)\n      s = t(\n        s,\n        p(r[c]),\n        c,\n        this\n      );\n    return s;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright */\n  reduceRight(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r);\n    if (o === 0 && n.length === 0)\n      throw w(Jt);\n    let s, i;\n    n.length === 0 ? (s = p(r[o - 1]), i = o - 2) : (s = n[0], i = o - 1);\n    for (let c = i; c >= 0; --c)\n      s = t(\n        s,\n        p(r[c]),\n        c,\n        this\n      );\n    return s;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach */\n  forEach(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r), s = n[0];\n    for (let i = 0; i < o; ++i)\n      S(t, s, [\n        p(r[i]),\n        i,\n        this\n      ]);\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.find */\n  find(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r), s = n[0];\n    for (let i = 0; i < o; ++i) {\n      const c = p(r[i]);\n      if (S(t, s, [c, i, this]))\n        return c;\n    }\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex */\n  findIndex(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r), s = n[0];\n    for (let i = 0; i < o; ++i) {\n      const c = p(r[i]);\n      if (S(t, s, [c, i, this]))\n        return i;\n    }\n    return -1;\n  }\n  /** @see https://tc39.es/proposal-array-find-from-last/index.html#sec-%typedarray%.prototype.findlast */\n  findLast(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r), s = n[0];\n    for (let i = o - 1; i >= 0; --i) {\n      const c = p(r[i]);\n      if (S(t, s, [c, i, this]))\n        return c;\n    }\n  }\n  /** @see https://tc39.es/proposal-array-find-from-last/index.html#sec-%typedarray%.prototype.findlastindex */\n  findLastIndex(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r), s = n[0];\n    for (let i = o - 1; i >= 0; --i) {\n      const c = p(r[i]);\n      if (S(t, s, [c, i, this]))\n        return i;\n    }\n    return -1;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.every */\n  every(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r), s = n[0];\n    for (let i = 0; i < o; ++i)\n      if (!S(t, s, [\n        p(r[i]),\n        i,\n        this\n      ]))\n        return !1;\n    return !0;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.some */\n  some(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r), s = n[0];\n    for (let i = 0; i < o; ++i)\n      if (S(t, s, [\n        p(r[i]),\n        i,\n        this\n      ]))\n        return !0;\n    return !1;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.set */\n  set(t, ...n) {\n    u(this);\n    const r = l(this), o = L(n[0]);\n    if (o < 0)\n      throw _t(St);\n    if (t == null)\n      throw w(\n        Pt\n      );\n    if (Ut(t))\n      throw w(\n        xt\n      );\n    if (D(t))\n      return Rn(\n        l(this),\n        l(t),\n        o\n      );\n    if (ft(t)) {\n      const a = T(t);\n      if ($(a))\n        throw w(J);\n    }\n    const s = y(r), i = j(t), c = Et(i.length);\n    if (o === 1 / 0 || c + o > s)\n      throw _t(St);\n    for (let a = 0; a < c; ++a)\n      r[a + o] = P(i[a]);\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse */\n  reverse() {\n    u(this);\n    const t = l(this);\n    return te(t), this;\n  }\n  /** @see https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.toReversed */\n  toReversed() {\n    u(this);\n    const t = l(this), n = new m(\n      T(t),\n      C(t),\n      y(t)\n    ), r = new A(\n      T(\n        Y(n)\n      )\n    ), o = l(r);\n    return te(o), r;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill */\n  fill(t, ...n) {\n    u(this);\n    const r = l(this);\n    return Un(\n      r,\n      P(t),\n      ...k(n)\n    ), this;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin */\n  copyWithin(t, n, ...r) {\n    u(this);\n    const o = l(this);\n    return Cn(o, t, n, ...k(r)), this;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort */\n  sort(t) {\n    u(this);\n    const n = l(this), r = t !== void 0 ? t : ce;\n    return ee(n, (o, s) => r(p(o), p(s))), this;\n  }\n  /** @see https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.toSorted */\n  toSorted(t) {\n    u(this);\n    const n = l(this);\n    if (t !== void 0 && typeof t != \"function\")\n      throw new w(fn);\n    const r = t !== void 0 ? t : ce, o = new m(\n      T(n),\n      C(n),\n      y(n)\n    ), s = new A(\n      T(\n        Y(o)\n      )\n    ), i = l(s);\n    return ee(i, (c, a) => r(p(c), p(a))), s;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice */\n  slice(t, n) {\n    u(this);\n    const r = l(this), o = rt(r, A);\n    if (o === A) {\n      const je = new m(\n        T(r),\n        C(r),\n        y(r)\n      );\n      return new A(\n        T(\n          Y(je, t, n)\n        )\n      );\n    }\n    const s = y(r), i = L(t), c = n === void 0 ? s : L(n);\n    let a;\n    i === -1 / 0 ? a = 0 : i < 0 ? a = s + i > 0 ? s + i : 0 : a = s < i ? s : i;\n    let h;\n    c === -1 / 0 ? h = 0 : c < 0 ? h = s + c > 0 ? s + c : 0 : h = s < c ? s : c;\n    const f = h - a > 0 ? h - a : 0, d = new o(f);\n    if (st(d, f), f === 0)\n      return d;\n    const O = T(r);\n    if ($(O))\n      throw w(J);\n    let F = 0;\n    for (; a < h; )\n      d[F] = p(r[a]), ++a, ++F;\n    return (\n      /** @type {any} */\n      d\n    );\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray */\n  subarray(t, n) {\n    u(this);\n    const r = l(this), o = rt(r, A), s = new m(\n      T(r),\n      C(r),\n      y(r)\n    ), i = Mn(s, t, n), c = new o(\n      T(i),\n      C(i),\n      y(i)\n    );\n    return st(c), /** @type {any} */\n    c;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof */\n  indexOf(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r);\n    let s = L(n[0]);\n    if (s === 1 / 0)\n      return -1;\n    s < 0 && (s += o, s < 0 && (s = 0));\n    for (let i = s; i < o; ++i)\n      if (R(r, i) && p(r[i]) === t)\n        return i;\n    return -1;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof */\n  lastIndexOf(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r);\n    let s = n.length >= 1 ? L(n[0]) : o - 1;\n    if (s === -1 / 0)\n      return -1;\n    s >= 0 ? s = s < o - 1 ? s : o - 1 : s += o;\n    for (let i = s; i >= 0; --i)\n      if (R(r, i) && p(r[i]) === t)\n        return i;\n    return -1;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes */\n  includes(t, ...n) {\n    u(this);\n    const r = l(this), o = y(r);\n    let s = L(n[0]);\n    if (s === 1 / 0)\n      return !1;\n    s < 0 && (s += o, s < 0 && (s = 0));\n    const i = G(t);\n    for (let c = s; c < o; ++c) {\n      const a = p(r[c]);\n      if (i && G(a) || a === t)\n        return !0;\n    }\n    return !1;\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.join */\n  join(t) {\n    u(this);\n    const n = l(this), r = ae(n);\n    return gn(r, t);\n  }\n  /** @see https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring */\n  toLocaleString(...t) {\n    u(this);\n    const n = l(this), r = ae(n);\n    return Tn(r, ...k(t));\n  }\n  /** @see https://tc39.es/ecma262/#sec-get-%typedarray%.prototype-@@tostringtag */\n  get [Mt]() {\n    if (D(this))\n      return (\n        /** @type {any} */\n        \"Float16Array\"\n      );\n  }\n}\net(A, \"BYTES_PER_ELEMENT\", {\n  value: zt\n});\net(A, lt, {});\nge(A, Ft);\nconst yt = A.prototype;\net(yt, \"BYTES_PER_ELEMENT\", {\n  value: zt\n});\net(yt, x, {\n  value: yt.values,\n  writable: !0,\n  configurable: !0\n});\nge(yt, b);\nfunction tr(e, t, ...n) {\n  return p(\n    jn(e, t, ...k(n))\n  );\n}\nfunction Tr(e) {\n  return e instanceof Int8Array || e instanceof Uint8Array || e instanceof Uint8ClampedArray || e instanceof Int16Array || e instanceof Uint16Array || e instanceof Int32Array || e instanceof Uint32Array || e instanceof A || e instanceof Float32Array || e instanceof Float64Array;\n}\nclass er extends K {\n  constructor(t, n) {\n    super(n), this.parser = t;\n  }\n  load(t, n, r, o) {\n    const s = new sn(this.manager);\n    s.setRequestHeader(this.requestHeader), s.setPath(this.path), s.setWithCredentials(this.withCredentials), s.load(\n      t,\n      (i) => {\n        try {\n          n(this.parser(i));\n        } catch (c) {\n          o != null ? o(c) : console.error(c), this.manager.itemError(t);\n        }\n      },\n      r,\n      o\n    );\n  }\n}\nfunction nr(e) {\n  const t = e instanceof Int8Array ? qe : e instanceof Uint8Array ? Vt : e instanceof Uint8ClampedArray ? Vt : e instanceof Int16Array ? ke : e instanceof Uint16Array ? Je : e instanceof Int32Array ? $e : e instanceof Uint32Array ? Qe : e instanceof A ? Ze : e instanceof Float32Array ? Yt : e instanceof Float64Array ? Yt : null;\n  return ye(t != null), t;\n}\nclass br extends K {\n  constructor(t, n, r = {}, o) {\n    super(o), this.textureClass = t, this.parser = n, this.options = {\n      format: Xe,\n      minFilter: Wt,\n      magFilter: Wt,\n      ...r\n    };\n  }\n  load(t, n, r, o) {\n    const s = new this.textureClass(), i = new er(this.parser, this.manager);\n    return i.setRequestHeader(this.requestHeader), i.setPath(this.path), i.setWithCredentials(this.withCredentials), i.load(\n      t,\n      (c) => {\n        s.image.data = c instanceof A ? new Uint16Array(c.buffer) : c;\n        const { width: a, height: h, depth: f, ...d } = this.options;\n        a != null && (s.image.width = a), h != null && (s.image.height = h), \"depth\" in s.image && f != null && (s.image.depth = f), s.type = nr(c), Object.assign(s, d), s.needsUpdate = !0, n?.(s);\n      },\n      r,\n      o\n    ), s;\n  }\n}\nconst z = _.clamp, Sr = _.euclideanModulo, mr = _.inverseLerp, _r = _.lerp, Er = _.degToRad, Ir = _.radToDeg, Or = _.isPowerOfTwo, Pr = _.ceilPowerOfTwo, xr = _.floorPowerOfTwo, Nr = _.normalize;\nfunction Lr(e, t, n, r = 0, o = 1) {\n  return _.mapLinear(e, t, n, r, o);\n}\nfunction Rr(e, t, n, r = 0, o = 1) {\n  return z(_.mapLinear(e, t, n, r, o), r, o);\n}\nfunction Ur(e, t, n) {\n  return n <= e ? 0 : n >= t ? 1 : (n = (n - e) / (t - e), n * n * (3 - 2 * n));\n}\nfunction Cr(e) {\n  return Math.min(Math.max(e, 0), 1);\n}\nfunction Mr(e, t, n, r = n) {\n  const o = Math.abs(e - t);\n  return o <= r || o <= n * Math.max(Math.abs(e), Math.abs(t));\n}\nfunction Br(e) {\n  return (t, n) => {\n    t instanceof pt ? Object.defineProperty(t, n, {\n      enumerable: !0,\n      get() {\n        return this.defines?.[e] != null;\n      },\n      set(r) {\n        r !== this[n] && (r ? (this.defines ??= {}, this.defines[e] = \"1\") : delete this.defines?.[e], this.needsUpdate = !0);\n      }\n    }) : Object.defineProperty(t, n, {\n      enumerable: !0,\n      get() {\n        return this.defines.has(e);\n      },\n      set(r) {\n        r !== this[n] && (r ? this.defines.set(e, \"1\") : this.defines.delete(e), this.setChanged());\n      }\n    });\n  };\n}\nfunction he(e) {\n  return typeof e == \"number\" ? Math.floor(e) : typeof e == \"string\" ? parseInt(e, 10) : typeof e == \"boolean\" ? +e : 0;\n}\nfunction Fr(e, {\n  min: t = Number.MIN_SAFE_INTEGER,\n  max: n = Number.MAX_SAFE_INTEGER\n} = {}) {\n  return (r, o) => {\n    r instanceof pt ? Object.defineProperty(r, o, {\n      enumerable: !0,\n      get() {\n        const s = this.defines?.[e];\n        return s != null ? he(s) : 0;\n      },\n      set(s) {\n        const i = this[o];\n        s !== i && (this.defines ??= {}, this.defines[e] = z(s, t, n).toFixed(0), this.needsUpdate = !0);\n      }\n    }) : Object.defineProperty(r, o, {\n      enumerable: !0,\n      get() {\n        const s = this.defines.get(e);\n        return s != null ? he(s) : 0;\n      },\n      set(s) {\n        const i = this[o];\n        s !== i && (this.defines.set(e, z(s, t, n).toFixed(0)), this.setChanged());\n      }\n    });\n  };\n}\nfunction fe(e) {\n  return typeof e == \"number\" ? e : typeof e == \"string\" ? parseFloat(e) : typeof e == \"boolean\" ? +e : 0;\n}\nfunction Dr(e, {\n  min: t = -1 / 0,\n  max: n = 1 / 0,\n  precision: r = 7\n} = {}) {\n  return (o, s) => {\n    o instanceof pt ? Object.defineProperty(o, s, {\n      enumerable: !0,\n      get() {\n        const i = this.defines?.[e];\n        return i != null ? fe(i) : 0;\n      },\n      set(i) {\n        const c = this[s];\n        i !== c && (this.defines ??= {}, this.defines[e] = z(i, t, n).toFixed(r), this.needsUpdate = !0);\n      }\n    }) : Object.defineProperty(o, s, {\n      enumerable: !0,\n      get() {\n        const i = this.defines.get(e);\n        return i != null ? fe(i) : 0;\n      },\n      set(i) {\n        const c = this[s];\n        i !== c && (this.defines.set(e, z(i, t, n).toFixed(r)), this.setChanged());\n      }\n    });\n  };\n}\nfunction vr(e, { validate: t } = {}) {\n  return (n, r) => {\n    n instanceof pt ? Object.defineProperty(n, r, {\n      enumerable: !0,\n      get() {\n        return this.defines?.[e];\n      },\n      set(o) {\n        if (o !== this[r]) {\n          if (t?.(o) === !1) {\n            console.error(`Expression validation failed: ${o}`);\n            return;\n          }\n          this.defines ??= {}, this.defines[e] = o, this.needsUpdate = !0;\n        }\n      }\n    }) : Object.defineProperty(n, r, {\n      enumerable: !0,\n      get() {\n        return this.defines.get(e);\n      },\n      set(o) {\n        if (o !== this[r]) {\n          if (t?.(o) === !1) {\n            console.error(`Expression validation failed: ${o}`);\n            return;\n          }\n          this.defines.set(e, o), this.setChanged();\n        }\n      }\n    });\n  };\n}\nfunction Gr(e, ...t) {\n  const n = {};\n  for (let r = 0; r < t.length; r += 2) {\n    const o = t[r], s = t[r + 1];\n    for (const i of s)\n      n[i] = {\n        enumerable: !0,\n        get: () => o[i],\n        set: (c) => {\n          o[i] = c;\n        }\n      };\n  }\n  return Object.defineProperties(e, n), e;\n}\nfunction jr(e, t, n) {\n  const r = {};\n  for (const o of n)\n    r[o] = {\n      enumerable: !0,\n      get: () => t.uniforms[o].value,\n      set: (s) => {\n        t.uniforms[o].value = s;\n      }\n    };\n  return Object.defineProperties(e, r), e;\n}\nclass zr extends K {\n  constructor(t = {}, n) {\n    super(n), this.options = t;\n  }\n  load(t, n, r, o) {\n    const { width: s, height: i, depth: c } = this.options, a = new Ke(null, s, i, c), h = new de(this.manager);\n    return h.setRequestHeader(this.requestHeader), h.setPath(this.path), h.setWithCredentials(this.withCredentials), h.load(\n      t,\n      (f) => {\n        const { image: d } = f;\n        a.image = {\n          data: d.data,\n          width: s ?? d.width,\n          height: i ?? d.height,\n          depth: c ?? Math.sqrt(d.height)\n        }, a.type = f.type, a.format = f.format, a.colorSpace = f.colorSpace, a.needsUpdate = !0;\n        try {\n          n?.(a);\n        } catch (O) {\n          o != null ? o(O) : console.error(O), this.manager.itemError(t);\n        }\n      },\n      r,\n      o\n    ), a;\n  }\n}\nclass Hr extends K {\n  constructor(t = {}, n) {\n    super(n), this.options = t;\n  }\n  load(t, n, r, o) {\n    const { width: s, height: i } = this.options, c = new tn(null, s, i), a = new de(this.manager);\n    return a.setRequestHeader(this.requestHeader), a.setPath(this.path), a.setWithCredentials(this.withCredentials), a.load(\n      t,\n      (h) => {\n        const { image: f } = h;\n        c.image = {\n          data: f.data,\n          width: s ?? f.width,\n          height: i ?? f.height\n        }, c.type = h.type, c.format = h.format, c.colorSpace = h.colorSpace, c.needsUpdate = !0;\n        try {\n          n?.(c);\n        } catch (d) {\n          o != null ? o(d) : console.error(d), this.manager.itemError(t);\n        }\n      },\n      r,\n      o\n    ), c;\n  }\n}\nconst It = 1e-6, ot = /* @__PURE__ */ new U(), it = /* @__PURE__ */ new U(), N = /* @__PURE__ */ new U(), X = /* @__PURE__ */ new U(), Ot = /* @__PURE__ */ new U(), rr = /* @__PURE__ */ new U(), sr = /* @__PURE__ */ new nn(), or = /* @__PURE__ */ new en(), ir = /* @__PURE__ */ new rn();\nclass De {\n  constructor(t = 0, n = 0, r = 0, o = 0) {\n    this.distance = t, this.heading = n, this.pitch = r, this.roll = o;\n  }\n  get distance() {\n    return this._distance;\n  }\n  set distance(t) {\n    this._distance = Math.max(t, It);\n  }\n  get pitch() {\n    return this._pitch;\n  }\n  set pitch(t) {\n    this._pitch = z(t, -Math.PI / 2 + It, Math.PI / 2 - It);\n  }\n  set(t, n, r, o) {\n    return this.distance = t, this.heading = n, this.pitch = r, o != null && (this.roll = o), this;\n  }\n  clone() {\n    return new De(this.distance, this.heading, this.pitch, this.roll);\n  }\n  copy(t) {\n    return this.distance = t.distance, this.heading = t.heading, this.pitch = t.pitch, this.roll = t.roll, this;\n  }\n  equals(t) {\n    return t.distance === this.distance && t.heading === this.heading && t.pitch === this.pitch && t.roll === this.roll;\n  }\n  decompose(t, n, r, o, s = Xt.WGS84) {\n    s.getEastNorthUpVectors(\n      t,\n      ot,\n      it,\n      N\n    ), o?.copy(N);\n    const i = X.copy(ot).multiplyScalar(Math.cos(this.heading)).add(\n      Ot.copy(it).multiplyScalar(Math.sin(this.heading))\n    ).multiplyScalar(Math.cos(this.pitch)).add(Ot.copy(N).multiplyScalar(Math.sin(this.pitch))).normalize().multiplyScalar(this.distance);\n    if (n.copy(t).sub(i), this.roll !== 0) {\n      const c = X.copy(t).sub(n).normalize();\n      N.applyQuaternion(\n        or.setFromAxisAngle(c, this.roll)\n      );\n    }\n    r.setFromRotationMatrix(\n      sr.lookAt(n, t, N)\n    );\n  }\n  setFromCamera(t, n = Xt.WGS84, r) {\n    const o = X.setFromMatrixPosition(t.matrixWorld), s = Ot.set(0, 0, 0.5).unproject(t).sub(o).normalize(), i = n.getIntersection(\n      ir.set(o, s)\n    );\n    if (i == null)\n      return;\n    r?.copy(i), this.distance = o.distanceTo(i), n.getEastNorthUpVectors(\n      i,\n      ot,\n      it,\n      N\n    ), this.heading = Math.atan2(\n      it.dot(s),\n      ot.dot(s)\n    ), this.pitch = Math.asin(N.dot(s));\n    const c = X.copy(t.up).applyQuaternion(t.quaternion), a = rr.copy(s).multiplyScalar(-c.dot(s)).add(c).normalize(), h = X.copy(s).multiplyScalar(-N.dot(s)).add(N).normalize(), f = h.dot(a), d = s.dot(h.cross(a));\n    return this.roll = Math.atan2(d, f), this;\n  }\n}\nconst Q = class Q {\n  constructor(t = 0, n = 0, r = 0, o = 0) {\n    this.west = t, this.south = n, this.east = r, this.north = o;\n  }\n  get width() {\n    let t = this.east;\n    return t < this.west && (t += Math.PI * 2), t - this.west;\n  }\n  get height() {\n    return this.north - this.south;\n  }\n  set(t, n, r, o) {\n    return this.west = t, this.south = n, this.east = r, this.north = o, this;\n  }\n  clone() {\n    return new Q(this.west, this.south, this.east, this.north);\n  }\n  copy(t) {\n    return this.west = t.west, this.south = t.south, this.east = t.east, this.north = t.north, this;\n  }\n  equals(t) {\n    return t.west === this.west && t.south === this.south && t.east === this.east && t.north === this.north;\n  }\n  at(t, n, r = new V()) {\n    return r.set(\n      this.west + (this.east - this.west) * t,\n      this.north + (this.south - this.north) * n\n    );\n  }\n  fromArray(t, n = 0) {\n    return this.west = t[n], this.south = t[n + 1], this.east = t[n + 2], this.north = t[n + 3], this;\n  }\n  toArray(t = [], n = 0) {\n    return t[n] = this.west, t[n + 1] = this.south, t[n + 2] = this.east, t[n + 3] = this.north, t;\n  }\n  *[Symbol.iterator]() {\n    yield this.west, yield this.south, yield this.east, yield this.north;\n  }\n};\nQ.MAX = /* @__PURE__ */ new Q(\n  V.MIN_LONGITUDE,\n  V.MIN_LATITUDE,\n  V.MAX_LONGITUDE,\n  V.MAX_LATITUDE\n);\nlet dt = Q;\nconst cr = /^[ \\t]*#include +\"([\\w\\d./]+)\"/gm;\nfunction ar(e, t) {\n  return e.replace(cr, (n, r) => {\n    const s = r.split(\"/\").reduce(\n      (i, c) => typeof i != \"string\" && i != null ? i[c] : void 0,\n      t\n    );\n    if (typeof s != \"string\")\n      throw new Error(`Could not find include for ${r}.`);\n    return ar(s, t);\n  });\n}\nfunction* ve(e, t, n, r, o) {\n  if (n >= r)\n    return;\n  const s = 2 ** n, i = n + 1, c = 2 ** i, a = Math.floor(e / s * c), h = Math.floor(t / s * c), f = [\n    [a, h, i],\n    [a + 1, h, i],\n    [a, h + 1, i],\n    [a + 1, h + 1, i]\n  ];\n  if (i < r)\n    for (const d of f)\n      for (const O of ve(...d, r, o))\n        yield O;\n  else\n    for (const d of f)\n      yield (o ?? new Z()).set(...d);\n}\nclass Z {\n  constructor(t = 0, n = 0, r = 0) {\n    this.x = t, this.y = n, this.z = r;\n  }\n  set(t, n, r) {\n    return this.x = t, this.y = n, r != null && (this.z = r), this;\n  }\n  clone() {\n    return new Z(this.x, this.y, this.z);\n  }\n  copy(t) {\n    return this.x = t.x, this.y = t.y, this.z = t.z, this;\n  }\n  equals(t) {\n    return t.x === this.x && t.y === this.y && t.z === this.z;\n  }\n  getParent(t = new Z()) {\n    const n = 2 ** this.z, r = this.x / n, o = this.y / n, s = this.z - 1, i = 2 ** s;\n    return t.set(Math.floor(r * i), Math.floor(o * i), s);\n  }\n  *traverseChildren(t, n) {\n    const { x: r, y: o, z: s } = this;\n    for (const i of ve(r, o, s, s + t, n))\n      yield i;\n  }\n  fromArray(t, n = 0) {\n    return this.x = t[n], this.y = t[n + 1], this.z = t[n + 2], this;\n  }\n  toArray(t = [], n = 0) {\n    return t[n] = this.x, t[n + 1] = this.y, t[n + 2] = this.z, t;\n  }\n  *[Symbol.iterator]() {\n    yield this.x, yield this.y, yield this.z;\n  }\n}\nconst le = /* @__PURE__ */ new ue();\nclass Ge {\n  constructor(t = 2, n = 1, r = dt.MAX) {\n    this.width = t, this.height = n, this.rectangle = r;\n  }\n  clone() {\n    return new Ge(this.width, this.height, this.rectangle.clone());\n  }\n  copy(t) {\n    return this.width = t.width, this.height = t.height, this.rectangle.copy(t.rectangle), this;\n  }\n  getSize(t, n = new ue()) {\n    return n.set(this.width << t, this.height << t);\n  }\n  // Reference: https://github.com/CesiumGS/cesium/blob/1.122/packages/engine/Source/Core/GeographicTilingScheme.js#L210\n  getTile(t, n, r = new Z()) {\n    const o = this.getSize(n, le), { rectangle: s } = this, i = s.width / o.x, c = s.height / o.y, { west: a, south: h, east: f } = s;\n    let d = t.longitude;\n    f < a && (d += Math.PI * 2);\n    let O = Math.floor((d - a) / i);\n    O >= o.x && (O = o.x - 1);\n    let F = Math.floor((t.latitude - h) / c);\n    return F >= o.y && (F = o.y - 1), r.x = O, r.y = F, r.z = n, r;\n  }\n  // Reference: https://github.com/CesiumGS/cesium/blob/1.122/packages/engine/Source/Core/GeographicTilingScheme.js#L169\n  getRectangle(t, n = new dt()) {\n    const r = this.getSize(t.z, le), { rectangle: o } = this, s = o.width / r.x, i = o.height / r.y, { west: c, north: a } = o;\n    return n.west = t.x * s + c, n.east = (t.x + 1) * s + c, n.north = a - (r.y - t.y - 1) * i, n.south = a - (r.y - t.y) * i, n;\n  }\n}\nlet ct;\nfunction hr() {\n  if (ct != null)\n    return ct;\n  const e = new Uint32Array([268435456]);\n  return ct = new Uint8Array(e.buffer, e.byteOffset, e.byteLength)[0] === 0, ct;\n}\nfunction B(e, t, n, r = !0) {\n  if (r === hr())\n    return new t(e);\n  const o = Object.assign(new DataView(e), {\n    getFloat16(i, c) {\n      return tr(this, i, c);\n    }\n  }), s = new t(o.byteLength / t.BYTES_PER_ELEMENT);\n  for (let i = 0, c = 0; i < s.length; ++i, c += t.BYTES_PER_ELEMENT)\n    s[i] = o[n](c, r);\n  return s;\n}\nconst Wr = (e) => new Uint8Array(e), Vr = (e) => new Int8Array(e), Yr = (e, t) => B(e, Uint16Array, \"getUint16\", t), Xr = (e, t) => B(e, Int16Array, \"getInt16\", t), qr = (e, t) => B(e, Int32Array, \"getInt32\", t), kr = (e, t) => B(e, Uint32Array, \"getUint32\", t), Jr = (e, t) => B(e, A, \"getFloat16\", t), $r = (e, t) => B(e, Float32Array, \"getFloat32\", t), Qr = (e, t) => B(e, Float64Array, \"getFloat64\", t);\nfunction Zr(e) {\n}\nconst fr = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*(?:i\\s*\\+\\+|\\+\\+\\s*i)\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\nfunction lr(e, t, n, r) {\n  let o = \"\";\n  for (let s = parseInt(t, 10); s < parseInt(n, 10); ++s)\n    o += r.replace(/\\[\\s*i\\s*\\]/g, `[${s}]`).replace(/UNROLLED_LOOP_INDEX/g, `${s}`);\n  return o;\n}\nfunction Kr(e) {\n  return e.replace(fr, lr);\n}\nexport {\n  sn as ArrayBufferLoader,\n  ns as DEFAULT_STBN_URL,\n  br as DataTextureLoader,\n  zr as EXR3DTextureLoader,\n  Hr as EXRTextureLoader,\n  Xt as Ellipsoid,\n  hs as EllipsoidGeometry,\n  A as Float16Array,\n  V as Geodetic,\n  De as PointOfView,\n  rs as QuadGeometry,\n  dt as Rectangle,\n  ss as STBNLoader,\n  os as STBN_TEXTURE_DEPTH,\n  is as STBN_TEXTURE_HEIGHT,\n  cs as STBN_TEXTURE_WIDTH,\n  Z as TileCoordinate,\n  Ge as TilingScheme,\n  er as TypedArrayLoader,\n  Pr as ceilPowerOfTwo,\n  z as clamp,\n  Mr as closeTo,\n  Br as define,\n  vr as defineExpression,\n  Dr as defineFloat,\n  Fr as defineInt,\n  Gr as definePropertyShorthand,\n  jr as defineUniformShorthand,\n  Ir as degrees,\n  Sr as euclideanModulo,\n  xr as floorPowerOfTwo,\n  gr as fromBufferGeometryLike,\n  mr as inverseLerp,\n  wr as isFloatLinearSupported,\n  Or as isPowerOfTwo,\n  Tr as isTypedArray,\n  _r as lerp,\n  Nr as normalize,\n  Jr as parseFloat16Array,\n  $r as parseFloat32Array,\n  Qr as parseFloat64Array,\n  Xr as parseInt16Array,\n  qr as parseInt32Array,\n  Vr as parseInt8Array,\n  Yr as parseUint16Array,\n  kr as parseUint32Array,\n  Wr as parseUint8Array,\n  Er as radians,\n  Zr as reinterpretType,\n  Lr as remap,\n  Rr as remapClamped,\n  ar as resolveIncludes,\n  Cr as saturate,\n  Ur as smoothstep,\n  Ar as toBufferGeometryLike,\n  Kr as unrollLoops\n};\n//# sourceMappingURL=index.js.map\n","const n = `// Reference: https://github.com/mrdoob/three.js/blob/r171/examples/jsm/csm/CSMShader.js\n\n#ifndef SHADOW_CASCADE_COUNT\n#error \"SHADOW_CASCADE_COUNT macro must be defined.\"\n#endif // SHADOW_CASCADE_COUNT\n\nint getCascadeIndex(\n  const mat4 viewMatrix,\n  const vec3 worldPosition,\n  const vec2 intervals[SHADOW_CASCADE_COUNT],\n  const float near,\n  const float far\n) {\n  vec4 viewPosition = viewMatrix * vec4(worldPosition, 1.0);\n  float depth = viewZToOrthographicDepth(viewPosition.z, near, far);\n  vec2 interval;\n  #pragma unroll_loop_start\n  for (int i = 0; i < 4; ++i) {\n    #if UNROLLED_LOOP_INDEX < SHADOW_CASCADE_COUNT\n    interval = intervals[i];\n    if (depth >= interval.x && depth < interval.y) {\n      return UNROLLED_LOOP_INDEX;\n    }\n    #endif // UNROLLED_LOOP_INDEX < SHADOW_CASCADE_COUNT\n  }\n  #pragma unroll_loop_end\n  return SHADOW_CASCADE_COUNT - 1;\n}\n\nint getFadedCascadeIndex(\n  const mat4 viewMatrix,\n  const vec3 worldPosition,\n  const vec2 intervals[SHADOW_CASCADE_COUNT],\n  const float near,\n  const float far,\n  const float jitter\n) {\n  vec4 viewPosition = viewMatrix * vec4(worldPosition, 1.0);\n  float depth = viewZToOrthographicDepth(viewPosition.z, near, far);\n\n  vec2 interval;\n  float intervalCenter;\n  float closestEdge;\n  float margin;\n  int nextIndex = -1;\n  int prevIndex = -1;\n  float alpha;\n\n  #pragma unroll_loop_start\n  for (int i = 0; i < 4; ++i) {\n    #if UNROLLED_LOOP_INDEX < SHADOW_CASCADE_COUNT\n    interval = intervals[i];\n    intervalCenter = (interval.x + interval.y) * 0.5;\n    closestEdge = depth < intervalCenter ? interval.x : interval.y;\n    margin = closestEdge * closestEdge * 0.5;\n    interval += margin * vec2(-0.5, 0.5);\n\n    #if UNROLLED_LOOP_INDEX < SHADOW_CASCADE_COUNT - 1\n    if (depth >= interval.x && depth < interval.y) {\n      prevIndex = nextIndex;\n      nextIndex = UNROLLED_LOOP_INDEX;\n      alpha = saturate(min(depth - interval.x, interval.y - depth) / margin);\n    }\n    #else // UNROLLED_LOOP_INDEX < SHADOW_CASCADE_COUNT - 1\n    // Don't fade out the last cascade.\n    if (depth >= interval.x) {\n      prevIndex = nextIndex;\n      nextIndex = UNROLLED_LOOP_INDEX;\n      alpha = saturate((depth - interval.x) / margin);\n    }\n    #endif // UNROLLED_LOOP_INDEX < SHADOW_CASCADE_COUNT - 1\n    #endif // UNROLLED_LOOP_INDEX < SHADOW_CASCADE_COUNT\n  }\n  #pragma unroll_loop_end\n\n  return jitter <= alpha\n    ? nextIndex\n    : prevIndex;\n}\n`, e = `// cSpell:words logdepthbuf\n\n#ifdef DEPTH_PACKING\nfloat readDepthValue(const sampler2D depthBuffer, const vec2 uv) {\n  #if DEPTH_PACKING == 3201\n  return unpackRGBAToDepth(texture(depthBuffer, uv));\n  #else // DEPTH_PACKING == 3201\n  return texture(depthBuffer, uv).r;\n  #endif // DEPTH_PACKING == 3201\n}\n#endif // DEPTH_PACKING\n\nfloat reverseLogDepth(const float depth, const float near, const float far) {\n  #if defined(USE_LOGDEPTHBUF) || defined(USE_LOGARITHMIC_DEPTH_BUFFER)\n  float d = pow(2.0, depth * log2(far + 1.0)) - 1.0;\n  float a = far / (far - near);\n  float b = far * near / (near - far);\n  return a + b / d;\n  #else // defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(USE_LOGARITHMIC_DEPTH_BUFFER)\n  return depth;\n  #endif // defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(USE_LOGARITHMIC_DEPTH_BUFFER)\n}\n\nfloat linearizeDepth(const float depth, const float near, const float far) {\n  float ndc = depth * 2.0 - 1.0;\n  return 2.0 * near * far / (far + near - ndc * (far - near));\n}\n`, t = `float checker(const vec2 uv, const vec2 repeats) {\n  vec2 c = floor(repeats * uv);\n  float result = mod(c.x + c.y, 2.0);\n  return sign(result);\n}\n\nfloat checker(const vec2 uv, const float repeats) {\n  return checker(uv, vec2(repeats));\n}\n`, c = `// Reference: https://advances.realtimerendering.com/s2014/index.html#_NEXT_GENERATION_POST\n\nfloat interleavedGradientNoise(const vec2 coord) {\n  const vec3 magic = vec3(0.06711056, 0.00583715, 52.9829189);\n  return fract(magic.z * fract(dot(coord, magic.xy)));\n}\n`, i = `#if !defined(saturate)\n#define saturate(a) clamp(a, 0.0, 1.0)\n#endif // !defined(saturate)\n\nfloat remap(const float x, const float min1, const float max1, const float min2, const float max2) {\n  return min2 + (x - min1) / (max1 - min1) * (max2 - min2);\n}\n\nvec2 remap(const vec2 x, const vec2 min1, const vec2 max1, const vec2 min2, const vec2 max2) {\n  return min2 + (x - min1) / (max1 - min1) * (max2 - min2);\n}\n\nvec3 remap(const vec3 x, const vec3 min1, const vec3 max1, const vec3 min2, const vec3 max2) {\n  return min2 + (x - min1) / (max1 - min1) * (max2 - min2);\n}\n\nvec4 remap(const vec4 x, const vec4 min1, const vec4 max1, const vec4 min2, const vec4 max2) {\n  return min2 + (x - min1) / (max1 - min1) * (max2 - min2);\n}\n\nfloat remapClamped(\n  const float x,\n  const float min1,\n  const float max1,\n  const float min2,\n  const float max2\n) {\n  return clamp(min2 + (x - min1) / (max1 - min1) * (max2 - min2), min2, max2);\n}\n\nvec2 remapClamped(\n  const vec2 x,\n  const vec2 min1,\n  const vec2 max1,\n  const vec2 min2,\n  const vec2 max2\n) {\n  return clamp(min2 + (x - min1) / (max1 - min1) * (max2 - min2), min2, max2);\n}\n\nvec3 remapClamped(\n  const vec3 x,\n  const vec3 min1,\n  const vec3 max1,\n  const vec3 min2,\n  const vec3 max2\n) {\n  return clamp(min2 + (x - min1) / (max1 - min1) * (max2 - min2), min2, max2);\n}\n\nvec4 remapClamped(\n  const vec4 x,\n  const vec4 min1,\n  const vec4 max1,\n  const vec4 min2,\n  const vec4 max2\n) {\n  return clamp(min2 + (x - min1) / (max1 - min1) * (max2 - min2), min2, max2);\n}\n\n// Implicitly remap to 0 and 1\nfloat remap(const float x, const float min1, const float max1) {\n  return (x - min1) / (max1 - min1);\n}\n\nvec2 remap(const vec2 x, const vec2 min1, const vec2 max1) {\n  return (x - min1) / (max1 - min1);\n}\n\nvec3 remap(const vec3 x, const vec3 min1, const vec3 max1) {\n  return (x - min1) / (max1 - min1);\n}\n\nvec4 remap(const vec4 x, const vec4 min1, const vec4 max1) {\n  return (x - min1) / (max1 - min1);\n}\n\nfloat remapClamped(const float x, const float min1, const float max1) {\n  return saturate((x - min1) / (max1 - min1));\n}\n\nvec2 remapClamped(const vec2 x, const vec2 min1, const vec2 max1) {\n  return saturate((x - min1) / (max1 - min1));\n}\n\nvec3 remapClamped(const vec3 x, const vec3 min1, const vec3 max1) {\n  return saturate((x - min1) / (max1 - min1));\n}\n\nvec4 remapClamped(const vec4 x, const vec4 min1, const vec4 max1) {\n  return saturate((x - min1) / (max1 - min1));\n}\n`, r = `// Reference: https://jcgt.org/published/0003/02/01/paper.pdf\n\nvec2 signNotZero(vec2 v) {\n  return vec2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0);\n}\n\nvec2 packNormalToVec2(vec3 v) {\n  vec2 p = v.xy * (1.0 / (abs(v.x) + abs(v.y) + abs(v.z)));\n  return v.z <= 0.0\n    ? (1.0 - abs(p.yx)) * signNotZero(p)\n    : p;\n}\n\nvec3 unpackVec2ToNormal(vec2 e) {\n  vec3 v = vec3(e.xy, 1.0 - abs(e.x) - abs(e.y));\n  if (v.z < 0.0) {\n    v.xy = (1.0 - abs(v.yx)) * signNotZero(v.xy);\n  }\n  return normalize(v);\n}\n`, o = `float raySphereFirstIntersection(\n  const vec3 origin,\n  const vec3 direction,\n  const vec3 center,\n  const float radius\n) {\n  vec3 a = origin - center;\n  float b = 2.0 * dot(direction, a);\n  float c = dot(a, a) - radius * radius;\n  float discriminant = b * b - 4.0 * c;\n  return discriminant < 0.0\n    ? -1.0\n    : (-b - sqrt(discriminant)) * 0.5;\n}\n\nfloat raySphereFirstIntersection(const vec3 origin, const vec3 direction, const float radius) {\n  return raySphereFirstIntersection(origin, direction, vec3(0.0), radius);\n}\n\nvec4 raySphereFirstIntersection(\n  const vec3 origin,\n  const vec3 direction,\n  const vec3 center,\n  const vec4 radius\n) {\n  vec3 a = origin - center;\n  float b = 2.0 * dot(direction, a);\n  vec4 c = dot(a, a) - radius * radius;\n  vec4 discriminant = b * b - 4.0 * c;\n  vec4 mask = step(discriminant, vec4(0.0));\n  return mix((-b - sqrt(max(vec4(0.0), discriminant))) * 0.5, vec4(-1.0), mask);\n}\n\nvec4 raySphereFirstIntersection(const vec3 origin, const vec3 direction, const vec4 radius) {\n  return raySphereFirstIntersection(origin, direction, vec3(0.0), radius);\n}\n\nfloat raySphereSecondIntersection(\n  const vec3 origin,\n  const vec3 direction,\n  const vec3 center,\n  const float radius\n) {\n  vec3 a = origin - center;\n  float b = 2.0 * dot(direction, a);\n  float c = dot(a, a) - radius * radius;\n  float discriminant = b * b - 4.0 * c;\n  return discriminant < 0.0\n    ? -1.0\n    : (-b + sqrt(discriminant)) * 0.5;\n}\n\nfloat raySphereSecondIntersection(const vec3 origin, const vec3 direction, const float radius) {\n  return raySphereSecondIntersection(origin, direction, vec3(0.0), radius);\n}\n\nvec4 raySphereSecondIntersection(\n  const vec3 origin,\n  const vec3 direction,\n  const vec3 center,\n  const vec4 radius\n) {\n  vec3 a = origin - center;\n  float b = 2.0 * dot(direction, a);\n  vec4 c = dot(a, a) - radius * radius;\n  vec4 discriminant = b * b - 4.0 * c;\n  vec4 mask = step(discriminant, vec4(0.0));\n  return mix((-b + sqrt(max(vec4(0.0), discriminant))) * 0.5, vec4(-1.0), mask);\n}\n\nvec4 raySphereSecondIntersection(const vec3 origin, const vec3 direction, const vec4 radius) {\n  return raySphereSecondIntersection(origin, direction, vec3(0.0), radius);\n}\n\nvoid raySphereIntersections(\n  const vec3 origin,\n  const vec3 direction,\n  const vec3 center,\n  const float radius,\n  out float intersection1,\n  out float intersection2\n) {\n  vec3 a = origin - center;\n  float b = 2.0 * dot(direction, a);\n  float c = dot(a, a) - radius * radius;\n  float discriminant = b * b - 4.0 * c;\n  if (discriminant < 0.0) {\n    intersection1 = -1.0;\n    intersection2 = -1.0;\n    return;\n  } else {\n    float Q = sqrt(discriminant);\n    intersection1 = (-b - Q) * 0.5;\n    intersection2 = (-b + Q) * 0.5;\n  }\n}\n\nvoid raySphereIntersections(\n  const vec3 origin,\n  const vec3 direction,\n  const float radius,\n  out float intersection1,\n  out float intersection2\n) {\n  raySphereIntersections(origin, direction, vec3(0.0), radius, intersection1, intersection2);\n}\n\nvoid raySphereIntersections(\n  const vec3 origin,\n  const vec3 direction,\n  const vec3 center,\n  const vec4 radius,\n  out vec4 intersection1,\n  out vec4 intersection2\n) {\n  vec3 a = origin - center;\n  float b = 2.0 * dot(direction, a);\n  vec4 c = dot(a, a) - radius * radius;\n  vec4 discriminant = b * b - 4.0 * c;\n  vec4 mask = step(discriminant, vec4(0.0));\n  vec4 Q = sqrt(max(vec4(0.0), discriminant));\n  intersection1 = mix((-b - Q) * 0.5, vec4(-1.0), mask);\n  intersection2 = mix((-b + Q) * 0.5, vec4(-1.0), mask);\n}\n\nvoid raySphereIntersections(\n  const vec3 origin,\n  const vec3 direction,\n  const vec4 radius,\n  out vec4 intersection1,\n  out vec4 intersection2\n) {\n  raySphereIntersections(origin, direction, vec3(0.0), radius, intersection1, intersection2);\n}\n`, a = `vec3 screenToView(\n  const vec2 uv,\n  const float depth,\n  const float viewZ,\n  const mat4 projectionMatrix,\n  const mat4 inverseProjectionMatrix\n) {\n  vec4 clip = vec4(vec3(uv, depth) * 2.0 - 1.0, 1.0);\n  float clipW = projectionMatrix[2][3] * viewZ + projectionMatrix[3][3];\n  clip *= clipW;\n  return (inverseProjectionMatrix * clip).xyz;\n}\n`, s = `// A fifth-order polynomial approximation of Turbo color map.\n// See: https://observablehq.com/@mbostock/turbo\n// prettier-ignore\nvec3 turbo(const float x) {\n  float r = 0.1357 + x * (4.5974 - x * (42.3277 - x * (130.5887 - x * (150.5666 - x * 58.1375))));\n  float g = 0.0914 + x * (2.1856 + x * (4.8052 - x * (14.0195 - x * (4.2109 + x * 2.7747))));\n  float b = 0.1067 + x * (12.5925 - x * (60.1097 - x * (109.0745 - x * (88.5066 - x * 26.8183))));\n  return vec3(r, g, b);\n}\n`, v = `// Reference: https://www.gamedev.net/tutorials/programming/graphics/contact-hardening-soft-shadows-made-fast-r4906/\n\nvec2 vogelDisk(const int index, const int sampleCount, const float phi) {\n  const float goldenAngle = 2.39996322972865332;\n  float r = sqrt(float(index) + 0.5) / sqrt(float(sampleCount));\n  float theta = float(index) * goldenAngle + phi;\n  return r * vec2(cos(theta), sin(theta));\n}\n`, m = n, d = e, l = t, f = c, x = i, p = r, u = o, _ = a, h = s, g = v;\nexport {\n  m as cascadedShadowMaps,\n  d as depth,\n  l as generators,\n  f as interleavedGradientNoise,\n  x as math,\n  p as packing,\n  u as raySphereIntersection,\n  _ as transform,\n  h as turbo,\n  g as vogelDisk\n};\n//# sourceMappingURL=shaders.js.map\n","import { Matrix3 as E, Vector3 as c } from \"three\";\nconst T = \"eac103980f20c0956f2d3215833e73514be08462\", S = `https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/${T}/packages/atmosphere/assets`, d = `https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/${T}/packages/atmosphere/assets/stars.bin`, f = 64, A = 16, i = 32, _ = 128, R = 32, u = 8, U = u * R, g = _, N = i, C = 256, p = 64, w = 1 / 1e3, h = 100, D = /* @__PURE__ */ new E(\n  3.2406255,\n  -1.537208,\n  -0.4986286,\n  -0.9689307,\n  1.8757561,\n  0.0415175,\n  0.0557101,\n  -0.2040211,\n  1.0569959\n), I = /* @__PURE__ */ new c();\nfunction X(t, a, e, s) {\n  const n = e.projectOnSurface(\n    t,\n    I\n  );\n  return n != null ? e.getOsculatingSphereCenter(n, a, s).negate() : s.setScalar(0);\n}\nvar l = \"production\" === \"production\", r = \"Invariant failed\";\nfunction G(t, a) {\n  if (!t) {\n    if (l)\n      throw new Error(r);\n    var e = r;\n    throw new Error(e);\n  }\n}\nconst H = typeof window < \"u\" && window.requestIdleCallback != null ? window.requestIdleCallback : function(a, e = {}) {\n  const n = e.timeout ?? 1, o = performance.now();\n  return setTimeout(() => {\n    a({\n      get didTimeout() {\n        return e.timeout != null ? !1 : performance.now() - o - 1 > n;\n      },\n      timeRemaining() {\n        return Math.max(0, 1 + (performance.now() - o));\n      }\n    });\n  }, 1);\n};\nexport {\n  S as D,\n  A as I,\n  w as M,\n  N as S,\n  p as T,\n  D as X,\n  d as a,\n  f as b,\n  g as c,\n  _ as d,\n  R as e,\n  u as f,\n  i as g,\n  U as h,\n  h as i,\n  C as j,\n  X as k,\n  G as l,\n  H as r\n};\n//# sourceMappingURL=shared2.js.map\n","const e = `// Based on: https://github.com/ebruneton/precomputed_atmospheric_scattering/blob/master/atmosphere/functions.glsl\n\n/**\n * Copyright (c) 2017 Eric Bruneton\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holders nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Precomputed Atmospheric Scattering\n * Copyright (c) 2008 INRIA\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holders nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nNumber ClampCosine(const Number mu) {\n  return clamp(mu, Number(-1.0), Number(1.0));\n}\n\nLength ClampDistance(const Length d) {\n  return max(d, 0.0 * m);\n}\n\nLength ClampRadius(const AtmosphereParameters atmosphere, const Length r) {\n  return clamp(r, atmosphere.bottom_radius, atmosphere.top_radius);\n}\n\nLength SafeSqrt(const Area a) {\n  return sqrt(max(a, 0.0 * m2));\n}\n\nLength DistanceToTopAtmosphereBoundary(const AtmosphereParameters atmosphere,\n    const Length r, const Number mu) {\n  assert(r <= atmosphere.top_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  Area discriminant = r * r * (mu * mu - 1.0) +\n      atmosphere.top_radius * atmosphere.top_radius;\n  return ClampDistance(-r * mu + SafeSqrt(discriminant));\n}\n\nLength DistanceToBottomAtmosphereBoundary(const AtmosphereParameters atmosphere,\n    const Length r, const Number mu) {\n  assert(r >= atmosphere.bottom_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  Area discriminant = r * r * (mu * mu - 1.0) +\n      atmosphere.bottom_radius * atmosphere.bottom_radius;\n  return ClampDistance(-r * mu - SafeSqrt(discriminant));\n}\n\nbool RayIntersectsGround(const AtmosphereParameters atmosphere,\n    const Length r, const Number mu) {\n  assert(r >= atmosphere.bottom_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  return mu < 0.0 && r * r * (mu * mu - 1.0) +\n      atmosphere.bottom_radius * atmosphere.bottom_radius >= 0.0 * m2;\n}\n\nNumber GetTextureCoordFromUnitRange(const Number x, const int texture_size) {\n  return 0.5 / Number(texture_size) + x * (1.0 - 1.0 / Number(texture_size));\n}\n\nvec2 GetTransmittanceTextureUvFromRMu(const AtmosphereParameters atmosphere,\n    const Length r, const Number mu) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  // Distance to top atmosphere boundary for a horizontal ray at ground level.\n  Length H = sqrt(atmosphere.top_radius * atmosphere.top_radius -\n      atmosphere.bottom_radius * atmosphere.bottom_radius);\n  // Distance to the horizon.\n  Length rho =\n      SafeSqrt(r * r - atmosphere.bottom_radius * atmosphere.bottom_radius);\n  // Distance to the top atmosphere boundary for the ray (r,mu), and its minimum\n  // and maximum values over all mu - obtained for (r,1) and (r,mu_horizon).\n  Length d = DistanceToTopAtmosphereBoundary(atmosphere, r, mu);\n  Length d_min = atmosphere.top_radius - r;\n  Length d_max = rho + H;\n  Number x_mu = (d - d_min) / (d_max - d_min);\n  Number x_r = rho / H;\n  return vec2(GetTextureCoordFromUnitRange(x_mu, TRANSMITTANCE_TEXTURE_WIDTH),\n              GetTextureCoordFromUnitRange(x_r, TRANSMITTANCE_TEXTURE_HEIGHT));\n}\n\nDimensionlessSpectrum GetTransmittanceToTopAtmosphereBoundary(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const Length r, const Number mu) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  vec2 uv = GetTransmittanceTextureUvFromRMu(atmosphere, r, mu);\n  // @shotamatsuda: Added for the precomputation stage in half-float precision.\n  #ifdef TRANSMITTANCE_PRECISION_LOG\n  // Manually interpolate the transmittance instead of the optical depth.\n  const vec2 size = vec2(TRANSMITTANCE_TEXTURE_WIDTH, TRANSMITTANCE_TEXTURE_HEIGHT);\n  const vec3 texel_size = vec3(1.0 / size, 0.0);\n  vec2 coord = (uv * size) - 0.5;\n  vec2 i = (floor(coord) + 0.5) * texel_size.xy;\n  vec2 f = fract(coord);\n  vec4 t1 = exp(-texture(transmittance_texture, i));\n  vec4 t2 = exp(-texture(transmittance_texture, i + texel_size.xz));\n  vec4 t3 = exp(-texture(transmittance_texture, i + texel_size.zy));\n  vec4 t4 = exp(-texture(transmittance_texture, i + texel_size.xy));\n  return DimensionlessSpectrum(mix(mix(t1, t2, f.x), mix(t3, t4, f.x), f.y));\n  #else // TRANSMITTANCE_PRECISION_LOG\n  return DimensionlessSpectrum(texture(transmittance_texture, uv));\n  #endif // TRANSMITTANCE_PRECISION_LOG\n}\n\nDimensionlessSpectrum GetTransmittance(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const Length r, const Number mu, const Length d,\n    const bool ray_r_mu_intersects_ground) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  assert(d >= 0.0 * m);\n\n  Length r_d = ClampRadius(atmosphere, sqrt(d * d + 2.0 * r * mu * d + r * r));\n  Number mu_d = ClampCosine((r * mu + d) / r_d);\n\n  if (ray_r_mu_intersects_ground) {\n    return min(\n        GetTransmittanceToTopAtmosphereBoundary(\n            atmosphere, transmittance_texture, r_d, -mu_d) /\n        GetTransmittanceToTopAtmosphereBoundary(\n            atmosphere, transmittance_texture, r, -mu),\n        DimensionlessSpectrum(1.0));\n  } else {\n    return min(\n        GetTransmittanceToTopAtmosphereBoundary(\n            atmosphere, transmittance_texture, r, mu) /\n        GetTransmittanceToTopAtmosphereBoundary(\n            atmosphere, transmittance_texture, r_d, mu_d),\n        DimensionlessSpectrum(1.0));\n  }\n}\n\nDimensionlessSpectrum GetTransmittanceToSun(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const Length r, const Number mu_s) {\n  Number sin_theta_h = atmosphere.bottom_radius / r;\n  Number cos_theta_h = -sqrt(max(1.0 - sin_theta_h * sin_theta_h, 0.0));\n  return GetTransmittanceToTopAtmosphereBoundary(\n          atmosphere, transmittance_texture, r, mu_s) *\n      smoothstep(-sin_theta_h * atmosphere.sun_angular_radius / rad,\n                 sin_theta_h * atmosphere.sun_angular_radius / rad,\n                 mu_s - cos_theta_h);\n}\n\nInverseSolidAngle RayleighPhaseFunction(const Number nu) {\n  InverseSolidAngle k = 3.0 / (16.0 * PI * sr);\n  return k * (1.0 + nu * nu);\n}\n\nInverseSolidAngle MiePhaseFunction(const Number g, const Number nu) {\n  InverseSolidAngle k = 3.0 / (8.0 * PI * sr) * (1.0 - g * g) / (2.0 + g * g);\n  return k * (1.0 + nu * nu) / pow(1.0 + g * g - 2.0 * g * nu, 1.5);\n}\n\nvec4 GetScatteringTextureUvwzFromRMuMuSNu(const AtmosphereParameters atmosphere,\n    const Length r, const Number mu, const Number mu_s, const Number nu,\n    const bool ray_r_mu_intersects_ground) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  assert(mu_s >= -1.0 && mu_s <= 1.0);\n  assert(nu >= -1.0 && nu <= 1.0);\n\n  // Distance to top atmosphere boundary for a horizontal ray at ground level.\n  Length H = sqrt(atmosphere.top_radius * atmosphere.top_radius -\n      atmosphere.bottom_radius * atmosphere.bottom_radius);\n  // Distance to the horizon.\n  Length rho =\n      SafeSqrt(r * r - atmosphere.bottom_radius * atmosphere.bottom_radius);\n  Number u_r = GetTextureCoordFromUnitRange(rho / H, SCATTERING_TEXTURE_R_SIZE);\n\n  // Discriminant of the quadratic equation for the intersections of the ray\n  // (r,mu) with the ground (see RayIntersectsGround).\n  Length r_mu = r * mu;\n  Area discriminant =\n      r_mu * r_mu - r * r + atmosphere.bottom_radius * atmosphere.bottom_radius;\n  Number u_mu;\n  if (ray_r_mu_intersects_ground) {\n    // Distance to the ground for the ray (r,mu), and its minimum and maximum\n    // values over all mu - obtained for (r,-1) and (r,mu_horizon).\n    Length d = -r_mu - SafeSqrt(discriminant);\n    Length d_min = r - atmosphere.bottom_radius;\n    Length d_max = rho;\n    u_mu = 0.5 - 0.5 * GetTextureCoordFromUnitRange(d_max == d_min ? 0.0 :\n        (d - d_min) / (d_max - d_min), SCATTERING_TEXTURE_MU_SIZE / 2);\n  } else {\n    // Distance to the top atmosphere boundary for the ray (r,mu), and its\n    // minimum and maximum values over all mu - obtained for (r,1) and\n    // (r,mu_horizon).\n    Length d = -r_mu + SafeSqrt(discriminant + H * H);\n    Length d_min = atmosphere.top_radius - r;\n    Length d_max = rho + H;\n    u_mu = 0.5 + 0.5 * GetTextureCoordFromUnitRange(\n        (d - d_min) / (d_max - d_min), SCATTERING_TEXTURE_MU_SIZE / 2);\n  }\n\n  Length d = DistanceToTopAtmosphereBoundary(\n      atmosphere, atmosphere.bottom_radius, mu_s);\n  Length d_min = atmosphere.top_radius - atmosphere.bottom_radius;\n  Length d_max = H;\n  Number a = (d - d_min) / (d_max - d_min);\n  Length D = DistanceToTopAtmosphereBoundary(\n      atmosphere, atmosphere.bottom_radius, atmosphere.mu_s_min);\n  Number A = (D - d_min) / (d_max - d_min);\n  // An ad-hoc function equal to 0 for mu_s = mu_s_min (because then d = D and\n  // thus a = A), equal to 1 for mu_s = 1 (because then d = d_min and thus\n  // a = 0), and with a large slope around mu_s = 0, to get more texture\n  // samples near the horizon.\n  Number u_mu_s = GetTextureCoordFromUnitRange(\n      max(1.0 - a / A, 0.0) / (1.0 + a), SCATTERING_TEXTURE_MU_S_SIZE);\n\n  Number u_nu = (nu + 1.0) / 2.0;\n  return vec4(u_nu, u_mu_s, u_mu, u_r);\n}\n\nvec2 GetIrradianceTextureUvFromRMuS(const AtmosphereParameters atmosphere,\n    const Length r, const Number mu_s) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu_s >= -1.0 && mu_s <= 1.0);\n  Number x_r = (r - atmosphere.bottom_radius) /\n      (atmosphere.top_radius - atmosphere.bottom_radius);\n  Number x_mu_s = mu_s * 0.5 + 0.5;\n  return vec2(GetTextureCoordFromUnitRange(x_mu_s, IRRADIANCE_TEXTURE_WIDTH),\n              GetTextureCoordFromUnitRange(x_r, IRRADIANCE_TEXTURE_HEIGHT));\n}\n\nIrradianceSpectrum GetIrradiance(\n    const AtmosphereParameters atmosphere,\n    const IrradianceTexture irradiance_texture,\n    const Length r, const Number mu_s) {\n  vec2 uv = GetIrradianceTextureUvFromRMuS(atmosphere, r, mu_s);\n  return IrradianceSpectrum(texture(irradiance_texture, uv));\n}\n`, t = `// Based on: https://github.com/ebruneton/precomputed_atmospheric_scattering/blob/master/atmosphere/definitions.glsl\n\n/**\n * Copyright (c) 2017 Eric Bruneton\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holders nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#define assert(x)\n\n#define Length float\n#define Wavelength float\n#define Angle float\n#define SolidAngle float\n#define Power float\n#define LuminousPower float\n\n#define Number float\n#define InverseLength float\n#define Area float\n#define Volume float\n#define NumberDensity float\n#define Irradiance float\n#define Radiance float\n#define SpectralPower float\n#define SpectralIrradiance float\n#define SpectralRadiance float\n#define SpectralRadianceDensity float\n#define ScatteringCoefficient float\n#define InverseSolidAngle float\n#define LuminousIntensity float\n#define Luminance float\n#define Illuminance float\n\n// A generic function from Wavelength to some other type.\n#define AbstractSpectrum vec3\n// A function from Wavelength to Number.\n#define DimensionlessSpectrum vec3\n// A function from Wavelength to SpectralPower.\n#define PowerSpectrum vec3\n// A function from Wavelength to SpectralIrradiance.\n#define IrradianceSpectrum vec3\n// A function from Wavelength to SpectralRadiance.\n#define RadianceSpectrum vec3\n// A function from Wavelength to SpectralRadianceDensity.\n#define RadianceDensitySpectrum vec3\n// A function from Wavelength to ScatteringCoefficient.\n#define ScatteringSpectrum vec3\n\n// A position in 3D (3 length values).\n#define Position vec3\n// A unit direction vector in 3D (3 unit-less values).\n#define Direction vec3\n// A vector of 3 luminance values.\n#define Luminance3 vec3\n// A vector of 3 illuminance values.\n#define Illuminance3 vec3\n\n#define TransmittanceTexture sampler2D\n#define AbstractScatteringTexture sampler3D\n#define ReducedScatteringTexture sampler3D\n#define ScatteringTexture sampler3D\n#define ScatteringDensityTexture sampler3D\n#define IrradianceTexture sampler2D\n\nconst Length m = 1.0;\nconst Wavelength nm = 1.0;\nconst Angle rad = 1.0;\nconst SolidAngle sr = 1.0;\nconst Power watt = 1.0;\nconst LuminousPower lm = 1.0;\n\n#if !defined(PI)\nconst float PI = 3.14159265358979323846;\n#endif // !defined(PI)\n\nconst Length km = 1000.0 * m;\nconst Area m2 = m * m;\nconst Volume m3 = m * m * m;\nconst Angle pi = PI * rad;\nconst Angle deg = pi / 180.0;\nconst Irradiance watt_per_square_meter = watt / m2;\nconst Radiance watt_per_square_meter_per_sr = watt / (m2 * sr);\nconst SpectralIrradiance watt_per_square_meter_per_nm = watt / (m2 * nm);\nconst SpectralRadiance watt_per_square_meter_per_sr_per_nm = watt / (m2 * sr * nm);\nconst SpectralRadianceDensity watt_per_cubic_meter_per_sr_per_nm = watt / (m3 * sr * nm);\nconst LuminousIntensity cd = lm / sr;\nconst LuminousIntensity kcd = 1000.0 * cd;\nconst Luminance cd_per_square_meter = cd / m2;\nconst Luminance kcd_per_square_meter = kcd / m2;\n\nstruct DensityProfileLayer {\n  Length width;\n  Number exp_term;\n  InverseLength exp_scale;\n  InverseLength linear_term;\n  Number constant_term;\n};\n\nstruct DensityProfile {\n  DensityProfileLayer layers[2];\n};\n\n// See AtmosphereParameter.ts for further details.\nstruct AtmosphereParameters {\n  IrradianceSpectrum solar_irradiance;\n  Angle sun_angular_radius;\n  Length bottom_radius;\n  Length top_radius;\n  DensityProfile rayleigh_density;\n  ScatteringSpectrum rayleigh_scattering;\n  DensityProfile mie_density;\n  ScatteringSpectrum mie_scattering;\n  ScatteringSpectrum mie_extinction;\n  Number mie_phase_function_g;\n  DensityProfile absorption_density;\n  ScatteringSpectrum absorption_extinction;\n  DimensionlessSpectrum ground_albedo;\n  Number mu_s_min;\n};\n`, n = `// Based on: https://github.com/ebruneton/precomputed_atmospheric_scattering/blob/master/atmosphere/functions.glsl\n\n/**\n * Copyright (c) 2017 Eric Bruneton\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holders nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Precomputed Atmospheric Scattering\n * Copyright (c) 2008 INRIA\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holders nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifdef COMBINED_SCATTERING_TEXTURES\nvec3 GetExtrapolatedSingleMieScattering(\n    const AtmosphereParameters atmosphere, const vec4 scattering) {\n  // Algebraically this can never be negative, but rounding errors can produce\n  // that effect for sufficiently short view rays.\n  // @shotamatsuda: Avoid division by infinitesimal values.\n  // See https://github.com/takram-design-engineering/three-geospatial/issues/47\n  if (scattering.r < 1e-5) {\n    return vec3(0.0);\n  }\n  return scattering.rgb * scattering.a / scattering.r *\n\t    (atmosphere.rayleigh_scattering.r / atmosphere.mie_scattering.r) *\n\t    (atmosphere.mie_scattering / atmosphere.rayleigh_scattering);\n}\n#endif // COMBINED_SCATTERING_TEXTURES\n\nIrradianceSpectrum GetCombinedScattering(\n    const AtmosphereParameters atmosphere,\n    const ReducedScatteringTexture scattering_texture,\n    const ReducedScatteringTexture single_mie_scattering_texture,\n    const Length r, const Number mu, const Number mu_s, const Number nu,\n    const bool ray_r_mu_intersects_ground,\n    out IrradianceSpectrum single_mie_scattering) {\n  vec4 uvwz = GetScatteringTextureUvwzFromRMuMuSNu(\n      atmosphere, r, mu, mu_s, nu, ray_r_mu_intersects_ground);\n  Number tex_coord_x = uvwz.x * Number(SCATTERING_TEXTURE_NU_SIZE - 1);\n  Number tex_x = floor(tex_coord_x);\n  Number lerp = tex_coord_x - tex_x;\n  vec3 uvw0 = vec3((tex_x + uvwz.y) / Number(SCATTERING_TEXTURE_NU_SIZE),\n      uvwz.z, uvwz.w);\n  vec3 uvw1 = vec3((tex_x + 1.0 + uvwz.y) / Number(SCATTERING_TEXTURE_NU_SIZE),\n      uvwz.z, uvwz.w);\n#ifdef COMBINED_SCATTERING_TEXTURES\n  vec4 combined_scattering =\n      texture(scattering_texture, uvw0) * (1.0 - lerp) +\n      texture(scattering_texture, uvw1) * lerp;\n  IrradianceSpectrum scattering = IrradianceSpectrum(combined_scattering);\n  single_mie_scattering =\n      GetExtrapolatedSingleMieScattering(atmosphere, combined_scattering);\n#else // COMBINED_SCATTERING_TEXTURES\n  IrradianceSpectrum scattering = IrradianceSpectrum(\n      texture(scattering_texture, uvw0) * (1.0 - lerp) +\n      texture(scattering_texture, uvw1) * lerp);\n  single_mie_scattering = IrradianceSpectrum(\n      texture(single_mie_scattering_texture, uvw0) * (1.0 - lerp) +\n      texture(single_mie_scattering_texture, uvw1) * lerp);\n#endif // COMBINED_SCATTERING_TEXTURES\n  return scattering;\n}\n\n// @shotamatsuda: Added for reading higher-order scattering texture.\n#ifdef HAS_HIGHER_ORDER_SCATTERING_TEXTURE\nIrradianceSpectrum GetScattering(\n    const AtmosphereParameters atmosphere,\n    const ReducedScatteringTexture scattering_texture,\n    const Length r, const Number mu, const Number mu_s, const Number nu,\n    const bool ray_r_mu_intersects_ground) {\n  vec4 uvwz = GetScatteringTextureUvwzFromRMuMuSNu(\n      atmosphere, r, mu, mu_s, nu, ray_r_mu_intersects_ground);\n  Number tex_coord_x = uvwz.x * Number(SCATTERING_TEXTURE_NU_SIZE - 1);\n  Number tex_x = floor(tex_coord_x);\n  Number lerp = tex_coord_x - tex_x;\n  vec3 uvw0 = vec3((tex_x + uvwz.y) / Number(SCATTERING_TEXTURE_NU_SIZE),\n      uvwz.z, uvwz.w);\n  vec3 uvw1 = vec3((tex_x + 1.0 + uvwz.y) / Number(SCATTERING_TEXTURE_NU_SIZE),\n      uvwz.z, uvwz.w);\n  IrradianceSpectrum scattering = IrradianceSpectrum(\n      texture(scattering_texture, uvw0) * (1.0 - lerp) +\n      texture(scattering_texture, uvw1) * lerp);\n  return scattering;\n}\n#endif // HAS_HIGHER_ORDER_SCATTERING_TEXTURE\n\nRadianceSpectrum GetSkyRadiance(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const ReducedScatteringTexture scattering_texture,\n    const ReducedScatteringTexture single_mie_scattering_texture,\n    Position camera, const Direction view_ray, const Length shadow_length,\n    const Direction sun_direction,\n    out DimensionlessSpectrum transmittance) {\n  // Compute the distance to the top atmosphere boundary along the view ray,\n  // assuming the viewer is in space (or NaN if the view ray does not intersect\n  // the atmosphere).\n  Length r = length(camera);\n  Length rmu = dot(camera, view_ray);\n  // @shotamatsuda: Use SafeSqrt instead.\n  // See: https://github.com/takram-design-engineering/three-geospatial/pull/26\n  Length distance_to_top_atmosphere_boundary = -rmu -\n      SafeSqrt(rmu * rmu - r * r +\n          atmosphere.top_radius * atmosphere.top_radius);\n  // If the viewer is in space and the view ray intersects the atmosphere, move\n  // the viewer to the top atmosphere boundary (along the view ray):\n  if (distance_to_top_atmosphere_boundary > 0.0 * m) {\n    camera = camera + view_ray * distance_to_top_atmosphere_boundary;\n    r = atmosphere.top_radius;\n    rmu += distance_to_top_atmosphere_boundary;\n  } else if (r > atmosphere.top_radius) {\n    // If the view ray does not intersect the atmosphere, simply return 0.\n    transmittance = DimensionlessSpectrum(1.0);\n    return RadianceSpectrum(0.0 * watt_per_square_meter_per_sr_per_nm);\n  }\n  // Compute the r, mu, mu_s and nu parameters needed for the texture lookups.\n  Number mu = rmu / r;\n  Number mu_s = dot(camera, sun_direction) / r;\n  Number nu = dot(view_ray, sun_direction);\n\n  // @shotamatsuda: For rendering points below the bottom atmosphere.\n  #ifdef GROUND\n  bool ray_r_mu_intersects_ground = RayIntersectsGround(atmosphere, r, mu);\n  #else // GROUND\n  bool ray_r_mu_intersects_ground = false;\n  #endif // GROUND\n\n  transmittance = ray_r_mu_intersects_ground ? DimensionlessSpectrum(0.0) :\n      GetTransmittanceToTopAtmosphereBoundary(\n          atmosphere, transmittance_texture, r, mu);\n  IrradianceSpectrum single_mie_scattering;\n  IrradianceSpectrum scattering;\n  if (shadow_length == 0.0 * m) {\n    scattering = GetCombinedScattering(\n        atmosphere, scattering_texture, single_mie_scattering_texture,\n        r, mu, mu_s, nu, ray_r_mu_intersects_ground,\n        single_mie_scattering);\n  } else {\n    // Case of light shafts (shadow_length is the total length noted l in our\n    // paper): we omit the scattering between the camera and the point at\n    // distance l, by implementing Eq. (18) of the paper (shadow_transmittance\n    // is the T(x,x_s) term, scattering is the S|x_s=x+lv term).\n    Length d = shadow_length;\n    Length r_p =\n        ClampRadius(atmosphere, sqrt(d * d + 2.0 * r * mu * d + r * r));\n    Number mu_p = (r * mu + d) / r_p;\n    Number mu_s_p = (r * mu_s + d * nu) / r_p;\n\n    scattering = GetCombinedScattering(\n        atmosphere, scattering_texture, single_mie_scattering_texture,\n        r_p, mu_p, mu_s_p, nu, ray_r_mu_intersects_ground,\n        single_mie_scattering);\n    DimensionlessSpectrum shadow_transmittance =\n        GetTransmittance(atmosphere, transmittance_texture,\n            r, mu, shadow_length, ray_r_mu_intersects_ground);\n    // @shotamatsuda: Occlude only single Rayleigh scattering by the shadow.\n#ifdef HAS_HIGHER_ORDER_SCATTERING_TEXTURE\n    IrradianceSpectrum higher_order_scattering = GetScattering(\n        atmosphere, higher_order_scattering_texture,\n        r_p, mu_p, mu_s_p, nu, ray_r_mu_intersects_ground);\n    IrradianceSpectrum single_scattering = scattering - higher_order_scattering;\n    scattering = single_scattering * shadow_transmittance + higher_order_scattering;\n#else // HAS_HIGHER_ORDER_SCATTERING_TEXTURE\n    scattering = scattering * shadow_transmittance;\n#endif // HAS_HIGHER_ORDER_SCATTERING_TEXTURE\n    single_mie_scattering = single_mie_scattering * shadow_transmittance;\n  }\n  return scattering * RayleighPhaseFunction(nu) + single_mie_scattering *\n      MiePhaseFunction(atmosphere.mie_phase_function_g, nu);\n}\n\n// @shotamatsuda: Returns the point on the ray closest to the origin.\nvec3 ClosestPointOnRay(const Position camera, const Position point) {\n  Position ray = point - camera;\n  Number t = clamp(-dot(camera, ray) / dot(ray, ray), 0.0, 1.0);\n  return camera + t * ray;\n}\n\nvec2 RaySphereIntersections(\n    const Position camera, const Direction direction, const Length radius) {\n  float b = 2.0 * dot(direction, camera);\n  float c = dot(camera, camera) - radius * radius;\n  float discriminant = b * b - 4.0 * c;\n  float Q = sqrt(discriminant);\n  return vec2(-b - Q, -b + Q) * 0.5;\n}\n\n// @shotamatsuda: Clip the view ray at the bottom atmosphere boundary.\nbool ClipAtBottomAtmosphere(\n    const AtmosphereParameters atmosphere,\n    const Direction view_ray, inout Position camera, inout Position point) {\n  const Length eps = 0.0;\n  Length bottom_radius = atmosphere.bottom_radius + eps;\n  Length r_camera = length(camera);\n  Length r_point = length(point);\n  bool camera_below = r_camera < bottom_radius;\n  bool point_below = r_point < bottom_radius;\n\n  vec2 t = RaySphereIntersections(camera, view_ray, bottom_radius);\n  Position intersection = camera + view_ray * (camera_below ? t.y : t.x);\n  camera = camera_below ? intersection : camera;\n  point = point_below ? intersection : point;\n\n  return camera_below && point_below;\n}\n\nRadianceSpectrum GetSkyRadianceToPoint(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const ReducedScatteringTexture scattering_texture,\n    const ReducedScatteringTexture single_mie_scattering_texture,\n    Position camera, Position point, const Length shadow_length,\n    const Direction sun_direction, out DimensionlessSpectrum transmittance) {\n  // @shotamatsuda: Avoid artifacts when the ray does not intersect the top\n  // atmosphere boundary.\n  if (length(ClosestPointOnRay(camera, point)) > atmosphere.top_radius) {\n    transmittance = vec3(1.0);\n    return vec3(0.0);\n  }\n\n  Direction view_ray = normalize(point - camera);\n  if (ClipAtBottomAtmosphere(atmosphere, view_ray, camera, point)) {\n    transmittance = vec3(1.0);\n    return vec3(0.0);\n  }\n\n  // Compute the distance to the top atmosphere boundary along the view ray,\n  // assuming the viewer is in space (or NaN if the view ray does not intersect\n  // the atmosphere).\n  Length r = length(camera);\n  Length rmu = dot(camera, view_ray);\n  // @shotamatsuda: Use SafeSqrt instead.\n  // See: https://github.com/takram-design-engineering/three-geospatial/pull/26\n  Length distance_to_top_atmosphere_boundary = -rmu -\n      SafeSqrt(rmu * rmu - r * r +\n          atmosphere.top_radius * atmosphere.top_radius);\n  // If the viewer is in space and the view ray intersects the atmosphere, move\n  // the viewer to the top atmosphere boundary (along the view ray):\n  if (distance_to_top_atmosphere_boundary > 0.0 * m) {\n    camera = camera + view_ray * distance_to_top_atmosphere_boundary;\n    r = atmosphere.top_radius;\n    rmu += distance_to_top_atmosphere_boundary;\n  }\n\n  // Compute the r, mu, mu_s and nu parameters for the first texture lookup.\n  Number mu = rmu / r;\n  Number mu_s = dot(camera, sun_direction) / r;\n  Number nu = dot(view_ray, sun_direction);\n  Length d = length(point - camera);\n  bool ray_r_mu_intersects_ground = RayIntersectsGround(atmosphere, r, mu);\n\n  // @shotamatsuda: Hack to avoid rendering artifacts near the horizon, due to\n  // finite atmosphere texture resolution and finite floating point precision.\n  // See: https://github.com/ebruneton/precomputed_atmospheric_scattering/pull/32\n  if (!ray_r_mu_intersects_ground) {\n    Number mu_horizon = -SafeSqrt(1.0 -\n        (atmosphere.bottom_radius * atmosphere.bottom_radius) / (r * r));\n    const Number eps = 0.004;\n    mu = max(mu, mu_horizon + eps);\n  }\n\n  transmittance = GetTransmittance(atmosphere, transmittance_texture,\n      r, mu, d, ray_r_mu_intersects_ground);\n\n  IrradianceSpectrum single_mie_scattering;\n  IrradianceSpectrum scattering = GetCombinedScattering(\n      atmosphere, scattering_texture, single_mie_scattering_texture,\n      r, mu, mu_s, nu, ray_r_mu_intersects_ground,\n      single_mie_scattering);\n\n  // Compute the r, mu, mu_s and nu parameters for the second texture lookup.\n  // If shadow_length is not 0 (case of light shafts), we want to ignore the\n  // scattering along the last shadow_length meters of the view ray, which we\n  // do by subtracting shadow_length from d (this way scattering_p is equal to\n  // the S|x_s=x_0-lv term in Eq. (17) of our paper).\n  d = max(d - shadow_length, 0.0 * m);\n  Length r_p = ClampRadius(atmosphere, sqrt(d * d + 2.0 * r * mu * d + r * r));\n  Number mu_p = (r * mu + d) / r_p;\n  Number mu_s_p = (r * mu_s + d * nu) / r_p;\n\n  IrradianceSpectrum single_mie_scattering_p;\n  IrradianceSpectrum scattering_p = GetCombinedScattering(\n      atmosphere, scattering_texture, single_mie_scattering_texture,\n      r_p, mu_p, mu_s_p, nu, ray_r_mu_intersects_ground,\n      single_mie_scattering_p);\n\n  // Combine the lookup results to get the scattering between camera and point.\n  DimensionlessSpectrum shadow_transmittance = transmittance;\n  if (shadow_length > 0.0 * m) {\n    // This is the T(x,x_s) term in Eq. (17) of our paper, for light shafts.\n    shadow_transmittance = GetTransmittance(atmosphere, transmittance_texture,\n        r, mu, d, ray_r_mu_intersects_ground);\n  }\n  // @shotamatsuda: Occlude only single Rayleigh scattering by the shadow.\n#ifdef HAS_HIGHER_ORDER_SCATTERING_TEXTURE\n  IrradianceSpectrum higher_order_scattering = GetScattering(\n      atmosphere, higher_order_scattering_texture,\n      r, mu, mu_s, nu, ray_r_mu_intersects_ground);\n  IrradianceSpectrum single_scattering = scattering - higher_order_scattering;\n  IrradianceSpectrum higher_order_scattering_p = GetScattering(\n      atmosphere, higher_order_scattering_texture,\n      r_p, mu_p, mu_s_p, nu, ray_r_mu_intersects_ground);\n  IrradianceSpectrum single_scattering_p =\n      scattering_p - higher_order_scattering_p;\n  scattering =\n      single_scattering - shadow_transmittance * single_scattering_p +\n      higher_order_scattering - transmittance * higher_order_scattering_p;\n#else // HAS_HIGHER_ORDER_SCATTERING_TEXTURE\n  scattering = scattering - shadow_transmittance * scattering_p;\n#endif // HAS_HIGHER_ORDER_SCATTERING_TEXTURE\n\n  single_mie_scattering =\n      single_mie_scattering - shadow_transmittance * single_mie_scattering_p;\n#ifdef COMBINED_SCATTERING_TEXTURES\n  single_mie_scattering = GetExtrapolatedSingleMieScattering(\n      atmosphere, vec4(scattering, single_mie_scattering.r));\n#endif // COMBINED_SCATTERING_TEXTURES\n\n  // Hack to avoid rendering artifacts when the sun is below the horizon.\n  single_mie_scattering = single_mie_scattering *\n      smoothstep(Number(0.0), Number(0.01), mu_s);\n\n  return scattering * RayleighPhaseFunction(nu) + single_mie_scattering *\n      MiePhaseFunction(atmosphere.mie_phase_function_g, nu);\n}\n\nIrradianceSpectrum GetSunAndSkyIrradiance(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const IrradianceTexture irradiance_texture,\n    const Position point, const Direction normal, const Direction sun_direction,\n    out IrradianceSpectrum sky_irradiance) {\n  Length r = length(point);\n  Number mu_s = dot(point, sun_direction) / r;\n\n  // Indirect irradiance (approximated if the surface is not horizontal).\n  sky_irradiance = GetIrradiance(atmosphere, irradiance_texture, r, mu_s) *\n      (1.0 + dot(normal, point) / r) * 0.5;\n\n  // Direct irradiance.\n  return atmosphere.solar_irradiance *\n      GetTransmittanceToSun(\n          atmosphere, transmittance_texture, r, mu_s) *\n      max(dot(normal, sun_direction), 0.0);\n}\n\n// @shotamatsuda: Added for the clouds.\nIrradianceSpectrum GetSunAndSkyScalarIrradiance(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const IrradianceTexture irradiance_texture,\n    const Position point, const Direction sun_direction,\n    out IrradianceSpectrum sky_irradiance) {\n  Length r = length(point);\n  Number mu_s = dot(point, sun_direction) / r;\n\n  // Indirect irradiance. Integral over sphere yields 2π.\n  sky_irradiance = GetIrradiance(atmosphere, irradiance_texture, r, mu_s) *\n      2.0 * PI;\n\n  // Direct irradiance. Omit the cosine term.\n  return atmosphere.solar_irradiance *\n      GetTransmittanceToSun(atmosphere, transmittance_texture, r, mu_s);\n}\n\nLuminance3 GetSolarLuminance() {\n  return ATMOSPHERE.solar_irradiance /\n      (PI * ATMOSPHERE.sun_angular_radius * ATMOSPHERE.sun_angular_radius) *\n      SUN_SPECTRAL_RADIANCE_TO_LUMINANCE;\n}\n\nLuminance3 GetSkyLuminance(\n    const Position camera, Direction view_ray, const Length shadow_length,\n    const Direction sun_direction, out DimensionlessSpectrum transmittance) {\n  return GetSkyRadiance(ATMOSPHERE, transmittance_texture,\n      scattering_texture, single_mie_scattering_texture,\n      camera, view_ray, shadow_length, sun_direction,\n      transmittance) * SKY_SPECTRAL_RADIANCE_TO_LUMINANCE;\n}\n\nLuminance3 GetSkyLuminanceToPoint(\n    const Position camera, const Position point, const Length shadow_length,\n    const Direction sun_direction, out DimensionlessSpectrum transmittance) {\n  return GetSkyRadianceToPoint(ATMOSPHERE, transmittance_texture,\n      scattering_texture, single_mie_scattering_texture,\n      camera, point, shadow_length, sun_direction, transmittance) *\n      SKY_SPECTRAL_RADIANCE_TO_LUMINANCE;\n}\n\nIlluminance3 GetSunAndSkyIlluminance(\n    const Position p, const Direction normal, const Direction sun_direction,\n    out IrradianceSpectrum sky_irradiance) {\n  IrradianceSpectrum sun_irradiance = GetSunAndSkyIrradiance(\n      ATMOSPHERE, transmittance_texture, irradiance_texture, p, normal,\n      sun_direction, sky_irradiance);\n  sky_irradiance *= SKY_SPECTRAL_RADIANCE_TO_LUMINANCE;\n  return sun_irradiance * SUN_SPECTRAL_RADIANCE_TO_LUMINANCE;\n}\n\n// @shotamatsuda: Added for the clouds.\nIlluminance3 GetSunAndSkyScalarIlluminance(\n    const Position p, const Direction sun_direction,\n    out IrradianceSpectrum sky_irradiance) {\n  IrradianceSpectrum sun_irradiance = GetSunAndSkyScalarIrradiance(\n      ATMOSPHERE, transmittance_texture, irradiance_texture, p,\n      sun_direction, sky_irradiance);\n  sky_irradiance *= SKY_SPECTRAL_RADIANCE_TO_LUMINANCE;\n  return sun_irradiance * SUN_SPECTRAL_RADIANCE_TO_LUMINANCE;\n}\n\n#define GetSolarRadiance GetSolarLuminance\n#define GetSkyRadiance GetSkyLuminance\n#define GetSkyRadianceToPoint GetSkyLuminanceToPoint\n#define GetSunAndSkyIrradiance GetSunAndSkyIlluminance\n#define GetSunAndSkyScalarIrradiance GetSunAndSkyScalarIlluminance\n`, r = `// Based on: https://github.com/ebruneton/precomputed_atmospheric_scattering/blob/master/atmosphere/functions.glsl\n\n/**\n * Copyright (c) 2017 Eric Bruneton\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holders nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Precomputed Atmospheric Scattering\n * Copyright (c) 2008 INRIA\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holders nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nNumber GetLayerDensity(const DensityProfileLayer layer, const Length altitude) {\n  Number density = layer.exp_term * exp(layer.exp_scale * altitude) +\n      layer.linear_term * altitude + layer.constant_term;\n  return clamp(density, Number(0.0), Number(1.0));\n}\n\nNumber GetProfileDensity(const DensityProfile profile, const Length altitude) {\n  DensityProfileLayer layers[2] = profile.layers;\n  return altitude < layers[0].width\n    ? GetLayerDensity(layers[0], altitude)\n    : GetLayerDensity(layers[1], altitude);\n}\n\nLength ComputeOpticalLengthToTopAtmosphereBoundary(\n    const AtmosphereParameters atmosphere, const DensityProfile profile,\n    const Length r, const Number mu) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  // Number of intervals for the numerical integration.\n  const int SAMPLE_COUNT = 500;\n  // The integration step, i.e. the length of each integration interval.\n  Length dx =\n      DistanceToTopAtmosphereBoundary(atmosphere, r, mu) / Number(SAMPLE_COUNT);\n  // Integration loop.\n  Length result = 0.0 * m;\n  for (int i = 0; i <= SAMPLE_COUNT; ++i) {\n    Length d_i = Number(i) * dx;\n    // Distance between the current sample point and the planet center.\n    Length r_i = sqrt(d_i * d_i + 2.0 * r * mu * d_i + r * r);\n    // Number density at the current sample point (divided by the number density\n    // at the bottom of the atmosphere, yielding a dimensionless number).\n    Number y_i = GetProfileDensity(profile, r_i - atmosphere.bottom_radius);\n    // Sample weight (from the trapezoidal rule).\n    Number weight_i = i == 0 || i == SAMPLE_COUNT ? 0.5 : 1.0;\n    result += y_i * weight_i * dx;\n  }\n  return result;\n}\n\nDimensionlessSpectrum ComputeTransmittanceToTopAtmosphereBoundary(\n    const AtmosphereParameters atmosphere, const Length r, const Number mu) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  vec3 optical_depth = (\n      atmosphere.rayleigh_scattering *\n          ComputeOpticalLengthToTopAtmosphereBoundary(\n              atmosphere, atmosphere.rayleigh_density, r, mu) +\n      atmosphere.mie_extinction *\n          ComputeOpticalLengthToTopAtmosphereBoundary(\n              atmosphere, atmosphere.mie_density, r, mu) +\n      atmosphere.absorption_extinction *\n          ComputeOpticalLengthToTopAtmosphereBoundary(\n              atmosphere, atmosphere.absorption_density, r, mu));\n  // @shotamatsuda: Added for the precomputation stage in half-float precision.\n  #ifdef TRANSMITTANCE_PRECISION_LOG\n  return optical_depth;\n  #else // TRANSMITTANCE_PRECISION_LOG\n  return exp(-optical_depth);\n  #endif // TRANSMITTANCE_PRECISION_LOG\n}\n\nNumber GetUnitRangeFromTextureCoord(const Number u, const int texture_size) {\n  return (u - 0.5 / Number(texture_size)) / (1.0 - 1.0 / Number(texture_size));\n}\n\nvoid GetRMuFromTransmittanceTextureUv(const AtmosphereParameters atmosphere,\n    const vec2 uv, out Length r, out Number mu) {\n  assert(uv.x >= 0.0 && uv.x <= 1.0);\n  assert(uv.y >= 0.0 && uv.y <= 1.0);\n  Number x_mu = GetUnitRangeFromTextureCoord(uv.x, TRANSMITTANCE_TEXTURE_WIDTH);\n  Number x_r = GetUnitRangeFromTextureCoord(uv.y, TRANSMITTANCE_TEXTURE_HEIGHT);\n  // Distance to top atmosphere boundary for a horizontal ray at ground level.\n  Length H = sqrt(atmosphere.top_radius * atmosphere.top_radius -\n      atmosphere.bottom_radius * atmosphere.bottom_radius);\n  // Distance to the horizon, from which we can compute r:\n  Length rho = H * x_r;\n  r = sqrt(rho * rho + atmosphere.bottom_radius * atmosphere.bottom_radius);\n  // Distance to the top atmosphere boundary for the ray (r,mu), and its minimum\n  // and maximum values over all mu - obtained for (r,1) and (r,mu_horizon) -\n  // from which we can recover mu:\n  Length d_min = atmosphere.top_radius - r;\n  Length d_max = rho + H;\n  Length d = d_min + x_mu * (d_max - d_min);\n  mu = d == 0.0 * m ? Number(1.0) : (H * H - rho * rho - d * d) / (2.0 * r * d);\n  mu = ClampCosine(mu);\n}\n\nDimensionlessSpectrum ComputeTransmittanceToTopAtmosphereBoundaryTexture(\n    const AtmosphereParameters atmosphere, const vec2 frag_coord) {\n  const vec2 TRANSMITTANCE_TEXTURE_SIZE =\n      vec2(TRANSMITTANCE_TEXTURE_WIDTH, TRANSMITTANCE_TEXTURE_HEIGHT);\n  Length r;\n  Number mu;\n  GetRMuFromTransmittanceTextureUv(\n      atmosphere, frag_coord / TRANSMITTANCE_TEXTURE_SIZE, r, mu);\n  return ComputeTransmittanceToTopAtmosphereBoundary(atmosphere, r, mu);\n}\n\nvoid ComputeSingleScatteringIntegrand(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const Length r, const Number mu, const Number mu_s, const Number nu,\n    const Length d, const bool ray_r_mu_intersects_ground,\n    out DimensionlessSpectrum rayleigh, out DimensionlessSpectrum mie) {\n  Length r_d = ClampRadius(atmosphere, sqrt(d * d + 2.0 * r * mu * d + r * r));\n  Number mu_s_d = ClampCosine((r * mu_s + d * nu) / r_d);\n  DimensionlessSpectrum transmittance =\n      GetTransmittance(\n          atmosphere, transmittance_texture, r, mu, d,\n          ray_r_mu_intersects_ground) *\n      GetTransmittanceToSun(\n          atmosphere, transmittance_texture, r_d, mu_s_d);\n  rayleigh = transmittance * GetProfileDensity(\n      atmosphere.rayleigh_density, r_d - atmosphere.bottom_radius);\n  mie = transmittance * GetProfileDensity(\n      atmosphere.mie_density, r_d - atmosphere.bottom_radius);\n}\n\nLength DistanceToNearestAtmosphereBoundary(const AtmosphereParameters atmosphere,\n    Length r, Number mu, bool ray_r_mu_intersects_ground) {\n  if (ray_r_mu_intersects_ground) {\n    return DistanceToBottomAtmosphereBoundary(atmosphere, r, mu);\n  } else {\n    return DistanceToTopAtmosphereBoundary(atmosphere, r, mu);\n  }\n}\n\nvoid ComputeSingleScattering(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const Length r, const Number mu, const Number mu_s, const Number nu,\n    const bool ray_r_mu_intersects_ground,\n    out IrradianceSpectrum rayleigh, out IrradianceSpectrum mie) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  assert(mu_s >= -1.0 && mu_s <= 1.0);\n  assert(nu >= -1.0 && nu <= 1.0);\n\n  // Number of intervals for the numerical integration.\n  const int SAMPLE_COUNT = 50;\n  // The integration step, i.e. the length of each integration interval.\n  Length dx =\n      DistanceToNearestAtmosphereBoundary(atmosphere, r, mu,\n          ray_r_mu_intersects_ground) / Number(SAMPLE_COUNT);\n  // Integration loop.\n  DimensionlessSpectrum rayleigh_sum = DimensionlessSpectrum(0.0);\n  DimensionlessSpectrum mie_sum = DimensionlessSpectrum(0.0);\n  for (int i = 0; i <= SAMPLE_COUNT; ++i) {\n    Length d_i = Number(i) * dx;\n    // The Rayleigh and Mie single scattering at the current sample point.\n    DimensionlessSpectrum rayleigh_i;\n    DimensionlessSpectrum mie_i;\n    ComputeSingleScatteringIntegrand(atmosphere, transmittance_texture,\n        r, mu, mu_s, nu, d_i, ray_r_mu_intersects_ground, rayleigh_i, mie_i);\n    // Sample weight (from the trapezoidal rule).\n    Number weight_i = (i == 0 || i == SAMPLE_COUNT) ? 0.5 : 1.0;\n    rayleigh_sum += rayleigh_i * weight_i;\n    mie_sum += mie_i * weight_i;\n  }\n  rayleigh = rayleigh_sum * dx * atmosphere.solar_irradiance *\n      atmosphere.rayleigh_scattering;\n  mie = mie_sum * dx * atmosphere.solar_irradiance * atmosphere.mie_scattering;\n}\n\nvoid GetRMuMuSNuFromScatteringTextureUvwz(const AtmosphereParameters atmosphere,\n    const vec4 uvwz, out Length r, out Number mu, out Number mu_s,\n    out Number nu, out bool ray_r_mu_intersects_ground) {\n  assert(uvwz.x >= 0.0 && uvwz.x <= 1.0);\n  assert(uvwz.y >= 0.0 && uvwz.y <= 1.0);\n  assert(uvwz.z >= 0.0 && uvwz.z <= 1.0);\n  assert(uvwz.w >= 0.0 && uvwz.w <= 1.0);\n\n  // Distance to top atmosphere boundary for a horizontal ray at ground level.\n  Length H = sqrt(atmosphere.top_radius * atmosphere.top_radius -\n      atmosphere.bottom_radius * atmosphere.bottom_radius);\n  // Distance to the horizon.\n  Length rho =\n      H * GetUnitRangeFromTextureCoord(uvwz.w, SCATTERING_TEXTURE_R_SIZE);\n  r = sqrt(rho * rho + atmosphere.bottom_radius * atmosphere.bottom_radius);\n\n  if (uvwz.z < 0.5) {\n    // Distance to the ground for the ray (r,mu), and its minimum and maximum\n    // values over all mu - obtained for (r,-1) and (r,mu_horizon) - from which\n    // we can recover mu:\n    Length d_min = r - atmosphere.bottom_radius;\n    Length d_max = rho;\n    Length d = d_min + (d_max - d_min) * GetUnitRangeFromTextureCoord(\n        1.0 - 2.0 * uvwz.z, SCATTERING_TEXTURE_MU_SIZE / 2);\n    mu = d == 0.0 * m ? Number(-1.0) :\n        ClampCosine(-(rho * rho + d * d) / (2.0 * r * d));\n    ray_r_mu_intersects_ground = true;\n  } else {\n    // Distance to the top atmosphere boundary for the ray (r,mu), and its\n    // minimum and maximum values over all mu - obtained for (r,1) and\n    // (r,mu_horizon) - from which we can recover mu:\n    Length d_min = atmosphere.top_radius - r;\n    Length d_max = rho + H;\n    Length d = d_min + (d_max - d_min) * GetUnitRangeFromTextureCoord(\n        2.0 * uvwz.z - 1.0, SCATTERING_TEXTURE_MU_SIZE / 2);\n    mu = d == 0.0 * m ? Number(1.0) :\n        ClampCosine((H * H - rho * rho - d * d) / (2.0 * r * d));\n    ray_r_mu_intersects_ground = false;\n  }\n\n  Number x_mu_s =\n      GetUnitRangeFromTextureCoord(uvwz.y, SCATTERING_TEXTURE_MU_S_SIZE);\n  Length d_min = atmosphere.top_radius - atmosphere.bottom_radius;\n  Length d_max = H;\n  Length D = DistanceToTopAtmosphereBoundary(\n      atmosphere, atmosphere.bottom_radius, atmosphere.mu_s_min);\n  Number A = (D - d_min) / (d_max - d_min);\n  Number a = (A - x_mu_s * A) / (1.0 + x_mu_s * A);\n  Length d = d_min + min(a, A) * (d_max - d_min);\n  mu_s = d == 0.0 * m ? Number(1.0) :\n     ClampCosine((H * H - d * d) / (2.0 * atmosphere.bottom_radius * d));\n\n  nu = ClampCosine(uvwz.x * 2.0 - 1.0);\n}\n\nvoid GetRMuMuSNuFromScatteringTextureFragCoord(\n    const AtmosphereParameters atmosphere, const vec3 frag_coord,\n    out Length r, out Number mu, out Number mu_s, out Number nu,\n    out bool ray_r_mu_intersects_ground) {\n  const vec4 SCATTERING_TEXTURE_SIZE = vec4(\n      SCATTERING_TEXTURE_NU_SIZE - 1,\n      SCATTERING_TEXTURE_MU_S_SIZE,\n      SCATTERING_TEXTURE_MU_SIZE,\n      SCATTERING_TEXTURE_R_SIZE);\n  Number frag_coord_nu =\n      floor(frag_coord.x / Number(SCATTERING_TEXTURE_MU_S_SIZE));\n  Number frag_coord_mu_s =\n      mod(frag_coord.x, Number(SCATTERING_TEXTURE_MU_S_SIZE));\n  vec4 uvwz =\n      vec4(frag_coord_nu, frag_coord_mu_s, frag_coord.y, frag_coord.z) /\n          SCATTERING_TEXTURE_SIZE;\n  GetRMuMuSNuFromScatteringTextureUvwz(\n      atmosphere, uvwz, r, mu, mu_s, nu, ray_r_mu_intersects_ground);\n  // Clamp nu to its valid range of values, given mu and mu_s.\n  nu = clamp(nu, mu * mu_s - sqrt((1.0 - mu * mu) * (1.0 - mu_s * mu_s)),\n      mu * mu_s + sqrt((1.0 - mu * mu) * (1.0 - mu_s * mu_s)));\n}\n\nvoid ComputeSingleScatteringTexture(const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture, const vec3 frag_coord,\n    out IrradianceSpectrum rayleigh, out IrradianceSpectrum mie) {\n  Length r;\n  Number mu;\n  Number mu_s;\n  Number nu;\n  bool ray_r_mu_intersects_ground;\n  GetRMuMuSNuFromScatteringTextureFragCoord(atmosphere, frag_coord,\n      r, mu, mu_s, nu, ray_r_mu_intersects_ground);\n  ComputeSingleScattering(atmosphere, transmittance_texture,\n      r, mu, mu_s, nu, ray_r_mu_intersects_ground, rayleigh, mie);\n}\n\nAbstractSpectrum GetScattering(\n    const AtmosphereParameters atmosphere,\n    const AbstractScatteringTexture scattering_texture,\n    const Length r, const Number mu, const Number mu_s, const Number nu,\n    const bool ray_r_mu_intersects_ground) {\n  vec4 uvwz = GetScatteringTextureUvwzFromRMuMuSNu(\n      atmosphere, r, mu, mu_s, nu, ray_r_mu_intersects_ground);\n  Number tex_coord_x = uvwz.x * Number(SCATTERING_TEXTURE_NU_SIZE - 1);\n  Number tex_x = floor(tex_coord_x);\n  Number lerp = tex_coord_x - tex_x;\n  vec3 uvw0 = vec3((tex_x + uvwz.y) / Number(SCATTERING_TEXTURE_NU_SIZE),\n      uvwz.z, uvwz.w);\n  vec3 uvw1 = vec3((tex_x + 1.0 + uvwz.y) / Number(SCATTERING_TEXTURE_NU_SIZE),\n      uvwz.z, uvwz.w);\n  return AbstractSpectrum(texture(scattering_texture, uvw0) * (1.0 - lerp) +\n      texture(scattering_texture, uvw1) * lerp);\n}\n\nRadianceSpectrum GetScattering(\n    const AtmosphereParameters atmosphere,\n    const ReducedScatteringTexture single_rayleigh_scattering_texture,\n    const ReducedScatteringTexture single_mie_scattering_texture,\n    const ScatteringTexture multiple_scattering_texture,\n    const Length r, const Number mu, const Number mu_s, const Number nu,\n    const bool ray_r_mu_intersects_ground,\n    const int scattering_order) {\n  if (scattering_order == 1) {\n    IrradianceSpectrum rayleigh = GetScattering(\n        atmosphere, single_rayleigh_scattering_texture, r, mu, mu_s, nu,\n        ray_r_mu_intersects_ground);\n    IrradianceSpectrum mie = GetScattering(\n        atmosphere, single_mie_scattering_texture, r, mu, mu_s, nu,\n        ray_r_mu_intersects_ground);\n    return rayleigh * RayleighPhaseFunction(nu) +\n        mie * MiePhaseFunction(atmosphere.mie_phase_function_g, nu);\n  } else {\n    return GetScattering(\n        atmosphere, multiple_scattering_texture, r, mu, mu_s, nu,\n        ray_r_mu_intersects_ground);\n  }\n}\n\nIrradianceSpectrum GetIrradiance(\n    const AtmosphereParameters atmosphere,\n    const IrradianceTexture irradiance_texture,\n    const Length r, const Number mu_s);\n\nRadianceDensitySpectrum ComputeScatteringDensity(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const ReducedScatteringTexture single_rayleigh_scattering_texture,\n    const ReducedScatteringTexture single_mie_scattering_texture,\n    const ScatteringTexture multiple_scattering_texture,\n    const IrradianceTexture irradiance_texture,\n    const Length r, const Number mu, const Number mu_s, const Number nu,\n    const int scattering_order) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  assert(mu_s >= -1.0 && mu_s <= 1.0);\n  assert(nu >= -1.0 && nu <= 1.0);\n  assert(scattering_order >= 2);\n\n  // Compute unit direction vectors for the zenith, the view direction omega and\n  // and the sun direction omega_s, such that the cosine of the view-zenith\n  // angle is mu, the cosine of the sun-zenith angle is mu_s, and the cosine of\n  // the view-sun angle is nu. The goal is to simplify computations below.\n  vec3 zenith_direction = vec3(0.0, 0.0, 1.0);\n  vec3 omega = vec3(sqrt(1.0 - mu * mu), 0.0, mu);\n  Number sun_dir_x = omega.x == 0.0 ? 0.0 : (nu - mu * mu_s) / omega.x;\n  Number sun_dir_y = sqrt(max(1.0 - sun_dir_x * sun_dir_x - mu_s * mu_s, 0.0));\n  vec3 omega_s = vec3(sun_dir_x, sun_dir_y, mu_s);\n\n  const int SAMPLE_COUNT = 16;\n  const Angle dphi = pi / Number(SAMPLE_COUNT);\n  const Angle dtheta = pi / Number(SAMPLE_COUNT);\n  RadianceDensitySpectrum rayleigh_mie =\n      RadianceDensitySpectrum(0.0 * watt_per_cubic_meter_per_sr_per_nm);\n\n  // Nested loops for the integral over all the incident directions omega_i.\n  for (int l = 0; l < SAMPLE_COUNT; ++l) {\n    Angle theta = (Number(l) + 0.5) * dtheta;\n    Number cos_theta = cos(theta);\n    Number sin_theta = sin(theta);\n    bool ray_r_theta_intersects_ground =\n        RayIntersectsGround(atmosphere, r, cos_theta);\n\n    // The distance and transmittance to the ground only depend on theta, so we\n    // can compute them in the outer loop for efficiency.\n    Length distance_to_ground = 0.0 * m;\n    DimensionlessSpectrum transmittance_to_ground = DimensionlessSpectrum(0.0);\n    DimensionlessSpectrum ground_albedo = DimensionlessSpectrum(0.0);\n    if (ray_r_theta_intersects_ground) {\n      distance_to_ground =\n          DistanceToBottomAtmosphereBoundary(atmosphere, r, cos_theta);\n      transmittance_to_ground =\n          GetTransmittance(atmosphere, transmittance_texture, r, cos_theta,\n              distance_to_ground, true /* ray_intersects_ground */);\n      ground_albedo = atmosphere.ground_albedo;\n    }\n\n    for (int m = 0; m < 2 * SAMPLE_COUNT; ++m) {\n      Angle phi = (Number(m) + 0.5) * dphi;\n      vec3 omega_i =\n          vec3(cos(phi) * sin_theta, sin(phi) * sin_theta, cos_theta);\n      SolidAngle domega_i = (dtheta / rad) * (dphi / rad) * sin(theta) * sr;\n\n      // The radiance L_i arriving from direction omega_i after n-1 bounces is\n      // the sum of a term given by the precomputed scattering texture for the\n      // (n-1)-th order:\n      Number nu1 = dot(omega_s, omega_i);\n      RadianceSpectrum incident_radiance = GetScattering(atmosphere,\n          single_rayleigh_scattering_texture, single_mie_scattering_texture,\n          multiple_scattering_texture, r, omega_i.z, mu_s, nu1,\n          ray_r_theta_intersects_ground, scattering_order - 1);\n\n      // and of the contribution from the light paths with n-1 bounces and whose\n      // last bounce is on the ground. This contribution is the product of the\n      // transmittance to the ground, the ground albedo, the ground BRDF, and\n      // the irradiance received on the ground after n-2 bounces.\n      vec3 ground_normal =\n          normalize(zenith_direction * r + omega_i * distance_to_ground);\n      IrradianceSpectrum ground_irradiance = GetIrradiance(\n          atmosphere, irradiance_texture, atmosphere.bottom_radius,\n          dot(ground_normal, omega_s));\n      incident_radiance += transmittance_to_ground *\n          ground_albedo * (1.0 / (PI * sr)) * ground_irradiance;\n\n      // The radiance finally scattered from direction omega_i towards direction\n      // -omega is the product of the incident radiance, the scattering\n      // coefficient, and the phase function for directions omega and omega_i\n      // (all this summed over all particle types, i.e. Rayleigh and Mie).\n      Number nu2 = dot(omega, omega_i);\n      Number rayleigh_density = GetProfileDensity(\n          atmosphere.rayleigh_density, r - atmosphere.bottom_radius);\n      Number mie_density = GetProfileDensity(\n          atmosphere.mie_density, r - atmosphere.bottom_radius);\n      rayleigh_mie += incident_radiance * (\n          atmosphere.rayleigh_scattering * rayleigh_density *\n              RayleighPhaseFunction(nu2) +\n          atmosphere.mie_scattering * mie_density *\n              MiePhaseFunction(atmosphere.mie_phase_function_g, nu2)) *\n          domega_i;\n    }\n  }\n  return rayleigh_mie;\n}\n\nRadianceSpectrum ComputeMultipleScattering(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const ScatteringDensityTexture scattering_density_texture,\n    const Length r, const Number mu, const Number mu_s, const Number nu,\n    const bool ray_r_mu_intersects_ground) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu >= -1.0 && mu <= 1.0);\n  assert(mu_s >= -1.0 && mu_s <= 1.0);\n  assert(nu >= -1.0 && nu <= 1.0);\n\n  // Number of intervals for the numerical integration.\n  const int SAMPLE_COUNT = 50;\n  // The integration step, i.e. the length of each integration interval.\n  Length dx =\n      DistanceToNearestAtmosphereBoundary(\n          atmosphere, r, mu, ray_r_mu_intersects_ground) /\n              Number(SAMPLE_COUNT);\n  // Integration loop.\n  RadianceSpectrum rayleigh_mie_sum =\n      RadianceSpectrum(0.0 * watt_per_square_meter_per_sr_per_nm);\n  for (int i = 0; i <= SAMPLE_COUNT; ++i) {\n    Length d_i = Number(i) * dx;\n\n    // The r, mu and mu_s parameters at the current integration point (see the\n    // single scattering section for a detailed explanation).\n    Length r_i =\n        ClampRadius(atmosphere, sqrt(d_i * d_i + 2.0 * r * mu * d_i + r * r));\n    Number mu_i = ClampCosine((r * mu + d_i) / r_i);\n    Number mu_s_i = ClampCosine((r * mu_s + d_i * nu) / r_i);\n\n    // The Rayleigh and Mie multiple scattering at the current sample point.\n    RadianceSpectrum rayleigh_mie_i =\n        GetScattering(\n            atmosphere, scattering_density_texture, r_i, mu_i, mu_s_i, nu,\n            ray_r_mu_intersects_ground) *\n        GetTransmittance(\n            atmosphere, transmittance_texture, r, mu, d_i,\n            ray_r_mu_intersects_ground) *\n        dx;\n    // Sample weight (from the trapezoidal rule).\n    Number weight_i = (i == 0 || i == SAMPLE_COUNT) ? 0.5 : 1.0;\n    rayleigh_mie_sum += rayleigh_mie_i * weight_i;\n  }\n  return rayleigh_mie_sum;\n}\n\nRadianceDensitySpectrum ComputeScatteringDensityTexture(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const ReducedScatteringTexture single_rayleigh_scattering_texture,\n    const ReducedScatteringTexture single_mie_scattering_texture,\n    const ScatteringTexture multiple_scattering_texture,\n    const IrradianceTexture irradiance_texture,\n    const vec3 frag_coord, const int scattering_order) {\n  Length r;\n  Number mu;\n  Number mu_s;\n  Number nu;\n  bool ray_r_mu_intersects_ground;\n  GetRMuMuSNuFromScatteringTextureFragCoord(atmosphere, frag_coord,\n      r, mu, mu_s, nu, ray_r_mu_intersects_ground);\n  return ComputeScatteringDensity(atmosphere, transmittance_texture,\n      single_rayleigh_scattering_texture, single_mie_scattering_texture,\n      multiple_scattering_texture, irradiance_texture, r, mu, mu_s, nu,\n      scattering_order);\n}\n\nRadianceSpectrum ComputeMultipleScatteringTexture(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const ScatteringDensityTexture scattering_density_texture,\n    const vec3 frag_coord, out Number nu) {\n  Length r;\n  Number mu;\n  Number mu_s;\n  bool ray_r_mu_intersects_ground;\n  GetRMuMuSNuFromScatteringTextureFragCoord(atmosphere, frag_coord,\n      r, mu, mu_s, nu, ray_r_mu_intersects_ground);\n  return ComputeMultipleScattering(atmosphere, transmittance_texture,\n      scattering_density_texture, r, mu, mu_s, nu,\n      ray_r_mu_intersects_ground);\n}\n\nIrradianceSpectrum ComputeDirectIrradiance(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const Length r, const Number mu_s) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu_s >= -1.0 && mu_s <= 1.0);\n\n  Number alpha_s = atmosphere.sun_angular_radius / rad;\n  // Approximate average of the cosine factor mu_s over the visible fraction of\n  // the Sun disc.\n  Number average_cosine_factor =\n    mu_s < -alpha_s ? 0.0 : (mu_s > alpha_s ? mu_s :\n        (mu_s + alpha_s) * (mu_s + alpha_s) / (4.0 * alpha_s));\n\n  return atmosphere.solar_irradiance *\n      GetTransmittanceToTopAtmosphereBoundary(\n          atmosphere, transmittance_texture, r, mu_s) * average_cosine_factor;\n\n}\n\nIrradianceSpectrum ComputeIndirectIrradiance(\n    const AtmosphereParameters atmosphere,\n    const ReducedScatteringTexture single_rayleigh_scattering_texture,\n    const ReducedScatteringTexture single_mie_scattering_texture,\n    const ScatteringTexture multiple_scattering_texture,\n    const Length r, const Number mu_s, const int scattering_order) {\n  assert(r >= atmosphere.bottom_radius && r <= atmosphere.top_radius);\n  assert(mu_s >= -1.0 && mu_s <= 1.0);\n  assert(scattering_order >= 1);\n\n  const int SAMPLE_COUNT = 32;\n  const Angle dphi = pi / Number(SAMPLE_COUNT);\n  const Angle dtheta = pi / Number(SAMPLE_COUNT);\n\n  IrradianceSpectrum result =\n      IrradianceSpectrum(0.0 * watt_per_square_meter_per_nm);\n  vec3 omega_s = vec3(sqrt(1.0 - mu_s * mu_s), 0.0, mu_s);\n  for (int j = 0; j < SAMPLE_COUNT / 2; ++j) {\n    Angle theta = (Number(j) + 0.5) * dtheta;\n    for (int i = 0; i < 2 * SAMPLE_COUNT; ++i) {\n      Angle phi = (Number(i) + 0.5) * dphi;\n      vec3 omega =\n          vec3(cos(phi) * sin(theta), sin(phi) * sin(theta), cos(theta));\n      SolidAngle domega = (dtheta / rad) * (dphi / rad) * sin(theta) * sr;\n\n      Number nu = dot(omega, omega_s);\n      result += GetScattering(atmosphere, single_rayleigh_scattering_texture,\n          single_mie_scattering_texture, multiple_scattering_texture,\n          r, omega.z, mu_s, nu, false /* ray_r_theta_intersects_ground */,\n          scattering_order) *\n              omega.z * domega;\n    }\n  }\n  return result;\n}\n\nvoid GetRMuSFromIrradianceTextureUv(const AtmosphereParameters atmosphere,\n    const vec2 uv, out Length r, out Number mu_s) {\n  assert(uv.x >= 0.0 && uv.x <= 1.0);\n  assert(uv.y >= 0.0 && uv.y <= 1.0);\n  Number x_mu_s = GetUnitRangeFromTextureCoord(uv.x, IRRADIANCE_TEXTURE_WIDTH);\n  Number x_r = GetUnitRangeFromTextureCoord(uv.y, IRRADIANCE_TEXTURE_HEIGHT);\n  r = atmosphere.bottom_radius +\n      x_r * (atmosphere.top_radius - atmosphere.bottom_radius);\n  mu_s = ClampCosine(2.0 * x_mu_s - 1.0);\n}\n\nconst vec2 IRRADIANCE_TEXTURE_SIZE =\n    vec2(IRRADIANCE_TEXTURE_WIDTH, IRRADIANCE_TEXTURE_HEIGHT);\n\nIrradianceSpectrum ComputeDirectIrradianceTexture(\n    const AtmosphereParameters atmosphere,\n    const TransmittanceTexture transmittance_texture,\n    const vec2 frag_coord) {\n  Length r;\n  Number mu_s;\n  GetRMuSFromIrradianceTextureUv(\n      atmosphere, frag_coord / IRRADIANCE_TEXTURE_SIZE, r, mu_s);\n  return ComputeDirectIrradiance(atmosphere, transmittance_texture, r, mu_s);\n}\n\nIrradianceSpectrum ComputeIndirectIrradianceTexture(\n    const AtmosphereParameters atmosphere,\n    const ReducedScatteringTexture single_rayleigh_scattering_texture,\n    const ReducedScatteringTexture single_mie_scattering_texture,\n    const ScatteringTexture multiple_scattering_texture,\n    const vec2 frag_coord, const int scattering_order) {\n  Length r;\n  Number mu_s;\n  GetRMuSFromIrradianceTextureUv(\n      atmosphere, frag_coord / IRRADIANCE_TEXTURE_SIZE, r, mu_s);\n  return ComputeIndirectIrradiance(atmosphere,\n      single_rayleigh_scattering_texture, single_mie_scattering_texture,\n      multiple_scattering_texture, r, mu_s, scattering_order);\n}\n`;\nexport {\n  e as _,\n  t as a,\n  r as b,\n  n as c\n};\n//# sourceMappingURL=shared3.js.map\n","import { BlendFunction as Jt, Effect as Qt, EffectAttribute as en, Pass as tn, Selection as nn, RenderPass as rn, DepthCopyPass as Ze, ClearPass as an, DepthMaskMaterial as on, DepthTestStrategy as sn, ShaderPass as cn } from \"postprocessing\";\nimport { Vector3 as p, Color as ae, Uniform as d, Camera as St, Vector2 as oe, Matrix4 as D, RawShaderMaterial as vt, Quaternion as un, HalfFloatType as k, MeshBasicMaterial as ln, DepthTexture as dn, UnsignedIntType as hn, WebGLRenderTarget as Et, RedFormat as mn, RGBADepthPacking as X0, LessEqualDepth as fn, BasicDepthPacking as gn, Matrix3 as w0, Mesh as pn, PlaneGeometry as Tn, Scene as Sn, FloatType as _e, GLSL3 as He, CustomBlending as vn, NoBlending as En, AddEquation as Je, OneFactor as Y0, RGBAFormat as Rt, LinearFilter as D0, ClampToEdgeWrapping as U0, NoColorSpace as _t, WebGL3DRenderTarget as Rn, Loader as _n, Data3DTexture as ge, DataTexture as Qe, LightProbe as xn, BufferGeometry as Mn, InterleavedBuffer as et, InterleavedBufferAttribute as pe, Sphere as An, DirectionalLight as wn } from \"three\";\nimport { radians as xt, Ellipsoid as F0, define as w, defineInt as yn, unrollLoops as Cn, resolveIncludes as W, Geodetic as Dn, saturate as In, remap as Pn, reinterpretType as be, clamp as tt, isTypedArray as nt, Float16Array as Mt, isFloatLinearSupported as At, EXR3DTextureLoader as Te, EXRTextureLoader as rt, DataTextureLoader as O0, parseFloat16Array as L0 } from \"@takram/three-geospatial\";\nimport { vogelDisk as Nn, interleavedGradientNoise as On, cascadedShadowMaps as Ln, raySphereIntersection as wt, transform as Hn, math as bn, packing as Un, depth as yt } from \"@takram/three-geospatial/shaders\";\nimport { M as ee, j as h0, T as m0, g as Ue, d as Ge, e as Fe, f as ze, b as f0, I as g0, k as ke, l as Gn, S as s0, c as c0, h as u0, r as it } from \"./shared2.js\";\nimport { c as Ve, a as K, _ as $, b as S0 } from \"./shared3.js\";\nconst Fn = /* @__PURE__ */ new p(0.2126, 0.7152, 0.0722), zn = [\n  \"solarIrradiance\",\n  \"sunAngularRadius\",\n  \"bottomRadius\",\n  \"topRadius\",\n  \"rayleighDensity\",\n  \"rayleighScattering\",\n  \"mieDensity\",\n  \"mieScattering\",\n  \"mieExtinction\",\n  \"miePhaseFunctionG\",\n  \"absorptionDensity\",\n  \"absorptionExtinction\",\n  \"groundAlbedo\",\n  \"muSMin\",\n  \"skyRadianceToLuminance\",\n  \"sunRadianceToLuminance\"\n];\nfunction kn(n, e) {\n  if (e != null)\n    for (const t of zn) {\n      const r = e[t];\n      r != null && (n[t] instanceof p ? n[t].copy(r) : n[t] = r);\n    }\n}\nclass v0 {\n  constructor(e, t, r, i, a) {\n    this.width = e, this.expTerm = t, this.expScale = r, this.linearTerm = i, this.constantTerm = a;\n  }\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  toUniform() {\n    return new d({\n      width: this.width,\n      exp_term: this.expTerm,\n      exp_scale: this.expScale,\n      linear_term: this.linearTerm,\n      constant_term: this.constantTerm\n    });\n  }\n}\nconst ie = class ie {\n  constructor(e) {\n    this.solarIrradiance = new p(1.474, 1.8504, 1.91198), this.sunAngularRadius = 4675e-6, this.bottomRadius = 636e4, this.topRadius = 642e4, this.rayleighDensity = [\n      new v0(0, 0, 0, 0, 0),\n      new v0(0, 1, -0.125, 0, 0)\n    ], this.rayleighScattering = new p(5802e-6, 0.013558, 0.0331), this.mieDensity = [\n      new v0(0, 0, 0, 0, 0),\n      new v0(0, 1, -0.833333, 0, 0)\n    ], this.mieScattering = new p(3996e-6, 3996e-6, 3996e-6), this.mieExtinction = new p(444e-5, 444e-5, 444e-5), this.miePhaseFunctionG = 0.8, this.absorptionDensity = [\n      new v0(25, 0, 0, 1 / 15, -2 / 3),\n      new v0(0, 0, 0, -1 / 15, 8 / 3)\n    ], this.absorptionExtinction = new p(65e-5, 1881e-6, 85e-6), this.groundAlbedo = new ae().setScalar(0.1), this.muSMin = Math.cos(xt(120)), this.sunRadianceToLuminance = new p(98242.786222, 69954.398112, 66475.012354), this.skyRadianceToLuminance = new p(114974.916437, 71305.954816, 65310.548555), this.sunRadianceToRelativeLuminance = new p(), this.skyRadianceToRelativeLuminance = new p(), kn(this, e);\n    const t = Fn.dot(this.sunRadianceToLuminance);\n    this.sunRadianceToRelativeLuminance.copy(this.sunRadianceToLuminance).divideScalar(t), this.skyRadianceToRelativeLuminance.copy(this.skyRadianceToLuminance).divideScalar(t);\n  }\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  toUniform() {\n    return new d({\n      solar_irradiance: this.solarIrradiance,\n      sun_angular_radius: this.sunAngularRadius,\n      bottom_radius: this.bottomRadius * ee,\n      top_radius: this.topRadius * ee,\n      rayleigh_density: {\n        layers: this.rayleighDensity.map((e) => e.toUniform().value)\n      },\n      rayleigh_scattering: this.rayleighScattering,\n      mie_density: {\n        layers: this.mieDensity.map((e) => e.toUniform().value)\n      },\n      mie_scattering: this.mieScattering,\n      mie_extinction: this.mieExtinction,\n      mie_phase_function_g: this.miePhaseFunctionG,\n      absorption_density: {\n        layers: this.absorptionDensity.map((e) => e.toUniform().value)\n      },\n      absorption_extinction: this.absorptionExtinction,\n      ground_albedo: this.groundAlbedo,\n      mu_s_min: this.muSMin\n    });\n  }\n};\nie.DEFAULT = /* @__PURE__ */ new ie();\nlet n0 = ie;\nconst Vn = `precision highp sampler2DArray;\n\n#include \"core/depth\"\n#include \"core/math\"\n#include \"core/packing\"\n#include \"core/transform\"\n#ifdef HAS_SHADOW\n#include \"core/raySphereIntersection\"\n#include \"core/cascadedShadowMaps\"\n#include \"core/interleavedGradientNoise\"\n#include \"core/vogelDisk\"\n#endif // HAS_SHADOW\n\n#include \"bruneton/definitions\"\n\nuniform AtmosphereParameters ATMOSPHERE;\nuniform vec3 SUN_SPECTRAL_RADIANCE_TO_LUMINANCE;\nuniform vec3 SKY_SPECTRAL_RADIANCE_TO_LUMINANCE;\n\nuniform sampler2D transmittance_texture;\nuniform sampler3D scattering_texture;\nuniform sampler2D irradiance_texture;\nuniform sampler3D single_mie_scattering_texture;\nuniform sampler3D higher_order_scattering_texture;\n\n#include \"bruneton/common\"\n#include \"bruneton/runtime\"\n\nuniform sampler2D normalBuffer;\n\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat4 inverseProjectionMatrix;\nuniform mat4 inverseViewMatrix;\nuniform float bottomRadius;\nuniform mat4 worldToECEFMatrix;\nuniform float geometricErrorCorrectionAmount;\nuniform vec3 sunDirection;\nuniform float cosSunAngularRadius;\nuniform vec3 moonDirection;\nuniform float moonAngularRadius;\nuniform float lunarRadianceScale;\nuniform float albedoScale;\n\n#include \"sky\"\n\n#ifdef HAS_LIGHTING_MASK\nuniform sampler2D lightingMaskBuffer;\n#endif // HAS_LIGHTING_MASK\n\n// prettier-ignore\n#define LIGHTING_MASK_CHANNEL_ LIGHTING_MASK_CHANNEL\n\n#ifdef HAS_OVERLAY\nuniform sampler2D overlayBuffer;\n#endif // HAS_OVERLAY\n\n#ifdef HAS_SHADOW\nuniform sampler2DArray shadowBuffer;\nuniform vec2 shadowIntervals[SHADOW_CASCADE_COUNT];\nuniform mat4 shadowMatrices[SHADOW_CASCADE_COUNT];\nuniform mat4 inverseShadowMatrices[SHADOW_CASCADE_COUNT];\nuniform float shadowFar;\nuniform float shadowTopHeight;\nuniform float shadowRadius;\nuniform sampler3D stbnTexture;\nuniform int frame;\n#endif // HAS_SHADOW\n\n#ifdef HAS_SHADOW_LENGTH\nuniform sampler2D shadowLengthBuffer;\n#endif // HAS_SHADOW_LENGTH\n\nvarying vec3 vCameraPosition;\nvarying vec3 vRayDirection;\nvarying vec3 vGeometryAltitudeCorrection;\nvarying vec3 vEllipsoidRadiiSquared;\n\nvec3 readNormal(const vec2 uv, out bool degenerate) {\n  vec3 normal = texture(normalBuffer, uv).xyz;\n  degenerate = normal == vec3(0.0);\n  #ifdef OCT_ENCODED_NORMAL\n  return unpackVec2ToNormal(normal.xy);\n  #else // OCT_ENCODED_NORMAL\n  return 2.0 * normal - 1.0;\n  #endif // OCT_ENCODED_NORMAL\n}\n\nvoid correctGeometricError(inout vec3 positionECEF, inout vec3 normalECEF) {\n  // TODO: The error is pronounced at the edge of the ellipsoid due to the\n  // large difference between the sphere position and the unprojected position\n  // at the current fragment. Calculating the sphere position from the fragment\n  // UV may resolve this.\n\n  // Correct way is slerp, but this will be small-angle interpolation anyways.\n  vec3 sphereNormal = normalize(positionECEF / vEllipsoidRadiiSquared);\n  vec3 spherePosition = ATMOSPHERE.bottom_radius * sphereNormal;\n  normalECEF = mix(normalECEF, sphereNormal, geometricErrorCorrectionAmount);\n  positionECEF = mix(positionECEF, spherePosition, geometricErrorCorrectionAmount);\n}\n\n#if defined(SUN_LIGHT) || defined(SKY_LIGHT)\n\nvec3 getSunSkyIrradiance(\n  const vec3 positionECEF,\n  const vec3 normal,\n  const vec3 inputColor,\n  const float sunTransmittance\n) {\n  // Assume lambertian BRDF. If both SUN_LIGHT and SKY_LIGHT are not defined,\n  // regard the inputColor as radiance at the texel.\n  vec3 diffuse = inputColor * albedoScale * RECIPROCAL_PI;\n  vec3 skyIrradiance;\n  vec3 sunIrradiance = GetSunAndSkyIrradiance(positionECEF, normal, sunDirection, skyIrradiance);\n\n  #ifdef HAS_SHADOW\n  sunIrradiance *= sunTransmittance;\n  #endif // HAS_SHADOW\n\n  #if defined(SUN_LIGHT) && defined(SKY_LIGHT)\n  return diffuse * (sunIrradiance + skyIrradiance);\n  #elif defined(SUN_LIGHT)\n  return diffuse * sunIrradiance;\n  #elif defined(SKY_LIGHT)\n  return diffuse * skyIrradiance;\n  #endif // defined(SUN_LIGHT) && defined(SKY_LIGHT)\n}\n\n#endif // defined(SUN_LIGHT) || defined(SKY_LIGHT)\n\n#if defined(TRANSMITTANCE) || defined(INSCATTER)\n\nvoid applyTransmittanceInscatter(const vec3 positionECEF, float shadowLength, inout vec3 radiance) {\n  vec3 transmittance;\n  vec3 inscatter = GetSkyRadianceToPoint(\n    vCameraPosition,\n    positionECEF,\n    shadowLength,\n    sunDirection,\n    transmittance\n  );\n  #ifdef TRANSMITTANCE\n  radiance = radiance * transmittance;\n  #endif // TRANSMITTANCE\n  #ifdef INSCATTER\n  radiance = radiance + inscatter;\n  #endif // INSCATTER\n}\n\n#endif // defined(TRANSMITTANCE) || defined(INSCATTER)\n\n#ifdef HAS_SHADOW\n\nfloat getSTBN() {\n  ivec3 size = textureSize(stbnTexture, 0);\n  vec3 scale = 1.0 / vec3(size);\n  return texture(stbnTexture, vec3(gl_FragCoord.xy, float(frame % size.z)) * scale).r;\n}\n\nvec2 getShadowUv(const vec3 worldPosition, const int cascadeIndex) {\n  vec4 clip = shadowMatrices[cascadeIndex] * vec4(worldPosition, 1.0);\n  clip /= clip.w;\n  return clip.xy * 0.5 + 0.5;\n}\n\nfloat getDistanceToShadowTop(const vec3 positionECEF) {\n  // Distance to the top of the shadows along the sun direction, which matches\n  // the ray origin of BSM.\n  return raySphereSecondIntersection(\n    positionECEF / METER_TO_LENGTH_UNIT, // TODO: Make units consistent\n    sunDirection,\n    vec3(0.0),\n    bottomRadius + shadowTopHeight\n  );\n}\n\nfloat readShadowOpticalDepth(const vec2 uv, const float distanceToTop, const int cascadeIndex) {\n  // r: frontDepth, g: meanExtinction, b: maxOpticalDepth, a: maxOpticalDepthTail\n  vec4 shadow = texture(shadowBuffer, vec3(uv, float(cascadeIndex)));\n  // Omit adding maxOpticalDepthTail to avoid pronounced aliasing. Ground\n  // shadow will be attenuated by inscatter anyways.\n  return min(shadow.b, shadow.g * max(0.0, distanceToTop - shadow.r));\n}\n\nfloat sampleShadowOpticalDepthPCF(\n  const vec3 worldPosition,\n  const float distanceToTop,\n  const float radius,\n  const int cascadeIndex\n) {\n  vec2 uv = getShadowUv(worldPosition, cascadeIndex);\n  if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n    return 0.0;\n  }\n\n  vec2 texelSize = vec2(1.0) / vec2(textureSize(shadowBuffer, 0).xy);\n  float sum = 0.0;\n  vec2 offset;\n  #pragma unroll_loop_start\n  for (int i = 0; i < 16; ++i) {\n    #if UNROLLED_LOOP_INDEX < SHADOW_SAMPLE_COUNT\n    offset = vogelDisk(\n      UNROLLED_LOOP_INDEX,\n      SHADOW_SAMPLE_COUNT,\n      interleavedGradientNoise(gl_FragCoord.xy) * PI2\n    );\n    sum += readShadowOpticalDepth(uv + offset * radius * texelSize, distanceToTop, cascadeIndex);\n    #endif // UNROLLED_LOOP_INDEX < SHADOW_SAMPLE_COUNT\n  }\n  #pragma unroll_loop_end\n  return sum / float(SHADOW_SAMPLE_COUNT);\n}\n\nfloat sampleShadowOpticalDepth(\n  const vec3 worldPosition,\n  const vec3 positionECEF,\n  const float radius,\n  const float jitter\n) {\n  float distanceToTop = getDistanceToShadowTop(positionECEF);\n  if (distanceToTop <= 0.0) {\n    return 0.0;\n  }\n  int cascadeIndex = getFadedCascadeIndex(\n    viewMatrix,\n    worldPosition,\n    shadowIntervals,\n    cameraNear,\n    shadowFar,\n    jitter\n  );\n  return cascadeIndex >= 0\n    ? sampleShadowOpticalDepthPCF(worldPosition, distanceToTop, radius, cascadeIndex)\n    : 0.0;\n}\n\nfloat getShadowRadius(const vec3 worldPosition) {\n  vec4 clip = shadowMatrices[0] * vec4(worldPosition, 1.0);\n  clip /= clip.w;\n\n  // Offset by 1px in each direction in shadow's clip coordinates.\n  vec2 shadowSize = vec2(textureSize(shadowBuffer, 0));\n  vec3 offset = vec3(2.0 / shadowSize, 0.0);\n  vec4 clipX = clip + offset.xzzz;\n  vec4 clipY = clip + offset.zyzz;\n\n  // Convert back to world space.\n  vec4 worldX = inverseShadowMatrices[0] * clipX;\n  vec4 worldY = inverseShadowMatrices[0] * clipY;\n\n  // Project into the main camera's clip space.\n  mat4 viewProjectionMatrix = projectionMatrix * viewMatrix;\n  vec4 projected = viewProjectionMatrix * vec4(worldPosition, 1.0);\n  vec4 projectedX = viewProjectionMatrix * worldX;\n  vec4 projectedY = viewProjectionMatrix * worldY;\n  projected /= projected.w;\n  projectedX /= projectedX.w;\n  projectedY /= projectedY.w;\n\n  // Take the mean of pixel sizes.\n  vec2 center = (projected.xy * 0.5 + 0.5) * resolution;\n  vec2 offsetX = (projectedX.xy * 0.5 + 0.5) * resolution;\n  vec2 offsetY = (projectedY.xy * 0.5 + 0.5) * resolution;\n  float size = max(length(offsetX - center), length(offsetY - center));\n\n  return remapClamped(size, 10.0, 50.0, 0.0, shadowRadius);\n}\n\n#endif // HAS_SHADOW\n\nvoid mainImage(const vec4 inputColor, const vec2 uv, out vec4 outputColor) {\n  #if defined(HAS_LIGHTING_MASK) && defined(DEBUG_SHOW_LIGHTING_MASK)\n  outputColor.rgb = vec3(texture(lightingMaskBuffer, uv).LIGHTING_MASK_CHANNEL_);\n  outputColor.a = 1.0;\n  return;\n  #endif // defined(HAS_LIGHTING_MASK) && defined(DEBUG_SHOW_LIGHTING_MASK)\n\n  float shadowLength = 0.0;\n  #ifdef HAS_SHADOW_LENGTH\n  shadowLength = texture(shadowLengthBuffer, uv).r;\n  #endif // HAS_SHADOW_LENGTH\n\n  #ifdef HAS_OVERLAY\n  vec4 overlay = texture(overlayBuffer, uv);\n  if (overlay.a == 1.0) {\n    outputColor = overlay;\n    return;\n  }\n  #endif // HAS_OVERLAY\n\n  vec3 rayDirection = normalize(vRayDirection);\n  vec3 dRDdx = dFdx(rayDirection);\n  vec3 dRDdy = dFdy(rayDirection);\n  float fragmentAngle = length(dRDdx + dRDdy) / length(rayDirection);\n\n  float depth = readDepthValue(depthBuffer, uv);\n  if (depth >= 1.0 - 1e-8) {\n    #ifdef SKY\n    outputColor.rgb = getSkyRadiance(\n      vCameraPosition,\n      rayDirection,\n      shadowLength,\n      sunDirection,\n      moonDirection,\n      moonAngularRadius,\n      lunarRadianceScale,\n      fragmentAngle\n    );\n    outputColor.a = 1.0;\n    #else // SKY\n    outputColor = inputColor;\n    #endif // SKY\n\n    #ifdef HAS_OVERLAY\n    outputColor.rgb = outputColor.rgb * (1.0 - overlay.a) + overlay.rgb;\n    #endif // HAS_OVERLAY\n    return;\n  }\n  depth = reverseLogDepth(depth, cameraNear, cameraFar);\n\n  // Reconstruct position and normal in world space.\n  vec3 viewPosition = screenToView(\n    uv,\n    depth,\n    getViewZ(depth),\n    projectionMatrix,\n    inverseProjectionMatrix\n  );\n  vec3 worldPosition = (inverseViewMatrix * vec4(viewPosition, 1.0)).xyz;\n  vec3 positionECEF = (worldToECEFMatrix * vec4(worldPosition, 1.0)).xyz;\n  positionECEF = positionECEF * METER_TO_LENGTH_UNIT + vGeometryAltitudeCorrection;\n\n  vec3 viewNormal;\n  bool degenerateNormal = false;\n  #ifdef RECONSTRUCT_NORMAL\n  vec3 dVPdx = dFdx(viewPosition);\n  vec3 dVPdy = dFdy(viewPosition);\n  viewNormal = normalize(cross(dVPdx, dVPdy));\n  #elif defined(HAS_NORMALS)\n  viewNormal = readNormal(uv, degenerateNormal);\n  #endif // defined(HAS_NORMALS)\n\n  #if defined(RECONSTRUCT_NORMAL) || defined(HAS_NORMALS)\n  vec3 worldNormal = (inverseViewMatrix * vec4(viewNormal, 0.0)).xyz;\n  vec3 normalECEF = (worldToECEFMatrix * vec4(worldNormal, 0.0)).xyz;\n  #else // defined(RECONSTRUCT_NORMAL) || defined(HAS_NORMALS)\n  vec3 normalECEF = normalize(positionECEF);\n  #endif // defined(RECONSTRUCT_NORMAL) || defined(HAS_NORMALS)\n\n  #ifdef CORRECT_GEOMETRIC_ERROR\n  correctGeometricError(positionECEF, normalECEF);\n  #endif // CORRECT_GEOMETRIC_ERROR\n\n  #ifdef HAS_SHADOW\n  float stbn = getSTBN();\n  float radius = getShadowRadius(worldPosition);\n  float opticalDepth = sampleShadowOpticalDepth(worldPosition, positionECEF, radius, stbn);\n  float sunTransmittance = exp(-opticalDepth);\n  #else // HAS_SHADOW\n  float sunTransmittance = 1.0;\n  #endif // HAS_SHADOW\n\n  vec3 radiance;\n  #if defined(SUN_LIGHT) || defined(SKY_LIGHT)\n  // WORKAROUND: When both post-process lighting and sky options are enabled,\n  // stars have degenerate normals. We use this to disable irradiance, which is\n  // irrelevant for them.\n  if (!degenerateNormal) {\n    radiance = getSunSkyIrradiance(positionECEF, normalECEF, inputColor.rgb, sunTransmittance);\n  } else {\n    radiance = inputColor.rgb;\n  }\n  #ifdef HAS_LIGHTING_MASK\n  float lightingMask = texture(lightingMaskBuffer, uv).LIGHTING_MASK_CHANNEL_;\n  radiance = mix(inputColor.rgb, radiance, lightingMask);\n  #endif // HAS_LIGHTING_MASK\n  #else // defined(SUN_LIGHT) || defined(SKY_LIGHT)\n  radiance = inputColor.rgb;\n  #endif // defined(SUN_LIGHT) || defined(SKY_LIGHT)\n\n  #if defined(TRANSMITTANCE) || defined(INSCATTER)\n  applyTransmittanceInscatter(positionECEF, shadowLength, radiance);\n  #endif // defined(TRANSMITTANCE) || defined(INSCATTER)\n\n  outputColor = vec4(radiance, inputColor.a);\n\n  #ifdef HAS_OVERLAY\n  outputColor.rgb = outputColor.rgb * (1.0 - overlay.a) + overlay.rgb;\n  #endif // HAS_OVERLAY\n}\n`, Bn = `uniform mat4 inverseViewMatrix;\nuniform mat4 inverseProjectionMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 worldToECEFMatrix;\nuniform vec3 altitudeCorrection;\nuniform float geometricErrorCorrectionAmount;\nuniform vec3 ellipsoidRadii;\n\nvarying vec3 vCameraPosition;\nvarying vec3 vRayDirection;\nvarying vec3 vGeometryAltitudeCorrection;\nvarying vec3 vEllipsoidRadiiSquared;\n\nvoid getCameraRay(out vec3 origin, out vec3 direction) {\n  bool isPerspective = inverseProjectionMatrix[2][3] != 0.0; // 4th entry in the 3rd column\n\n  if (isPerspective) {\n    // Calculate the camera ray for a perspective camera.\n    vec4 viewPosition = inverseProjectionMatrix * vec4(position, 1.0);\n    vec4 worldDirection = inverseViewMatrix * vec4(viewPosition.xyz, 0.0);\n    origin = cameraPosition;\n    direction = worldDirection.xyz;\n  } else {\n    // Unprojected points to calculate direction.\n    vec4 nearPoint = inverseProjectionMatrix * vec4(position.xy, -1.0, 1.0);\n    vec4 farPoint = inverseProjectionMatrix * vec4(position.xy, -0.9, 1.0);\n    nearPoint /= nearPoint.w;\n    farPoint /= farPoint.w;\n\n    // Calculate world values.\n    vec4 worldDirection = inverseViewMatrix * vec4(farPoint.xyz - nearPoint.xyz, 0.0);\n    vec4 worldOrigin = inverseViewMatrix * nearPoint;\n\n    // Outputs\n    direction = worldDirection.xyz;\n    origin = worldOrigin.xyz;\n  }\n}\n\nvoid mainSupport() {\n  vec3 direction, origin;\n  getCameraRay(origin, direction);\n\n  vec3 cameraPositionECEF = (worldToECEFMatrix * vec4(origin, 1.0)).xyz;\n  vCameraPosition = (cameraPositionECEF + altitudeCorrection) * METER_TO_LENGTH_UNIT;\n  vRayDirection = (worldToECEFMatrix * vec4(direction, 0.0)).xyz;\n\n  vGeometryAltitudeCorrection = altitudeCorrection * METER_TO_LENGTH_UNIT;\n  // Gradually turn off the altitude correction on geometries as the geometric\n  // error correction takes effect, because that on the ideal sphere will be\n  // over corrected.\n  // See: https://github.com/takram-design-engineering/three-geospatial/pull/23#issuecomment-2542914656\n  #ifdef CORRECT_GEOMETRIC_ERROR\n  vGeometryAltitudeCorrection *= 1.0 - geometricErrorCorrectionAmount;\n  #endif // CORRECT_GEOMETRIC_ERROR\n\n  vec3 radii = ellipsoidRadii * METER_TO_LENGTH_UNIT;\n  vEllipsoidRadiiSquared = radii * radii;\n}\n`, Ct = `vec3 getLunarRadiance(const float moonAngularRadius) {\n  // Not a physical number but the order of 10^-6 relative to the sun may fit.\n  vec3 radiance =\n    ATMOSPHERE.solar_irradiance *\n    0.000002 /\n    (PI * moonAngularRadius * moonAngularRadius) *\n    SUN_SPECTRAL_RADIANCE_TO_LUMINANCE;\n  return radiance;\n}\n\nfloat intersectSphere(const vec3 ray, const vec3 point, const float radius) {\n  vec3 P = -point;\n  float PoR = dot(P, ray);\n  float D = dot(P, P) - radius * radius;\n  return -PoR - sqrt(PoR * PoR - D);\n}\n\nfloat orenNayarDiffuse(const vec3 L, const vec3 V, const vec3 N) {\n  float NoL = dot(N, L);\n  float NoV = dot(N, V);\n  float s = dot(L, V) - NoL * NoV;\n  float t = mix(1.0, max(NoL, NoV), step(0.0, s));\n  return max(0.0, NoL) * (0.62406015 + 0.41284404 * s / t);\n}\n\nvec3 getSkyRadiance(\n  const vec3 cameraPosition,\n  const vec3 rayDirection,\n  const float shadowLength,\n  const vec3 sunDirection,\n  const vec3 moonDirection,\n  const float moonAngularRadius,\n  const float lunarRadianceScale,\n  const float fragmentAngle\n) {\n  vec3 transmittance;\n  vec3 radiance = GetSkyRadiance(\n    cameraPosition,\n    rayDirection,\n    shadowLength,\n    sunDirection,\n    transmittance\n  );\n\n  // Rendering celestial objects without perspective doesn't make sense.\n  #ifdef PERSPECTIVE_CAMERA\n\n  #ifdef SUN\n  float viewDotSun = dot(rayDirection, sunDirection);\n  if (viewDotSun > cosSunAngularRadius) {\n    float angle = acos(clamp(viewDotSun, -1.0, 1.0));\n    float antialias = smoothstep(\n      ATMOSPHERE.sun_angular_radius,\n      ATMOSPHERE.sun_angular_radius - fragmentAngle,\n      angle\n    );\n    radiance += transmittance * GetSolarRadiance() * antialias;\n  }\n  #endif // SUN\n\n  #ifdef MOON\n  float intersection = intersectSphere(rayDirection, moonDirection, moonAngularRadius);\n  if (intersection > 0.0) {\n    vec3 normal = normalize(moonDirection - rayDirection * intersection);\n    float diffuse = orenNayarDiffuse(-sunDirection, rayDirection, normal);\n    float viewDotMoon = dot(rayDirection, moonDirection);\n    float angle = acos(clamp(viewDotMoon, -1.0, 1.0));\n    float antialias = smoothstep(moonAngularRadius, moonAngularRadius - fragmentAngle, angle);\n    radiance +=\n      transmittance *\n      getLunarRadiance(moonAngularRadius) *\n      lunarRadianceScale *\n      diffuse *\n      antialias;\n  }\n  #endif // MOON\n\n  #endif // PERSPECTIVE_CAMERA\n\n  return radiance;\n}\n`;\nvar Wn = Object.defineProperty, L = (n, e, t, r) => {\n  for (var i = void 0, a = n.length - 1, o; a >= 0; a--)\n    (o = n[a]) && (i = o(e, t, i) || i);\n  return i && Wn(e, t, i), i;\n};\nconst jn = /* @__PURE__ */ new p(), Xn = /* @__PURE__ */ new p(), Yn = /* @__PURE__ */ new Dn(), Kn = {\n  blendFunction: Jt.NORMAL,\n  octEncodedNormal: !1,\n  reconstructNormal: !1,\n  ellipsoid: F0.WGS84,\n  correctAltitude: !0,\n  correctGeometricError: !0,\n  sunLight: !1,\n  skyLight: !1,\n  transmittance: !0,\n  inscatter: !0,\n  albedoScale: 1,\n  sky: !1,\n  sun: !0,\n  moon: !0,\n  moonAngularRadius: 45e-4,\n  // ≈ 15.5 arcminutes\n  lunarRadianceScale: 1,\n  ground: !0\n};\nclass H extends Qt {\n  constructor(e = new St(), t, r = n0.DEFAULT) {\n    const {\n      blendFunction: i,\n      normalBuffer: a = null,\n      octEncodedNormal: o,\n      reconstructNormal: c,\n      irradianceTexture: s = null,\n      scatteringTexture: l = null,\n      transmittanceTexture: h = null,\n      singleMieScatteringTexture: m = null,\n      higherOrderScatteringTexture: f = null,\n      ellipsoid: v,\n      correctAltitude: T,\n      correctGeometricError: E,\n      sunDirection: x,\n      sunLight: y,\n      skyLight: I,\n      transmittance: N,\n      inscatter: b,\n      albedoScale: U,\n      sky: z,\n      sun: F,\n      moon: q,\n      moonDirection: Z,\n      moonAngularRadius: i0,\n      lunarRadianceScale: a0,\n      ground: J\n    } = { ...Kn, ...t };\n    super(\n      \"AerialPerspectiveEffect\",\n      Cn(\n        W(Vn, {\n          core: {\n            depth: yt,\n            packing: Un,\n            math: bn,\n            transform: Hn,\n            raySphereIntersection: wt,\n            cascadedShadowMaps: Ln,\n            interleavedGradientNoise: On,\n            vogelDisk: Nn\n          },\n          bruneton: {\n            common: $,\n            definitions: K,\n            runtime: Ve\n          },\n          sky: Ct\n        })\n      ),\n      {\n        blendFunction: i,\n        vertexShader: Bn,\n        attributes: en.DEPTH,\n        // prettier-ignore\n        uniforms: new Map(\n          Object.entries({\n            normalBuffer: new d(a),\n            projectionMatrix: new d(new D()),\n            viewMatrix: new d(new D()),\n            inverseProjectionMatrix: new d(new D()),\n            inverseViewMatrix: new d(new D()),\n            cameraPosition: new d(new p()),\n            bottomRadius: new d(r.bottomRadius),\n            ellipsoidRadii: new d(new p()),\n            worldToECEFMatrix: new d(new D()),\n            altitudeCorrection: new d(new p()),\n            geometricErrorCorrectionAmount: new d(0),\n            sunDirection: new d(x?.clone() ?? new p()),\n            cosSunAngularRadius: new d(r.sunAngularRadius),\n            albedoScale: new d(U),\n            moonDirection: new d(Z?.clone() ?? new p()),\n            moonAngularRadius: new d(i0),\n            lunarRadianceScale: new d(a0),\n            // Composition and shadow\n            overlayBuffer: new d(null),\n            shadowBuffer: new d(null),\n            shadowMapSize: new d(new oe()),\n            shadowIntervals: new d([]),\n            shadowMatrices: new d([]),\n            inverseShadowMatrices: new d([]),\n            shadowFar: new d(0),\n            shadowTopHeight: new d(0),\n            shadowRadius: new d(3),\n            stbnTexture: new d(null),\n            frame: new d(0),\n            shadowLengthBuffer: new d(null),\n            // Lighting mask\n            lightingMaskBuffer: new d(null),\n            // Uniforms for atmosphere functions\n            ATMOSPHERE: r.toUniform(),\n            SUN_SPECTRAL_RADIANCE_TO_LUMINANCE: new d(r.sunRadianceToRelativeLuminance),\n            SKY_SPECTRAL_RADIANCE_TO_LUMINANCE: new d(r.skyRadianceToRelativeLuminance),\n            irradiance_texture: new d(s),\n            scattering_texture: new d(l),\n            transmittance_texture: new d(h),\n            single_mie_scattering_texture: new d(null),\n            higher_order_scattering_texture: new d(null)\n          })\n        ),\n        // prettier-ignore\n        defines: /* @__PURE__ */ new Map([\n          [\"TRANSMITTANCE_TEXTURE_WIDTH\", h0.toFixed(0)],\n          [\"TRANSMITTANCE_TEXTURE_HEIGHT\", m0.toFixed(0)],\n          [\"SCATTERING_TEXTURE_R_SIZE\", Ue.toFixed(0)],\n          [\"SCATTERING_TEXTURE_MU_SIZE\", Ge.toFixed(0)],\n          [\"SCATTERING_TEXTURE_MU_S_SIZE\", Fe.toFixed(0)],\n          [\"SCATTERING_TEXTURE_NU_SIZE\", ze.toFixed(0)],\n          [\"IRRADIANCE_TEXTURE_WIDTH\", f0.toFixed(0)],\n          [\"IRRADIANCE_TEXTURE_HEIGHT\", g0.toFixed(0)],\n          [\"METER_TO_LENGTH_UNIT\", ee.toFixed(7)]\n        ])\n      }\n    ), this.camera = e, this.atmosphere = r, this.overlay = null, this.shadow = null, this.shadowLength = null, this.lightingMask = null, this.hasNormals = !1, this.combinedScatteringTextures = !1, this.hasHigherOrderScatteringTexture = !1, this.shadowSampleCount = 8, this.octEncodedNormal = o, this.reconstructNormal = c, this.singleMieScatteringTexture = m, this.higherOrderScatteringTexture = f, this.ellipsoid = v, this.correctAltitude = T, this.correctGeometricError = E, this.sunLight = y, this.skyLight = I, this.transmittance = N, this.inscatter = b, this.sky = z, this.sun = F, this.moon = q, this.ground = J;\n  }\n  get mainCamera() {\n    return this.camera;\n  }\n  set mainCamera(e) {\n    this.camera = e;\n  }\n  copyCameraSettings(e) {\n    const {\n      projectionMatrix: t,\n      matrixWorldInverse: r,\n      projectionMatrixInverse: i,\n      matrixWorld: a\n    } = e, o = this.uniforms;\n    o.get(\"projectionMatrix\").value.copy(t), o.get(\"viewMatrix\").value.copy(r), o.get(\"inverseProjectionMatrix\").value.copy(i), o.get(\"inverseViewMatrix\").value.copy(a);\n    const c = e.getWorldPosition(\n      o.get(\"cameraPosition\").value\n    ), s = o.get(\"worldToECEFMatrix\").value, l = jn.copy(c).applyMatrix4(s);\n    try {\n      const m = Yn.setFromECEF(l).height, f = Xn.set(0, this.ellipsoid.maximumRadius, -Math.max(0, m)).applyMatrix4(t);\n      o.get(\"geometricErrorCorrectionAmount\").value = In(\n        Pn(f.y, 41.5, 13.8, 0, 1)\n      );\n    } catch {\n      return;\n    }\n    const h = o.get(\"altitudeCorrection\");\n    this.correctAltitude ? ke(\n      l,\n      this.atmosphere.bottomRadius,\n      this.ellipsoid,\n      h.value\n    ) : h.value.setScalar(0);\n  }\n  updateOverlay() {\n    let e = !1;\n    const { uniforms: t, defines: r, overlay: i } = this, a = r.has(\"HAS_OVERLAY\"), o = i != null;\n    return o !== a && (o ? r.set(\"HAS_OVERLAY\", \"1\") : (r.delete(\"HAS_OVERLAY\"), t.get(\"overlayBuffer\").value = null), e = !0), o && (t.get(\"overlayBuffer\").value = i.map), e;\n  }\n  updateShadow() {\n    let e = !1;\n    const { uniforms: t, defines: r, shadow: i } = this, a = r.has(\"HAS_SHADOW\"), o = i != null;\n    if (o !== a && (o ? r.set(\"HAS_SHADOW\", \"1\") : (r.delete(\"HAS_SHADOW\"), t.get(\"shadowBuffer\").value = null), e = !0), o) {\n      const c = r.get(\"SHADOW_CASCADE_COUNT\"), s = `${i.cascadeCount}`;\n      c !== s && (r.set(\"SHADOW_CASCADE_COUNT\", i.cascadeCount.toFixed(0)), e = !0), t.get(\"shadowBuffer\").value = i.map, t.get(\"shadowMapSize\").value = i.mapSize, t.get(\"shadowIntervals\").value = i.intervals, t.get(\"shadowMatrices\").value = i.matrices, t.get(\"inverseShadowMatrices\").value = i.inverseMatrices, t.get(\"shadowFar\").value = i.far, t.get(\"shadowTopHeight\").value = i.topHeight;\n    }\n    return e;\n  }\n  updateShadowLength() {\n    let e = !1;\n    const { uniforms: t, defines: r, shadowLength: i } = this, a = r.has(\"HAS_SHADOW_LENGTH\"), o = i != null;\n    return o !== a && (o ? r.set(\"HAS_SHADOW_LENGTH\", \"1\") : (r.delete(\"HAS_SHADOW_LENGTH\"), t.get(\"shadowLengthBuffer\").value = null), e = !0), o && (t.get(\"shadowLengthBuffer\").value = i.map), e;\n  }\n  updateLightingMask() {\n    let e = !1;\n    const { uniforms: t, defines: r, lightingMask: i } = this, a = r.has(\"HAS_LIGHTING_MASK\"), o = i != null;\n    if (o !== a && (o ? r.set(\"HAS_LIGHTING_MASK\", \"1\") : (r.delete(\"HAS_LIGHTING_MASK\"), t.get(\"lightingMaskBuffer\").value = null), e = !0), o) {\n      t.get(\"lightingMaskBuffer\").value = i.map;\n      const c = r.get(\"LIGHTING_MASK_CHANNEL\"), s = i.channel;\n      s !== c && (/^[rgba]$/.test(s) ? (r.set(\"LIGHTING_MASK_CHANNEL\", s), e = !0) : console.error(`Expression validation failed: ${s}`));\n    }\n    return e;\n  }\n  update(e, t, r) {\n    this.copyCameraSettings(this.camera);\n    let i = !1;\n    i ||= this.updateOverlay(), i ||= this.updateShadow(), i ||= this.updateShadowLength(), i ||= this.updateLightingMask(), i && this.setChanged(), ++this.uniforms.get(\"frame\").value;\n  }\n  get normalBuffer() {\n    return this.uniforms.get(\"normalBuffer\").value;\n  }\n  set normalBuffer(e) {\n    this.uniforms.get(\"normalBuffer\").value = e, this.hasNormals = e != null;\n  }\n  get irradianceTexture() {\n    return this.uniforms.get(\"irradiance_texture\").value;\n  }\n  set irradianceTexture(e) {\n    this.uniforms.get(\"irradiance_texture\").value = e;\n  }\n  get scatteringTexture() {\n    return this.uniforms.get(\"scattering_texture\").value;\n  }\n  set scatteringTexture(e) {\n    this.uniforms.get(\"scattering_texture\").value = e;\n  }\n  get transmittanceTexture() {\n    return this.uniforms.get(\"transmittance_texture\").value;\n  }\n  set transmittanceTexture(e) {\n    this.uniforms.get(\"transmittance_texture\").value = e;\n  }\n  get singleMieScatteringTexture() {\n    return this.uniforms.get(\"single_mie_scattering_texture\").value;\n  }\n  set singleMieScatteringTexture(e) {\n    this.uniforms.get(\"single_mie_scattering_texture\").value = e, this.combinedScatteringTextures = e == null;\n  }\n  get higherOrderScatteringTexture() {\n    return this.uniforms.get(\"higher_order_scattering_texture\").value;\n  }\n  set higherOrderScatteringTexture(e) {\n    this.uniforms.get(\"higher_order_scattering_texture\").value = e, this.hasHigherOrderScatteringTexture = e != null;\n  }\n  get ellipsoid() {\n    return this._ellipsoid;\n  }\n  set ellipsoid(e) {\n    this._ellipsoid = e, this.uniforms.get(\"ellipsoidRadii\").value.copy(e.radii);\n  }\n  get worldToECEFMatrix() {\n    return this.uniforms.get(\"worldToECEFMatrix\").value;\n  }\n  get sunDirection() {\n    return this.uniforms.get(\"sunDirection\").value;\n  }\n  get sunAngularRadius() {\n    return this.uniforms.get(\"ATMOSPHERE\").value.sun_angular_radius;\n  }\n  set sunAngularRadius(e) {\n    this.uniforms.get(\"ATMOSPHERE\").value.sun_angular_radius = e, this.uniforms.get(\"cosSunAngularRadius\").value = Math.cos(e);\n  }\n  get albedoScale() {\n    return this.uniforms.get(\"albedoScale\").value;\n  }\n  set albedoScale(e) {\n    this.uniforms.get(\"albedoScale\").value = e;\n  }\n  get moonDirection() {\n    return this.uniforms.get(\"moonDirection\").value;\n  }\n  get moonAngularRadius() {\n    return this.uniforms.get(\"moonAngularRadius\").value;\n  }\n  set moonAngularRadius(e) {\n    this.uniforms.get(\"moonAngularRadius\").value = e;\n  }\n  get lunarRadianceScale() {\n    return this.uniforms.get(\"lunarRadianceScale\").value;\n  }\n  set lunarRadianceScale(e) {\n    this.uniforms.get(\"lunarRadianceScale\").value = e;\n  }\n  get stbnTexture() {\n    return this.uniforms.get(\"stbnTexture\").value;\n  }\n  set stbnTexture(e) {\n    this.uniforms.get(\"stbnTexture\").value = e;\n  }\n  get shadowRadius() {\n    return this.uniforms.get(\"shadowRadius\").value;\n  }\n  set shadowRadius(e) {\n    this.uniforms.get(\"shadowRadius\").value = e;\n  }\n}\nL([\n  w(\"OCT_ENCODED_NORMAL\")\n], H.prototype, \"octEncodedNormal\");\nL([\n  w(\"RECONSTRUCT_NORMAL\")\n], H.prototype, \"reconstructNormal\");\nL([\n  w(\"HAS_NORMALS\")\n], H.prototype, \"hasNormals\");\nL([\n  w(\"COMBINED_SCATTERING_TEXTURES\")\n], H.prototype, \"combinedScatteringTextures\");\nL([\n  w(\"HAS_HIGHER_ORDER_SCATTERING_TEXTURE\")\n], H.prototype, \"hasHigherOrderScatteringTexture\");\nL([\n  w(\"CORRECT_GEOMETRIC_ERROR\")\n], H.prototype, \"correctGeometricError\");\nL([\n  w(\"SUN_LIGHT\")\n], H.prototype, \"sunLight\");\nL([\n  w(\"SKY_LIGHT\")\n], H.prototype, \"skyLight\");\nL([\n  w(\"TRANSMITTANCE\")\n], H.prototype, \"transmittance\");\nL([\n  w(\"INSCATTER\")\n], H.prototype, \"inscatter\");\nL([\n  w(\"SKY\")\n], H.prototype, \"sky\");\nL([\n  w(\"SUN\")\n], H.prototype, \"sun\");\nL([\n  w(\"MOON\")\n], H.prototype, \"moon\");\nL([\n  w(\"GROUND\")\n], H.prototype, \"ground\");\nL([\n  yn(\"SHADOW_SAMPLE_COUNT\", { min: 1, max: 16 })\n], H.prototype, \"shadowSampleCount\");\nvar $n = Object.defineProperty, Dt = (n, e, t, r) => {\n  for (var i = void 0, a = n.length - 1, o; a >= 0; a--)\n    (o = n[a]) && (i = o(e, t, i) || i);\n  return i && $n(e, t, i), i;\n};\nconst qn = /* @__PURE__ */ new p();\nfunction Zn(n, e) {\n  let t = \"\", r = \"\";\n  for (let i = 1; i < e; ++i)\n    t += `layout(location = ${i}) out float renderTarget${i};\n`, r += `renderTarget${i} = 0.0;\n`;\n  return n.replace(\"#include <mrt_layout>\", t).replace(\"#include <mrt_output>\", r);\n}\nconst Be = {\n  ellipsoid: F0.WGS84,\n  correctAltitude: !0,\n  renderTargetCount: 1\n};\nclass se extends vt {\n  constructor(e, t = n0.DEFAULT) {\n    const {\n      irradianceTexture: r = null,\n      scatteringTexture: i = null,\n      transmittanceTexture: a = null,\n      singleMieScatteringTexture: o = null,\n      higherOrderScatteringTexture: c = null,\n      ellipsoid: s,\n      correctAltitude: l,\n      sunDirection: h,\n      sunAngularRadius: m,\n      renderTargetCount: f,\n      ...v\n    } = { ...Be, ...e };\n    super({\n      toneMapped: !1,\n      depthWrite: !1,\n      depthTest: !1,\n      ...v,\n      // prettier-ignore\n      uniforms: {\n        cameraPosition: new d(new p()),\n        worldToECEFMatrix: new d(new D()),\n        altitudeCorrection: new d(new p()),\n        sunDirection: new d(h?.clone() ?? new p()),\n        cosSunAngularRadius: new d(t.sunAngularRadius),\n        // Uniforms for atmosphere functions\n        ATMOSPHERE: t.toUniform(),\n        SUN_SPECTRAL_RADIANCE_TO_LUMINANCE: new d(t.sunRadianceToRelativeLuminance),\n        SKY_SPECTRAL_RADIANCE_TO_LUMINANCE: new d(t.skyRadianceToRelativeLuminance),\n        irradiance_texture: new d(r),\n        scattering_texture: new d(i),\n        transmittance_texture: new d(a),\n        single_mie_scattering_texture: new d(null),\n        higher_order_scattering_texture: new d(null),\n        ...v.uniforms\n      },\n      defines: {\n        PI: `${Math.PI}`,\n        TRANSMITTANCE_TEXTURE_WIDTH: h0.toFixed(0),\n        TRANSMITTANCE_TEXTURE_HEIGHT: m0.toFixed(0),\n        SCATTERING_TEXTURE_R_SIZE: Ue.toFixed(0),\n        SCATTERING_TEXTURE_MU_SIZE: Ge.toFixed(0),\n        SCATTERING_TEXTURE_MU_S_SIZE: Fe.toFixed(0),\n        SCATTERING_TEXTURE_NU_SIZE: ze.toFixed(0),\n        IRRADIANCE_TEXTURE_WIDTH: f0.toFixed(0),\n        IRRADIANCE_TEXTURE_HEIGHT: g0.toFixed(0),\n        METER_TO_LENGTH_UNIT: ee.toFixed(7),\n        ...v.defines\n      }\n    }), this.atmosphere = t, this.combinedScatteringTextures = !1, this.hasHigherOrderScatteringTexture = !1, this.singleMieScatteringTexture = o, this.higherOrderScatteringTexture = c, this.ellipsoid = s, this.correctAltitude = l, m != null && (this.sunAngularRadius = m), this.renderTargetCount = f;\n  }\n  copyCameraSettings(e) {\n    const t = this.uniforms, r = e.getWorldPosition(\n      t.cameraPosition.value\n    ), i = qn.copy(r).applyMatrix4(t.worldToECEFMatrix.value), a = t.altitudeCorrection.value;\n    this.correctAltitude ? ke(\n      i,\n      this.atmosphere.bottomRadius,\n      this.ellipsoid,\n      a\n    ) : a.setScalar(0);\n  }\n  onBeforeCompile(e, t) {\n    e.fragmentShader = Zn(\n      e.fragmentShader,\n      this.renderTargetCount\n    );\n  }\n  onBeforeRender(e, t, r, i, a, o) {\n    this.copyCameraSettings(r);\n  }\n  get irradianceTexture() {\n    return this.uniforms.irradiance_texture.value;\n  }\n  set irradianceTexture(e) {\n    this.uniforms.irradiance_texture.value = e;\n  }\n  get scatteringTexture() {\n    return this.uniforms.scattering_texture.value;\n  }\n  set scatteringTexture(e) {\n    this.uniforms.scattering_texture.value = e;\n  }\n  get transmittanceTexture() {\n    return this.uniforms.transmittance_texture.value;\n  }\n  set transmittanceTexture(e) {\n    this.uniforms.transmittance_texture.value = e;\n  }\n  get singleMieScatteringTexture() {\n    return this.uniforms.single_mie_scattering_texture.value;\n  }\n  set singleMieScatteringTexture(e) {\n    this.uniforms.single_mie_scattering_texture.value = e, this.combinedScatteringTextures = e == null;\n  }\n  get higherOrderScatteringTexture() {\n    return this.uniforms.higher_order_scattering_texture.value;\n  }\n  set higherOrderScatteringTexture(e) {\n    this.uniforms.higher_order_scattering_texture.value = e, this.hasHigherOrderScatteringTexture = e != null;\n  }\n  get worldToECEFMatrix() {\n    return this.uniforms.worldToECEFMatrix.value;\n  }\n  get sunDirection() {\n    return this.uniforms.sunDirection.value;\n  }\n  get sunAngularRadius() {\n    return this.uniforms.ATMOSPHERE.value.sun_angular_radius;\n  }\n  set sunAngularRadius(e) {\n    this.uniforms.ATMOSPHERE.value.sun_angular_radius = e, this.uniforms.cosSunAngularRadius.value = Math.cos(e);\n  }\n  /** @package */\n  get renderTargetCount() {\n    return this._renderTargetCount;\n  }\n  /** @package */\n  set renderTargetCount(e) {\n    e !== this.renderTargetCount && (this._renderTargetCount = e, this.needsUpdate = !0);\n  }\n}\nDt([\n  w(\"COMBINED_SCATTERING_TEXTURES\")\n], se.prototype, \"combinedScatteringTextures\");\nDt([\n  w(\"HAS_HIGHER_ORDER_SCATTERING_TEXTURE\")\n], se.prototype, \"hasHigherOrderScatteringTexture\");\n/**\n    @preserve\n\n    Astronomy library for JavaScript (browser and Node.js).\n    https://github.com/cosinekitty/astronomy\n\n    MIT License\n\n    Copyright (c) 2019-2023 Don Cross <cosinekitty@gmail.com>\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE.\n*/\n/**\n * @fileoverview Astronomy calculation library for browser scripting and Node.js.\n * @author Don Cross <cosinekitty@gmail.com>\n * @license MIT\n */\nconst Jn = 173.1446326846693, It = 14959787069098932e-8, g = 0.017453292519943295, at = 57.29577951308232, Qn = 365.24217, ot = /* @__PURE__ */ new Date(\"2000-01-01T12:00:00Z\"), X = 2 * Math.PI, e0 = 3600 * (180 / Math.PI), x0 = 484813681109536e-20, er = 10800 * 60, tr = 2 * er, nr = 6378.1366, rr = nr / It, ir = 81.30056, We = 2959122082855911e-19, xe = 2825345909524226e-22, Me = 8459715185680659e-23, Ae = 1292024916781969e-23, we = 1524358900784276e-23;\nfunction l0(n) {\n  if (!Number.isFinite(n))\n    throw console.trace(), `Value is not a finite number: ${n}`;\n  return n;\n}\nfunction E0(n) {\n  return n - Math.floor(n);\n}\nvar S;\n(function(n) {\n  n.Sun = \"Sun\", n.Moon = \"Moon\", n.Mercury = \"Mercury\", n.Venus = \"Venus\", n.Earth = \"Earth\", n.Mars = \"Mars\", n.Jupiter = \"Jupiter\", n.Saturn = \"Saturn\", n.Uranus = \"Uranus\", n.Neptune = \"Neptune\", n.Pluto = \"Pluto\", n.SSB = \"SSB\", n.EMB = \"EMB\", n.Star1 = \"Star1\", n.Star2 = \"Star2\", n.Star3 = \"Star3\", n.Star4 = \"Star4\", n.Star5 = \"Star5\", n.Star6 = \"Star6\", n.Star7 = \"Star7\", n.Star8 = \"Star8\";\n})(S || (S = {}));\nconst ar = [\n  S.Star1,\n  S.Star2,\n  S.Star3,\n  S.Star4,\n  S.Star5,\n  S.Star6,\n  S.Star7,\n  S.Star8\n], or = [\n  { ra: 0, dec: 0, dist: 0 },\n  { ra: 0, dec: 0, dist: 0 },\n  { ra: 0, dec: 0, dist: 0 },\n  { ra: 0, dec: 0, dist: 0 },\n  { ra: 0, dec: 0, dist: 0 },\n  { ra: 0, dec: 0, dist: 0 },\n  { ra: 0, dec: 0, dist: 0 },\n  { ra: 0, dec: 0, dist: 0 }\n];\nfunction sr(n) {\n  const e = ar.indexOf(n);\n  return e >= 0 ? or[e] : null;\n}\nfunction Pt(n) {\n  const e = sr(n);\n  return e && e.dist > 0 ? e : null;\n}\nvar V;\n(function(n) {\n  n[n.From2000 = 0] = \"From2000\", n[n.Into2000 = 1] = \"Into2000\";\n})(V || (V = {}));\nconst M0 = {\n  Mercury: [\n    [\n      [\n        [4.40250710144, 0, 0],\n        [0.40989414977, 1.48302034195, 26087.9031415742],\n        [0.050462942, 4.47785489551, 52175.8062831484],\n        [0.00855346844, 1.16520322459, 78263.70942472259],\n        [0.00165590362, 4.11969163423, 104351.61256629678],\n        [34561897e-11, 0.77930768443, 130439.51570787099],\n        [7583476e-11, 3.71348404924, 156527.41884944518]\n      ],\n      [\n        [26087.90313685529, 0, 0],\n        [0.01131199811, 6.21874197797, 26087.9031415742],\n        [0.00292242298, 3.04449355541, 52175.8062831484],\n        [75775081e-11, 6.08568821653, 78263.70942472259],\n        [19676525e-11, 2.80965111777, 104351.61256629678]\n      ]\n    ],\n    [\n      [\n        [0.11737528961, 1.98357498767, 26087.9031415742],\n        [0.02388076996, 5.03738959686, 52175.8062831484],\n        [0.01222839532, 3.14159265359, 0],\n        [0.0054325181, 1.79644363964, 78263.70942472259],\n        [0.0012977877, 4.83232503958, 104351.61256629678],\n        [31866927e-11, 1.58088495658, 130439.51570787099],\n        [7963301e-11, 4.60972126127, 156527.41884944518]\n      ],\n      [\n        [0.00274646065, 3.95008450011, 26087.9031415742],\n        [99737713e-11, 3.14159265359, 0]\n      ]\n    ],\n    [\n      [\n        [0.39528271651, 0, 0],\n        [0.07834131818, 6.19233722598, 26087.9031415742],\n        [0.00795525558, 2.95989690104, 52175.8062831484],\n        [0.00121281764, 6.01064153797, 78263.70942472259],\n        [21921969e-11, 2.77820093972, 104351.61256629678],\n        [4354065e-11, 5.82894543774, 130439.51570787099]\n      ],\n      [\n        [0.0021734774, 4.65617158665, 26087.9031415742],\n        [44141826e-11, 1.42385544001, 52175.8062831484]\n      ]\n    ]\n  ],\n  Venus: [\n    [\n      [\n        [3.17614666774, 0, 0],\n        [0.01353968419, 5.59313319619, 10213.285546211],\n        [89891645e-11, 5.30650047764, 20426.571092422],\n        [5477194e-11, 4.41630661466, 7860.4193924392],\n        [3455741e-11, 2.6996444782, 11790.6290886588],\n        [2372061e-11, 2.99377542079, 3930.2096962196],\n        [1317168e-11, 5.18668228402, 26.2983197998],\n        [1664146e-11, 4.25018630147, 1577.3435424478],\n        [1438387e-11, 4.15745084182, 9683.5945811164],\n        [1200521e-11, 6.15357116043, 30639.856638633]\n      ],\n      [\n        [10213.28554621638, 0, 0],\n        [95617813e-11, 2.4640651111, 10213.285546211],\n        [7787201e-11, 0.6247848222, 20426.571092422]\n      ]\n    ],\n    [\n      [\n        [0.05923638472, 0.26702775812, 10213.285546211],\n        [40107978e-11, 1.14737178112, 20426.571092422],\n        [32814918e-11, 3.14159265359, 0]\n      ],\n      [\n        [0.00287821243, 1.88964962838, 10213.285546211]\n      ]\n    ],\n    [\n      [\n        [0.72334820891, 0, 0],\n        [0.00489824182, 4.02151831717, 10213.285546211],\n        [1658058e-11, 4.90206728031, 20426.571092422],\n        [1378043e-11, 1.12846591367, 11790.6290886588],\n        [1632096e-11, 2.84548795207, 7860.4193924392],\n        [498395e-11, 2.58682193892, 9683.5945811164],\n        [221985e-11, 2.01346696541, 19367.1891622328],\n        [237454e-11, 2.55136053886, 15720.8387848784]\n      ],\n      [\n        [34551041e-11, 0.89198706276, 10213.285546211]\n      ]\n    ]\n  ],\n  Earth: [\n    [\n      [\n        [1.75347045673, 0, 0],\n        [0.03341656453, 4.66925680415, 6283.0758499914],\n        [34894275e-11, 4.62610242189, 12566.1516999828],\n        [3417572e-11, 2.82886579754, 3.523118349],\n        [3497056e-11, 2.74411783405, 5753.3848848968],\n        [3135899e-11, 3.62767041756, 77713.7714681205],\n        [2676218e-11, 4.41808345438, 7860.4193924392],\n        [2342691e-11, 6.13516214446, 3930.2096962196],\n        [1273165e-11, 2.03709657878, 529.6909650946],\n        [1324294e-11, 0.74246341673, 11506.7697697936],\n        [901854e-11, 2.04505446477, 26.2983197998],\n        [1199167e-11, 1.10962946234, 1577.3435424478],\n        [857223e-11, 3.50849152283, 398.1490034082],\n        [779786e-11, 1.17882681962, 5223.6939198022],\n        [99025e-10, 5.23268072088, 5884.9268465832],\n        [753141e-11, 2.53339052847, 5507.5532386674],\n        [505267e-11, 4.58292599973, 18849.2275499742],\n        [492392e-11, 4.20505711826, 775.522611324],\n        [356672e-11, 2.91954114478, 0.0673103028],\n        [284125e-11, 1.89869240932, 796.2980068164],\n        [242879e-11, 0.34481445893, 5486.777843175],\n        [317087e-11, 5.84901948512, 11790.6290886588],\n        [271112e-11, 0.31486255375, 10977.078804699],\n        [206217e-11, 4.80646631478, 2544.3144198834],\n        [205478e-11, 1.86953770281, 5573.1428014331],\n        [202318e-11, 2.45767790232, 6069.7767545534],\n        [126225e-11, 1.08295459501, 20.7753954924],\n        [155516e-11, 0.83306084617, 213.299095438]\n      ],\n      [\n        [6283.0758499914, 0, 0],\n        [0.00206058863, 2.67823455808, 6283.0758499914],\n        [4303419e-11, 2.63512233481, 12566.1516999828]\n      ],\n      [\n        [8721859e-11, 1.07253635559, 6283.0758499914]\n      ]\n    ],\n    [\n      [],\n      [\n        [0.00227777722, 3.4137662053, 6283.0758499914],\n        [3805678e-11, 3.37063423795, 12566.1516999828]\n      ]\n    ],\n    [\n      [\n        [1.00013988784, 0, 0],\n        [0.01670699632, 3.09846350258, 6283.0758499914],\n        [13956024e-11, 3.05524609456, 12566.1516999828],\n        [308372e-10, 5.19846674381, 77713.7714681205],\n        [1628463e-11, 1.17387558054, 5753.3848848968],\n        [1575572e-11, 2.84685214877, 7860.4193924392],\n        [924799e-11, 5.45292236722, 11506.7697697936],\n        [542439e-11, 4.56409151453, 3930.2096962196],\n        [47211e-10, 3.66100022149, 5884.9268465832],\n        [85831e-11, 1.27079125277, 161000.6857376741],\n        [57056e-11, 2.01374292245, 83996.84731811189],\n        [55736e-11, 5.2415979917, 71430.69561812909],\n        [174844e-11, 3.01193636733, 18849.2275499742],\n        [243181e-11, 4.2734953079, 11790.6290886588]\n      ],\n      [\n        [0.00103018607, 1.10748968172, 6283.0758499914],\n        [1721238e-11, 1.06442300386, 12566.1516999828]\n      ],\n      [\n        [4359385e-11, 5.78455133808, 6283.0758499914]\n      ]\n    ]\n  ],\n  Mars: [\n    [\n      [\n        [6.20347711581, 0, 0],\n        [0.18656368093, 5.0503710027, 3340.6124266998],\n        [0.01108216816, 5.40099836344, 6681.2248533996],\n        [91798406e-11, 5.75478744667, 10021.8372800994],\n        [27744987e-11, 5.97049513147, 3.523118349],\n        [10610235e-11, 2.93958560338, 2281.2304965106],\n        [12315897e-11, 0.84956094002, 2810.9214616052],\n        [8926784e-11, 4.15697846427, 0.0172536522],\n        [8715691e-11, 6.11005153139, 13362.4497067992],\n        [6797556e-11, 0.36462229657, 398.1490034082],\n        [7774872e-11, 3.33968761376, 5621.8429232104],\n        [3575078e-11, 1.6618650571, 2544.3144198834],\n        [4161108e-11, 0.22814971327, 2942.4634232916],\n        [3075252e-11, 0.85696614132, 191.4482661116],\n        [2628117e-11, 0.64806124465, 3337.0893083508],\n        [2937546e-11, 6.07893711402, 0.0673103028],\n        [2389414e-11, 5.03896442664, 796.2980068164],\n        [2579844e-11, 0.02996736156, 3344.1355450488],\n        [1528141e-11, 1.14979301996, 6151.533888305],\n        [1798806e-11, 0.65634057445, 529.6909650946],\n        [1264357e-11, 3.62275122593, 5092.1519581158],\n        [1286228e-11, 3.06796065034, 2146.1654164752],\n        [1546404e-11, 2.91579701718, 1751.539531416],\n        [1024902e-11, 3.69334099279, 8962.4553499102],\n        [891566e-11, 0.18293837498, 16703.062133499],\n        [858759e-11, 2.4009381194, 2914.0142358238],\n        [832715e-11, 2.46418619474, 3340.5951730476],\n        [83272e-10, 4.49495782139, 3340.629680352],\n        [712902e-11, 3.66335473479, 1059.3819301892],\n        [748723e-11, 3.82248614017, 155.4203994342],\n        [723861e-11, 0.67497311481, 3738.761430108],\n        [635548e-11, 2.92182225127, 8432.7643848156],\n        [655162e-11, 0.48864064125, 3127.3133312618],\n        [550474e-11, 3.81001042328, 0.9803210682],\n        [55275e-10, 4.47479317037, 1748.016413067],\n        [425966e-11, 0.55364317304, 6283.0758499914],\n        [415131e-11, 0.49662285038, 213.299095438],\n        [472167e-11, 3.62547124025, 1194.4470102246],\n        [306551e-11, 0.38052848348, 6684.7479717486],\n        [312141e-11, 0.99853944405, 6677.7017350506],\n        [293198e-11, 4.22131299634, 20.7753954924],\n        [302375e-11, 4.48618007156, 3532.0606928114],\n        [274027e-11, 0.54222167059, 3340.545116397],\n        [281079e-11, 5.88163521788, 1349.8674096588],\n        [231183e-11, 1.28242156993, 3870.3033917944],\n        [283602e-11, 5.7688543494, 3149.1641605882],\n        [236117e-11, 5.75503217933, 3333.498879699],\n        [274033e-11, 0.13372524985, 3340.6797370026],\n        [299395e-11, 2.78323740866, 6254.6266625236]\n      ],\n      [\n        [3340.61242700512, 0, 0],\n        [0.01457554523, 3.60433733236, 3340.6124266998],\n        [0.00168414711, 3.92318567804, 6681.2248533996],\n        [20622975e-11, 4.26108844583, 10021.8372800994],\n        [3452392e-11, 4.7321039319, 3.523118349],\n        [2586332e-11, 4.60670058555, 13362.4497067992],\n        [841535e-11, 4.45864030426, 2281.2304965106]\n      ],\n      [\n        [58152577e-11, 2.04961712429, 3340.6124266998],\n        [13459579e-11, 2.45738706163, 6681.2248533996]\n      ]\n    ],\n    [\n      [\n        [0.03197134986, 3.76832042431, 3340.6124266998],\n        [0.00298033234, 4.10616996305, 6681.2248533996],\n        [0.00289104742, 0, 0],\n        [31365539e-11, 4.4465105309, 10021.8372800994],\n        [34841e-9, 4.7881254926, 13362.4497067992]\n      ],\n      [\n        [0.00217310991, 6.04472194776, 3340.6124266998],\n        [20976948e-11, 3.14159265359, 0],\n        [12834709e-11, 1.60810667915, 6681.2248533996]\n      ]\n    ],\n    [\n      [\n        [1.53033488271, 0, 0],\n        [0.1418495316, 3.47971283528, 3340.6124266998],\n        [0.00660776362, 3.81783443019, 6681.2248533996],\n        [46179117e-11, 4.15595316782, 10021.8372800994],\n        [8109733e-11, 5.55958416318, 2810.9214616052],\n        [7485318e-11, 1.77239078402, 5621.8429232104],\n        [5523191e-11, 1.3643630377, 2281.2304965106],\n        [382516e-10, 4.49407183687, 13362.4497067992],\n        [2306537e-11, 0.09081579001, 2544.3144198834],\n        [1999396e-11, 5.36059617709, 3337.0893083508],\n        [2484394e-11, 4.9254563992, 2942.4634232916],\n        [1960195e-11, 4.74249437639, 3344.1355450488],\n        [1167119e-11, 2.11260868341, 5092.1519581158],\n        [1102816e-11, 5.00908403998, 398.1490034082],\n        [899066e-11, 4.40791133207, 529.6909650946],\n        [992252e-11, 5.83861961952, 6151.533888305],\n        [807354e-11, 2.10217065501, 1059.3819301892],\n        [797915e-11, 3.44839203899, 796.2980068164],\n        [740975e-11, 1.49906336885, 2146.1654164752]\n      ],\n      [\n        [0.01107433345, 2.03250524857, 3340.6124266998],\n        [0.00103175887, 2.37071847807, 6681.2248533996],\n        [128772e-9, 0, 0],\n        [1081588e-10, 2.70888095665, 10021.8372800994]\n      ],\n      [\n        [44242249e-11, 0.47930604954, 3340.6124266998],\n        [8138042e-11, 0.86998389204, 6681.2248533996]\n      ]\n    ]\n  ],\n  Jupiter: [\n    [\n      [\n        [0.59954691494, 0, 0],\n        [0.09695898719, 5.06191793158, 529.6909650946],\n        [0.00573610142, 1.44406205629, 7.1135470008],\n        [0.00306389205, 5.41734730184, 1059.3819301892],\n        [97178296e-11, 4.14264726552, 632.7837393132],\n        [72903078e-11, 3.64042916389, 522.5774180938],\n        [64263975e-11, 3.41145165351, 103.0927742186],\n        [39806064e-11, 2.29376740788, 419.4846438752],\n        [38857767e-11, 1.27231755835, 316.3918696566],\n        [27964629e-11, 1.7845459182, 536.8045120954],\n        [1358973e-10, 5.7748104079, 1589.0728952838],\n        [8246349e-11, 3.5822792584, 206.1855484372],\n        [8768704e-11, 3.63000308199, 949.1756089698],\n        [7368042e-11, 5.0810119427, 735.8765135318],\n        [626315e-10, 0.02497628807, 213.299095438],\n        [6114062e-11, 4.51319998626, 1162.4747044078],\n        [4905396e-11, 1.32084470588, 110.2063212194],\n        [5305285e-11, 1.30671216791, 14.2270940016],\n        [5305441e-11, 4.18625634012, 1052.2683831884],\n        [4647248e-11, 4.69958103684, 3.9321532631],\n        [3045023e-11, 4.31676431084, 426.598190876],\n        [2609999e-11, 1.56667394063, 846.0828347512],\n        [2028191e-11, 1.06376530715, 3.1813937377],\n        [1764763e-11, 2.14148655117, 1066.49547719],\n        [1722972e-11, 3.88036268267, 1265.5674786264],\n        [1920945e-11, 0.97168196472, 639.897286314],\n        [1633223e-11, 3.58201833555, 515.463871093],\n        [1431999e-11, 4.29685556046, 625.6701923124],\n        [973272e-11, 4.09764549134, 95.9792272178]\n      ],\n      [\n        [529.69096508814, 0, 0],\n        [0.00489503243, 4.2208293947, 529.6909650946],\n        [0.00228917222, 6.02646855621, 7.1135470008],\n        [30099479e-11, 4.54540782858, 1059.3819301892],\n        [2072092e-10, 5.45943156902, 522.5774180938],\n        [12103653e-11, 0.16994816098, 536.8045120954],\n        [6067987e-11, 4.42422292017, 103.0927742186],\n        [5433968e-11, 3.98480737746, 419.4846438752],\n        [4237744e-11, 5.89008707199, 14.2270940016]\n      ],\n      [\n        [47233601e-11, 4.32148536482, 7.1135470008],\n        [30649436e-11, 2.929777887, 529.6909650946],\n        [14837605e-11, 3.14159265359, 0]\n      ]\n    ],\n    [\n      [\n        [0.02268615702, 3.55852606721, 529.6909650946],\n        [0.00109971634, 3.90809347197, 1059.3819301892],\n        [0.00110090358, 0, 0],\n        [8101428e-11, 3.60509572885, 522.5774180938],\n        [6043996e-11, 4.25883108339, 1589.0728952838],\n        [6437782e-11, 0.30627119215, 536.8045120954]\n      ],\n      [\n        [78203446e-11, 1.52377859742, 529.6909650946]\n      ]\n    ],\n    [\n      [\n        [5.20887429326, 0, 0],\n        [0.25209327119, 3.49108639871, 529.6909650946],\n        [0.00610599976, 3.84115365948, 1059.3819301892],\n        [0.00282029458, 2.57419881293, 632.7837393132],\n        [0.00187647346, 2.07590383214, 522.5774180938],\n        [86792905e-11, 0.71001145545, 419.4846438752],\n        [72062974e-11, 0.21465724607, 536.8045120954],\n        [65517248e-11, 5.9799588479, 316.3918696566],\n        [29134542e-11, 1.67759379655, 103.0927742186],\n        [30135335e-11, 2.16132003734, 949.1756089698],\n        [23453271e-11, 3.54023522184, 735.8765135318],\n        [22283743e-11, 4.19362594399, 1589.0728952838],\n        [23947298e-11, 0.2745803748, 7.1135470008],\n        [13032614e-11, 2.96042965363, 1162.4747044078],\n        [970336e-10, 1.90669633585, 206.1855484372],\n        [12749023e-11, 2.71550286592, 1052.2683831884],\n        [7057931e-11, 2.18184839926, 1265.5674786264],\n        [6137703e-11, 6.26418240033, 846.0828347512],\n        [2616976e-11, 2.00994012876, 1581.959348283]\n      ],\n      [\n        [0.0127180152, 2.64937512894, 529.6909650946],\n        [61661816e-11, 3.00076460387, 1059.3819301892],\n        [53443713e-11, 3.89717383175, 522.5774180938],\n        [31185171e-11, 4.88276958012, 536.8045120954],\n        [41390269e-11, 0, 0]\n      ]\n    ]\n  ],\n  Saturn: [\n    [\n      [\n        [0.87401354025, 0, 0],\n        [0.11107659762, 3.96205090159, 213.299095438],\n        [0.01414150957, 4.58581516874, 7.1135470008],\n        [0.00398379389, 0.52112032699, 206.1855484372],\n        [0.00350769243, 3.30329907896, 426.598190876],\n        [0.00206816305, 0.24658372002, 103.0927742186],\n        [792713e-9, 3.84007056878, 220.4126424388],\n        [23990355e-11, 4.66976924553, 110.2063212194],\n        [16573588e-11, 0.43719228296, 419.4846438752],\n        [14906995e-11, 5.76903183869, 316.3918696566],\n        [1582029e-10, 0.93809155235, 632.7837393132],\n        [14609559e-11, 1.56518472, 3.9321532631],\n        [13160301e-11, 4.44891291899, 14.2270940016],\n        [15053543e-11, 2.71669915667, 639.897286314],\n        [13005299e-11, 5.98119023644, 11.0457002639],\n        [10725067e-11, 3.12939523827, 202.2533951741],\n        [5863206e-11, 0.23656938524, 529.6909650946],\n        [5227757e-11, 4.20783365759, 3.1813937377],\n        [6126317e-11, 1.76328667907, 277.0349937414],\n        [5019687e-11, 3.17787728405, 433.7117378768],\n        [459255e-10, 0.61977744975, 199.0720014364],\n        [4005867e-11, 2.24479718502, 63.7358983034],\n        [2953796e-11, 0.98280366998, 95.9792272178],\n        [387367e-10, 3.22283226966, 138.5174968707],\n        [2461186e-11, 2.03163875071, 735.8765135318],\n        [3269484e-11, 0.77492638211, 949.1756089698],\n        [1758145e-11, 3.2658010994, 522.5774180938],\n        [1640172e-11, 5.5050445305, 846.0828347512],\n        [1391327e-11, 4.02333150505, 323.5054166574],\n        [1580648e-11, 4.37265307169, 309.2783226558],\n        [1123498e-11, 2.83726798446, 415.5524906121],\n        [1017275e-11, 3.71700135395, 227.5261894396],\n        [848642e-11, 3.1915017083, 209.3669421749]\n      ],\n      [\n        [213.2990952169, 0, 0],\n        [0.01297370862, 1.82834923978, 213.299095438],\n        [0.00564345393, 2.88499717272, 7.1135470008],\n        [93734369e-11, 1.06311793502, 426.598190876],\n        [0.00107674962, 2.27769131009, 206.1855484372],\n        [40244455e-11, 2.04108104671, 220.4126424388],\n        [19941774e-11, 1.2795439047, 103.0927742186],\n        [10511678e-11, 2.7488034213, 14.2270940016],\n        [6416106e-11, 0.38238295041, 639.897286314],\n        [4848994e-11, 2.43037610229, 419.4846438752],\n        [4056892e-11, 2.92133209468, 110.2063212194],\n        [3768635e-11, 3.6496533078, 3.9321532631]\n      ],\n      [\n        [0.0011644133, 1.17988132879, 7.1135470008],\n        [91841837e-11, 0.0732519584, 213.299095438],\n        [36661728e-11, 0, 0],\n        [15274496e-11, 4.06493179167, 206.1855484372]\n      ]\n    ],\n    [\n      [\n        [0.04330678039, 3.60284428399, 213.299095438],\n        [0.00240348302, 2.85238489373, 426.598190876],\n        [84745939e-11, 0, 0],\n        [30863357e-11, 3.48441504555, 220.4126424388],\n        [34116062e-11, 0.57297307557, 206.1855484372],\n        [1473407e-10, 2.11846596715, 639.897286314],\n        [9916667e-11, 5.79003188904, 419.4846438752],\n        [6993564e-11, 4.7360468972, 7.1135470008],\n        [4807588e-11, 5.43305312061, 316.3918696566]\n      ],\n      [\n        [0.00198927992, 4.93901017903, 213.299095438],\n        [36947916e-11, 3.14159265359, 0],\n        [17966989e-11, 0.5197943111, 426.598190876]\n      ]\n    ],\n    [\n      [\n        [9.55758135486, 0, 0],\n        [0.52921382865, 2.39226219573, 213.299095438],\n        [0.01873679867, 5.2354960466, 206.1855484372],\n        [0.01464663929, 1.64763042902, 426.598190876],\n        [0.00821891141, 5.93520042303, 316.3918696566],\n        [0.00547506923, 5.0153261898, 103.0927742186],\n        [0.0037168465, 2.27114821115, 220.4126424388],\n        [0.00361778765, 3.13904301847, 7.1135470008],\n        [0.00140617506, 5.70406606781, 632.7837393132],\n        [0.00108974848, 3.29313390175, 110.2063212194],\n        [69006962e-11, 5.94099540992, 419.4846438752],\n        [61053367e-11, 0.94037691801, 639.897286314],\n        [48913294e-11, 1.55733638681, 202.2533951741],\n        [34143772e-11, 0.19519102597, 277.0349937414],\n        [32401773e-11, 5.47084567016, 949.1756089698],\n        [20936596e-11, 0.46349251129, 735.8765135318],\n        [9796004e-11, 5.20477537945, 1265.5674786264],\n        [11993338e-11, 5.98050967385, 846.0828347512],\n        [208393e-9, 1.52102476129, 433.7117378768],\n        [15298404e-11, 3.0594381494, 529.6909650946],\n        [6465823e-11, 0.17732249942, 1052.2683831884],\n        [11380257e-11, 1.7310542704, 522.5774180938],\n        [3419618e-11, 4.94550542171, 1581.959348283]\n      ],\n      [\n        [0.0618298134, 0.2584351148, 213.299095438],\n        [0.00506577242, 0.71114625261, 206.1855484372],\n        [0.00341394029, 5.79635741658, 426.598190876],\n        [0.00188491195, 0.47215589652, 220.4126424388],\n        [0.00186261486, 3.14159265359, 0],\n        [0.00143891146, 1.40744822888, 7.1135470008]\n      ],\n      [\n        [0.00436902572, 4.78671677509, 213.299095438]\n      ]\n    ]\n  ],\n  Uranus: [\n    [\n      [\n        [5.48129294297, 0, 0],\n        [0.09260408234, 0.89106421507, 74.7815985673],\n        [0.01504247898, 3.6271926092, 1.4844727083],\n        [0.00365981674, 1.89962179044, 73.297125859],\n        [0.00272328168, 3.35823706307, 149.5631971346],\n        [70328461e-11, 5.39254450063, 63.7358983034],\n        [68892678e-11, 6.09292483287, 76.2660712756],\n        [61998615e-11, 2.26952066061, 2.9689454166],\n        [61950719e-11, 2.85098872691, 11.0457002639],\n        [2646877e-10, 3.14152083966, 71.8126531507],\n        [25710476e-11, 6.11379840493, 454.9093665273],\n        [2107885e-10, 4.36059339067, 148.0787244263],\n        [17818647e-11, 1.74436930289, 36.6485629295],\n        [14613507e-11, 4.73732166022, 3.9321532631],\n        [11162509e-11, 5.8268179635, 224.3447957019],\n        [1099791e-10, 0.48865004018, 138.5174968707],\n        [9527478e-11, 2.95516862826, 35.1640902212],\n        [7545601e-11, 5.236265824, 109.9456887885],\n        [4220241e-11, 3.23328220918, 70.8494453042],\n        [40519e-9, 2.277550173, 151.0476698429],\n        [3354596e-11, 1.0654900738, 4.4534181249],\n        [2926718e-11, 4.62903718891, 9.5612275556],\n        [349034e-10, 5.48306144511, 146.594251718],\n        [3144069e-11, 4.75199570434, 77.7505439839],\n        [2922333e-11, 5.35235361027, 85.8272988312],\n        [2272788e-11, 4.36600400036, 70.3281804424],\n        [2051219e-11, 1.51773566586, 0.1118745846],\n        [2148602e-11, 0.60745949945, 38.1330356378],\n        [1991643e-11, 4.92437588682, 277.0349937414],\n        [1376226e-11, 2.04283539351, 65.2203710117],\n        [1666902e-11, 3.62744066769, 380.12776796],\n        [1284107e-11, 3.11347961505, 202.2533951741],\n        [1150429e-11, 0.93343589092, 3.1813937377],\n        [1533221e-11, 2.58594681212, 52.6901980395],\n        [1281604e-11, 0.54271272721, 222.8603229936],\n        [1372139e-11, 4.19641530878, 111.4301614968],\n        [1221029e-11, 0.1990065003, 108.4612160802],\n        [946181e-11, 1.19253165736, 127.4717966068],\n        [1150989e-11, 4.17898916639, 33.6796175129]\n      ],\n      [\n        [74.7815986091, 0, 0],\n        [0.00154332863, 5.24158770553, 74.7815985673],\n        [24456474e-11, 1.71260334156, 1.4844727083],\n        [9258442e-11, 0.4282973235, 11.0457002639],\n        [8265977e-11, 1.50218091379, 63.7358983034],\n        [915016e-10, 1.41213765216, 149.5631971346]\n      ]\n    ],\n    [\n      [\n        [0.01346277648, 2.61877810547, 74.7815985673],\n        [623414e-9, 5.08111189648, 149.5631971346],\n        [61601196e-11, 3.14159265359, 0],\n        [9963722e-11, 1.61603805646, 76.2660712756],\n        [992616e-10, 0.57630380333, 73.297125859]\n      ],\n      [\n        [34101978e-11, 0.01321929936, 74.7815985673]\n      ]\n    ],\n    [\n      [\n        [19.21264847206, 0, 0],\n        [0.88784984413, 5.60377527014, 74.7815985673],\n        [0.03440836062, 0.32836099706, 73.297125859],\n        [0.0205565386, 1.7829515933, 149.5631971346],\n        [0.0064932241, 4.52247285911, 76.2660712756],\n        [0.00602247865, 3.86003823674, 63.7358983034],\n        [0.00496404167, 1.40139935333, 454.9093665273],\n        [0.00338525369, 1.58002770318, 138.5174968707],\n        [0.00243509114, 1.57086606044, 71.8126531507],\n        [0.00190522303, 1.99809394714, 1.4844727083],\n        [0.00161858838, 2.79137786799, 148.0787244263],\n        [0.00143706183, 1.38368544947, 11.0457002639],\n        [93192405e-11, 0.17437220467, 36.6485629295],\n        [71424548e-11, 4.24509236074, 224.3447957019],\n        [89806014e-11, 3.66105364565, 109.9456887885],\n        [39009723e-11, 1.66971401684, 70.8494453042],\n        [46677296e-11, 1.39976401694, 35.1640902212],\n        [39025624e-11, 3.36234773834, 277.0349937414],\n        [36755274e-11, 3.88649278513, 146.594251718],\n        [30348723e-11, 0.70100838798, 151.0476698429],\n        [29156413e-11, 3.180563367, 77.7505439839],\n        [22637073e-11, 0.72518687029, 529.6909650946],\n        [11959076e-11, 1.7504339214, 984.6003316219],\n        [25620756e-11, 5.25656086672, 380.12776796]\n      ],\n      [\n        [0.01479896629, 3.67205697578, 74.7815985673]\n      ]\n    ]\n  ],\n  Neptune: [\n    [\n      [\n        [5.31188633046, 0, 0],\n        [0.0179847553, 2.9010127389, 38.1330356378],\n        [0.01019727652, 0.48580922867, 1.4844727083],\n        [0.00124531845, 4.83008090676, 36.6485629295],\n        [42064466e-11, 5.41054993053, 2.9689454166],\n        [37714584e-11, 6.09221808686, 35.1640902212],\n        [33784738e-11, 1.24488874087, 76.2660712756],\n        [16482741e-11, 7727998e-11, 491.5579294568],\n        [9198584e-11, 4.93747051954, 39.6175083461],\n        [899425e-10, 0.27462171806, 175.1660598002]\n      ],\n      [\n        [38.13303563957, 0, 0],\n        [16604172e-11, 4.86323329249, 1.4844727083],\n        [15744045e-11, 2.27887427527, 38.1330356378]\n      ]\n    ],\n    [\n      [\n        [0.03088622933, 1.44104372644, 38.1330356378],\n        [27780087e-11, 5.91271884599, 76.2660712756],\n        [27623609e-11, 0, 0],\n        [15355489e-11, 2.52123799551, 36.6485629295],\n        [15448133e-11, 3.50877079215, 39.6175083461]\n      ]\n    ],\n    [\n      [\n        [30.07013205828, 0, 0],\n        [0.27062259632, 1.32999459377, 38.1330356378],\n        [0.01691764014, 3.25186135653, 36.6485629295],\n        [0.00807830553, 5.18592878704, 1.4844727083],\n        [0.0053776051, 4.52113935896, 35.1640902212],\n        [0.00495725141, 1.5710564165, 491.5579294568],\n        [0.00274571975, 1.84552258866, 175.1660598002],\n        [1201232e-10, 1.92059384991, 1021.2488945514],\n        [0.00121801746, 5.79754470298, 76.2660712756],\n        [0.00100896068, 0.3770272493, 73.297125859],\n        [0.00135134092, 3.37220609835, 39.6175083461],\n        [7571796e-11, 1.07149207335, 388.4651552382]\n      ]\n    ]\n  ]\n};\nfunction cr(n) {\n  var e, t, r, i, a, o, c;\n  const s = 2e3 + (n - 14) / Qn;\n  return s < -500 ? (e = (s - 1820) / 100, -20 + 32 * e * e) : s < 500 ? (e = s / 100, t = e * e, r = e * t, i = t * t, a = t * r, o = r * r, 10583.6 - 1014.41 * e + 33.78311 * t - 5.952053 * r - 0.1798452 * i + 0.022174192 * a + 0.0090316521 * o) : s < 1600 ? (e = (s - 1e3) / 100, t = e * e, r = e * t, i = t * t, a = t * r, o = r * r, 1574.2 - 556.01 * e + 71.23472 * t + 0.319781 * r - 0.8503463 * i - 5050998e-9 * a + 0.0083572073 * o) : s < 1700 ? (e = s - 1600, t = e * e, r = e * t, 120 - 0.9808 * e - 0.01532 * t + r / 7129) : s < 1800 ? (e = s - 1700, t = e * e, r = e * t, i = t * t, 8.83 + 0.1603 * e - 59285e-7 * t + 13336e-8 * r - i / 1174e3) : s < 1860 ? (e = s - 1800, t = e * e, r = e * t, i = t * t, a = t * r, o = r * r, c = r * i, 13.72 - 0.332447 * e + 68612e-7 * t + 41116e-7 * r - 37436e-8 * i + 121272e-10 * a - 1699e-10 * o + 875e-12 * c) : s < 1900 ? (e = s - 1860, t = e * e, r = e * t, i = t * t, a = t * r, 7.62 + 0.5737 * e - 0.251754 * t + 0.01680668 * r - 4473624e-10 * i + a / 233174) : s < 1920 ? (e = s - 1900, t = e * e, r = e * t, i = t * t, -2.79 + 1.494119 * e - 0.0598939 * t + 61966e-7 * r - 197e-6 * i) : s < 1941 ? (e = s - 1920, t = e * e, r = e * t, 21.2 + 0.84493 * e - 0.0761 * t + 20936e-7 * r) : s < 1961 ? (e = s - 1950, t = e * e, r = e * t, 29.07 + 0.407 * e - t / 233 + r / 2547) : s < 1986 ? (e = s - 1975, t = e * e, r = e * t, 45.45 + 1.067 * e - t / 260 - r / 718) : s < 2005 ? (e = s - 2e3, t = e * e, r = e * t, i = t * t, a = t * r, 63.86 + 0.3345 * e - 0.060374 * t + 17275e-7 * r + 651814e-9 * i + 2373599e-11 * a) : s < 2050 ? (e = s - 2e3, 62.92 + 0.32217 * e + 5589e-6 * e * e) : s < 2150 ? (e = (s - 1820) / 100, -20 + 32 * e * e - 0.5628 * (2150 - s)) : (e = (s - 1820) / 100, -20 + 32 * e * e);\n}\nlet ur = cr;\nfunction st(n) {\n  return n + ur(n) / 86400;\n}\nclass t0 {\n  /**\n   * @param {FlexibleDateTime} date\n   *      A JavaScript Date object, a numeric UTC value expressed in J2000 days, or another AstroTime object.\n   */\n  constructor(e) {\n    if (e instanceof t0) {\n      this.date = e.date, this.ut = e.ut, this.tt = e.tt;\n      return;\n    }\n    const t = 1e3 * 3600 * 24;\n    if (e instanceof Date && Number.isFinite(e.getTime())) {\n      this.date = e, this.ut = (e.getTime() - ot.getTime()) / t, this.tt = st(this.ut);\n      return;\n    }\n    if (Number.isFinite(e)) {\n      this.date = new Date(ot.getTime() + e * t), this.ut = e, this.tt = st(this.ut);\n      return;\n    }\n    throw \"Argument must be a Date object, an AstroTime object, or a numeric UTC Julian date.\";\n  }\n  /**\n   * @brief Creates an `AstroTime` value from a Terrestrial Time (TT) day value.\n   *\n   * This function can be used in rare cases where a time must be based\n   * on Terrestrial Time (TT) rather than Universal Time (UT).\n   * Most developers will want to invoke `new AstroTime(ut)` with a universal time\n   * instead of this function, because usually time is based on civil time adjusted\n   * by leap seconds to match the Earth's rotation, rather than the uniformly\n   * flowing TT used to calculate solar system dynamics. In rare cases\n   * where the caller already knows TT, this function is provided to create\n   * an `AstroTime` value that can be passed to Astronomy Engine functions.\n   *\n   * @param {number} tt\n   *      The number of days since the J2000 epoch as expressed in Terrestrial Time.\n   *\n   * @returns {AstroTime}\n   *      An `AstroTime` object for the specified terrestrial time.\n   */\n  static FromTerrestrialTime(e) {\n    let t = new t0(e);\n    for (; ; ) {\n      const r = e - t.tt;\n      if (Math.abs(r) < 1e-12)\n        return t;\n      t = t.AddDays(r);\n    }\n  }\n  /**\n   * Formats an `AstroTime` object as an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)\n   * date/time string in UTC, to millisecond resolution.\n   * Example: `2018-08-17T17:22:04.050Z`\n   * @returns {string}\n   */\n  toString() {\n    return this.date.toISOString();\n  }\n  /**\n   * Returns a new `AstroTime` object adjusted by the floating point number of days.\n   * Does NOT modify the original `AstroTime` object.\n   *\n   * @param {number} days\n   *      The floating point number of days by which to adjust the given date and time.\n   *      Positive values adjust the date toward the future, and\n   *      negative values adjust the date toward the past.\n   *\n   * @returns {AstroTime}\n   */\n  AddDays(e) {\n    return new t0(this.ut + e);\n  }\n}\nfunction r0(n) {\n  return n instanceof t0 ? n : new t0(n);\n}\nfunction lr(n) {\n  function e(f) {\n    return f % tr * x0;\n  }\n  const t = n.tt / 36525, r = e(128710479305e-5 + t * 1295965810481e-4), i = e(335779.526232 + t * 17395272628478e-4), a = e(107226070369e-5 + t * 1602961601209e-3), o = e(450160.398036 - t * 69628905431e-4);\n  let c = Math.sin(o), s = Math.cos(o), l = (-172064161 - 174666 * t) * c + 33386 * s, h = (92052331 + 9086 * t) * s + 15377 * c, m = 2 * (i - a + o);\n  return c = Math.sin(m), s = Math.cos(m), l += (-13170906 - 1675 * t) * c - 13696 * s, h += (5730336 - 3015 * t) * s - 4587 * c, m = 2 * (i + o), c = Math.sin(m), s = Math.cos(m), l += (-2276413 - 234 * t) * c + 2796 * s, h += (978459 - 485 * t) * s + 1374 * c, m = 2 * o, c = Math.sin(m), s = Math.cos(m), l += (2074554 + 207 * t) * c - 698 * s, h += (-897492 + 470 * t) * s - 291 * c, c = Math.sin(r), s = Math.cos(r), l += (1475877 - 3633 * t) * c + 11817 * s, h += (73871 - 184 * t) * s - 1924 * c, {\n    dpsi: -135e-6 + l * 1e-7,\n    deps: 388e-6 + h * 1e-7\n  };\n}\nfunction Nt(n) {\n  var e = n.tt / 36525, t = ((((-434e-10 * e - 576e-9) * e + 20034e-7) * e - 1831e-7) * e - 46.836769) * e + 84381.406;\n  return t / 3600;\n}\nvar K0;\nfunction Ot(n) {\n  if (!K0 || Math.abs(K0.tt - n.tt) > 1e-6) {\n    const e = lr(n), t = Nt(n), r = t + e.deps / 3600;\n    K0 = {\n      tt: n.tt,\n      dpsi: e.dpsi,\n      deps: e.deps,\n      ee: e.dpsi * Math.cos(t * g) / 15,\n      mobl: t,\n      tobl: r\n    };\n  }\n  return K0;\n}\nfunction dr(n, e) {\n  const t = n * g, r = Math.cos(t), i = Math.sin(t);\n  return [\n    e[0],\n    e[1] * r - e[2] * i,\n    e[1] * i + e[2] * r\n  ];\n}\nfunction hr(n, e) {\n  return dr(Nt(n), e);\n}\nfunction mr(n) {\n  const e = n.tt / 36525;\n  function t(R, _) {\n    const A = [];\n    let C;\n    for (C = 0; C <= _ - R; ++C)\n      A.push(0);\n    return { min: R, array: A };\n  }\n  function r(R, _, A, C) {\n    const P = [];\n    for (let Q = 0; Q <= _ - R; ++Q)\n      P.push(t(A, C));\n    return { min: R, array: P };\n  }\n  function i(R, _, A) {\n    const C = R.array[_ - R.min];\n    return C.array[A - C.min];\n  }\n  function a(R, _, A, C) {\n    const P = R.array[_ - R.min];\n    P.array[A - P.min] = C;\n  }\n  let o, c, s, l, h, m, f, v, T, E, x, y, I, N, b, U, z, F, q, Z, i0, a0, J, N0 = r(-6, 6, 1, 4), p0 = r(-6, 6, 1, 4);\n  function z0(R, _) {\n    return i(N0, R, _);\n  }\n  function k0(R, _) {\n    return i(p0, R, _);\n  }\n  function V0(R, _, A) {\n    return a(N0, R, _, A);\n  }\n  function B0(R, _, A) {\n    return a(p0, R, _, A);\n  }\n  function $e(R, _, A, C, P) {\n    P(R * A - _ * C, _ * A + R * C);\n  }\n  function M(R) {\n    return Math.sin(X * R);\n  }\n  f = e * e, T = 0, J = 0, x = 0, y = 3422.7;\n  var W0 = M(0.19833 + 0.05611 * e), le = M(0.27869 + 0.04508 * e), de = M(0.16827 - 0.36903 * e), he = M(0.34734 - 5.37261 * e), me = M(0.10498 - 5.37899 * e), j0 = M(0.42681 - 0.41855 * e), qt = M(0.14943 - 5.37511 * e);\n  for (F = 0.84 * W0 + 0.31 * le + 14.27 * de + 7.26 * he + 0.28 * me + 0.24 * j0, q = 2.94 * W0 + 0.31 * le + 14.27 * de + 9.34 * he + 1.12 * me + 0.83 * j0, Z = -6.4 * W0 - 1.89 * j0, i0 = 0.21 * W0 + 0.31 * le + 14.27 * de - 88.7 * he - 15.3 * me + 0.24 * j0 - 1.86 * qt, a0 = F - Z, v = -3332e-9 * M(0.59734 - 5.37261 * e) - 539e-9 * M(0.35498 - 5.37899 * e) - 64e-9 * M(0.39943 - 5.37511 * e), I = X * E0(0.60643382 + 1336.85522467 * e - 313e-8 * f) + F / e0, N = X * E0(0.37489701 + 1325.55240982 * e + 2565e-8 * f) + q / e0, b = X * E0(0.99312619 + 99.99735956 * e - 44e-8 * f) + Z / e0, U = X * E0(0.25909118 + 1342.2278298 * e - 892e-8 * f) + i0 / e0, z = X * E0(0.82736186 + 1236.85308708 * e - 397e-8 * f) + a0 / e0, h = 1; h <= 4; ++h) {\n    switch (h) {\n      case 1:\n        s = N, c = 4, l = 1.000002208;\n        break;\n      case 2:\n        s = b, c = 3, l = 0.997504612 - 2495388e-9 * e;\n        break;\n      case 3:\n        s = U, c = 4, l = 1.000002708 + 139.978 * v;\n        break;\n      case 4:\n        s = z, c = 6, l = 1;\n        break;\n      default:\n        throw `Internal error: I = ${h}`;\n    }\n    for (V0(0, h, 1), V0(1, h, Math.cos(s) * l), B0(0, h, 0), B0(1, h, Math.sin(s) * l), m = 2; m <= c; ++m)\n      $e(z0(m - 1, h), k0(m - 1, h), z0(1, h), k0(1, h), (R, _) => (V0(m, h, R), B0(m, h, _)));\n    for (m = 1; m <= c; ++m)\n      V0(-m, h, z0(m, h)), B0(-m, h, -k0(m, h));\n  }\n  function qe(R, _, A, C) {\n    for (var P = { x: 1, y: 0 }, Q = [0, R, _, A, C], j = 1; j <= 4; ++j)\n      Q[j] !== 0 && $e(P.x, P.y, z0(Q[j], j), k0(Q[j], j), (fe, T0) => (P.x = fe, P.y = T0));\n    return P;\n  }\n  function u(R, _, A, C, P, Q, j, fe) {\n    var T0 = qe(P, Q, j, fe);\n    T += R * T0.y, J += _ * T0.y, x += A * T0.x, y += C * T0.x;\n  }\n  u(13.902, 14.06, -1e-3, 0.2607, 0, 0, 0, 4), u(0.403, -4.01, 0.394, 23e-4, 0, 0, 0, 3), u(2369.912, 2373.36, 0.601, 28.2333, 0, 0, 0, 2), u(-125.154, -112.79, -0.725, -0.9781, 0, 0, 0, 1), u(1.979, 6.98, -0.445, 0.0433, 1, 0, 0, 4), u(191.953, 192.72, 0.029, 3.0861, 1, 0, 0, 2), u(-8.466, -13.51, 0.455, -0.1093, 1, 0, 0, 1), u(22639.5, 22609.07, 0.079, 186.5398, 1, 0, 0, 0), u(18.609, 3.59, -0.094, 0.0118, 1, 0, 0, -1), u(-4586.465, -4578.13, -0.077, 34.3117, 1, 0, 0, -2), u(3.215, 5.44, 0.192, -0.0386, 1, 0, 0, -3), u(-38.428, -38.64, 1e-3, 0.6008, 1, 0, 0, -4), u(-0.393, -1.43, -0.092, 86e-4, 1, 0, 0, -6), u(-0.289, -1.59, 0.123, -53e-4, 0, 1, 0, 4), u(-24.42, -25.1, 0.04, -0.3, 0, 1, 0, 2), u(18.023, 17.93, 7e-3, 0.1494, 0, 1, 0, 1), u(-668.146, -126.98, -1.302, -0.3997, 0, 1, 0, 0), u(0.56, 0.32, -1e-3, -37e-4, 0, 1, 0, -1), u(-165.145, -165.06, 0.054, 1.9178, 0, 1, 0, -2), u(-1.877, -6.46, -0.416, 0.0339, 0, 1, 0, -4), u(0.213, 1.02, -0.074, 54e-4, 2, 0, 0, 4), u(14.387, 14.78, -0.017, 0.2833, 2, 0, 0, 2), u(-0.586, -1.2, 0.054, -0.01, 2, 0, 0, 1), u(769.016, 767.96, 0.107, 10.1657, 2, 0, 0, 0), u(1.75, 2.01, -0.018, 0.0155, 2, 0, 0, -1), u(-211.656, -152.53, 5.679, -0.3039, 2, 0, 0, -2), u(1.225, 0.91, -0.03, -88e-4, 2, 0, 0, -3), u(-30.773, -34.07, -0.308, 0.3722, 2, 0, 0, -4), u(-0.57, -1.4, -0.074, 0.0109, 2, 0, 0, -6), u(-2.921, -11.75, 0.787, -0.0484, 1, 1, 0, 2), u(1.267, 1.52, -0.022, 0.0164, 1, 1, 0, 1), u(-109.673, -115.18, 0.461, -0.949, 1, 1, 0, 0), u(-205.962, -182.36, 2.056, 1.4437, 1, 1, 0, -2), u(0.233, 0.36, 0.012, -25e-4, 1, 1, 0, -3), u(-4.391, -9.66, -0.471, 0.0673, 1, 1, 0, -4), u(0.283, 1.53, -0.111, 6e-3, 1, -1, 0, 4), u(14.577, 31.7, -1.54, 0.2302, 1, -1, 0, 2), u(147.687, 138.76, 0.679, 1.1528, 1, -1, 0, 0), u(-1.089, 0.55, 0.021, 0, 1, -1, 0, -1), u(28.475, 23.59, -0.443, -0.2257, 1, -1, 0, -2), u(-0.276, -0.38, -6e-3, -36e-4, 1, -1, 0, -3), u(0.636, 2.27, 0.146, -0.0102, 1, -1, 0, -4), u(-0.189, -1.68, 0.131, -28e-4, 0, 2, 0, 2), u(-7.486, -0.66, -0.037, -86e-4, 0, 2, 0, 0), u(-8.096, -16.35, -0.74, 0.0918, 0, 2, 0, -2), u(-5.741, -0.04, 0, -9e-4, 0, 0, 2, 2), u(0.255, 0, 0, 0, 0, 0, 2, 1), u(-411.608, -0.2, 0, -0.0124, 0, 0, 2, 0), u(0.584, 0.84, 0, 71e-4, 0, 0, 2, -1), u(-55.173, -52.14, 0, -0.1052, 0, 0, 2, -2), u(0.254, 0.25, 0, -17e-4, 0, 0, 2, -3), u(0.025, -1.67, 0, 31e-4, 0, 0, 2, -4), u(1.06, 2.96, -0.166, 0.0243, 3, 0, 0, 2), u(36.124, 50.64, -1.3, 0.6215, 3, 0, 0, 0), u(-13.193, -16.4, 0.258, -0.1187, 3, 0, 0, -2), u(-1.187, -0.74, 0.042, 74e-4, 3, 0, 0, -4), u(-0.293, -0.31, -2e-3, 46e-4, 3, 0, 0, -6), u(-0.29, -1.45, 0.116, -51e-4, 2, 1, 0, 2), u(-7.649, -10.56, 0.259, -0.1038, 2, 1, 0, 0), u(-8.627, -7.59, 0.078, -0.0192, 2, 1, 0, -2), u(-2.74, -2.54, 0.022, 0.0324, 2, 1, 0, -4), u(1.181, 3.32, -0.212, 0.0213, 2, -1, 0, 2), u(9.703, 11.67, -0.151, 0.1268, 2, -1, 0, 0), u(-0.352, -0.37, 1e-3, -28e-4, 2, -1, 0, -1), u(-2.494, -1.17, -3e-3, -17e-4, 2, -1, 0, -2), u(0.36, 0.2, -0.012, -43e-4, 2, -1, 0, -4), u(-1.167, -1.25, 8e-3, -0.0106, 1, 2, 0, 0), u(-7.412, -6.12, 0.117, 0.0484, 1, 2, 0, -2), u(-0.311, -0.65, -0.032, 44e-4, 1, 2, 0, -4), u(0.757, 1.82, -0.105, 0.0112, 1, -2, 0, 2), u(2.58, 2.32, 0.027, 0.0196, 1, -2, 0, 0), u(2.533, 2.4, -0.014, -0.0212, 1, -2, 0, -2), u(-0.344, -0.57, -0.025, 36e-4, 0, 3, 0, -2), u(-0.992, -0.02, 0, 0, 1, 0, 2, 2), u(-45.099, -0.02, 0, -1e-3, 1, 0, 2, 0), u(-0.179, -9.52, 0, -0.0833, 1, 0, 2, -2), u(-0.301, -0.33, 0, 14e-4, 1, 0, 2, -4), u(-6.382, -3.37, 0, -0.0481, 1, 0, -2, 2), u(39.528, 85.13, 0, -0.7136, 1, 0, -2, 0), u(9.366, 0.71, 0, -0.0112, 1, 0, -2, -2), u(0.202, 0.02, 0, 0, 1, 0, -2, -4), u(0.415, 0.1, 0, 13e-4, 0, 1, 2, 0), u(-2.152, -2.26, 0, -66e-4, 0, 1, 2, -2), u(-1.44, -1.3, 0, 14e-4, 0, 1, -2, 2), u(0.384, -0.04, 0, 0, 0, 1, -2, -2), u(1.938, 3.6, -0.145, 0.0401, 4, 0, 0, 0), u(-0.952, -1.58, 0.052, -0.013, 4, 0, 0, -2), u(-0.551, -0.94, 0.032, -97e-4, 3, 1, 0, 0), u(-0.482, -0.57, 5e-3, -45e-4, 3, 1, 0, -2), u(0.681, 0.96, -0.026, 0.0115, 3, -1, 0, 0), u(-0.297, -0.27, 2e-3, -9e-4, 2, 2, 0, -2), u(0.254, 0.21, -3e-3, 0, 2, -2, 0, -2), u(-0.25, -0.22, 4e-3, 14e-4, 1, 3, 0, -2), u(-3.996, 0, 0, 4e-4, 2, 0, 2, 0), u(0.557, -0.75, 0, -9e-3, 2, 0, 2, -2), u(-0.459, -0.38, 0, -53e-4, 2, 0, -2, 2), u(-1.298, 0.74, 0, 4e-4, 2, 0, -2, 0), u(0.538, 1.14, 0, -0.0141, 2, 0, -2, -2), u(0.263, 0.02, 0, 0, 1, 1, 2, 0), u(0.426, 0.07, 0, -6e-4, 1, 1, -2, -2), u(-0.304, 0.03, 0, 3e-4, 1, -1, 2, 0), u(-0.372, -0.19, 0, -27e-4, 1, -1, -2, 2), u(0.418, 0, 0, 0, 0, 0, 4, 0), u(-0.33, -0.04, 0, 0, 3, 0, 2, 0);\n  function B(R, _, A, C, P) {\n    return R * qe(_, A, C, P).y;\n  }\n  E = 0, E += B(-526.069, 0, 0, 1, -2), E += B(-3.352, 0, 0, 1, -4), E += B(44.297, 1, 0, 1, -2), E += B(-6, 1, 0, 1, -4), E += B(20.599, -1, 0, 1, 0), E += B(-30.598, -1, 0, 1, -2), E += B(-24.649, -2, 0, 1, 0), E += B(-2, -2, 0, 1, -2), E += B(-22.571, 0, 1, 1, -2), E += B(10.985, 0, -1, 1, -2), T += 0.82 * M(0.7736 - 62.5512 * e) + 0.31 * M(0.0466 - 125.1025 * e) + 0.35 * M(0.5785 - 25.1042 * e) + 0.66 * M(0.4591 + 1335.8075 * e) + 0.64 * M(0.313 - 91.568 * e) + 1.14 * M(0.148 + 1331.2898 * e) + 0.21 * M(0.5918 + 1056.5859 * e) + 0.44 * M(0.5784 + 1322.8595 * e) + 0.24 * M(0.2275 - 5.7374 * e) + 0.28 * M(0.2965 + 2.6929 * e) + 0.33 * M(0.3132 + 6.3368 * e), o = U + J / e0;\n  let Zt = (1.000002708 + 139.978 * v) * (18518.511 + 1.189 + x) * Math.sin(o) - 6.24 * Math.sin(3 * o) + E;\n  return {\n    geo_eclip_lon: X * E0((I + T / e0) / X),\n    geo_eclip_lat: Math.PI / (180 * 3600) * Zt,\n    distance_au: e0 * rr / (0.999953253 * y)\n  };\n}\nfunction Lt(n, e) {\n  return [\n    n.rot[0][0] * e[0] + n.rot[1][0] * e[1] + n.rot[2][0] * e[2],\n    n.rot[0][1] * e[0] + n.rot[1][1] * e[1] + n.rot[2][1] * e[2],\n    n.rot[0][2] * e[0] + n.rot[1][2] * e[1] + n.rot[2][2] * e[2]\n  ];\n}\nfunction Ht(n, e, t) {\n  const r = bt(e, t);\n  return Lt(r, n);\n}\nfunction bt(n, e) {\n  const t = n.tt / 36525;\n  let r = 84381.406, i = ((((-951e-10 * t + 132851e-9) * t - 114045e-8) * t - 1.0790069) * t + 5038.481507) * t, a = ((((3337e-10 * t - 467e-9) * t - 772503e-8) * t + 0.0512623) * t - 0.025754) * t + r, o = ((((-56e-9 * t + 170663e-9) * t - 121197e-8) * t - 2.3814292) * t + 10.556403) * t;\n  r *= x0, i *= x0, a *= x0, o *= x0;\n  const c = Math.sin(r), s = Math.cos(r), l = Math.sin(-i), h = Math.cos(-i), m = Math.sin(-a), f = Math.cos(-a), v = Math.sin(o), T = Math.cos(o), E = T * h - l * v * f, x = T * l * s + v * f * h * s - c * v * m, y = T * l * c + v * f * h * c + s * v * m, I = -v * h - l * T * f, N = -v * l * s + T * f * h * s - c * T * m, b = -v * l * c + T * f * h * c + s * T * m, U = l * m, z = -m * h * s - c * f, F = -m * h * c + f * s;\n  if (e === V.Into2000)\n    return new I0([\n      [E, x, y],\n      [I, N, b],\n      [U, z, F]\n    ]);\n  if (e === V.From2000)\n    return new I0([\n      [E, I, U],\n      [x, N, z],\n      [y, b, F]\n    ]);\n  throw \"Invalid precess direction\";\n}\nfunction fr(n) {\n  const e = 0.779057273264 + 0.00273781191135448 * n.ut, t = n.ut % 1;\n  let r = 360 * ((e + t) % 1);\n  return r < 0 && (r += 360), r;\n}\nlet $0;\nfunction gr(n) {\n  if (!$0 || $0.tt !== n.tt) {\n    const e = n.tt / 36525;\n    let t = 15 * Ot(n).ee;\n    const r = fr(n);\n    let a = ((t + 0.014506 + ((((-368e-10 * e - 29956e-9) * e - 44e-8) * e + 1.3915817) * e + 4612.156534) * e) / 3600 + r) % 360 / 15;\n    a < 0 && (a += 24), $0 = {\n      tt: n.tt,\n      st: a\n    };\n  }\n  return $0.st;\n}\nfunction pr(n) {\n  const e = r0(n);\n  return gr(e);\n}\nfunction Tr(n, e, t) {\n  const r = Ut(e, t);\n  return Lt(r, n);\n}\nfunction Ut(n, e) {\n  const t = Ot(n), r = t.mobl * g, i = t.tobl * g, a = t.dpsi * x0, o = Math.cos(r), c = Math.sin(r), s = Math.cos(i), l = Math.sin(i), h = Math.cos(a), m = Math.sin(a), f = h, v = -m * o, T = -m * c, E = m * s, x = h * o * s + c * l, y = h * c * s - o * l, I = m * l, N = h * o * l - c * s, b = h * c * l + o * s;\n  if (e === V.From2000)\n    return new I0([\n      [f, E, I],\n      [v, x, N],\n      [T, y, b]\n    ]);\n  if (e === V.Into2000)\n    return new I0([\n      [f, v, T],\n      [E, x, y],\n      [I, N, b]\n    ]);\n  throw \"Invalid precess direction\";\n}\nclass G {\n  constructor(e, t, r, i) {\n    this.x = e, this.y = t, this.z = r, this.t = i;\n  }\n  /**\n   * Returns the length of the vector in astronomical units (AU).\n   * @returns {number}\n   */\n  Length() {\n    return Math.hypot(this.x, this.y, this.z);\n  }\n}\nclass Sr {\n  constructor(e, t, r, i, a, o, c) {\n    this.x = e, this.y = t, this.z = r, this.vx = i, this.vy = a, this.vz = o, this.t = c;\n  }\n}\nclass Gt {\n  constructor(e, t, r) {\n    this.lat = l0(e), this.lon = l0(t), this.dist = l0(r);\n  }\n}\nclass vr {\n  constructor(e, t, r, i) {\n    this.ra = l0(e), this.dec = l0(t), this.dist = l0(r), this.vec = i;\n  }\n}\nclass I0 {\n  constructor(e) {\n    this.rot = e;\n  }\n}\nfunction ye(n) {\n  const e = r0(n), t = mr(e), r = t.distance_au * Math.cos(t.geo_eclip_lat), i = [\n    r * Math.cos(t.geo_eclip_lon),\n    r * Math.sin(t.geo_eclip_lon),\n    t.distance_au * Math.sin(t.geo_eclip_lat)\n  ], a = hr(e, i), o = Ht(a, e, V.Into2000);\n  return new G(o[0], o[1], o[2], e);\n}\nfunction y0(n, e, t) {\n  let r = 1, i = 0;\n  for (let a of n) {\n    let o = 0;\n    for (let [s, l, h] of a)\n      o += s * Math.cos(l + e * h);\n    let c = r * o;\n    t && (c %= X), i += c, r *= e;\n  }\n  return i;\n}\nfunction Se(n, e) {\n  let t = 1, r = 0, i = 0, a = 0;\n  for (let o of n) {\n    let c = 0, s = 0;\n    for (let [l, h, m] of o) {\n      let f = h + e * m;\n      c += l * m * Math.sin(f), a > 0 && (s += l * Math.cos(f));\n    }\n    i += a * r * s - t * c, r = t, t *= e, ++a;\n  }\n  return i;\n}\nconst b0 = 365250, Ce = 0, De = 1, Ie = 2;\nfunction Pe(n) {\n  return new O(n[0] + 44036e-11 * n[1] - 190919e-12 * n[2], -479966e-12 * n[0] + 0.917482137087 * n[1] - 0.397776982902 * n[2], 0.397776982902 * n[1] + 0.917482137087 * n[2]);\n}\nfunction Ft(n, e, t) {\n  const r = t * Math.cos(e), i = Math.cos(n), a = Math.sin(n);\n  return [\n    r * i,\n    r * a,\n    t * Math.sin(e)\n  ];\n}\nfunction Q0(n, e) {\n  const t = e.tt / b0, r = y0(n[Ce], t, !0), i = y0(n[De], t, !1), a = y0(n[Ie], t, !1), o = Ft(r, i, a);\n  return Pe(o).ToAstroVector(e);\n}\nfunction Er(n, e) {\n  const t = e / b0, r = y0(n[Ce], t, !0), i = y0(n[De], t, !1), a = y0(n[Ie], t, !1), o = Se(n[Ce], t), c = Se(n[De], t), s = Se(n[Ie], t), l = Math.cos(r), h = Math.sin(r), m = Math.cos(i), f = Math.sin(i), v = +(s * m * l) - a * f * l * c - a * m * h * o, T = +(s * m * h) - a * f * h * c + a * m * l * o, E = +(s * f) + a * m * c, x = Ft(r, i, a), y = [\n    v / b0,\n    T / b0,\n    E / b0\n  ], I = Pe(x), N = Pe(y);\n  return new d0(e, I, N);\n}\nfunction q0(n, e, t, r) {\n  const i = r / (r + We), a = Q0(M0[t], e);\n  n.x += i * a.x, n.y += i * a.y, n.z += i * a.z;\n}\nfunction Rr(n) {\n  const e = new G(0, 0, 0, n);\n  return q0(e, n, S.Jupiter, xe), q0(e, n, S.Saturn, Me), q0(e, n, S.Uranus, Ae), q0(e, n, S.Neptune, we), e;\n}\nconst Ne = 51, _r = 29200, A0 = 146, Y = 201, o0 = [\n  [-73e4, [-26.118207232108, -14.376168177825, 3.384402515299], [0.0016339372163656, -0.0027861699588508, -0.0013585880229445]],\n  [-700800, [41.974905202127, -0.448502952929, -12.770351505989], [73458569351457e-17, 0.0022785014891658, 48619778602049e-17]],\n  [-671600, [14.706930780744, 44.269110540027, 9.353698474772], [-0.00210001479998, 22295915939915e-17, 70143443551414e-17]],\n  [-642400, [-29.441003929957, -6.43016153057, 6.858481011305], [84495803960544e-17, -0.0030783914758711, -0.0012106305981192]],\n  [-613200, [39.444396946234, -6.557989760571, -13.913760296463], [0.0011480029005873, 0.0022400006880665, 35168075922288e-17]],\n  [-584e3, [20.2303809507, 43.266966657189, 7.382966091923], [-0.0019754081700585, 53457141292226e-17, 75929169129793e-17]],\n  [-554800, [-30.65832536462, 2.093818874552, 9.880531138071], [61010603013347e-18, -0.0031326500935382, -99346125151067e-17]],\n  [-525600, [35.737703251673, -12.587706024764, -14.677847247563], [0.0015802939375649, 0.0021347678412429, 19074436384343e-17]],\n  [-496400, [25.466295188546, 41.367478338417, 5.216476873382], [-0.0018054401046468, 8328308359951e-16, 80260156912107e-17]],\n  [-467200, [-29.847174904071, 10.636426313081, 12.297904180106], [-63257063052907e-17, -0.0029969577578221, -74476074151596e-17]],\n  [-438e3, [30.774692107687, -18.236637015304, -14.945535879896], [0.0020113162005465, 0.0019353827024189, -20937793168297e-19]],\n  [-408800, [30.243153324028, 38.656267888503, 2.938501750218], [-0.0016052508674468, 0.0011183495337525, 83333973416824e-17]],\n  [-379600, [-27.288984772533, 18.643162147874, 14.023633623329], [-0.0011856388898191, -0.0027170609282181, -49015526126399e-17]],\n  [-350400, [24.519605196774, -23.245756064727, -14.626862367368], [0.0024322321483154, 0.0016062008146048, -23369181613312e-17]],\n  [-321200, [34.505274805875, 35.125338586954, 0.557361475637], [-0.0013824391637782, 0.0013833397561817, 84823598806262e-17]],\n  [-292e3, [-23.275363915119, 25.818514298769, 15.055381588598], [-0.0016062295460975, -0.0023395961498533, -24377362639479e-17]],\n  [-262800, [17.050384798092, -27.180376290126, -13.608963321694], [0.0028175521080578, 0.0011358749093955, -49548725258825e-17]],\n  [-233600, [38.093671910285, 30.880588383337, -1.843688067413], [-0.0011317697153459, 0.0016128814698472, 84177586176055e-17]],\n  [-204400, [-18.197852930878, 31.932869934309, 15.438294826279], [-0.0019117272501813, -0.0019146495909842, -19657304369835e-18]],\n  [-175200, [8.528924039997, -29.618422200048, -11.805400994258], [0.0031034370787005, 5139363329243e-16, -77293066202546e-17]],\n  [-146e3, [40.94685725864, 25.904973592021, -4.256336240499], [-83652705194051e-17, 0.0018129497136404, 8156422827306e-16]],\n  [-116800, [-12.326958895325, 36.881883446292, 15.217158258711], [-0.0021166103705038, -0.001481442003599, 17401209844705e-17]],\n  [-87600, [-0.633258375909, -30.018759794709, -9.17193287495], [0.0032016994581737, -25279858672148e-17, -0.0010411088271861]],\n  [-58400, [42.936048423883, 20.344685584452, -6.588027007912], [-50525450073192e-17, 0.0019910074335507, 77440196540269e-17]],\n  [-29200, [-5.975910552974, 40.61180995846, 14.470131723673], [-0.0022184202156107, -0.0010562361130164, 33652250216211e-17]],\n  [0, [-9.875369580774, -27.978926224737, -5.753711824704], [0.0030287533248818, -0.0011276087003636, -0.0012651326732361]],\n  [29200, [43.958831986165, 14.214147973292, -8.808306227163], [-14717608981871e-17, 0.0021404187242141, 71486567806614e-17]],\n  [58400, [0.67813676352, 43.094461639362, 13.243238780721], [-0.0022358226110718, -63233636090933e-17, 47664798895648e-17]],\n  [87600, [-18.282602096834, -23.30503958666, -1.766620508028], [0.0025567245263557, -0.0019902940754171, -0.0013943491701082]],\n  [116800, [43.873338744526, 7.700705617215, -10.814273666425], [23174803055677e-17, 0.0022402163127924, 62988756452032e-17]],\n  [146e3, [7.392949027906, 44.382678951534, 11.629500214854], [-0.002193281545383, -21751799585364e-17, 59556516201114e-17]],\n  [175200, [-24.981690229261, -16.204012851426, 2.466457544298], [0.001819398914958, -0.0026765419531201, -0.0013848283502247]],\n  [204400, [42.530187039511, 0.845935508021, -12.554907527683], [65059779150669e-17, 0.0022725657282262, 51133743202822e-17]],\n  [233600, [13.999526486822, 44.462363044894, 9.669418486465], [-0.0021079296569252, 17533423831993e-17, 69128485798076e-17]],\n  [262800, [-29.184024803031, -7.371243995762, 6.493275957928], [93581363109681e-17, -0.0030610357109184, -0.0012364201089345]],\n  [292e3, [39.831980671753, -6.078405766765, -13.909815358656], [0.0011117769689167, 0.0022362097830152, 36230548231153e-17]],\n  [321200, [20.294955108476, 43.417190420251, 7.450091985932], [-0.0019742157451535, 53102050468554e-17, 75938408813008e-17]],\n  [350400, [-30.66999230216, 2.318743558955, 9.973480913858], [45605107450676e-18, -0.0031308219926928, -99066533301924e-17]],\n  [379600, [35.626122155983, -12.897647509224, -14.777586508444], [0.0016015684949743, 0.0021171931182284, 18002516202204e-17]],\n  [408800, [26.133186148561, 41.232139187599, 5.00640132622], [-0.0017857704419579, 86046232702817e-17, 80614690298954e-17]],\n  [438e3, [-29.57674022923, 11.863535943587, 12.631323039872], [-72292830060955e-17, -0.0029587820140709, -708242964503e-15]],\n  [467200, [29.910805787391, -19.159019294, -15.013363865194], [0.0020871080437997, 0.0018848372554514, -38528655083926e-18]],\n  [496400, [31.375957451819, 38.050372720763, 2.433138343754], [-0.0015546055556611, 0.0011699815465629, 83565439266001e-17]],\n  [525600, [-26.360071336928, 20.662505904952, 14.414696258958], [-0.0013142373118349, -0.0026236647854842, -42542017598193e-17]],\n  [554800, [22.599441488648, -24.508879898306, -14.484045731468], [0.0025454108304806, 0.0014917058755191, -30243665086079e-17]],\n  [584e3, [35.877864013014, 33.894226366071, -0.224524636277], [-0.0012941245730845, 0.0014560427668319, 84762160640137e-17]],\n  [613200, [-21.538149762417, 28.204068269761, 15.321973799534], [-0.001731211740901, -0.0021939631314577, -1631691327518e-16]],\n  [642400, [13.971521374415, -28.339941764789, -13.083792871886], [0.0029334630526035, 91860931752944e-17, -59939422488627e-17]],\n  [671600, [39.526942044143, 28.93989736011, -2.872799527539], [-0.0010068481658095, 0.001702113288809, 83578230511981e-17]],\n  [700800, [-15.576200701394, 34.399412961275, 15.466033737854], [-0.0020098814612884, -0.0017191109825989, 70414782780416e-18]],\n  [73e4, [4.24325283709, -30.118201690825, -10.707441231349], [0.0031725847067411, 1609846120227e-16, -90672150593868e-17]]\n];\nclass O {\n  constructor(e, t, r) {\n    this.x = e, this.y = t, this.z = r;\n  }\n  clone() {\n    return new O(this.x, this.y, this.z);\n  }\n  ToAstroVector(e) {\n    return new G(this.x, this.y, this.z, e);\n  }\n  static zero() {\n    return new O(0, 0, 0);\n  }\n  quadrature() {\n    return this.x * this.x + this.y * this.y + this.z * this.z;\n  }\n  add(e) {\n    return new O(this.x + e.x, this.y + e.y, this.z + e.z);\n  }\n  sub(e) {\n    return new O(this.x - e.x, this.y - e.y, this.z - e.z);\n  }\n  incr(e) {\n    this.x += e.x, this.y += e.y, this.z += e.z;\n  }\n  decr(e) {\n    this.x -= e.x, this.y -= e.y, this.z -= e.z;\n  }\n  mul(e) {\n    return new O(e * this.x, e * this.y, e * this.z);\n  }\n  div(e) {\n    return new O(this.x / e, this.y / e, this.z / e);\n  }\n  mean(e) {\n    return new O((this.x + e.x) / 2, (this.y + e.y) / 2, (this.z + e.z) / 2);\n  }\n  neg() {\n    return new O(-this.x, -this.y, -this.z);\n  }\n}\nclass d0 {\n  constructor(e, t, r) {\n    this.tt = e, this.r = t, this.v = r;\n  }\n  clone() {\n    return new d0(this.tt, this.r, this.v);\n  }\n  sub(e) {\n    return new d0(this.tt, this.r.sub(e.r), this.v.sub(e.v));\n  }\n}\nfunction xr(n) {\n  let [e, [t, r, i], [a, o, c]] = n;\n  return new d0(e, new O(t, r, i), new O(a, o, c));\n}\nfunction Z0(n, e, t, r) {\n  const i = r / (r + We), a = Er(M0[t], e);\n  return n.r.incr(a.r.mul(i)), n.v.incr(a.v.mul(i)), a;\n}\nfunction H0(n, e, t) {\n  const r = t.sub(n), i = r.quadrature();\n  return r.mul(e / (i * Math.sqrt(i)));\n}\nclass je {\n  constructor(e) {\n    let t = new d0(e, new O(0, 0, 0), new O(0, 0, 0));\n    this.Jupiter = Z0(t, e, S.Jupiter, xe), this.Saturn = Z0(t, e, S.Saturn, Me), this.Uranus = Z0(t, e, S.Uranus, Ae), this.Neptune = Z0(t, e, S.Neptune, we), this.Jupiter.r.decr(t.r), this.Jupiter.v.decr(t.v), this.Saturn.r.decr(t.r), this.Saturn.v.decr(t.v), this.Uranus.r.decr(t.r), this.Uranus.v.decr(t.v), this.Neptune.r.decr(t.r), this.Neptune.v.decr(t.v), this.Sun = new d0(e, t.r.mul(-1), t.v.mul(-1));\n  }\n  Acceleration(e) {\n    let t = H0(e, We, this.Sun.r);\n    return t.incr(H0(e, xe, this.Jupiter.r)), t.incr(H0(e, Me, this.Saturn.r)), t.incr(H0(e, Ae, this.Uranus.r)), t.incr(H0(e, we, this.Neptune.r)), t;\n  }\n}\nclass ce {\n  constructor(e, t, r, i) {\n    this.tt = e, this.r = t, this.v = r, this.a = i;\n  }\n  clone() {\n    return new ce(this.tt, this.r.clone(), this.v.clone(), this.a.clone());\n  }\n}\nclass zt {\n  constructor(e, t) {\n    this.bary = e, this.grav = t;\n  }\n}\nfunction te(n, e, t, r) {\n  return new O(e.x + n * (t.x + n * r.x / 2), e.y + n * (t.y + n * r.y / 2), e.z + n * (t.z + n * r.z / 2));\n}\nfunction ct(n, e, t) {\n  return new O(e.x + n * t.x, e.y + n * t.y, e.z + n * t.z);\n}\nfunction Oe(n, e) {\n  const t = n - e.tt, r = new je(n), i = te(t, e.r, e.v, e.a), a = r.Acceleration(i).mean(e.a), o = te(t, e.r, e.v, a), c = e.v.add(a.mul(t)), s = r.Acceleration(o), l = new ce(n, o, c, s);\n  return new zt(r, l);\n}\nconst Mr = [];\nfunction kt(n, e) {\n  const t = Math.floor(n);\n  return t < 0 ? 0 : t >= e ? e - 1 : t;\n}\nfunction Le(n) {\n  const e = xr(n), t = new je(e.tt), r = e.r.add(t.Sun.r), i = e.v.add(t.Sun.v), a = t.Acceleration(r), o = new ce(e.tt, r, i, a);\n  return new zt(t, o);\n}\nfunction Ar(n, e) {\n  const t = o0[0][0];\n  if (e < t || e > o0[Ne - 1][0])\n    return null;\n  const r = kt((e - t) / _r, Ne - 1);\n  if (!n[r]) {\n    const a = n[r] = [];\n    a[0] = Le(o0[r]).grav, a[Y - 1] = Le(o0[r + 1]).grav;\n    let o, c = a[0].tt;\n    for (o = 1; o < Y - 1; ++o)\n      a[o] = Oe(c += A0, a[o - 1]).grav;\n    c = a[Y - 1].tt;\n    var i = [];\n    for (i[Y - 1] = a[Y - 1], o = Y - 2; o > 0; --o)\n      i[o] = Oe(c -= A0, i[o + 1]).grav;\n    for (o = Y - 2; o > 0; --o) {\n      const s = o / (Y - 1);\n      a[o].r = a[o].r.mul(1 - s).add(i[o].r.mul(s)), a[o].v = a[o].v.mul(1 - s).add(i[o].v.mul(s)), a[o].a = a[o].a.mul(1 - s).add(i[o].a.mul(s));\n    }\n  }\n  return n[r];\n}\nfunction ut(n, e, t) {\n  let r = Le(n);\n  const i = Math.ceil((e - r.grav.tt) / t);\n  for (let a = 0; a < i; ++a)\n    r = Oe(a + 1 === i ? e : r.grav.tt + t, r.grav);\n  return r;\n}\nfunction wr(n, e) {\n  let t, r, i;\n  const a = Ar(Mr, n.tt);\n  if (a) {\n    const o = kt((n.tt - a[0].tt) / A0, Y - 1), c = a[o], s = a[o + 1], l = c.a.mean(s.a), h = te(n.tt - c.tt, c.r, c.v, l), m = ct(n.tt - c.tt, c.v, l), f = te(n.tt - s.tt, s.r, s.v, l), v = ct(n.tt - s.tt, s.v, l), T = (n.tt - c.tt) / A0;\n    t = h.mul(1 - T).add(f.mul(T)), r = m.mul(1 - T).add(v.mul(T));\n  } else {\n    let o;\n    n.tt < o0[0][0] ? o = ut(o0[0], n.tt, -A0) : o = ut(o0[Ne - 1], n.tt, +A0), t = o.grav.r, r = o.grav.v, i = o.bary;\n  }\n  return i || (i = new je(n.tt)), t = t.sub(i.Sun.r), r = r.sub(i.Sun.v), new Sr(t.x, t.y, t.z, r.x, r.y, r.z, n);\n}\nfunction G0(n, e) {\n  var t = r0(e);\n  if (n in M0)\n    return Q0(M0[n], t);\n  if (n === S.Pluto) {\n    const o = wr(t);\n    return new G(o.x, o.y, o.z, t);\n  }\n  if (n === S.Sun)\n    return new G(0, 0, 0, t);\n  if (n === S.Moon) {\n    var r = Q0(M0.Earth, t), i = ye(t);\n    return new G(r.x + i.x, r.y + i.y, r.z + i.z, t);\n  }\n  if (n === S.EMB) {\n    const o = Q0(M0.Earth, t), c = ye(t), s = 1 + ir;\n    return new G(o.x + c.x / s, o.y + c.y / s, o.z + c.z / s, t);\n  }\n  if (n === S.SSB)\n    return Rr(t);\n  const a = Pt(n);\n  if (a) {\n    const o = new Gt(a.dec, 15 * a.ra, a.dist);\n    return Or(o, t);\n  }\n  throw `HelioVector: Unknown body \"${n}\"`;\n}\nfunction yr(n, e) {\n  let t = e, r = 0;\n  for (let i = 0; i < 10; ++i) {\n    const a = n(t), o = a.Length() / Jn;\n    if (o > 1)\n      throw \"Object is too distant for light-travel solver.\";\n    const c = e.AddDays(-o);\n    if (r = Math.abs(c.tt - t.tt), r < 1e-9)\n      return a;\n    t = c;\n  }\n  throw `Light-travel time solver did not converge: dt = ${r}`;\n}\nclass Cr {\n  constructor(e, t, r, i) {\n    this.observerBody = e, this.targetBody = t, this.aberration = r, this.observerPos = i;\n  }\n  Position(e) {\n    this.aberration && (this.observerPos = G0(this.observerBody, e));\n    const t = G0(this.targetBody, e);\n    return new G(t.x - this.observerPos.x, t.y - this.observerPos.y, t.z - this.observerPos.z, e);\n  }\n}\nfunction Dr(n, e, t, r) {\n  const i = r0(n);\n  if (Pt(t)) {\n    const c = G0(t, i), s = G0(e, i);\n    return new G(c.x - s.x, c.y - s.y, c.z - s.z, i);\n  }\n  let a;\n  a = G0(e, i);\n  const o = new Cr(e, t, r, a);\n  return yr((c) => o.Position(c), i);\n}\nfunction Ir(n, e, t) {\n  const r = r0(e);\n  switch (n) {\n    case S.Earth:\n      return new G(0, 0, 0, r);\n    case S.Moon:\n      return ye(r);\n    default:\n      const i = Dr(r, S.Earth, n, t);\n      return i.t = r, i;\n  }\n}\nvar lt;\n(function(n) {\n  n[n.Pericenter = 0] = \"Pericenter\", n[n.Apocenter = 1] = \"Apocenter\";\n})(lt || (lt = {}));\nfunction Pr(n, e) {\n  return new I0([\n    [\n      e.rot[0][0] * n.rot[0][0] + e.rot[1][0] * n.rot[0][1] + e.rot[2][0] * n.rot[0][2],\n      e.rot[0][1] * n.rot[0][0] + e.rot[1][1] * n.rot[0][1] + e.rot[2][1] * n.rot[0][2],\n      e.rot[0][2] * n.rot[0][0] + e.rot[1][2] * n.rot[0][1] + e.rot[2][2] * n.rot[0][2]\n    ],\n    [\n      e.rot[0][0] * n.rot[1][0] + e.rot[1][0] * n.rot[1][1] + e.rot[2][0] * n.rot[1][2],\n      e.rot[0][1] * n.rot[1][0] + e.rot[1][1] * n.rot[1][1] + e.rot[2][1] * n.rot[1][2],\n      e.rot[0][2] * n.rot[1][0] + e.rot[1][2] * n.rot[1][1] + e.rot[2][2] * n.rot[1][2]\n    ],\n    [\n      e.rot[0][0] * n.rot[2][0] + e.rot[1][0] * n.rot[2][1] + e.rot[2][0] * n.rot[2][2],\n      e.rot[0][1] * n.rot[2][0] + e.rot[1][1] * n.rot[2][1] + e.rot[2][1] * n.rot[2][2],\n      e.rot[0][2] * n.rot[2][0] + e.rot[1][2] * n.rot[2][1] + e.rot[2][2] * n.rot[2][2]\n    ]\n  ]);\n}\nfunction Nr(n, e, t) {\n  const r = l0(t) * g, i = Math.cos(r), a = Math.sin(r), o = (e + 1) % 3, c = (e + 2) % 3, s = e;\n  let l = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];\n  return l[o][o] = i * n.rot[o][o] - a * n.rot[o][c], l[o][c] = a * n.rot[o][o] + i * n.rot[o][c], l[o][s] = n.rot[o][s], l[c][o] = i * n.rot[c][o] - a * n.rot[c][c], l[c][c] = a * n.rot[c][o] + i * n.rot[c][c], l[c][s] = n.rot[c][s], l[s][o] = i * n.rot[s][o] - a * n.rot[s][c], l[s][c] = a * n.rot[s][o] + i * n.rot[s][c], l[s][s] = n.rot[s][s], new I0(l);\n}\nfunction Or(n, e) {\n  e = r0(e);\n  const t = n.lat * g, r = n.lon * g, i = n.dist * Math.cos(t);\n  return new G(i * Math.cos(r), i * Math.sin(r), n.dist * Math.sin(t), e);\n}\nfunction Lr(n) {\n  const e = Hr(n);\n  return new vr(e.lon / 15, e.lat, e.dist, n);\n}\nfunction Hr(n) {\n  const e = n.x * n.x + n.y * n.y, t = Math.sqrt(e + n.z * n.z);\n  let r, i;\n  if (e === 0) {\n    if (n.z === 0)\n      throw \"Zero-length vector not allowed.\";\n    i = 0, r = n.z < 0 ? -90 : 90;\n  } else\n    i = at * Math.atan2(n.y, n.x), i < 0 && (i += 360), r = at * Math.atan2(n.z, Math.sqrt(e));\n  return new Gt(r, i, t);\n}\nfunction br(n) {\n  n = r0(n);\n  const e = bt(n, V.From2000), t = Ut(n, V.From2000);\n  return Pr(e, t);\n}\nvar dt;\n(function(n) {\n  n.Penumbral = \"penumbral\", n.Partial = \"partial\", n.Annular = \"annular\", n.Total = \"total\";\n})(dt || (dt = {}));\nvar ht;\n(function(n) {\n  n[n.Invalid = 0] = \"Invalid\", n[n.Ascending = 1] = \"Ascending\", n[n.Descending = -1] = \"Descending\";\n})(ht || (ht = {}));\nclass Vt {\n  constructor(e, t, r, i) {\n    this.ra = e, this.dec = t, this.spin = r, this.north = i;\n  }\n}\nfunction Ur(n) {\n  const e = Tr([0, 0, 1], n, V.Into2000), t = Ht(e, n, V.Into2000), r = new G(t[0], t[1], t[2], n), i = Lr(r), a = 190.41375788700253 + 360.9856122880876 * n.ut;\n  return new Vt(i.ra, i.dec, a, r);\n}\nfunction Gr(n, e) {\n  const t = r0(e), r = t.tt, i = r / 36525;\n  let a, o, c;\n  switch (n) {\n    case S.Sun:\n      a = 286.13, o = 63.87, c = 84.176 + 14.1844 * r;\n      break;\n    case S.Mercury:\n      a = 281.0103 - 0.0328 * i, o = 61.4155 - 49e-4 * i, c = 329.5988 + 6.1385108 * r + 0.01067257 * Math.sin(g * (174.7910857 + 4.092335 * r)) - 112309e-8 * Math.sin(g * (349.5821714 + 8.18467 * r)) - 1104e-7 * Math.sin(g * (164.3732571 + 12.277005 * r)) - 2539e-8 * Math.sin(g * (339.1643429 + 16.36934 * r)) - 571e-8 * Math.sin(g * (153.9554286 + 20.461675 * r));\n      break;\n    case S.Venus:\n      a = 272.76, o = 67.16, c = 160.2 - 1.4813688 * r;\n      break;\n    case S.Earth:\n      return Ur(t);\n    case S.Moon:\n      const f = g * (125.045 - 0.0529921 * r), v = g * (250.089 - 0.1059842 * r), T = g * (260.008 + 13.0120009 * r), E = g * (176.625 + 13.3407154 * r), x = g * (357.529 + 0.9856003 * r), y = g * (311.589 + 26.4057084 * r), I = g * (134.963 + 13.064993 * r), N = g * (276.617 + 0.3287146 * r), b = g * (34.226 + 1.7484877 * r), U = g * (15.134 - 0.1589763 * r), z = g * (119.743 + 36096e-7 * r), F = g * (239.961 + 0.1643573 * r), q = g * (25.053 + 12.9590088 * r);\n      a = 269.9949 + 31e-4 * i - 3.8787 * Math.sin(f) - 0.1204 * Math.sin(v) + 0.07 * Math.sin(T) - 0.0172 * Math.sin(E) + 72e-4 * Math.sin(y) - 52e-4 * Math.sin(U) + 43e-4 * Math.sin(q), o = 66.5392 + 0.013 * i + 1.5419 * Math.cos(f) + 0.0239 * Math.cos(v) - 0.0278 * Math.cos(T) + 68e-4 * Math.cos(E) - 29e-4 * Math.cos(y) + 9e-4 * Math.cos(I) + 8e-4 * Math.cos(U) - 9e-4 * Math.cos(q), c = 38.3213 + (13.17635815 - 14e-13 * r) * r + 3.561 * Math.sin(f) + 0.1208 * Math.sin(v) - 0.0642 * Math.sin(T) + 0.0158 * Math.sin(E) + 0.0252 * Math.sin(x) - 66e-4 * Math.sin(y) - 47e-4 * Math.sin(I) - 46e-4 * Math.sin(N) + 28e-4 * Math.sin(b) + 52e-4 * Math.sin(U) + 4e-3 * Math.sin(z) + 19e-4 * Math.sin(F) - 44e-4 * Math.sin(q);\n      break;\n    case S.Mars:\n      a = 317.269202 - 0.10927547 * i + 68e-6 * Math.sin(g * (198.991226 + 19139.4819985 * i)) + 238e-6 * Math.sin(g * (226.292679 + 38280.8511281 * i)) + 52e-6 * Math.sin(g * (249.663391 + 57420.7251593 * i)) + 9e-6 * Math.sin(g * (266.18351 + 76560.636795 * i)) + 0.419057 * Math.sin(g * (79.398797 + 0.5042615 * i)), o = 54.432516 - 0.05827105 * i + 51e-6 * Math.cos(g * (122.433576 + 19139.9407476 * i)) + 141e-6 * Math.cos(g * (43.058401 + 38280.8753272 * i)) + 31e-6 * Math.cos(g * (57.663379 + 57420.7517205 * i)) + 5e-6 * Math.cos(g * (79.476401 + 76560.6495004 * i)) + 1.591274 * Math.cos(g * (166.325722 + 0.5042615 * i)), c = 176.049863 + 350.891982443297 * r + 145e-6 * Math.sin(g * (129.071773 + 19140.0328244 * i)) + 157e-6 * Math.sin(g * (36.352167 + 38281.0473591 * i)) + 4e-5 * Math.sin(g * (56.668646 + 57420.929536 * i)) + 1e-6 * Math.sin(g * (67.364003 + 76560.2552215 * i)) + 1e-6 * Math.sin(g * (104.79268 + 95700.4387578 * i)) + 0.584542 * Math.sin(g * (95.391654 + 0.5042615 * i));\n      break;\n    case S.Jupiter:\n      const Z = g * (99.360714 + 4850.4046 * i), i0 = g * (175.895369 + 1191.9605 * i), a0 = g * (300.323162 + 262.5475 * i), J = g * (114.012305 + 6070.2476 * i), N0 = g * (49.511251 + 64.3 * i);\n      a = 268.056595 - 6499e-6 * i + 117e-6 * Math.sin(Z) + 938e-6 * Math.sin(i0) + 1432e-6 * Math.sin(a0) + 3e-5 * Math.sin(J) + 215e-5 * Math.sin(N0), o = 64.495303 + 2413e-6 * i + 5e-5 * Math.cos(Z) + 404e-6 * Math.cos(i0) + 617e-6 * Math.cos(a0) - 13e-6 * Math.cos(J) + 926e-6 * Math.cos(N0), c = 284.95 + 870.536 * r;\n      break;\n    case S.Saturn:\n      a = 40.589 - 0.036 * i, o = 83.537 - 4e-3 * i, c = 38.9 + 810.7939024 * r;\n      break;\n    case S.Uranus:\n      a = 257.311, o = -15.175, c = 203.81 - 501.1600928 * r;\n      break;\n    case S.Neptune:\n      const p0 = g * (357.85 + 52.316 * i);\n      a = 299.36 + 0.7 * Math.sin(p0), o = 43.46 - 0.51 * Math.cos(p0), c = 249.978 + 541.1397757 * r - 0.48 * Math.sin(p0);\n      break;\n    case S.Pluto:\n      a = 132.993, o = -6.163, c = 302.695 + 56.3625225 * r;\n      break;\n    default:\n      throw `Invalid body: ${n}`;\n  }\n  const s = o * g, l = a * g, h = Math.cos(s), m = new G(h * Math.cos(l), h * Math.sin(l), Math.sin(s), t);\n  return new Vt(a / 15, o, c, m);\n}\nconst Fr = 1e-3 / It, Bt = /* @__PURE__ */ new p(), zr = /* @__PURE__ */ new p(), kr = /* @__PURE__ */ new p(), Wt = /* @__PURE__ */ new D(), Vr = /* @__PURE__ */ new D(), Br = /* @__PURE__ */ new un();\nfunction P0(n) {\n  return n instanceof t0 ? n : (\n    // Prefer number to be JS timestamp.\n    new t0(n instanceof Date ? n : new Date(n))\n  );\n}\nfunction jt(n, e = new p()) {\n  const { x: t, y: r, z: i } = n;\n  return e.set(t, r, i);\n}\nfunction Wr(n, e = new D()) {\n  const [t, r, i] = n.rot;\n  return e.set(\n    t[0],\n    r[0],\n    i[0],\n    0,\n    t[1],\n    r[1],\n    i[1],\n    0,\n    t[2],\n    r[2],\n    i[2],\n    0,\n    0,\n    0,\n    0,\n    1\n  );\n}\nfunction Xe(n, e = new D()) {\n  const t = P0(n), r = Nr(br(t), 2, -15 * pr(t));\n  return Wr(r, e);\n}\nfunction bi(n, e = new D()) {\n  const t = P0(n), r = Gr(S.Moon, t), i = jt(r.north, Bt), a = xt(r.spin), c = zr.set(0, 0, 1).cross(i).normalize().applyQuaternion(Br.setFromAxisAngle(i, a)).normalize(), s = kr.copy(i).cross(c).normalize();\n  return e.makeBasis(c, s, i);\n}\nfunction ue(n, e, t, r, i) {\n  const a = Ir(n, e, !1);\n  if (jt(a, t), r != null) {\n    const o = Xe(e, Vr).transpose();\n    t.sub(\n      Bt.copy(r).applyMatrix4(o).multiplyScalar(Fr)\n    );\n  }\n  return t.normalize();\n}\nfunction Ui(n, e = new p(), t) {\n  return ue(S.Sun, P0(n), e, t);\n}\nfunction Gi(n, e = new p(), t) {\n  return ue(S.Moon, P0(n), e, t);\n}\nfunction Fi(n, e = new p(), t) {\n  const r = P0(n);\n  return ue(S.Sun, r, e, t).applyMatrix4(\n    Xe(r, Wt)\n  );\n}\nfunction zi(n, e = new p(), t) {\n  const r = P0(n);\n  return ue(S.Moon, r, e, t).applyMatrix4(\n    Xe(r, Wt)\n  );\n}\nfunction Xt(n) {\n  return Math.sqrt(Math.max(n, 0));\n}\nfunction jr(n) {\n  return Math.max(n, 0);\n}\nfunction Xr(n, e, t) {\n  const { bottomRadius: r } = n;\n  return t < 0 && e ** 2 * (t ** 2 - 1) + r ** 2 >= 0;\n}\nfunction Yr(n, e, t) {\n  const { topRadius: r } = n, i = e ** 2 * (t ** 2 - 1) + r ** 2;\n  return jr(-e * t + Xt(i));\n}\nfunction ne(n, e) {\n  return 0.5 / e + n * (1 - 1 / e);\n}\nconst Kr = /* @__PURE__ */ new p(), mt = /* @__PURE__ */ new p(), $r = /* @__PURE__ */ new p(), ft = /* @__PURE__ */ new WeakMap();\nfunction qr(n) {\n  be(n.image);\n  let e = nt(n.image.data) ? n.image.data : nt(n.userData.imageData) ? n.userData.imageData : void 0;\n  if (n.type === k && e instanceof Uint16Array) {\n    const t = ft.get(e.buffer);\n    t == null ? (e = new Mt(e.buffer), ft.set(e.buffer, e)) : e = t;\n  }\n  return e;\n}\nfunction J0(n, e, t) {\n  const r = e * 4;\n  return t.set(n[r], n[r + 1], n[r + 2]);\n}\nfunction Yt(n, e, t) {\n  const r = qr(n);\n  if (r == null)\n    return t.setScalar(0);\n  be(n.image);\n  const { width: i, height: a } = n.image, o = tt(e.x, 0, 1) * (i - 1), c = tt(e.y, 0, 1) * (a - 1), s = Math.floor(o), l = Math.floor(c), h = o - s, m = c - l, f = h, v = m, T = s % i, E = (T + 1) % i, x = l % a, y = (x + 1) % a, I = J0(r, x * i + T, Kr), N = J0(r, x * i + E, mt), b = I.lerp(N, f), U = J0(r, y * i + T, mt), z = J0(r, y * i + E, $r), F = U.lerp(z, f);\n  return t.copy(b.lerp(F, v));\n}\nfunction Zr(n, e, t, r) {\n  const { topRadius: i, bottomRadius: a } = n, o = Math.sqrt(i ** 2 - a ** 2), c = Xt(e ** 2 - a ** 2), s = Yr(n, e, t), l = i - e, h = c + o, m = (s - l) / (h - l), f = c / o;\n  return r.set(\n    ne(m, h0),\n    ne(f, m0)\n  );\n}\nconst Jr = /* @__PURE__ */ new p(), ve = /* @__PURE__ */ new p(), Qr = /* @__PURE__ */ new oe();\nfunction ei(n, e, t, r = new ae(), {\n  ellipsoid: i = F0.WGS84,\n  correctAltitude: a = !0\n} = {}, o = n0.DEFAULT) {\n  const c = Jr.copy(e);\n  if (a) {\n    const T = i.projectOnSurface(\n      e,\n      ve\n    );\n    T != null && c.sub(\n      i.getOsculatingSphereCenter(\n        T,\n        o.bottomRadius,\n        ve\n      )\n    );\n  }\n  const s = ve;\n  let l = c.length(), h = c.dot(t);\n  const { topRadius: m } = o, f = -h - Math.sqrt(h ** 2 - l ** 2 + m ** 2);\n  if (f > 0 && (l = m, h += f), l > m)\n    s.set(1, 1, 1);\n  else {\n    const T = h / l;\n    if (Xr(o, l, T))\n      s.setScalar(0);\n    else {\n      const x = Zr(o, l, T, Qr);\n      Yt(n, x, s);\n    }\n  }\n  const v = s.multiply(o.solarIrradiance).multiply(o.sunRadianceToRelativeLuminance);\n  return r.setFromVector3(v);\n}\nconst ti = `// Based on: https://github.com/pmndrs/postprocessing/blob/v6.37.4/src/materials/glsl/depth-mask.frag\n\n#include <common>\n#include <packing>\n\n#include \"core/depth\"\n\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nuniform highp sampler2D depthBuffer0;\nuniform highp sampler2D depthBuffer1;\n#else // GL_FRAGMENT_PRECISION_HIGH\nuniform mediump sampler2D depthBuffer0;\nuniform mediump sampler2D depthBuffer1;\n#endif // GL_FRAGMENT_PRECISION_HIGH\n\nuniform sampler2D inputBuffer;\nuniform vec2 cameraNearFar;\nuniform bool inverted;\n\nfloat getViewZ(const float depth) {\n  #ifdef PERSPECTIVE_CAMERA\n  return perspectiveDepthToViewZ(depth, cameraNearFar.x, cameraNearFar.y);\n  #else // PERSPECTIVE_CAMERA\n  return orthographicDepthToViewZ(depth, cameraNearFar.x, cameraNearFar.y);\n  #endif // PERSPECTIVE_CAMERA\n}\n\nvarying vec2 vUv;\n\nvoid main() {\n  vec2 depth;\n\n  #if DEPTH_PACKING_0 == 3201\n  depth.x = unpackRGBAToDepth(texture2D(depthBuffer0, vUv));\n  #else // DEPTH_PACKING_0 == 3201\n  depth.x = reverseLogDepth(texture2D(depthBuffer0, vUv).r, cameraNearFar.x, cameraNearFar.y);\n  #endif // DEPTH_PACKING_0 == 3201\n\n  #if DEPTH_PACKING_1 == 3201\n  depth.y = unpackRGBAToDepth(texture2D(depthBuffer1, vUv));\n  #else // DEPTH_PACKING_1 == 3201\n  depth.y = reverseLogDepth(texture2D(depthBuffer1, vUv).r, cameraNearFar.x, cameraNearFar.y);\n  #endif // DEPTH_PACKING_1 == 3201\n\n  bool isMaxDepth = depth.x == 1.0;\n\n  #ifdef PERSPECTIVE_CAMERA\n  depth.x = viewZToOrthographicDepth(getViewZ(depth.x), cameraNearFar.x, cameraNearFar.y);\n  depth.y = viewZToOrthographicDepth(getViewZ(depth.y), cameraNearFar.x, cameraNearFar.y);\n  #endif // PERSPECTIVE_CAMERA\n\n  #if DEPTH_TEST_STRATEGY == 0\n  // Decide based on depth test.\n  bool keep = depthTest(depth.x, depth.y);\n\n  #elif DEPTH_TEST_STRATEGY == 1\n  // Always keep max depth.\n  bool keep = isMaxDepth || depthTest(depth.x, depth.y);\n\n  #else // DEPTH_TEST_STRATEGY\n  // Always discard max depth.\n  bool keep = !isMaxDepth && depthTest(depth.x, depth.y);\n\n  #endif // DEPTH_TEST_STRATEGY\n\n  if (inverted) {\n    keep = !keep;\n  }\n  if (keep) {\n    gl_FragColor = texture2D(inputBuffer, vUv);\n  } else {\n    discard;\n  }\n}\n`;\nclass ki extends tn {\n  constructor(e, t) {\n    super(\"LightingMaskPass\"), this.selection = new nn(), this.needsSwap = !1, this.needsDepthTexture = !0, this.renderPass = new rn(e, t, new ln()), this.renderPass.ignoreBackground = !0, this.renderPass.skipShadowMapUpdate = !0, this.renderPass.selection = this.selection, this.depthTexture = new dn(1, 1, hn), this.renderTarget = new Et(1, 1, {\n      format: mn,\n      depthTexture: this.depthTexture\n    }), this.depthCopyPass0 = new Ze({ depthPacking: X0 }), this.depthCopyPass1 = new Ze({ depthPacking: X0 }), this.clearPass = new an(!0, !1, !1), this.clearPass.overrideClearColor = new ae(16777215), this.clearPass.overrideClearAlpha = 1;\n    const r = new on();\n    r.fragmentShader = W(ti, {\n      core: { depth: yt }\n    }), r.uniforms.inverted = new d(!1), r.copyCameraSettings(t), r.depthBuffer0 = this.depthCopyPass0.texture, r.depthPacking0 = X0, r.depthBuffer1 = this.depthCopyPass1.texture, r.depthPacking1 = X0, r.depthMode = fn, r.maxDepthStrategy = sn.DISCARD_MAX_DEPTH, this.depthMaskMaterial = r, this.depthMaskPass = new cn(r);\n  }\n  // eslint-disable-next-line accessor-pairs\n  set mainScene(e) {\n    this.renderPass.mainScene = e;\n  }\n  // eslint-disable-next-line accessor-pairs\n  set mainCamera(e) {\n    this.renderPass.mainCamera = e, this.depthMaskMaterial.copyCameraSettings(e);\n  }\n  initialize(e, t, r) {\n    this.renderPass.initialize(e, t, r), this.clearPass.initialize(e, t, r), this.depthMaskPass.initialize(e, t, r);\n  }\n  setDepthTexture(e, t = gn) {\n    this.depthCopyPass0.setDepthTexture(e, t), this.depthCopyPass1.setDepthTexture(this.depthTexture, t);\n  }\n  render(e, t, r, i, a) {\n    const o = e.autoClear;\n    e.autoClear = !1, this.depthCopyPass0.render(e, null, null), this.renderPass.render(e, this.renderTarget, null), this.depthCopyPass1.render(e, null, null), this.clearPass.render(e, this.renderTarget, null), this.depthMaskPass.render(e, null, this.renderTarget), e.autoClear = o;\n  }\n  setSize(e, t) {\n    this.renderTarget.setSize(e, t), this.depthCopyPass0.setSize(e, t), this.depthCopyPass1.setSize(e, t);\n  }\n  get texture() {\n    return this.renderTarget.texture;\n  }\n  get selectionLayer() {\n    return this.selection.layer;\n  }\n  set selectionLayer(e) {\n    this.selection.layer = e;\n  }\n  get inverted() {\n    return this.depthMaskMaterial.uniforms.inverted.value;\n  }\n  set inverted(e) {\n    this.depthMaskMaterial.uniforms.inverted.value = e;\n  }\n}\nconst ni = `precision highp float;\nprecision highp sampler3D;\n\n#include \"bruneton/definitions\"\n#include \"bruneton/common\"\n#include \"bruneton/precompute\"\n\nuniform AtmosphereParameters ATMOSPHERE;\n\nuniform sampler2D transmittanceTexture;\n\nlayout(location = 0) out vec4 outputColor;\n\nvoid main() {\n  vec3 deltaIrradiance;\n  vec3 irradiance;\n  deltaIrradiance = ComputeDirectIrradianceTexture(\n    ATMOSPHERE,\n    transmittanceTexture,\n    gl_FragCoord.xy\n  );\n  irradiance = vec3(0.0);\n  outputColor = vec4(OUTPUT, 1.0);\n}\n`, ri = `precision highp float;\nprecision highp sampler3D;\n\n#include \"bruneton/definitions\"\n#include \"bruneton/common\"\n#include \"bruneton/precompute\"\n\nuniform AtmosphereParameters ATMOSPHERE;\n\nuniform mat3 luminanceFromRadiance;\nuniform sampler3D singleRayleighScatteringTexture;\nuniform sampler3D singleMieScatteringTexture;\nuniform sampler3D multipleScatteringTexture;\nuniform int scatteringOrder;\n\nlayout(location = 0) out vec4 outputColor;\n\nvoid main() {\n  vec3 deltaIrradiance;\n  vec3 irradiance;\n  deltaIrradiance = ComputeIndirectIrradianceTexture(\n    ATMOSPHERE,\n    singleRayleighScatteringTexture,\n    singleMieScatteringTexture,\n    multipleScatteringTexture,\n    gl_FragCoord.xy,\n    scatteringOrder\n  );\n  irradiance = luminanceFromRadiance * deltaIrradiance;\n  outputColor = vec4(OUTPUT, 1.0);\n}\n`, ii = `precision highp float;\nprecision highp sampler3D;\n\n#include \"bruneton/definitions\"\n#include \"bruneton/common\"\n#include \"bruneton/precompute\"\n\nuniform AtmosphereParameters ATMOSPHERE;\n\nuniform mat3 luminanceFromRadiance;\nuniform sampler2D transmittanceTexture;\nuniform sampler3D scatteringDensityTexture;\nuniform int layer;\n\nlayout(location = 0) out vec4 outputColor;\n\nvoid main() {\n  vec4 deltaMultipleScattering;\n  vec4 scattering;\n  float nu;\n  deltaMultipleScattering.rgb = ComputeMultipleScatteringTexture(\n    ATMOSPHERE,\n    transmittanceTexture,\n    scatteringDensityTexture,\n    vec3(gl_FragCoord.xy, float(layer) + 0.5),\n    nu\n  );\n  deltaMultipleScattering.a = 1.0;\n  scattering = vec4(\n    luminanceFromRadiance * deltaMultipleScattering.rgb / RayleighPhaseFunction(nu),\n    0.0\n  );\n  outputColor = OUTPUT;\n}\n`, ai = `precision highp float;\nprecision highp sampler3D;\n\n#include \"bruneton/definitions\"\n#include \"bruneton/common\"\n#include \"bruneton/precompute\"\n\nuniform AtmosphereParameters ATMOSPHERE;\n\nuniform sampler2D transmittanceTexture;\nuniform sampler3D singleRayleighScatteringTexture;\nuniform sampler3D singleMieScatteringTexture;\nuniform sampler3D multipleScatteringTexture;\nuniform sampler2D irradianceTexture;\nuniform int scatteringOrder;\nuniform int layer;\n\nlayout(location = 0) out vec4 scatteringDensity;\n\nvoid main() {\n  scatteringDensity.rgb = ComputeScatteringDensityTexture(\n    ATMOSPHERE,\n    transmittanceTexture,\n    singleRayleighScatteringTexture,\n    singleMieScatteringTexture,\n    multipleScatteringTexture,\n    irradianceTexture,\n    vec3(gl_FragCoord.xy, float(layer) + 0.5),\n    scatteringOrder\n  );\n  scatteringDensity.a = 1.0;\n}\n`, oi = `precision highp float;\nprecision highp sampler3D;\n\n#include \"bruneton/definitions\"\n#include \"bruneton/common\"\n#include \"bruneton/precompute\"\n\nuniform AtmosphereParameters ATMOSPHERE;\n\nuniform mat3 luminanceFromRadiance;\nuniform sampler2D transmittanceTexture;\nuniform int layer;\n\nlayout(location = 0) out vec4 outputColor;\n\nvoid main() {\n  vec4 deltaRayleigh;\n  vec4 deltaMie;\n  vec4 scattering;\n  vec4 singleMieScattering;\n  ComputeSingleScatteringTexture(\n    ATMOSPHERE,\n    transmittanceTexture,\n    vec3(gl_FragCoord.xy, float(layer) + 0.5),\n    deltaRayleigh.rgb,\n    deltaMie.rgb\n  );\n  deltaRayleigh.a = 1.0;\n  deltaMie.a = 1.0;\n  scattering = vec4(\n    luminanceFromRadiance * deltaRayleigh.rgb,\n    (luminanceFromRadiance * deltaMie.rgb).r\n  );\n  singleMieScattering.rgb = luminanceFromRadiance * deltaMie.rgb;\n  singleMieScattering.a = 1.0;\n  outputColor = OUTPUT;\n}\n`, si = `precision highp float;\nprecision highp sampler3D;\n\n#include \"bruneton/definitions\"\n#include \"bruneton/common\"\n#include \"bruneton/precompute\"\n\nuniform AtmosphereParameters ATMOSPHERE;\n\nlayout(location = 0) out vec4 transmittance;\n\nvoid main() {\n  transmittance.rgb = ComputeTransmittanceToTopAtmosphereBoundaryTexture(\n    ATMOSPHERE,\n    gl_FragCoord.xy\n  );\n  transmittance.a = 1.0;\n}\n`, ci = (\n  /* glsl */\n  `\n  precision highp float;\n  in vec2 position;\n  void main() {\n    gl_Position = vec4(position, 1.0, 1.0);\n  }\n`\n);\nfunction re(n, e, t) {\n  const r = new Et(e, t, {\n    depthBuffer: !1,\n    type: n,\n    format: Rt\n  }), i = r.texture;\n  return i.minFilter = D0, i.magFilter = D0, i.wrapS = U0, i.wrapT = U0, i.colorSpace = _t, r;\n}\nfunction C0(n, e, t, r) {\n  const i = new Rn(e, t, r, {\n    depthBuffer: !1,\n    type: n,\n    format: Rt\n  }), a = i.texture;\n  return a.minFilter = D0, a.magFilter = D0, a.wrapS = U0, a.wrapT = U0, a.wrapR = U0, a.colorSpace = _t, i;\n}\nfunction ui(n) {\n  const e = n[Symbol.iterator]();\n  return new Promise((t, r) => {\n    const i = () => {\n      try {\n        const { value: a, done: o } = e.next();\n        o === !0 ? t(a) : it(i);\n      } catch (a) {\n        r(a instanceof Error ? a : new Error());\n      }\n    };\n    it(i);\n  });\n}\nasync function gt(n, e, t) {\n  const { width: r, height: i } = e, a = t.type === k ? new Uint16Array(r * i * 4) : new Float32Array(r * i * 4);\n  await n.readRenderTargetPixelsAsync(\n    e,\n    0,\n    0,\n    e.width,\n    e.height,\n    a\n  ), t.userData.imageData = a;\n}\nclass li {\n  constructor(e) {\n    this.lambdas = new p(), this.luminanceFromRadiance = new w0(), e === k && (this.opticalDepth = re(\n      e,\n      h0,\n      m0\n    )), this.deltaIrradiance = re(\n      e,\n      f0,\n      g0\n    ), this.deltaRayleighScattering = C0(\n      e,\n      u0,\n      c0,\n      s0\n    ), this.deltaMieScattering = C0(\n      e,\n      u0,\n      c0,\n      s0\n    ), this.deltaScatteringDensity = C0(\n      e,\n      u0,\n      c0,\n      s0\n    ), this.deltaMultipleScattering = this.deltaRayleighScattering;\n  }\n  dispose() {\n    this.opticalDepth?.dispose(), this.deltaIrradiance.dispose(), this.deltaRayleighScattering.dispose(), this.deltaMieScattering.dispose(), this.deltaScatteringDensity.dispose();\n  }\n}\nclass R0 extends vt {\n  constructor(e) {\n    super({\n      glslVersion: He,\n      vertexShader: ci,\n      ...e,\n      defines: {\n        TRANSMITTANCE_TEXTURE_WIDTH: h0.toFixed(0),\n        TRANSMITTANCE_TEXTURE_HEIGHT: m0.toFixed(0),\n        SCATTERING_TEXTURE_R_SIZE: Ue.toFixed(0),\n        SCATTERING_TEXTURE_MU_SIZE: Ge.toFixed(0),\n        SCATTERING_TEXTURE_MU_S_SIZE: Fe.toFixed(0),\n        SCATTERING_TEXTURE_NU_SIZE: ze.toFixed(0),\n        IRRADIANCE_TEXTURE_WIDTH: f0.toFixed(0),\n        IRRADIANCE_TEXTURE_HEIGHT: g0.toFixed(0),\n        ...e.defines\n      }\n    });\n  }\n  // eslint-disable-next-line accessor-pairs\n  set additive(e) {\n    this.transparent = e, this.blending = e ? vn : En, this.blendEquation = Je, this.blendEquationAlpha = Je, this.blendSrc = Y0, this.blendDst = Y0, this.blendSrcAlpha = Y0, this.blendDstAlpha = Y0;\n  }\n  setUniforms(e) {\n    const t = this.uniforms;\n    t.luminanceFromRadiance != null && t.luminanceFromRadiance.value.copy(e.luminanceFromRadiance), t.singleRayleighScatteringTexture != null && (t.singleRayleighScatteringTexture.value = e.deltaRayleighScattering.texture), t.singleMieScatteringTexture != null && (t.singleMieScatteringTexture.value = e.deltaMieScattering.texture), t.multipleScatteringTexture != null && (t.multipleScatteringTexture.value = e.deltaMultipleScattering.texture), t.scatteringDensityTexture != null && (t.scatteringDensityTexture.value = e.deltaScatteringDensity.texture), t.irradianceTexture != null && (t.irradianceTexture.value = e.deltaIrradiance.texture);\n  }\n}\nclass Vi {\n  constructor(e, {\n    type: t = At(e) ? _e : k,\n    combinedScattering: r = !0,\n    higherOrderScattering: i = !0\n  } = {}) {\n    this.transmittanceMaterial = new R0({\n      fragmentShader: W(si, {\n        bruneton: {\n          common: $,\n          definitions: K,\n          precompute: S0\n        }\n      })\n    }), this.directIrradianceMaterial = new R0({\n      fragmentShader: W(ni, {\n        bruneton: {\n          common: $,\n          definitions: K,\n          precompute: S0\n        }\n      }),\n      uniforms: {\n        transmittanceTexture: new d(null)\n      }\n    }), this.singleScatteringMaterial = new R0({\n      fragmentShader: W(oi, {\n        bruneton: {\n          common: $,\n          definitions: K,\n          precompute: S0\n        }\n      }),\n      uniforms: {\n        luminanceFromRadiance: new d(new w0()),\n        transmittanceTexture: new d(null),\n        layer: new d(0)\n      }\n    }), this.scatteringDensityMaterial = new R0({\n      fragmentShader: W(ai, {\n        bruneton: {\n          common: $,\n          definitions: K,\n          precompute: S0\n        }\n      }),\n      uniforms: {\n        transmittanceTexture: new d(null),\n        singleRayleighScatteringTexture: new d(null),\n        singleMieScatteringTexture: new d(null),\n        multipleScatteringTexture: new d(null),\n        irradianceTexture: new d(null),\n        scatteringOrder: new d(0),\n        layer: new d(0)\n      }\n    }), this.indirectIrradianceMaterial = new R0({\n      fragmentShader: W(ri, {\n        bruneton: {\n          common: $,\n          definitions: K,\n          precompute: S0\n        }\n      }),\n      uniforms: {\n        luminanceFromRadiance: new d(new w0()),\n        singleRayleighScatteringTexture: new d(null),\n        singleMieScatteringTexture: new d(null),\n        multipleScatteringTexture: new d(null),\n        scatteringOrder: new d(0)\n      }\n    }), this.multipleScatteringMaterial = new R0({\n      fragmentShader: W(ii, {\n        bruneton: {\n          common: $,\n          definitions: K,\n          precompute: S0\n        }\n      }),\n      uniforms: {\n        luminanceFromRadiance: new d(new w0()),\n        transmittanceTexture: new d(null),\n        scatteringDensityTexture: new d(null),\n        layer: new d(0)\n      }\n    }), this.mesh = new pn(new Tn(2, 2)), this.scene = new Sn().add(this.mesh), this.camera = new St(), this.updating = !1, this.renderer = e, this.type = t, this.transmittanceRenderTarget = re(\n      t,\n      h0,\n      m0\n    ), this.scatteringRenderTarget = C0(\n      t,\n      u0,\n      c0,\n      s0\n    ), this.irradianceRenderTarget = re(\n      t,\n      f0,\n      g0\n    ), r || (this.singleMieScatteringRenderTarget = C0(\n      t,\n      u0,\n      c0,\n      s0\n    )), i && (this.higherOrderScatteringRenderTarget = C0(\n      t,\n      u0,\n      c0,\n      s0\n    )), this.textures = {\n      transmittanceTexture: this.transmittanceRenderTarget.texture,\n      scatteringTexture: this.scatteringRenderTarget.texture,\n      irradianceTexture: this.irradianceRenderTarget.texture,\n      singleMieScatteringTexture: this.singleMieScatteringRenderTarget?.texture,\n      higherOrderScatteringTexture: this.higherOrderScatteringRenderTarget?.texture\n    };\n  }\n  render3DRenderTarget(e, t) {\n    for (let r = 0; r < e.depth; ++r)\n      t.uniforms.layer.value = r, this.renderer.setRenderTarget(e, r), this.renderer.render(this.scene, this.camera);\n  }\n  computeTransmittance(e) {\n    const t = this.transmittanceMaterial;\n    delete t.defines.TRANSMITTANCE_PRECISION_LOG, t.needsUpdate = !0, this.mesh.material = t, this.renderer.setRenderTarget(e.renderTarget), this.renderer.render(this.scene, this.camera);\n  }\n  computeOpticalDepth(e) {\n    const t = this.transmittanceMaterial;\n    t.defines.TRANSMITTANCE_PRECISION_LOG = \"1\", t.needsUpdate = !0, this.mesh.material = t, this.renderer.setRenderTarget(e.renderTarget), this.renderer.render(this.scene, this.camera);\n  }\n  computeDirectIrradiance(e) {\n    const t = this.directIrradianceMaterial;\n    t.defines.OUTPUT = e.output, t.additive = e.additive, this.type === k ? t.defines.TRANSMITTANCE_PRECISION_LOG = \"1\" : delete t.defines.TRANSMITTANCE_PRECISION_LOG, t.needsUpdate = !0;\n    const r = t.uniforms;\n    r.transmittanceTexture.value = e.context.opticalDepth?.texture ?? this.transmittanceRenderTarget.texture, this.mesh.material = t, this.renderer.setRenderTarget(e.renderTarget), this.renderer.render(this.scene, this.camera);\n  }\n  computeSingleScattering(e) {\n    const t = this.singleScatteringMaterial;\n    t.defines.OUTPUT = e.output, t.additive = e.additive, this.type === k ? t.defines.TRANSMITTANCE_PRECISION_LOG = \"1\" : delete t.defines.TRANSMITTANCE_PRECISION_LOG, t.needsUpdate = !0;\n    const r = t.uniforms;\n    r.transmittanceTexture.value = e.context.opticalDepth?.texture ?? this.transmittanceRenderTarget.texture, t.setUniforms(e.context), this.mesh.material = t, this.render3DRenderTarget(e.renderTarget, t);\n  }\n  computeScatteringDensity(e) {\n    const t = this.scatteringDensityMaterial;\n    this.type === k ? t.defines.TRANSMITTANCE_PRECISION_LOG = \"1\" : delete t.defines.TRANSMITTANCE_PRECISION_LOG, t.needsUpdate = !0;\n    const r = t.uniforms;\n    r.transmittanceTexture.value = e.context.opticalDepth?.texture ?? this.transmittanceRenderTarget.texture, r.scatteringOrder.value = e.scatteringOrder, t.setUniforms(e.context), this.mesh.material = t, this.render3DRenderTarget(e.renderTarget, t);\n  }\n  computeIndirectIrradiance(e) {\n    const t = this.indirectIrradianceMaterial;\n    t.defines.OUTPUT = e.output, t.additive = e.additive, t.needsUpdate = !0;\n    const r = t.uniforms;\n    r.scatteringOrder.value = e.scatteringOrder - 1, t.setUniforms(e.context), this.mesh.material = t, this.renderer.setRenderTarget(e.renderTarget), this.renderer.render(this.scene, this.camera);\n  }\n  computeMultipleScattering(e) {\n    const t = this.multipleScatteringMaterial;\n    t.defines.OUTPUT = e.output, t.additive = e.additive, this.type === k ? t.defines.TRANSMITTANCE_PRECISION_LOG = \"1\" : delete t.defines.TRANSMITTANCE_PRECISION_LOG, t.needsUpdate = !0;\n    const r = t.uniforms;\n    r.transmittanceTexture.value = e.context.opticalDepth?.texture ?? this.transmittanceRenderTarget.texture, t.setUniforms(e.context), this.mesh.material = t, this.render3DRenderTarget(e.renderTarget, t);\n  }\n  *precompute(e, t) {\n    this.computeTransmittance({\n      renderTarget: this.transmittanceRenderTarget\n    }), this.type === k && (Gn(e.opticalDepth != null), this.computeOpticalDepth({\n      renderTarget: e.opticalDepth\n    })), this.computeDirectIrradiance({\n      renderTarget: e.deltaIrradiance,\n      context: e,\n      output: \"deltaIrradiance\",\n      additive: !1\n    }), this.computeDirectIrradiance({\n      renderTarget: this.irradianceRenderTarget,\n      context: e,\n      output: \"irradiance\",\n      additive: t\n    }), this.renderer.setRenderTarget(null), yield, this.computeSingleScattering({\n      renderTarget: e.deltaRayleighScattering,\n      context: e,\n      output: \"deltaRayleigh\",\n      additive: !1\n    }), this.computeSingleScattering({\n      renderTarget: e.deltaMieScattering,\n      context: e,\n      output: \"deltaMie\",\n      additive: !1\n    }), this.computeSingleScattering({\n      renderTarget: this.scatteringRenderTarget,\n      context: e,\n      output: \"scattering\",\n      additive: t\n    }), this.singleMieScatteringRenderTarget != null && this.computeSingleScattering({\n      renderTarget: this.singleMieScatteringRenderTarget,\n      context: e,\n      output: \"singleMieScattering\",\n      additive: t\n    }), this.renderer.setRenderTarget(null), yield;\n    for (let r = 2; r <= 4; ++r)\n      this.computeScatteringDensity({\n        renderTarget: e.deltaScatteringDensity,\n        context: e,\n        scatteringOrder: r\n      }), this.computeIndirectIrradiance({\n        renderTarget: e.deltaIrradiance,\n        context: e,\n        scatteringOrder: r,\n        output: \"deltaIrradiance\",\n        additive: !1\n      }), this.computeIndirectIrradiance({\n        renderTarget: this.irradianceRenderTarget,\n        context: e,\n        scatteringOrder: r,\n        output: \"irradiance\",\n        additive: !0\n      }), this.computeMultipleScattering({\n        renderTarget: e.deltaMultipleScattering,\n        context: e,\n        output: \"deltaMultipleScattering\",\n        additive: !1\n      }), this.computeMultipleScattering({\n        renderTarget: this.scatteringRenderTarget,\n        context: e,\n        output: \"scattering\",\n        additive: !0\n      }), this.higherOrderScatteringRenderTarget != null && this.computeMultipleScattering({\n        renderTarget: this.higherOrderScatteringRenderTarget,\n        context: e,\n        output: \"scattering\",\n        additive: !0\n      }), this.renderer.setRenderTarget(null), yield;\n  }\n  async update(e = n0.DEFAULT) {\n    this.updating = !0;\n    const t = e.toUniform();\n    this.transmittanceMaterial.uniforms.ATMOSPHERE = t, this.directIrradianceMaterial.uniforms.ATMOSPHERE = t, this.singleScatteringMaterial.uniforms.ATMOSPHERE = t, this.scatteringDensityMaterial.uniforms.ATMOSPHERE = t, this.indirectIrradianceMaterial.uniforms.ATMOSPHERE = t, this.multipleScatteringMaterial.uniforms.ATMOSPHERE = t;\n    const r = this.renderer, i = new li(this.type);\n    i.lambdas.set(680, 550, 440), i.luminanceFromRadiance.identity();\n    const a = r.autoClear;\n    return r.autoClear = !1, await ui(this.precompute(i, !1)), r.autoClear = a, i.dispose(), await gt(\n      this.renderer,\n      this.transmittanceRenderTarget,\n      this.transmittanceRenderTarget.texture\n    ), await gt(\n      this.renderer,\n      this.irradianceRenderTarget,\n      this.irradianceRenderTarget.texture\n    ), this.updating = !1, this.disposeQueue?.(), this.textures;\n  }\n  dispose(e = {}) {\n    if (this.updating) {\n      this.disposeQueue = () => {\n        this.dispose(e), this.disposeQueue = void 0;\n      };\n      return;\n    }\n    const { textures: t = !0 } = e;\n    t || (this.transmittanceRenderTarget.textures.splice(0, 1), this.scatteringRenderTarget.textures.splice(0, 1), this.irradianceRenderTarget.textures.splice(0, 1), this.singleMieScatteringRenderTarget?.textures.splice(0, 1), this.higherOrderScatteringRenderTarget?.textures.splice(0, 1)), this.transmittanceRenderTarget.dispose(), this.scatteringRenderTarget.dispose(), this.irradianceRenderTarget.dispose(), this.singleMieScatteringRenderTarget?.dispose(), this.higherOrderScatteringRenderTarget?.dispose(), this.transmittanceMaterial.dispose(), this.directIrradianceMaterial.dispose(), this.singleScatteringMaterial.dispose(), this.scatteringDensityMaterial.dispose(), this.indirectIrradianceMaterial.dispose(), this.multipleScatteringMaterial.dispose(), this.mesh.geometry.dispose();\n  }\n}\nfunction di(n) {\n  var e = [];\n  if (n.length === 0)\n    return \"\";\n  if (typeof n[0] != \"string\")\n    throw new TypeError(\"Url must be a string. Received \" + n[0]);\n  if (n[0].match(/^[^/:]+:\\/*$/) && n.length > 1) {\n    var t = n.shift();\n    n[0] = t + n[0];\n  }\n  n[0].match(/^file:\\/\\/\\//) ? n[0] = n[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : n[0] = n[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n  for (var r = 0; r < n.length; r++) {\n    var i = n[r];\n    if (typeof i != \"string\")\n      throw new TypeError(\"Url must be a string. Received \" + i);\n    i !== \"\" && (r > 0 && (i = i.replace(/^[\\/]+/, \"\")), r < n.length - 1 ? i = i.replace(/[\\/]+$/, \"\") : i = i.replace(/[\\/]+$/, \"/\"), e.push(i));\n  }\n  var a = e.join(\"/\");\n  a = a.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n  var o = a.split(\"?\");\n  return a = o.shift() + (o.length > 0 ? \"?\" : \"\") + o.join(\"&\"), a;\n}\nfunction hi() {\n  var n;\n  return typeof arguments[0] == \"object\" ? n = arguments[0] : n = [].slice.call(arguments), di(n);\n}\nconst pt = {\n  width: h0,\n  height: m0\n}, _0 = {\n  width: u0,\n  height: c0,\n  depth: s0\n}, Tt = {\n  width: f0,\n  height: g0\n};\nclass Bi extends _n {\n  constructor({\n    format: e = \"exr\",\n    type: t = k,\n    combinedScattering: r = !0,\n    higherOrderScattering: i = !0\n  } = {}, a) {\n    super(a), this.format = e, this.type = t, this.combinedScattering = r, this.higherOrderScattering = i;\n  }\n  setType(e) {\n    return this.type = At(e) ? _e : k, this;\n  }\n  load(e, t, r, i) {\n    const a = {}, o = ({\n      key: c,\n      loader: s,\n      path: l\n    }) => (s.setRequestHeader(this.requestHeader), s.setPath(this.path), s.setWithCredentials(this.withCredentials), s.load(\n      hi(e, l),\n      (h) => {\n        h.type = this.type, this.type === _e && (be(h.image), h.image.data != null && (h.image.data = new Float32Array(\n          new Mt(h.image.data?.buffer)\n        ))), h.minFilter = D0, h.magFilter = D0, a[`${c}Texture`] = h, a.irradianceTexture != null && a.scatteringTexture != null && a.transmittanceTexture != null && (this.combinedScattering || a.singleMieScatteringTexture != null) && (!this.higherOrderScattering || a.higherOrderScatteringTexture != null) && t?.(a);\n      },\n      r,\n      i\n    ));\n    return this.format === \"exr\" ? {\n      transmittanceTexture: o({\n        key: \"transmittance\",\n        loader: new rt(pt, this.manager),\n        path: \"transmittance.exr\"\n      }),\n      scatteringTexture: o({\n        key: \"scattering\",\n        loader: new Te(_0, this.manager),\n        path: \"scattering.exr\"\n      }),\n      irradianceTexture: o({\n        key: \"irradiance\",\n        loader: new rt(Tt, this.manager),\n        path: \"irradiance.exr\"\n      }),\n      singleMieScatteringTexture: this.combinedScattering ? void 0 : o({\n        key: \"singleMieScattering\",\n        loader: new Te(_0, this.manager),\n        path: \"single_mie_scattering.exr\"\n      }),\n      higherOrderScatteringTexture: this.higherOrderScattering ? o({\n        key: \"higherOrderScattering\",\n        loader: new Te(_0, this.manager),\n        path: \"higher_order_scattering.exr\"\n      }) : void 0\n    } : {\n      transmittanceTexture: o({\n        key: \"transmittance\",\n        loader: new O0(\n          Qe,\n          L0,\n          pt,\n          this.manager\n        ),\n        path: \"transmittance.bin\"\n      }),\n      scatteringTexture: o({\n        key: \"scattering\",\n        loader: new O0(\n          ge,\n          L0,\n          _0,\n          this.manager\n        ),\n        path: \"scattering.bin\"\n      }),\n      irradianceTexture: o({\n        key: \"irradiance\",\n        loader: new O0(\n          Qe,\n          L0,\n          Tt,\n          this.manager\n        ),\n        path: \"irradiance.bin\"\n      }),\n      singleMieScatteringTexture: this.combinedScattering ? void 0 : o({\n        key: \"singleMieScattering\",\n        loader: new O0(\n          ge,\n          L0,\n          _0,\n          this.manager\n        ),\n        path: \"single_mie_scattering.bin\"\n      }),\n      higherOrderScatteringTexture: this.higherOrderScattering ? o({\n        key: \"higherOrderScattering\",\n        loader: new O0(\n          ge,\n          L0,\n          _0,\n          this.manager\n        ),\n        path: \"higher_order_scattering.bin\"\n      }) : void 0\n    };\n  }\n}\nfunction mi({ topRadius: n, bottomRadius: e }, t, r, i) {\n  const a = (t - e) / (n - e), o = r * 0.5 + 0.5;\n  return i.set(\n    ne(o, f0),\n    ne(a, g0)\n  );\n}\nconst fi = 1 / Math.sqrt(Math.PI), Ee = Math.sqrt(3) / (2 * Math.sqrt(Math.PI)), gi = /* @__PURE__ */ new p(), Re = /* @__PURE__ */ new p(), pi = /* @__PURE__ */ new oe(), Ti = /* @__PURE__ */ new w0(), Si = {\n  ellipsoid: F0.WGS84,\n  correctAltitude: !0\n};\nclass Wi extends xn {\n  constructor(e, t = n0.DEFAULT) {\n    super(), this.atmosphere = t, this.worldToECEFMatrix = new D();\n    const {\n      irradianceTexture: r = null,\n      ellipsoid: i,\n      correctAltitude: a,\n      sunDirection: o\n    } = { ...Si, ...e };\n    this.irradianceTexture = r, this.ellipsoid = i, this.correctAltitude = a, this.sunDirection = o?.clone() ?? new p();\n  }\n  update() {\n    if (this.irradianceTexture == null)\n      return;\n    const e = this.worldToECEFMatrix, t = Ti.setFromMatrix4(e).transpose(), i = this.getWorldPosition(gi).applyMatrix4(e);\n    if (this.correctAltitude) {\n      const m = this.ellipsoid.projectOnSurface(\n        i,\n        Re\n      );\n      m != null && i.add(\n        ke(\n          m,\n          this.atmosphere.bottomRadius,\n          this.ellipsoid,\n          Re\n        )\n      );\n    }\n    const a = i.length(), o = i.dot(this.sunDirection) / a, c = mi(this.atmosphere, a, o, pi), s = Yt(this.irradianceTexture, c, Re);\n    s.multiply(this.atmosphere.skyRadianceToRelativeLuminance);\n    const l = this.ellipsoid.getSurfaceNormal(i).applyMatrix3(t), h = this.sh.coefficients;\n    h[0].copy(s).multiplyScalar(fi), h[1].copy(s).multiplyScalar(Ee * l.y), h[2].copy(s).multiplyScalar(Ee * l.z), h[3].copy(s).multiplyScalar(Ee * l.x);\n  }\n}\nconst vi = `precision highp float;\nprecision highp sampler3D;\n\n#define RECIPROCAL_PI 0.3183098861837907\n\n#include \"core/raySphereIntersection\"\n\n#include \"bruneton/definitions\"\n\nuniform AtmosphereParameters ATMOSPHERE;\nuniform vec3 SUN_SPECTRAL_RADIANCE_TO_LUMINANCE;\nuniform vec3 SKY_SPECTRAL_RADIANCE_TO_LUMINANCE;\n\nuniform sampler2D transmittance_texture;\nuniform sampler3D scattering_texture;\nuniform sampler2D irradiance_texture;\nuniform sampler3D single_mie_scattering_texture;\nuniform sampler3D higher_order_scattering_texture;\n\n#include \"bruneton/common\"\n#include \"bruneton/runtime\"\n\nuniform vec3 sunDirection;\nuniform float cosSunAngularRadius;\nuniform vec3 moonDirection;\nuniform float moonAngularRadius;\nuniform float lunarRadianceScale;\nuniform vec3 groundAlbedo;\n\n#include \"sky\"\n\n#ifdef HAS_SHADOW_LENGTH\nuniform sampler2D shadowLengthBuffer;\n#endif // HAS_SHADOW_LENGTH\n\nin vec2 vUv;\nin vec3 vCameraPosition;\nin vec3 vRayDirection;\n\nlayout(location = 0) out vec4 outputColor;\n\n#include <mrt_layout>\n\nvoid main() {\n  float shadowLength = 0.0;\n  #ifdef HAS_SHADOW_LENGTH\n  shadowLength = texture(shadowLengthBuffer, vUv).r;\n  #endif // HAS_SHADOW_LENGTH\n\n  vec3 cameraPosition = vCameraPosition;\n  vec3 rayDirection = normalize(vRayDirection);\n  vec3 dRDdx = dFdx(rayDirection);\n  vec3 dRDdy = dFdy(rayDirection);\n  float fragmentAngle = length(dRDdx + dRDdy) / length(rayDirection);\n\n  #ifdef GROUND_ALBEDO\n\n  float r = length(cameraPosition);\n  float mu = dot(cameraPosition, rayDirection) / r;\n  bool intersectsGround = RayIntersectsGround(ATMOSPHERE, r, mu);\n  if (intersectsGround) {\n    float distanceToGround = raySphereFirstIntersection(\n      cameraPosition,\n      rayDirection,\n      ATMOSPHERE.bottom_radius\n    );\n    vec3 groundPosition = rayDirection * distanceToGround + cameraPosition;\n    vec3 surfaceNormal = normalize(groundPosition);\n    vec3 skyIrradiance;\n    vec3 sunIrradiance = GetSunAndSkyIrradiance(\n      cameraPosition,\n      surfaceNormal,\n      sunDirection,\n      skyIrradiance\n    );\n    vec3 transmittance;\n    vec3 inscatter = GetSkyRadianceToPoint(\n      cameraPosition,\n      ATMOSPHERE.bottom_radius * surfaceNormal,\n      shadowLength,\n      sunDirection,\n      transmittance\n    );\n    vec3 radiance = groundAlbedo * RECIPROCAL_PI * (sunIrradiance + skyIrradiance);\n    outputColor.rgb = radiance * transmittance + inscatter;\n  } else {\n    outputColor.rgb = getSkyRadiance(\n      cameraPosition,\n      rayDirection,\n      shadowLength,\n      sunDirection,\n      moonDirection,\n      moonAngularRadius,\n      lunarRadianceScale,\n      fragmentAngle\n    );\n  }\n\n  #else // GROUND_ALBEDO\n\n  outputColor.rgb = getSkyRadiance(\n    cameraPosition,\n    rayDirection,\n    shadowLength,\n    sunDirection,\n    moonDirection,\n    moonAngularRadius,\n    lunarRadianceScale,\n    fragmentAngle\n  );\n\n  #endif // GROUND_ALBEDO\n\n  outputColor.a = 1.0;\n\n  #include <mrt_output>\n}\n`, Ei = `precision highp float;\nprecision highp sampler3D;\n\nuniform mat4 inverseProjectionMatrix;\nuniform mat4 inverseViewMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 worldToECEFMatrix;\nuniform vec3 altitudeCorrection;\n\nlayout(location = 0) in vec3 position;\n\nout vec2 vUv;\nout vec3 vCameraPosition;\nout vec3 vRayDirection;\n\nvoid getCameraRay(out vec3 origin, out vec3 direction) {\n  bool isPerspective = inverseProjectionMatrix[2][3] != 0.0; // 4th entry in the 3rd column\n\n  if (isPerspective) {\n    // Calculate the camera ray for a perspective camera.\n    vec4 viewPosition = inverseProjectionMatrix * vec4(position, 1.0);\n    vec4 worldDirection = inverseViewMatrix * vec4(viewPosition.xyz, 0.0);\n    origin = cameraPosition;\n    direction = worldDirection.xyz;\n  } else {\n    // Unprojected points to calculate direction.\n    vec4 nearPoint = inverseProjectionMatrix * vec4(position.xy, -1.0, 1.0);\n    vec4 farPoint = inverseProjectionMatrix * vec4(position.xy, -0.9, 1.0);\n    nearPoint /= nearPoint.w;\n    farPoint /= farPoint.w;\n\n    // Calculate world values\n    vec4 worldDirection = inverseViewMatrix * vec4(farPoint.xyz - nearPoint.xyz, 0.0);\n    vec4 worldOrigin = inverseViewMatrix * nearPoint;\n\n    // Outputs\n    direction = worldDirection.xyz;\n    origin = worldOrigin.xyz;\n  }\n}\n\nvoid main() {\n  vUv = position.xy * 0.5 + 0.5;\n\n  vec3 direction, origin;\n  getCameraRay(origin, direction);\n\n  vec3 cameraPositionECEF = (worldToECEFMatrix * vec4(origin, 1.0)).xyz;\n  vCameraPosition = (cameraPositionECEF + altitudeCorrection) * METER_TO_LENGTH_UNIT;\n  vRayDirection = (worldToECEFMatrix * vec4(direction, 0.0)).xyz;\n\n  gl_Position = vec4(position.xy, 1.0, 1.0);\n}\n`;\nvar Ri = Object.defineProperty, Ye = (n, e, t, r) => {\n  for (var i = void 0, a = n.length - 1, o; a >= 0; a--)\n    (o = n[a]) && (i = o(e, t, i) || i);\n  return i && Ri(e, t, i), i;\n};\nconst _i = {\n  ...Be,\n  sun: !0,\n  moon: !0,\n  moonAngularRadius: 45e-4,\n  // ≈ 15.5 arcminutes\n  lunarRadianceScale: 1,\n  ground: !0,\n  groundAlbedo: new ae(0)\n};\nclass Ke extends se {\n  constructor(e) {\n    const {\n      sun: t,\n      moon: r,\n      moonDirection: i,\n      moonAngularRadius: a,\n      lunarRadianceScale: o,\n      ground: c,\n      groundAlbedo: s,\n      ...l\n    } = { ..._i, ...e };\n    super({\n      name: \"SkyMaterial\",\n      glslVersion: He,\n      vertexShader: Ei,\n      fragmentShader: W(vi, {\n        core: { raySphereIntersection: wt },\n        bruneton: {\n          common: $,\n          definitions: K,\n          runtime: Ve\n        },\n        sky: Ct\n      }),\n      ...l,\n      uniforms: {\n        inverseProjectionMatrix: new d(new D()),\n        inverseViewMatrix: new d(new D()),\n        moonDirection: new d(i?.clone() ?? new p()),\n        moonAngularRadius: new d(a),\n        lunarRadianceScale: new d(o),\n        groundAlbedo: new d(s.clone()),\n        shadowLengthBuffer: new d(null),\n        ...l.uniforms\n      },\n      defines: {\n        PERSPECTIVE_CAMERA: \"1\"\n      },\n      depthWrite: !1,\n      depthTest: !0\n    }), this.shadowLength = null, this.sun = t, this.moon = r, this.ground = c;\n  }\n  onBeforeRender(e, t, r, i, a, o) {\n    super.onBeforeRender(e, t, r, i, a, o);\n    const { uniforms: c, defines: s } = this;\n    c.inverseProjectionMatrix.value.copy(r.projectionMatrixInverse), c.inverseViewMatrix.value.copy(r.matrixWorld);\n    const l = s.PERSPECTIVE_CAMERA != null, h = r.isPerspectiveCamera === !0;\n    h !== l && (h ? s.PERSPECTIVE_CAMERA = \"1\" : delete s.PERSPECTIVE_CAMERA, this.needsUpdate = !0);\n    const m = this.groundAlbedo, f = s.GROUND_ALBEDO != null, v = m.r !== 0 || m.g !== 0 || m.b !== 0;\n    v !== f && (v ? this.defines.GROUND_ALBEDO = \"1\" : delete this.defines.GROUND_ALBEDO, this.needsUpdate = !0);\n    const T = this.shadowLength, E = s.HAS_SHADOW_LENGTH != null, x = T != null;\n    x !== E && (x ? s.HAS_SHADOW_LENGTH = \"1\" : (delete s.HAS_SHADOW_LENGTH, c.shadowLengthBuffer.value = null), this.needsUpdate = !0), x && (c.shadowLengthBuffer.value = T.map);\n  }\n  get moonDirection() {\n    return this.uniforms.moonDirection.value;\n  }\n  get moonAngularRadius() {\n    return this.uniforms.moonAngularRadius.value;\n  }\n  set moonAngularRadius(e) {\n    this.uniforms.moonAngularRadius.value = e;\n  }\n  get lunarRadianceScale() {\n    return this.uniforms.lunarRadianceScale.value;\n  }\n  set lunarRadianceScale(e) {\n    this.uniforms.lunarRadianceScale.value = e;\n  }\n  get groundAlbedo() {\n    return this.uniforms.groundAlbedo.value;\n  }\n}\nYe([\n  w(\"SUN\")\n], Ke.prototype, \"sun\");\nYe([\n  w(\"MOON\")\n], Ke.prototype, \"moon\");\nYe([\n  w(\"GROUND\")\n], Ke.prototype, \"ground\");\nclass ji extends Mn {\n  constructor(e) {\n    super();\n    const t = new Int16Array(e), r = new Uint8Array(e), i = new et(t, 5), a = new et(r, 10);\n    this.setAttribute(\n      \"position\",\n      new pe(i, 3, 0, !0)\n    ), this.setAttribute(\n      \"magnitude\",\n      new pe(a, 1, 6, !0)\n    ), this.setAttribute(\n      \"color\",\n      new pe(a, 3, 7, !0)\n    ), this.boundingSphere = new An(new p(), 1);\n  }\n}\nconst xi = `precision highp float;\nprecision highp sampler3D;\n\n#include \"bruneton/definitions\"\n\nuniform AtmosphereParameters ATMOSPHERE;\nuniform vec3 SUN_SPECTRAL_RADIANCE_TO_LUMINANCE;\nuniform vec3 SKY_SPECTRAL_RADIANCE_TO_LUMINANCE;\n\nuniform sampler2D transmittance_texture;\nuniform sampler3D scattering_texture;\nuniform sampler2D irradiance_texture;\nuniform sampler3D single_mie_scattering_texture;\nuniform sampler3D higher_order_scattering_texture;\n\n#include \"bruneton/common\"\n#include \"bruneton/runtime\"\n\nuniform vec3 sunDirection;\n\nin vec3 vCameraPosition;\nin vec3 vRayDirection;\n\nlayout(location = 0) out vec4 outputColor;\n\n#include <mrt_layout>\n\nin vec3 vColor;\n\nvoid main() {\n  #if !defined(PERSPECTIVE_CAMERA)\n  outputColor = vec4(0.0);\n  discard; // Rendering celestial objects without perspective doesn't make sense.\n  #endif // !defined(PERSPECTIVE_CAMERA)\n\n  #ifdef BACKGROUND\n  vec3 rayDirection = normalize(vRayDirection);\n  float r = length(vCameraPosition);\n  float mu = dot(vCameraPosition, rayDirection) / r;\n\n  if (RayIntersectsGround(ATMOSPHERE, r, mu)) {\n    discard;\n  }\n\n  vec3 transmittance;\n  vec3 radiance = GetSkyRadiance(\n    vCameraPosition,\n    normalize(vRayDirection),\n    0.0, // Shadow length\n    sunDirection,\n    transmittance\n  );\n  radiance += transmittance * vColor;\n  outputColor = vec4(radiance, 1.0);\n  #else // BACKGROUND\n  outputColor = vec4(vColor, 1.0);\n  #endif // BACKGROUND\n\n  #include <mrt_output>\n}\n`, Mi = `precision highp float;\nprecision highp sampler3D;\n\n#define saturate(x) clamp(x, 0.0, 1.0)\n\nuniform mat4 projectionMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 viewMatrix;\nuniform mat4 matrixWorld;\nuniform vec3 cameraPosition;\nuniform float cameraFar;\nuniform mat4 worldToECEFMatrix;\nuniform vec3 altitudeCorrection;\nuniform float pointSize;\nuniform vec2 magnitudeRange;\nuniform float intensity;\n\nlayout(location = 0) in vec3 position;\nlayout(location = 1) in float magnitude;\nlayout(location = 2) in vec3 color;\n\nout vec3 vCameraPosition;\nout vec3 vRayDirection;\nout vec3 vEllipsoidCenter;\nout vec3 vColor;\n\nvoid main() {\n  // Magnitude is stored between 0 to 1 within the given range.\n  float m = mix(magnitudeRange.x, magnitudeRange.y, magnitude);\n  vec3 v = pow(vec3(10.0), -vec3(magnitudeRange, m) / 2.5);\n  vColor = vec3(intensity * color);\n  vColor *= saturate((v.z - v.y) / (v.x - v.y));\n\n  #ifdef BACKGROUND\n  vec3 worldDirection = normalize(matrixWorld * vec4(position, 1.0)).xyz;\n  vec3 cameraPositionECEF = (worldToECEFMatrix * vec4(cameraPosition, 1.0)).xyz;\n  vCameraPosition = (cameraPositionECEF + altitudeCorrection) * METER_TO_LENGTH_UNIT;\n  vRayDirection = (worldToECEFMatrix * vec4(worldDirection, 0.0)).xyz;\n  gl_Position =\n    projectionMatrix * viewMatrix * vec4(cameraPosition + worldDirection * cameraFar, 1.0);\n  #else // BACKGROUND\n  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n  #endif // BACKGROUND\n\n  gl_PointSize = pointSize;\n}\n`;\nvar Ai = Object.defineProperty, Kt = (n, e, t, r) => {\n  for (var i = void 0, a = n.length - 1, o; a >= 0; a--)\n    (o = n[a]) && (i = o(e, t, i) || i);\n  return i && Ai(e, t, i), i;\n};\nconst wi = {\n  ...Be,\n  pointSize: 1,\n  intensity: 1,\n  background: !0,\n  ground: !0\n};\nclass $t extends se {\n  constructor(e) {\n    const { pointSize: t, intensity: r, background: i, ground: a, ...o } = {\n      ...wi,\n      ...e\n    };\n    super({\n      name: \"StarsMaterial\",\n      glslVersion: He,\n      vertexShader: Mi,\n      fragmentShader: W(xi, {\n        bruneton: {\n          common: $,\n          definitions: K,\n          runtime: Ve\n        }\n      }),\n      ...o,\n      uniforms: {\n        projectionMatrix: new d(new D()),\n        modelViewMatrix: new d(new D()),\n        viewMatrix: new d(new D()),\n        matrixWorld: new d(new D()),\n        cameraFar: new d(0),\n        pointSize: new d(0),\n        magnitudeRange: new d(new oe(-2, 8)),\n        intensity: new d(r),\n        ...o.uniforms\n      },\n      defines: {\n        PERSPECTIVE_CAMERA: \"1\"\n      },\n      depthWrite: !0,\n      depthTest: !0\n    }), this.pointSize = t, this.background = i, this.ground = a;\n  }\n  onBeforeRender(e, t, r, i, a, o) {\n    super.onBeforeRender(e, t, r, i, a, o);\n    const c = this.uniforms;\n    c.projectionMatrix.value.copy(r.projectionMatrix), c.modelViewMatrix.value.copy(r.modelViewMatrix), c.viewMatrix.value.copy(r.matrixWorldInverse), c.matrixWorld.value.copy(a.matrixWorld), c.cameraFar.value = r.far, c.pointSize.value = this.pointSize * e.getPixelRatio();\n    const s = r.isPerspectiveCamera === !0;\n    this.defines.PERSPECTIVE_CAMERA != null !== s && (s ? this.defines.PERSPECTIVE_CAMERA = \"1\" : delete this.defines.PERSPECTIVE_CAMERA, this.needsUpdate = !0);\n  }\n  get magnitudeRange() {\n    return this.uniforms.magnitudeRange.value;\n  }\n  get intensity() {\n    return this.uniforms.intensity.value;\n  }\n  set intensity(e) {\n    this.uniforms.intensity.value = e;\n  }\n}\nKt([\n  w(\"BACKGROUND\")\n], $t.prototype, \"background\");\nKt([\n  w(\"GROUND\")\n], $t.prototype, \"ground\");\nconst yi = /* @__PURE__ */ new p(), Ci = /* @__PURE__ */ new w0(), Di = {\n  ellipsoid: F0.WGS84,\n  correctAltitude: !0,\n  distance: 1\n};\nclass Xi extends wn {\n  constructor(e, t = n0.DEFAULT) {\n    super(), this.atmosphere = t, this.worldToECEFMatrix = new D();\n    const {\n      irradianceTexture: r = null,\n      ellipsoid: i,\n      correctAltitude: a,\n      sunDirection: o,\n      distance: c\n    } = { ...Di, ...e };\n    this.transmittanceTexture = r, this.ellipsoid = i, this.correctAltitude = a, this.sunDirection = o?.clone() ?? new p(), this.distance = c;\n  }\n  update() {\n    const e = this.worldToECEFMatrix, t = Ci.setFromMatrix4(e).transpose();\n    if (this.position.copy(this.sunDirection).applyMatrix3(t).normalize().multiplyScalar(this.distance).add(this.target.position), this.transmittanceTexture == null)\n      return;\n    const r = this.target.getWorldPosition(yi).applyMatrix4(e);\n    ei(\n      this.transmittanceTexture,\n      r,\n      this.sunDirection,\n      this.color,\n      {\n        ellipsoid: this.ellipsoid,\n        correctAltitude: this.correctAltitude\n      },\n      this.atmosphere\n    );\n  }\n}\nexport {\n  H as A,\n  v0 as D,\n  ki as L,\n  Vi as P,\n  Wi as S,\n  se as a,\n  n0 as b,\n  Bi as c,\n  Ke as d,\n  ji as e,\n  $t as f,\n  Xi as g,\n  Kn as h,\n  Be as i,\n  Wr as j,\n  jt as k,\n  Xe as l,\n  zi as m,\n  Gi as n,\n  bi as o,\n  Fi as p,\n  Ui as q,\n  ei as r,\n  Si as s,\n  _i as t,\n  wi as u,\n  Di as v,\n  P0 as w\n};\n//# sourceMappingURL=shared.js.map\n","import { _ as o, a as n, b as t, c as m } from \"../shared3.js\";\nconst c = m, e = o, i = n, r = t;\nexport {\n  e as common,\n  i as definitions,\n  r as precompute,\n  c as runtime\n};\n//# sourceMappingURL=bruneton.js.map\n","import { Pass as Fe, ShaderPass as K, Resolution as $, Effect as ze, EffectAttribute as We } from \"postprocessing\";\nimport { Vector3 as p, Vector2 as f, Matrix4 as m, Object3D as se, Box3 as Be, Uniform as r, GLSL3 as G, Vector4 as S, RawShaderMaterial as Q, Camera as we, WebGLRenderTarget as Ge, HalfFloatType as Ce, LinearFilter as B, RedFormat as Ve, WebGLArrayRenderTarget as ke, EventDispatcher as je, Matrix3 as Ye, Texture as ce, Data3DTexture as le } from \"three\";\nimport { AtmosphereMaterialBase as Ze, AtmosphereParameters as Te, getAltitudeCorrectionOffset as qe } from \"@takram/three-atmosphere\";\nimport { lerp as De, defineInt as L, defineExpression as Ee, define as x, defineFloat as ee, unrollLoops as V, resolveIncludes as H, reinterpretType as Ke, Geodetic as $e, definePropertyShorthand as he, defineUniformShorthand as ue } from \"@takram/three-geospatial\";\nimport { runtime as de, definitions as pe, common as fe } from \"@takram/three-atmosphere/shaders/bruneton\";\nimport { vogelDisk as Xe, interleavedGradientNoise as Je, cascadedShadowMaps as Qe, raySphereIntersection as Ae, generators as et, turbo as _e, math as Pe, depth as tt } from \"@takram/three-geospatial/shaders\";\nclass k {\n  constructor(e = 0, t = 0, n = 0, a = 0) {\n    this.expTerm = e, this.exponent = t, this.linearTerm = n, this.constantTerm = a;\n  }\n  set(e = 0, t = 0, n = 0, a = 0) {\n    return this.expTerm = e, this.exponent = t, this.linearTerm = n, this.constantTerm = a, this;\n  }\n  clone() {\n    return new k(\n      this.expTerm,\n      this.exponent,\n      this.linearTerm,\n      this.constantTerm\n    );\n  }\n  copy(e) {\n    return this.expTerm = e.expTerm, this.exponent = e.exponent, this.linearTerm = e.linearTerm, this.constantTerm = e.constantTerm, this;\n  }\n}\nconst nt = [\n  \"channel\",\n  \"altitude\",\n  \"height\",\n  \"densityScale\",\n  \"shapeAmount\",\n  \"shapeDetailAmount\",\n  \"weatherExponent\",\n  \"shapeAlteringBias\",\n  \"coverageFilterWidth\",\n  \"shadow\",\n  \"densityProfile\"\n];\nfunction at(o, e) {\n  if (e != null)\n    for (const t of nt) {\n      const n = e[t];\n      n != null && (o[t] instanceof k ? o[t].copy(n) : o[t] = n);\n    }\n}\nconst b = class b {\n  constructor(e) {\n    this.channel = \"r\", this.altitude = 0, this.height = 0, this.densityScale = 0.2, this.shapeAmount = 1, this.shapeDetailAmount = 1, this.weatherExponent = 1, this.shapeAlteringBias = 0.35, this.coverageFilterWidth = 0.6, this.densityProfile = new k(0, 0, 0.75, 0.25), this.shadow = !1, this.set(e);\n  }\n  set(e) {\n    return at(this, e), this;\n  }\n  clone() {\n    return new b(this);\n  }\n  copy(e) {\n    return this.channel = e.channel, this.altitude = e.altitude, this.height = e.height, this.densityScale = e.densityScale, this.shapeAmount = e.shapeAmount, this.shapeDetailAmount = e.shapeDetailAmount, this.weatherExponent = e.weatherExponent, this.shapeAlteringBias = e.shapeAlteringBias, this.coverageFilterWidth = e.coverageFilterWidth, this.densityProfile.copy(e.densityProfile), this.shadow = e.shadow, this;\n  }\n};\nb.DEFAULT = /* @__PURE__ */ new b();\nlet w = b;\nconst R = /* @__PURE__ */ Array.from(\n  { length: 8 },\n  () => ({ value: 0, flag: 0 })\n), I = /* @__PURE__ */ Array.from(\n  { length: 3 },\n  () => ({ min: 0, max: 0 })\n);\nfunction it(o, e) {\n  return o.value !== e.value ? o.value - e.value : o.flag - e.flag;\n}\nconst U = class U extends Array {\n  constructor(e) {\n    super(\n      new w(e?.[0]),\n      new w(e?.[1]),\n      new w(e?.[2]),\n      new w(e?.[3])\n    );\n  }\n  set(e) {\n    return this[0].set(e?.[0]), this[1].set(e?.[1]), this[2].set(e?.[2]), this[3].set(e?.[3]), this;\n  }\n  reset() {\n    return this[0].copy(w.DEFAULT), this[1].copy(w.DEFAULT), this[2].copy(w.DEFAULT), this[3].copy(w.DEFAULT), this;\n  }\n  clone() {\n    return new U(this);\n  }\n  copy(e) {\n    return this[0].copy(e[0]), this[1].copy(e[1]), this[2].copy(e[2]), this[3].copy(e[3]), this;\n  }\n  get localWeatherChannels() {\n    return this[0].channel + this[1].channel + this[2].channel + this[3].channel;\n  }\n  packValues(e, t) {\n    return t.set(this[0][e], this[1][e], this[2][e], this[3][e]);\n  }\n  packSums(e, t, n) {\n    return n.set(\n      this[0][e] + this[0][t],\n      this[1][e] + this[1][t],\n      this[2][e] + this[2][t],\n      this[3][e] + this[3][t]\n    );\n  }\n  packDensityProfiles(e, t) {\n    return t.set(\n      this[0].densityProfile[e],\n      this[1].densityProfile[e],\n      this[2].densityProfile[e],\n      this[3].densityProfile[e]\n    );\n  }\n  // Redundant, but need to avoid creating garbage here as this runs every frame.\n  packIntervalHeights(e, t) {\n    for (let s = 0; s < 4; ++s) {\n      const l = this[s];\n      let h = R[s];\n      h.value = l.altitude, h.flag = 0, h = R[s + 4], h.value = l.altitude + l.height, h.flag = 1;\n    }\n    R.sort(it);\n    let n = 0, a = 0;\n    for (let s = 0; s < R.length; ++s) {\n      const { value: l, flag: h } = R[s];\n      if (a === 0 && s > 0) {\n        const u = I[n++];\n        u.min = R[s - 1].value, u.max = l;\n      }\n      a += h === 0 ? 1 : -1;\n    }\n    for (; n < 3; ++n) {\n      const s = I[n];\n      s.min = 0, s.max = 0;\n    }\n    let i = I[0];\n    e.x = i.min, t.x = i.max, i = I[1], e.y = i.min, t.y = i.max, i = I[2], e.z = i.min, t.z = i.max;\n  }\n};\nU.DEFAULT = /* @__PURE__ */ new U([\n  {\n    channel: \"r\",\n    altitude: 750,\n    height: 650,\n    densityScale: 0.2,\n    shapeAmount: 1,\n    shapeDetailAmount: 1,\n    weatherExponent: 1,\n    shapeAlteringBias: 0.35,\n    coverageFilterWidth: 0.6,\n    shadow: !0\n  },\n  {\n    channel: \"g\",\n    altitude: 1e3,\n    height: 1200,\n    densityScale: 0.2,\n    shapeAmount: 1,\n    shapeDetailAmount: 1,\n    weatherExponent: 1,\n    shapeAlteringBias: 0.35,\n    coverageFilterWidth: 0.6,\n    shadow: !0\n  },\n  {\n    channel: \"b\",\n    altitude: 7500,\n    height: 500,\n    densityScale: 3e-3,\n    shapeAmount: 0.4,\n    shapeDetailAmount: 0,\n    weatherExponent: 1,\n    shapeAlteringBias: 0.35,\n    coverageFilterWidth: 0.5\n  },\n  { channel: \"a\" }\n]);\nlet X = U;\nvar rt = \"production\" === \"production\", me = \"Invariant failed\";\nfunction A(o, e) {\n  if (!o) {\n    if (rt)\n      throw new Error(me);\n    var t = me;\n    throw new Error(t);\n  }\n}\nclass F {\n  constructor(e, t) {\n    this.near = [new p(), new p(), new p(), new p()], this.far = [new p(), new p(), new p(), new p()], e != null && t != null && this.setFromCamera(e, t);\n  }\n  clone() {\n    return new F().copy(this);\n  }\n  copy(e) {\n    for (let t = 0; t < 4; ++t)\n      this.near[t].copy(e.near[t]), this.far[t].copy(e.far[t]);\n    return this;\n  }\n  setFromCamera(e, t) {\n    const n = e.isOrthographicCamera === !0, a = e.projectionMatrixInverse;\n    this.near[0].set(1, 1, -1), this.near[1].set(1, -1, -1), this.near[2].set(-1, -1, -1), this.near[3].set(-1, 1, -1);\n    for (let i = 0; i < 4; ++i)\n      this.near[i].applyMatrix4(a);\n    this.far[0].set(1, 1, 1), this.far[1].set(1, -1, 1), this.far[2].set(-1, -1, 1), this.far[3].set(-1, 1, 1);\n    for (let i = 0; i < 4; ++i) {\n      const s = this.far[i];\n      s.applyMatrix4(a);\n      const l = Math.abs(s.z);\n      n ? s.z *= Math.min(t / l, 1) : s.multiplyScalar(Math.min(t / l, 1));\n    }\n    return this;\n  }\n  split(e, t = []) {\n    for (let n = 0; n < e.length; ++n) {\n      const a = t[n] ??= new F();\n      if (n === 0)\n        for (let i = 0; i < 4; ++i)\n          a.near[i].copy(this.near[i]);\n      else\n        for (let i = 0; i < 4; ++i)\n          a.near[i].lerpVectors(\n            this.near[i],\n            this.far[i],\n            e[n - 1]\n          );\n      if (n === e.length - 1)\n        for (let i = 0; i < 4; ++i)\n          a.far[i].copy(this.far[i]);\n      else\n        for (let i = 0; i < 4; ++i)\n          a.far[i].lerpVectors(\n            this.near[i],\n            this.far[i],\n            e[n]\n          );\n    }\n    return t.length = e.length, t;\n  }\n  applyMatrix4(e) {\n    for (let t = 0; t < 4; ++t)\n      this.near[t].applyMatrix4(e), this.far[t].applyMatrix4(e);\n    return this;\n  }\n}\nconst ot = {\n  uniform: (o, e, t, n, a = []) => {\n    for (let i = 0; i < o; ++i)\n      a[i] = (e + (t - e) * (i + 1) / o) / t;\n    return a.length = o, a;\n  },\n  logarithmic: (o, e, t, n, a = []) => {\n    for (let i = 0; i < o; ++i)\n      a[i] = e * (t / e) ** ((i + 1) / o) / t;\n    return a.length = o, a;\n  },\n  practical: (o, e, t, n = 0.5, a = []) => {\n    for (let i = 0; i < o; ++i) {\n      const s = (e + (t - e) * (i + 1) / o) / t, l = e * (t / e) ** ((i + 1) / o) / t;\n      a[i] = De(s, l, n);\n    }\n    return a.length = o, a;\n  }\n};\nfunction st(o, e, t, n, a, i = []) {\n  return ot[o](e, t, n, a, i);\n}\nconst ve = /* @__PURE__ */ new p(), ge = /* @__PURE__ */ new p(), ct = /* @__PURE__ */ new m(), Se = /* @__PURE__ */ new m(), lt = /* @__PURE__ */ new F(), ht = /* @__PURE__ */ new Be(), ut = {\n  maxFar: null,\n  farScale: 1,\n  splitMode: \"practical\",\n  splitLambda: 0.5,\n  margin: 0,\n  fade: !0\n};\nclass dt {\n  constructor(e) {\n    this.cascades = [], this.mapSize = new f(), this.cameraFrustum = new F(), this.frusta = [], this.splits = [], this._far = 0;\n    const {\n      cascadeCount: t,\n      mapSize: n,\n      maxFar: a,\n      farScale: i,\n      splitMode: s,\n      splitLambda: l,\n      margin: h,\n      fade: u\n    } = {\n      ...ut,\n      ...e\n    };\n    this.cascadeCount = t, this.mapSize.copy(n), this.maxFar = a, this.farScale = i, this.splitMode = s, this.splitLambda = l, this.margin = h, this.fade = u;\n  }\n  get cascadeCount() {\n    return this.cascades.length;\n  }\n  set cascadeCount(e) {\n    if (e !== this.cascadeCount) {\n      for (let t = 0; t < e; ++t)\n        this.cascades[t] ??= {\n          interval: new f(),\n          matrix: new m(),\n          inverseMatrix: new m(),\n          projectionMatrix: new m(),\n          inverseProjectionMatrix: new m(),\n          viewMatrix: new m(),\n          inverseViewMatrix: new m()\n        };\n      this.cascades.length = e;\n    }\n  }\n  get far() {\n    return this._far;\n  }\n  updateIntervals(e) {\n    const t = this.cascadeCount, n = this.splits, a = this.far;\n    st(\n      this.splitMode,\n      t,\n      e.near,\n      a,\n      this.splitLambda,\n      n\n    ), this.cameraFrustum.setFromCamera(e, a), this.cameraFrustum.split(n, this.frusta);\n    const i = this.cascades;\n    for (let s = 0; s < t; ++s)\n      i[s].interval.set(n[s - 1] ?? 0, n[s] ?? 0);\n  }\n  getFrustumRadius(e, t) {\n    const n = t.near, a = t.far;\n    let i = Math.max(\n      a[0].distanceTo(a[2]),\n      a[0].distanceTo(n[2])\n    );\n    if (this.fade) {\n      const s = e.near, l = this.far, h = a[0].z / (l - s);\n      i += 0.25 * h ** 2 * (l - s);\n    }\n    return i * 0.5;\n  }\n  updateMatrices(e, t, n = 1) {\n    const a = ct.lookAt(\n      ve.setScalar(0),\n      ge.copy(t).multiplyScalar(-1),\n      se.DEFAULT_UP\n    ), i = Se.multiplyMatrices(\n      Se.copy(a).invert(),\n      e.matrixWorld\n    ), s = this.frusta, l = this.cascades;\n    A(s.length === l.length);\n    const h = this.margin, u = this.mapSize;\n    for (let d = 0; d < s.length; ++d) {\n      const v = s[d], C = l[d], D = this.getFrustumRadius(e, s[d]), P = -D, O = D, ne = D, ae = -D;\n      C.projectionMatrix.makeOrthographic(\n        P,\n        O,\n        ne,\n        ae,\n        -this.margin,\n        // near\n        D * 2 + this.margin\n        // far\n      );\n      const { near: Ue, far: He } = lt.copy(v).applyMatrix4(i), z = ht.makeEmpty();\n      for (let W = 0; W < 4; W++)\n        z.expandByPoint(Ue[W]), z.expandByPoint(He[W]);\n      const E = z.getCenter(ve);\n      E.z = z.max.z + h;\n      const ie = (O - P) / u.width, re = (ne - ae) / u.height;\n      E.x = Math.round(E.x / ie) * ie, E.y = Math.round(E.y / re) * re, E.applyMatrix4(a);\n      const oe = ge.copy(t).multiplyScalar(n).add(E);\n      C.inverseViewMatrix.lookAt(E, oe, se.DEFAULT_UP).setPosition(oe);\n    }\n  }\n  update(e, t, n) {\n    this._far = this.maxFar != null ? Math.min(this.maxFar, e.far * this.farScale) : e.far * this.farScale, this.updateIntervals(e), this.updateMatrices(e, t, n);\n    const a = this.cascades, i = this.cascadeCount;\n    for (let s = 0; s < i; ++s) {\n      const {\n        matrix: l,\n        inverseMatrix: h,\n        projectionMatrix: u,\n        inverseProjectionMatrix: d,\n        viewMatrix: v,\n        inverseViewMatrix: C\n      } = a[s];\n      d.copy(u).invert(), v.copy(C).invert(), l.copy(u).multiply(v), h.copy(C).multiply(d);\n    }\n  }\n}\nconst ye = [\n  0,\n  8,\n  2,\n  10,\n  12,\n  4,\n  14,\n  6,\n  3,\n  11,\n  1,\n  9,\n  15,\n  7,\n  13,\n  5\n], Oe = /* @__PURE__ */ ye.reduce((o, e, t) => {\n  const n = new f();\n  for (let a = 0; a < 16; ++a)\n    if (ye[a] === t) {\n      n.set((a % 4 + 0.5) / 4, (Math.floor(a / 4) + 0.5) / 4);\n      break;\n    }\n  return [...o, n];\n}, []), pt = {\n  resolutionScale: 1,\n  lightShafts: !0,\n  shapeDetail: !0,\n  turbulence: !0,\n  haze: !0,\n  clouds: {\n    multiScatteringOctaves: 8,\n    accurateSunSkyLight: !0,\n    accuratePhaseFunction: !1,\n    // Primary raymarch\n    maxIterationCount: 500,\n    minStepSize: 50,\n    maxStepSize: 1e3,\n    maxRayDistance: 2e5,\n    perspectiveStepScale: 1.01,\n    minDensity: 1e-5,\n    minExtinction: 1e-5,\n    minTransmittance: 0.01,\n    // Secondary raymarch\n    maxIterationCountToGround: 3,\n    maxIterationCountToSun: 2,\n    minSecondaryStepSize: 100,\n    secondaryStepScale: 2,\n    // Shadow length\n    maxShadowLengthIterationCount: 500,\n    minShadowLengthStepSize: 50,\n    maxShadowLengthRayDistance: 2e5\n  },\n  shadow: {\n    cascadeCount: 3,\n    mapSize: /* @__PURE__ */ new f(512, 512),\n    // Primary raymarch\n    maxIterationCount: 50,\n    minStepSize: 100,\n    maxStepSize: 1e3,\n    minDensity: 1e-5,\n    minExtinction: 1e-5,\n    minTransmittance: 1e-4\n  }\n}, c = pt, ft = {\n  // TODO: We cloud decrease multi-scattering octaves for lower quality presets,\n  // but it leads to a loss of higher frequency scattering, making it darker\n  // overall, which suggests the need for a fudge factor to scale the radiance.\n  low: {\n    ...c,\n    lightShafts: !1,\n    // Expensive\n    shapeDetail: !1,\n    // Expensive\n    turbulence: !1,\n    // Expensive\n    clouds: {\n      ...c.clouds,\n      accurateSunSkyLight: !1,\n      // Greatly reduces texel reads.\n      maxIterationCount: 200,\n      minStepSize: 100,\n      maxRayDistance: 1e5,\n      minDensity: 1e-4,\n      minExtinction: 1e-4,\n      minTransmittance: 0.1,\n      // Makes the primary march terminate earlier.\n      maxIterationCountToGround: 0,\n      // Expensive\n      maxIterationCountToSun: 1\n      // Only 1 march makes big difference\n    },\n    shadow: {\n      ...c.shadow,\n      maxIterationCount: 25,\n      minDensity: 1e-4,\n      minExtinction: 1e-4,\n      minTransmittance: 0.01,\n      // Makes the primary march terminate earlier.\n      cascadeCount: 2,\n      // Obvious\n      mapSize: /* @__PURE__ */ new f(256, 256)\n      // Obvious\n    }\n  },\n  medium: {\n    ...c,\n    lightShafts: !1,\n    // Expensive\n    turbulence: !1,\n    // Expensive\n    clouds: {\n      ...c.clouds,\n      minDensity: 1e-4,\n      minExtinction: 1e-4,\n      accurateSunSkyLight: !1,\n      maxIterationCountToSun: 2,\n      maxIterationCountToGround: 1\n    },\n    shadow: {\n      ...c.shadow,\n      minDensity: 1e-4,\n      minExtinction: 1e-4,\n      mapSize: /* @__PURE__ */ new f(256, 256)\n    }\n  },\n  high: c,\n  // Consider high quality preset as default.\n  ultra: {\n    ...c,\n    clouds: {\n      ...c.clouds,\n      minStepSize: 10\n    },\n    shadow: {\n      ...c.shadow,\n      mapSize: /* @__PURE__ */ new f(1024, 1024)\n    }\n  }\n}, mt = `precision highp float;\nprecision highp sampler3D;\nprecision highp sampler2DArray;\n\n#include <common>\n#include <packing>\n\n#include \"core/depth\"\n#include \"core/math\"\n#include \"core/turbo\"\n#include \"core/generators\"\n#include \"core/raySphereIntersection\"\n#include \"core/cascadedShadowMaps\"\n#include \"core/interleavedGradientNoise\"\n#include \"core/vogelDisk\"\n\n#include \"atmosphere/bruneton/definitions\"\n\nuniform AtmosphereParameters ATMOSPHERE;\nuniform vec3 SUN_SPECTRAL_RADIANCE_TO_LUMINANCE;\nuniform vec3 SKY_SPECTRAL_RADIANCE_TO_LUMINANCE;\n\nuniform sampler2D transmittance_texture;\nuniform sampler3D scattering_texture;\nuniform sampler2D irradiance_texture;\nuniform sampler3D single_mie_scattering_texture;\nuniform sampler3D higher_order_scattering_texture;\n\n#include \"atmosphere/bruneton/common\"\n#include \"atmosphere/bruneton/runtime\"\n\n#include \"types\"\n#include \"parameters\"\n#include \"clouds\"\n\n#if !defined(RECIPROCAL_PI4)\n#define RECIPROCAL_PI4 0.07957747154594767\n#endif // !defined(RECIPROCAL_PI4)\n\nuniform sampler2D depthBuffer;\nuniform mat4 viewMatrix;\nuniform mat4 reprojectionMatrix;\nuniform mat4 viewReprojectionMatrix;\nuniform float cameraNear;\nuniform float cameraFar;\nuniform float cameraHeight;\nuniform vec2 temporalJitter;\nuniform vec2 targetUvScale;\nuniform float mipLevelScale;\n\n// Scattering\nconst vec2 scatterAnisotropy = vec2(SCATTER_ANISOTROPY_1, SCATTER_ANISOTROPY_2);\nconst float scatterAnisotropyMix = SCATTER_ANISOTROPY_MIX;\nuniform float skyLightScale;\nuniform float groundBounceScale;\nuniform float powderScale;\nuniform float powderExponent;\n\n// Primary raymarch\nuniform int maxIterationCount;\nuniform float minStepSize;\nuniform float maxStepSize;\nuniform float maxRayDistance;\nuniform float perspectiveStepScale;\n\n// Secondary raymarch\nuniform int maxIterationCountToSun;\nuniform int maxIterationCountToGround;\nuniform float minSecondaryStepSize;\nuniform float secondaryStepScale;\n\n// Beer shadow map\nuniform sampler2DArray shadowBuffer;\nuniform vec2 shadowTexelSize;\nuniform vec2 shadowIntervals[SHADOW_CASCADE_COUNT];\nuniform mat4 shadowMatrices[SHADOW_CASCADE_COUNT];\nuniform float shadowFar;\nuniform float maxShadowFilterRadius;\n\n// Shadow length\n#ifdef SHADOW_LENGTH\nuniform int maxShadowLengthIterationCount;\nuniform float minShadowLengthStepSize;\nuniform float maxShadowLengthRayDistance;\n#endif // SHADOW_LENGTH\n\nin vec2 vUv;\nin vec3 vCameraPosition;\nin vec3 vCameraDirection; // Direction to the center of screen\nin vec3 vRayDirection; // Direction to the texel\nin vec3 vViewPosition;\nin GroundIrradiance vGroundIrradiance;\nin CloudsIrradiance vCloudsIrradiance;\n\nlayout(location = 0) out vec4 outputColor;\nlayout(location = 1) out vec3 outputDepthVelocity;\n#ifdef SHADOW_LENGTH\nlayout(location = 2) out float outputShadowLength;\n#endif // SHADOW_LENGTH\n\nfloat getViewZ(const float depth) {\n  #ifdef PERSPECTIVE_CAMERA\n  return perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n  #else // PERSPECTIVE_CAMERA\n  return orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n  #endif // PERSPECTIVE_CAMERA\n}\n\nvec3 ecefToWorld(const vec3 positionECEF) {\n  return (ecefToWorldMatrix * vec4(positionECEF - altitudeCorrection, 1.0)).xyz;\n}\n\nvec2 getShadowUv(const vec3 worldPosition, const int cascadeIndex) {\n  vec4 clip = shadowMatrices[cascadeIndex] * vec4(worldPosition, 1.0);\n  clip /= clip.w;\n  return clip.xy * 0.5 + 0.5;\n}\n\nfloat getDistanceToShadowTop(const vec3 rayPosition) {\n  // Distance to the top of the shadows along the sun direction, which matches\n  // the ray origin of BSM.\n  return raySphereSecondIntersection(\n    rayPosition,\n    sunDirection,\n    vec3(0.0),\n    bottomRadius + shadowTopHeight\n  );\n}\n\n#ifdef DEBUG_SHOW_CASCADES\n\nconst vec3 cascadeColors[4] = vec3[4](\n  vec3(1.0, 0.0, 0.0),\n  vec3(0.0, 1.0, 0.0),\n  vec3(0.0, 0.0, 1.0),\n  vec3(1.0, 1.0, 0.0)\n);\n\nvec3 getCascadeColor(const vec3 rayPosition) {\n  vec3 worldPosition = ecefToWorld(rayPosition);\n  int cascadeIndex = getCascadeIndex(\n    viewMatrix,\n    worldPosition,\n    shadowIntervals,\n    cameraNear,\n    shadowFar\n  );\n  vec2 uv = getShadowUv(worldPosition, cascadeIndex);\n  if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n    return vec3(1.0);\n  }\n  return cascadeColors[cascadeIndex];\n}\n\nvec3 getFadedCascadeColor(const vec3 rayPosition, const float jitter) {\n  vec3 worldPosition = ecefToWorld(rayPosition);\n  int cascadeIndex = getFadedCascadeIndex(\n    viewMatrix,\n    worldPosition,\n    shadowIntervals,\n    cameraNear,\n    shadowFar,\n    jitter\n  );\n  return cascadeIndex >= 0\n    ? cascadeColors[cascadeIndex]\n    : vec3(1.0);\n}\n\n#endif // DEBUG_SHOW_CASCADES\n\nfloat readShadowOpticalDepth(\n  const vec2 uv,\n  const float distanceToTop,\n  const float distanceOffset,\n  const int cascadeIndex\n) {\n  // r: frontDepth, g: meanExtinction, b: maxOpticalDepth, a: maxOpticalDepthTail\n  // Also see the discussion here: https://x.com/shotamatsuda/status/1885322308908442106\n  vec4 shadow = texture(shadowBuffer, vec3(uv, float(cascadeIndex)));\n  float distanceToFront = max(0.0, distanceToTop - distanceOffset - shadow.r);\n  return min(shadow.b + shadow.a, shadow.g * distanceToFront);\n}\n\nfloat sampleShadowOpticalDepthPCF(\n  const vec3 worldPosition,\n  const float distanceToTop,\n  const float distanceOffset,\n  const float radius,\n  const int cascadeIndex\n) {\n  vec2 uv = getShadowUv(worldPosition, cascadeIndex);\n  if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n    return 0.0;\n  }\n  if (radius < 0.1) {\n    return readShadowOpticalDepth(uv, distanceToTop, distanceOffset, cascadeIndex);\n  }\n  float sum = 0.0;\n  vec2 offset;\n  #pragma unroll_loop_start\n  for (int i = 0; i < 16; ++i) {\n    #if UNROLLED_LOOP_INDEX < SHADOW_SAMPLE_COUNT\n    offset = vogelDisk(\n      UNROLLED_LOOP_INDEX,\n      SHADOW_SAMPLE_COUNT,\n      interleavedGradientNoise(gl_FragCoord.xy + temporalJitter * resolution) * PI2\n    );\n    sum += readShadowOpticalDepth(\n      uv + offset * radius * shadowTexelSize,\n      distanceToTop,\n      distanceOffset,\n      cascadeIndex\n    );\n    #endif // UNROLLED_LOOP_INDEX < SHADOW_SAMPLE_COUNT\n  }\n  #pragma unroll_loop_end\n  return sum / float(SHADOW_SAMPLE_COUNT);\n}\n\nfloat sampleShadowOpticalDepth(\n  const vec3 rayPosition,\n  const float distanceOffset,\n  const float radius,\n  const float jitter\n) {\n  float distanceToTop = getDistanceToShadowTop(rayPosition);\n  if (distanceToTop <= 0.0) {\n    return 0.0;\n  }\n  vec3 worldPosition = ecefToWorld(rayPosition);\n  int cascadeIndex = getFadedCascadeIndex(\n    viewMatrix,\n    worldPosition,\n    shadowIntervals,\n    cameraNear,\n    shadowFar,\n    jitter\n  );\n  return cascadeIndex >= 0\n    ? sampleShadowOpticalDepthPCF(\n      worldPosition,\n      distanceToTop,\n      distanceOffset,\n      radius,\n      cascadeIndex\n    )\n    : 0.0;\n}\n\n#ifdef DEBUG_SHOW_SHADOW_MAP\nvec4 getCascadedShadowMaps(vec2 uv) {\n  vec4 coord = vec4(vUv, vUv - 0.5) * 2.0;\n  vec4 shadow = vec4(0.0);\n  if (uv.y > 0.5) {\n    if (uv.x < 0.5) {\n      shadow = texture(shadowBuffer, vec3(coord.xw, 0.0));\n    } else {\n      #if SHADOW_CASCADE_COUNT > 1\n      shadow = texture(shadowBuffer, vec3(coord.zw, 1.0));\n      #endif // SHADOW_CASCADE_COUNT > 1\n    }\n  } else {\n    if (uv.x < 0.5) {\n      #if SHADOW_CASCADE_COUNT > 2\n      shadow = texture(shadowBuffer, vec3(coord.xy, 2.0));\n      #endif // SHADOW_CASCADE_COUNT > 2\n    } else {\n      #if SHADOW_CASCADE_COUNT > 3\n      shadow = texture(shadowBuffer, vec3(coord.zy, 3.0));\n      #endif // SHADOW_CASCADE_COUNT > 3\n    }\n  }\n\n  #if !defined(DEBUG_SHOW_SHADOW_MAP_TYPE)\n  #define DEBUG_SHOW_SHADOW_MAP_TYPE 0\n  #endif // !defined(DEBUG_SHOW_SHADOW_MAP_TYPE\n\n  const float frontDepthScale = 1e-5;\n  const float meanExtinctionScale = 10.0;\n  const float maxOpticalDepthScale = 0.01;\n  vec3 color;\n  #if DEBUG_SHOW_SHADOW_MAP_TYPE == 1\n  color = vec3(shadow.r * frontDepthScale);\n  #elif DEBUG_SHOW_SHADOW_MAP_TYPE == 2\n  color = vec3(shadow.g * meanExtinctionScale);\n  #elif DEBUG_SHOW_SHADOW_MAP_TYPE == 3\n  color = vec3((shadow.b + shadow.a) * maxOpticalDepthScale);\n  #else // DEBUG_SHOW_SHADOW_MAP_TYPE\n  color =\n    (shadow.rgb + vec3(0.0, 0.0, shadow.a)) *\n    vec3(frontDepthScale, meanExtinctionScale, maxOpticalDepthScale);\n  #endif // DEBUG_SHOW_SHADOW_MAP_TYPE\n  return vec4(color, 1.0);\n}\n#endif // DEBUG_SHOW_SHADOW_MAP\n\nvec2 henyeyGreenstein(const vec2 g, const float cosTheta) {\n  vec2 g2 = g * g;\n  // prettier-ignore\n  return RECIPROCAL_PI4 *\n    ((1.0 - g2) / max(vec2(1e-7), pow(1.0 + g2 - 2.0 * g * cosTheta, vec2(1.5))));\n}\n\n#ifdef ACCURATE_PHASE_FUNCTION\n\nfloat draine(float u, float g, float a) {\n  float g2 = g * g;\n  // prettier-ignore\n  return (1.0 - g2) *\n    (1.0 + a * u * u) /\n    (4.0 * (1.0 + a * (1.0 + 2.0 * g2) / 3.0) * PI * pow(1.0 + g2 - 2.0 * g * u, 1.5));\n}\n\n// Numerically-fitted large particles (d=10) phase function It won't be\n// plausible without a more precise multiple scattering.\n// Reference: https://research.nvidia.com/labs/rtr/approximate-mie/\nfloat phaseFunction(const float cosTheta, const float attenuation) {\n  const float gHG = 0.988176691700256; // exp(-0.0990567/(d-1.67154))\n  const float gD = 0.5556712547839497; // exp(-2.20679/(d+3.91029) - 0.428934)\n  const float alpha = 21.995520856274638; // exp(3.62489 - 8.29288/(d+5.52825))\n  const float weight = 0.4819554318404214; // exp(-0.599085/(d-0.641583)-0.665888)\n  return mix(\n    henyeyGreenstein(vec2(gHG) * attenuation, cosTheta).x,\n    draine(cosTheta, gD * attenuation, alpha),\n    weight\n  );\n}\n\n#else // ACCURATE_PHASE_FUNCTION\n\nfloat phaseFunction(const float cosTheta, const float attenuation) {\n  const vec2 g = scatterAnisotropy;\n  const vec2 weights = vec2(1.0 - scatterAnisotropyMix, scatterAnisotropyMix);\n  // A similar approximation is described in the Frostbite's paper, where phase\n  // angle is attenuated instead of anisotropy.\n  return dot(henyeyGreenstein(g * attenuation, cosTheta), weights);\n}\n\n#endif // ACCURATE_PHASE_FUNCTION\n\nfloat phaseFunction(const float cosTheta) {\n  return phaseFunction(cosTheta, 1.0);\n}\n\nfloat marchOpticalDepth(\n  const vec3 rayOrigin,\n  const vec3 rayDirection,\n  const int maxIterationCount,\n  const float mipLevel,\n  const float jitter,\n  out float rayDistance\n) {\n  int iterationCount = int(\n    max(0.0, remap(mipLevel, 0.0, 1.0, float(maxIterationCount + 1), 1.0) - jitter)\n  );\n  if (iterationCount == 0) {\n    // Fudge factor to approximate the mean optical depth.\n    // TODO: Remove it.\n    return 0.5;\n  }\n  float stepSize = minSecondaryStepSize / float(iterationCount);\n  float nextDistance = stepSize * jitter;\n  float opticalDepth = 0.0;\n  for (int i = 0; i < iterationCount; ++i) {\n    rayDistance = nextDistance;\n    vec3 position = rayDistance * rayDirection + rayOrigin;\n    vec2 uv = getGlobeUv(position);\n    float height = length(position) - bottomRadius;\n    WeatherSample weather = sampleWeather(uv, height, mipLevel);\n    MediaSample media = sampleMedia(weather, position, uv, mipLevel, jitter);\n    opticalDepth += media.extinction * stepSize;\n    nextDistance += stepSize;\n    stepSize *= secondaryStepScale;\n  }\n  return opticalDepth;\n}\n\nfloat marchOpticalDepth(\n  const vec3 rayOrigin,\n  const vec3 rayDirection,\n  const int maxIterationCount,\n  const float mipLevel,\n  const float jitter\n) {\n  float rayDistance;\n  return marchOpticalDepth(\n    rayOrigin,\n    rayDirection,\n    maxIterationCount,\n    mipLevel,\n    jitter,\n    rayDistance\n  );\n}\n\nfloat approximateMultipleScattering(const float opticalDepth, const float cosTheta) {\n  // Multiple scattering approximation\n  // See: https://fpsunflower.github.io/ckulla/data/oz_volumes.pdf\n  // a: attenuation, b: contribution, c: phase attenuation\n  vec3 coeffs = vec3(1.0); // [a, b, c]\n  const vec3 attenuation = vec3(0.5, 0.5, 0.5); // Should satisfy a <= b\n  float scattering = 0.0;\n  float beerLambert;\n  #pragma unroll_loop_start\n  for (int i = 0; i < 12; ++i) {\n    #if UNROLLED_LOOP_INDEX < MULTI_SCATTERING_OCTAVES\n    beerLambert = exp(-opticalDepth * coeffs.y);\n    scattering += coeffs.x * beerLambert * phaseFunction(cosTheta, coeffs.z);\n    coeffs *= attenuation;\n    #endif // UNROLLED_LOOP_INDEX < MULTI_SCATTERING_OCTAVES\n  }\n  #pragma unroll_loop_end\n  return scattering;\n}\n\n// TODO: Construct spherical harmonics of degree 2 using 2 sample points\n// positioned near the horizon occlusion points on the sun direction plane.\nvec3 getGroundSunSkyIrradiance(\n  const vec3 position,\n  const vec3 surfaceNormal,\n  const float height,\n  out vec3 skyIrradiance\n) {\n  #ifdef ACCURATE_SUN_SKY_LIGHT\n  return GetSunAndSkyIrradiance(\n    (position - surfaceNormal * height) * METER_TO_LENGTH_UNIT,\n    surfaceNormal,\n    sunDirection,\n    skyIrradiance\n  );\n  #else // ACCURATE_SUN_SKY_LIGHT\n  skyIrradiance = vGroundIrradiance.sky;\n  return vGroundIrradiance.sun;\n  #endif // ACCURATE_SUN_SKY_LIGHT\n}\n\nvec3 getCloudsSunSkyIrradiance(const vec3 position, const float height, out vec3 skyIrradiance) {\n  #ifdef ACCURATE_SUN_SKY_LIGHT\n  return GetSunAndSkyScalarIrradiance(position * METER_TO_LENGTH_UNIT, sunDirection, skyIrradiance);\n  #else // ACCURATE_SUN_SKY_LIGHT\n  float alpha = remapClamped(height, minHeight, maxHeight);\n  skyIrradiance = mix(vCloudsIrradiance.minSky, vCloudsIrradiance.maxSky, alpha);\n  return mix(vCloudsIrradiance.minSun, vCloudsIrradiance.maxSun, alpha);\n  #endif // ACCURATE_SUN_SKY_LIGHT\n}\n\n#ifdef GROUND_BOUNCE\nvec3 approximateRadianceFromGround(\n  const vec3 position,\n  const vec3 surfaceNormal,\n  const float height,\n  const float mipLevel,\n  const float jitter\n) {\n  float opticalDepthToGround = marchOpticalDepth(\n    position,\n    -surfaceNormal,\n    maxIterationCountToGround,\n    mipLevel,\n    jitter\n  );\n  vec3 skyIrradiance;\n  vec3 sunIrradiance = getGroundSunSkyIrradiance(position, surfaceNormal, height, skyIrradiance);\n  const float groundAlbedo = 0.3;\n  vec3 groundIrradiance = skyIrradiance + (1.0 - coverage) * sunIrradiance;\n  vec3 bouncedRadiance = groundAlbedo * RECIPROCAL_PI * groundIrradiance;\n  return bouncedRadiance * exp(-opticalDepthToGround);\n}\n#endif // GROUND_BOUNCE\n\nvec4 marchClouds(\n  const vec3 rayOrigin,\n  const vec3 rayDirection,\n  const vec2 rayNearFar,\n  const float cosTheta,\n  const float jitter,\n  const float rayStartTexelsPerPixel,\n  out float frontDepth,\n  out ivec3 sampleCount\n) {\n  vec3 radianceIntegral = vec3(0.0);\n  float transmittanceIntegral = 1.0;\n  float weightedDistanceSum = 0.0;\n  float transmittanceSum = 0.0;\n\n  float maxRayDistance = rayNearFar.y - rayNearFar.x;\n  float stepSize = minStepSize + (perspectiveStepScale - 1.0) * rayNearFar.x;\n  // I don't understand why spatial aliasing remains unless doubling the jitter.\n  float rayDistance = stepSize * jitter * 2.0;\n\n  for (int i = 0; i < maxIterationCount; ++i) {\n    if (rayDistance > maxRayDistance) {\n      break; // Termination\n    }\n\n    vec3 position = rayDistance * rayDirection + rayOrigin;\n    float height = length(position) - bottomRadius;\n    float mipLevel = log2(max(1.0, rayStartTexelsPerPixel + rayDistance * 1e-5));\n\n    #if !defined(DEBUG_MARCH_INTERVALS)\n    if (insideLayerIntervals(height)) {\n      stepSize *= perspectiveStepScale;\n      rayDistance += mix(stepSize, maxStepSize, min(1.0, mipLevel));\n      continue;\n    }\n    #endif // !defined(DEBUG_MARCH_INTERVALS)\n\n    // Sample rough weather.\n    vec2 uv = getGlobeUv(position);\n    WeatherSample weather = sampleWeather(uv, height, mipLevel);\n\n    #ifdef DEBUG_SHOW_SAMPLE_COUNT\n    ++sampleCount.x;\n    #endif // DEBUG_SHOW_SAMPLE_COUNT\n\n    if (!any(greaterThan(weather.density, vec4(minDensity)))) {\n      // Step longer in empty space.\n      // TODO: This produces banding artifacts.\n      // Possible improvement: Binary search refinement\n      stepSize *= perspectiveStepScale;\n      rayDistance += mix(stepSize, maxStepSize, min(1.0, mipLevel));\n      continue;\n    }\n\n    // Sample detailed participating media.\n    MediaSample media = sampleMedia(weather, position, uv, mipLevel, jitter, sampleCount);\n\n    if (media.extinction > minExtinction) {\n      vec3 skyIrradiance;\n      vec3 sunIrradiance = getCloudsSunSkyIrradiance(position, height, skyIrradiance);\n      vec3 surfaceNormal = normalize(position);\n\n      // March optical depth to the sun for finer details, which BSM lacks.\n      float sunRayDistance = 0.0;\n      float opticalDepth = marchOpticalDepth(\n        position,\n        sunDirection,\n        maxIterationCountToSun,\n        mipLevel,\n        jitter,\n        sunRayDistance\n      );\n\n      if (height < shadowTopHeight) {\n        // Obtain the optical depth from BSM at the ray position.\n        opticalDepth += sampleShadowOpticalDepth(\n          position,\n          // Take account of only positions further than the marched ray\n          // distance.\n          sunRayDistance,\n          // Apply PCF only when the sun is close to the horizon.\n          maxShadowFilterRadius * remapClamped(dot(sunDirection, surfaceNormal), 0.1, 0.0),\n          jitter\n        );\n      }\n\n      vec3 radiance = sunIrradiance * approximateMultipleScattering(opticalDepth, cosTheta);\n\n      #ifdef GROUND_BOUNCE\n      // Fudge factor for the irradiance from ground.\n      if (height < shadowTopHeight && mipLevel < 0.5) {\n        vec3 groundRadiance = approximateRadianceFromGround(\n          position,\n          surfaceNormal,\n          height,\n          mipLevel,\n          jitter\n        );\n        radiance += groundRadiance * RECIPROCAL_PI4 * groundBounceScale;\n      }\n      #endif // GROUND_BOUNCE\n\n      // Crude approximation of sky gradient. Better than none in the shadows.\n      float skyGradient = dot(weather.heightFraction * 0.5 + 0.5, media.weight);\n      radiance += skyIrradiance * RECIPROCAL_PI4 * skyGradient * skyLightScale;\n\n      // Finally multiply by scattering.\n      radiance *= media.scattering;\n\n      #ifdef POWDER\n      radiance *= 1.0 - powderScale * exp(-media.extinction * powderExponent);\n      #endif // POWDER\n\n      #ifdef DEBUG_SHOW_CASCADES\n      if (height < shadowTopHeight) {\n        radiance = 1e-3 * getFadedCascadeColor(position, jitter);\n      }\n      #endif // DEBUG_SHOW_CASCADES\n\n      // Energy-conserving analytical integration of scattered light\n      // See 5.6.3 in https://media.contentapi.ea.com/content/dam/eacom/frostbite/files/s2016-pbs-frostbite-sky-clouds-new.pdf\n      float transmittance = exp(-media.extinction * stepSize);\n      float clampedExtinction = max(media.extinction, 1e-7);\n      vec3 scatteringIntegral = (radiance - radiance * transmittance) / clampedExtinction;\n      radianceIntegral += transmittanceIntegral * scatteringIntegral;\n      transmittanceIntegral *= transmittance;\n\n      // Aerial perspective affecting clouds\n      // See 5.9.1 in https://media.contentapi.ea.com/content/dam/eacom/frostbite/files/s2016-pbs-frostbite-sky-clouds-new.pdf\n      weightedDistanceSum += rayDistance * transmittanceIntegral;\n      transmittanceSum += transmittanceIntegral;\n    }\n\n    if (transmittanceIntegral <= minTransmittance) {\n      break; // Early termination\n    }\n\n    // Take a shorter step because we've already hit the clouds.\n    stepSize *= perspectiveStepScale;\n    rayDistance += stepSize;\n  }\n\n  // The final product of 5.9.1 and we'll evaluate this in aerial perspective.\n  frontDepth = transmittanceSum > 0.0 ? weightedDistanceSum / transmittanceSum : -1.0;\n\n  return vec4(radianceIntegral, remapClamped(transmittanceIntegral, 1.0, minTransmittance));\n}\n\n#ifdef SHADOW_LENGTH\n\nfloat marchShadowLength(\n  const vec3 rayOrigin,\n  const vec3 rayDirection,\n  const vec2 rayNearFar,\n  const float jitter\n) {\n  float shadowLength = 0.0;\n  float maxRayDistance = rayNearFar.y - rayNearFar.x;\n  float stepSize = minShadowLengthStepSize;\n  float rayDistance = stepSize * jitter;\n  const float attenuationFactor = 1.0 - 5e-4;\n  float attenuation = 1.0;\n\n  // TODO: This march is closed, and sample resolution can be much lower.\n  // Refining the termination by binary search will make it much more efficient.\n  for (int i = 0; i < maxShadowLengthIterationCount; ++i) {\n    if (rayDistance > maxRayDistance) {\n      break; // Termination\n    }\n    vec3 position = rayDistance * rayDirection + rayOrigin;\n    float opticalDepth = sampleShadowOpticalDepth(position, 0.0, 0.0, jitter);\n    shadowLength += (1.0 - exp(-opticalDepth)) * stepSize * attenuation;\n    stepSize *= perspectiveStepScale;\n    rayDistance += stepSize;\n  }\n  return shadowLength;\n}\n\n#endif // SHADOW_LENGTH\n\n#ifdef HAZE\n\nvec4 approximateHaze(\n  const vec3 rayOrigin,\n  const vec3 rayDirection,\n  const float maxRayDistance,\n  const float cosTheta,\n  const float shadowLength\n) {\n  float modulation = remapClamped(coverage, 0.2, 0.4);\n  if (cameraHeight * modulation < 0.0) {\n    return vec4(0.0);\n  }\n  float density = modulation * hazeDensityScale * exp(-cameraHeight * hazeExponent);\n  if (density < 1e-7) {\n    return vec4(0.0); // Prevent artifact in views from space\n  }\n\n  // Blend two normals by the difference in angle so that normal near the\n  // ground becomes that of the origin, and in the sky that of the horizon.\n  vec3 normalAtOrigin = normalize(rayOrigin);\n  vec3 normalAtHorizon = (rayOrigin - dot(rayOrigin, rayDirection) * rayDirection) / bottomRadius;\n  float alpha = remapClamped(dot(normalAtOrigin, normalAtHorizon), 0.9, 1.0);\n  vec3 normal = mix(normalAtOrigin, normalAtHorizon, alpha);\n\n  // Analytical optical depth where density exponentially decreases with height.\n  // Based on: https://iquilezles.org/articles/fog/\n  float angle = max(dot(normal, rayDirection), 1e-5);\n  float exponent = angle * hazeExponent;\n  float linearTerm = density / hazeExponent / angle;\n\n  // Derive the optical depths separately for with and without shadow length.\n  float expTerm = 1.0 - exp(-maxRayDistance * exponent);\n  float shadowExpTerm = 1.0 - exp(-min(maxRayDistance, shadowLength) * exponent);\n  float opticalDepth = expTerm * linearTerm;\n  float shadowOpticalDepth = max((expTerm - shadowExpTerm) * linearTerm, 0.0);\n  float transmittance = saturate(1.0 - exp(-opticalDepth));\n  float shadowTransmittance = saturate(1.0 - exp(-shadowOpticalDepth));\n\n  vec3 skyIrradiance = vGroundIrradiance.sky;\n  vec3 sunIrradiance = vGroundIrradiance.sun;\n  vec3 inscatter = sunIrradiance * phaseFunction(cosTheta) * shadowTransmittance;\n  inscatter += skyIrradiance * RECIPROCAL_PI4 * skyLightScale * transmittance;\n  inscatter *= hazeScatteringCoefficient / (hazeAbsorptionCoefficient + hazeScatteringCoefficient);\n  return vec4(inscatter, transmittance);\n}\n\n#endif // HAZE\n\nvoid applyAerialPerspective(\n  const vec3 cameraPosition,\n  const vec3 frontPosition,\n  const float shadowLength,\n  inout vec4 color\n) {\n  vec3 transmittance;\n  vec3 inscatter = GetSkyRadianceToPoint(\n    cameraPosition * METER_TO_LENGTH_UNIT,\n    frontPosition * METER_TO_LENGTH_UNIT,\n    shadowLength * METER_TO_LENGTH_UNIT,\n    sunDirection,\n    transmittance\n  );\n  color.rgb = color.rgb * transmittance + inscatter * color.a;\n}\n\nbool rayIntersectsGround(const vec3 cameraPosition, const vec3 rayDirection) {\n  float r = length(cameraPosition);\n  float mu = dot(cameraPosition, rayDirection) / r;\n  return mu < 0.0 && r * r * (mu * mu - 1.0) + bottomRadius * bottomRadius >= 0.0;\n}\n\nstruct IntersectionResult {\n  bool ground;\n  vec4 first;\n  vec4 second;\n};\n\nIntersectionResult getIntersections(const vec3 cameraPosition, const vec3 rayDirection) {\n  IntersectionResult intersections;\n  intersections.ground = rayIntersectsGround(cameraPosition, rayDirection);\n  raySphereIntersections(\n    cameraPosition,\n    rayDirection,\n    bottomRadius + vec4(0.0, minHeight, maxHeight, shadowTopHeight),\n    intersections.first,\n    intersections.second\n  );\n  return intersections;\n}\n\nvec2 getRayNearFar(const IntersectionResult intersections) {\n  vec2 nearFar;\n  if (cameraHeight < minHeight) {\n    // View below the clouds\n    if (intersections.ground) {\n      nearFar = vec2(-1.0); // No clouds to the ground\n    } else {\n      nearFar = vec2(intersections.second.y, intersections.second.z);\n      nearFar.y = min(nearFar.y, maxRayDistance);\n    }\n  } else if (cameraHeight < maxHeight) {\n    // View inside the total cloud layer\n    if (intersections.ground) {\n      nearFar = vec2(cameraNear, intersections.first.y);\n    } else {\n      nearFar = vec2(cameraNear, intersections.second.z);\n    }\n  } else {\n    // View above the clouds\n    nearFar = vec2(intersections.first.z, intersections.second.z);\n    if (intersections.ground) {\n      // Clamp the ray at the min height.\n      nearFar.y = intersections.first.y;\n    }\n  }\n  return nearFar;\n}\n\n#ifdef SHADOW_LENGTH\nvec2 getShadowRayNearFar(const IntersectionResult intersections) {\n  vec2 nearFar;\n  if (cameraHeight < shadowTopHeight) {\n    if (intersections.ground) {\n      nearFar = vec2(cameraNear, intersections.first.x);\n    } else {\n      nearFar = vec2(cameraNear, intersections.second.w);\n    }\n  } else {\n    nearFar = vec2(intersections.first.w, intersections.second.w);\n    if (intersections.ground) {\n      // Clamp the ray at the ground.\n      nearFar.y = intersections.first.x;\n    }\n  }\n  nearFar.y = min(nearFar.y, maxShadowLengthRayDistance);\n  return nearFar;\n}\n#endif // SHADOW_LENGTH\n\n#ifdef HAZE\nvec2 getHazeRayNearFar(const IntersectionResult intersections) {\n  vec2 nearFar;\n  if (cameraHeight < maxHeight) {\n    if (intersections.ground) {\n      nearFar = vec2(cameraNear, intersections.first.x);\n    } else {\n      nearFar = vec2(cameraNear, intersections.second.z);\n    }\n  } else {\n    nearFar = vec2(cameraNear, intersections.second.z);\n    if (intersections.ground) {\n      // Clamp the ray at the ground.\n      nearFar.y = intersections.first.x;\n    }\n  }\n  return nearFar;\n}\n#endif // HAZE\n\nfloat getRayDistanceToScene(const vec3 rayDirection, out float viewZ) {\n  float depth = readDepthValue(depthBuffer, vUv * targetUvScale + temporalJitter);\n  if (depth < 1.0 - 1e-7) {\n    depth = reverseLogDepth(depth, cameraNear, cameraFar);\n    viewZ = getViewZ(depth);\n    return -viewZ / dot(rayDirection, vCameraDirection);\n  }\n  viewZ = 0.0;\n  return 0.0;\n}\n\nvoid main() {\n  #ifdef DEBUG_SHOW_SHADOW_MAP\n  outputColor = getCascadedShadowMaps(vUv);\n  outputDepthVelocity = vec3(0.0);\n  #ifdef SHADOW_LENGTH\n  outputShadowLength = 0.0;\n  #endif // SHADOW_LENGTH\n  return;\n  #endif // DEBUG_SHOW_SHADOW_MAP\n\n  vec3 cameraPosition = vCameraPosition + altitudeCorrection;\n  vec3 rayDirection = normalize(vRayDirection);\n  float cosTheta = dot(sunDirection, rayDirection);\n\n  IntersectionResult intersections = getIntersections(cameraPosition, rayDirection);\n  vec2 rayNearFar = getRayNearFar(intersections);\n  #ifdef SHADOW_LENGTH\n  vec2 shadowRayNearFar = getShadowRayNearFar(intersections);\n  #endif // SHADOW_LENGTH\n  #ifdef HAZE\n  vec2 hazeRayNearFar = getHazeRayNearFar(intersections);\n  #endif // HAZE\n\n  float sceneViewZ;\n  float rayDistanceToScene = getRayDistanceToScene(rayDirection, sceneViewZ);\n  if (rayDistanceToScene > 0.0) {\n    rayNearFar.y = min(rayNearFar.y, rayDistanceToScene);\n    #ifdef SHADOW_LENGTH\n    shadowRayNearFar.y = min(shadowRayNearFar.y, rayDistanceToScene);\n    #endif // SHADOW_LENGTH\n    #ifdef HAZE\n    hazeRayNearFar.y = min(hazeRayNearFar.y, rayDistanceToScene);\n    #endif // HAZE\n  }\n\n  bool intersectsGround = any(lessThan(rayNearFar, vec2(0.0)));\n  bool intersectsScene = rayNearFar.y < rayNearFar.x;\n\n  float stbn = getSTBN();\n\n  vec4 color = vec4(0.0);\n  float frontDepth = rayNearFar.y;\n  vec3 depthVelocity = vec3(0.0);\n  float shadowLength = 0.0;\n  bool hitClouds = false;\n\n  if (!intersectsGround && !intersectsScene) {\n    vec3 rayOrigin = rayNearFar.x * rayDirection + cameraPosition;\n\n    vec2 globeUv = getGlobeUv(rayOrigin);\n    #ifdef DEBUG_SHOW_UV\n    outputColor = vec4(vec3(checker(globeUv, localWeatherRepeat + localWeatherOffset)), 1.0);\n    outputDepthVelocity = vec3(0.0);\n    #ifdef SHADOW_LENGTH\n    outputShadowLength = 0.0;\n    #endif // SHADOW_LENGTH\n    return;\n    #endif // DEBUG_SHOW_UV\n\n    float mipLevel = getMipLevel(globeUv * localWeatherRepeat) * mipLevelScale;\n    mipLevel = mix(0.0, mipLevel, min(1.0, 0.2 * cameraHeight / maxHeight));\n\n    float marchedFrontDepth;\n    ivec3 sampleCount = ivec3(0);\n    color = marchClouds(\n      rayOrigin,\n      rayDirection,\n      rayNearFar,\n      cosTheta,\n      stbn,\n      pow(2.0, mipLevel),\n      marchedFrontDepth,\n      sampleCount\n    );\n\n    #ifdef DEBUG_SHOW_SAMPLE_COUNT\n    outputColor = vec4(vec3(sampleCount) / vec3(500.0, 5.0, 5.0), 1.0);\n    outputDepthVelocity = vec3(0.0);\n    #ifdef SHADOW_LENGTH\n    outputShadowLength = 0.0;\n    #endif // SHADOW_LENGTH\n    return;\n    #endif // DEBUG_SHOW_SAMPLE_COUNT\n\n    // Front depth will be -1.0 when no samples are accumulated.\n    hitClouds = marchedFrontDepth >= 0.0;\n    if (hitClouds) {\n      frontDepth = rayNearFar.x + marchedFrontDepth;\n\n      #ifdef SHADOW_LENGTH\n      // Clamp the shadow length ray at the clouds.\n      shadowRayNearFar.y = mix(\n        shadowRayNearFar.y,\n        min(frontDepth, shadowRayNearFar.y),\n        color.a // Interpolate by the alpha for smoother edges.\n      );\n\n      // Shadow length must be computed before applying aerial perspective.\n      if (all(greaterThanEqual(shadowRayNearFar, vec2(0.0)))) {\n        shadowLength = marchShadowLength(\n          shadowRayNearFar.x * rayDirection + cameraPosition,\n          rayDirection,\n          shadowRayNearFar,\n          stbn\n        );\n      }\n      #endif // SHADOW_LENGTH\n\n      #ifdef HAZE\n      // Clamp the haze ray at the clouds.\n      hazeRayNearFar.y = mix(\n        hazeRayNearFar.y,\n        min(frontDepth, hazeRayNearFar.y),\n        color.a // Interpolate by the alpha for smoother edges.\n      );\n      #endif // HAZE\n\n      // Apply aerial perspective.\n      vec3 frontPosition = cameraPosition + frontDepth * rayDirection;\n      applyAerialPerspective(cameraPosition, frontPosition, shadowLength, color);\n\n      // Velocity for temporal resolution.\n      vec3 frontPositionWorld = ecefToWorld(frontPosition);\n      vec4 prevClip = reprojectionMatrix * vec4(frontPositionWorld, 1.0);\n      prevClip /= prevClip.w;\n      vec2 prevUv = prevClip.xy * 0.5 + 0.5;\n      vec2 velocity = vUv - prevUv;\n      depthVelocity = vec3(frontDepth, velocity);\n    }\n  }\n\n  if (!hitClouds) {\n    #ifdef SHADOW_LENGTH\n    if (all(greaterThanEqual(shadowRayNearFar, vec2(0.0)))) {\n      shadowLength = marchShadowLength(\n        shadowRayNearFar.x * rayDirection + cameraPosition,\n        rayDirection,\n        shadowRayNearFar,\n        stbn\n      );\n    }\n    #endif // SHADOW_LENGTH\n\n    // Velocity for temporal resolution. Here reproject in the view space for\n    // greatly reducing the precision errors.\n    frontDepth = sceneViewZ < 0.0 ? -sceneViewZ : cameraFar;\n    vec3 frontView = vViewPosition * frontDepth;\n    vec4 prevClip = viewReprojectionMatrix * vec4(frontView, 1.0);\n    prevClip /= prevClip.w;\n    vec2 prevUv = prevClip.xy * 0.5 + 0.5;\n    vec2 velocity = vUv - prevUv;\n    depthVelocity = vec3(frontDepth, velocity);\n  }\n\n  #ifdef DEBUG_SHOW_FRONT_DEPTH\n  outputColor = vec4(turbo(frontDepth / maxRayDistance), 1.0);\n  outputDepthVelocity = vec3(0.0);\n  #ifdef SHADOW_LENGTH\n  outputShadowLength = 0.0;\n  #endif // SHADOW_LENGTH\n  return;\n  #endif // DEBUG_SHOW_FRONT_DEPTH\n\n  #ifdef HAZE\n  vec4 haze = approximateHaze(\n    cameraNear * rayDirection + cameraPosition,\n    rayDirection,\n    hazeRayNearFar.y - hazeRayNearFar.x,\n    cosTheta,\n    shadowLength\n  );\n  color.rgb = mix(color.rgb, haze.rgb, haze.a);\n  color.a = color.a * (1.0 - haze.a) + haze.a;\n  #endif // HAZE\n\n  outputColor = color;\n  outputDepthVelocity = depthVelocity;\n  #ifdef SHADOW_LENGTH\n  outputShadowLength = shadowLength * METER_TO_LENGTH_UNIT;\n  #endif // SHADOW_LENGTH\n}\n`, Re = `float getSTBN() {\n  ivec3 size = textureSize(stbnTexture, 0);\n  vec3 scale = 1.0 / vec3(size);\n  return texture(stbnTexture, vec3(gl_FragCoord.xy, float(frame % size.z)) * scale).r;\n}\n\n// Straightforward spherical mapping\nvec2 getSphericalUv(const vec3 position) {\n  vec2 st = normalize(position.yx);\n  float phi = atan(st.x, st.y);\n  float theta = asin(normalize(position).z);\n  return vec2(phi * RECIPROCAL_PI2 + 0.5, theta * RECIPROCAL_PI + 0.5);\n}\n\nvec2 getCubeSphereUv(const vec3 position) {\n  // Cube-sphere relaxation by: http://mathproofs.blogspot.com/2005/07/mapping-cube-to-sphere.html\n  // TODO: Tile and fix seams.\n  // Possible improvements:\n  // https://iquilezles.org/articles/texturerepetition/\n  // https://gamedev.stackexchange.com/questions/184388/fragment-shader-map-dot-texture-repeatedly-over-the-sphere\n  // https://github.com/mmikk/hextile-demo\n\n  vec3 n = normalize(position);\n  vec3 f = abs(n);\n  vec3 c = n / max(f.x, max(f.y, f.z));\n  vec2 m;\n  if (all(greaterThan(f.yy, f.xz))) {\n    m = c.y > 0.0 ? vec2(-n.x, n.z) : n.xz;\n  } else if (all(greaterThan(f.xx, f.yz))) {\n    m = c.x > 0.0 ? n.yz : vec2(-n.y, n.z);\n  } else {\n    m = c.z > 0.0 ? n.xy : vec2(n.x, -n.y);\n  }\n\n  vec2 m2 = m * m;\n  float q = dot(m2.xy, vec2(-2.0, 2.0)) - 3.0;\n  float q2 = q * q;\n  vec2 uv;\n  uv.x = sqrt(1.5 + m2.x - m2.y - 0.5 * sqrt(-24.0 * m2.x + q2)) * (m.x > 0.0 ? 1.0 : -1.0);\n  uv.y = sqrt(6.0 / (3.0 - uv.x * uv.x)) * m.y;\n  return uv * 0.5 + 0.5;\n}\n\nvec2 getGlobeUv(const vec3 position) {\n  return getCubeSphereUv(position);\n}\n\nfloat getMipLevel(const vec2 uv) {\n  const float mipLevelScale = 0.1;\n  vec2 coord = uv * resolution;\n  vec2 ddx = dFdx(coord);\n  vec2 ddy = dFdy(coord);\n  float deltaMaxSqr = max(dot(ddx, ddx), dot(ddy, ddy)) * mipLevelScale;\n  return max(0.0, 0.5 * log2(max(1.0, deltaMaxSqr)));\n}\n\nbool insideLayerIntervals(const float height) {\n  bvec3 gt = greaterThan(vec3(height), minIntervalHeights);\n  bvec3 lt = lessThan(vec3(height), maxIntervalHeights);\n  return any(bvec3(gt.x && lt.x, gt.y && lt.y, gt.z && lt.z));\n}\n\nstruct WeatherSample {\n  vec4 heightFraction; // Normalized height of each layer\n  vec4 density;\n};\n\nvec4 shapeAlteringFunction(const vec4 heightFraction, const vec4 bias) {\n  // Apply a semi-circle transform to round the clouds towards the top.\n  vec4 biased = pow(heightFraction, bias);\n  vec4 x = clamp(biased * 2.0 - 1.0, -1.0, 1.0);\n  return 1.0 - x * x;\n}\n\nWeatherSample sampleWeather(const vec2 uv, const float height, const float mipLevel) {\n  WeatherSample weather;\n  weather.heightFraction = remapClamped(vec4(height), minLayerHeights, maxLayerHeights);\n\n  vec4 localWeather = pow(\n    textureLod(\n      localWeatherTexture,\n      uv * localWeatherRepeat + localWeatherOffset,\n      mipLevel\n    ).LOCAL_WEATHER_CHANNELS,\n    weatherExponents\n  );\n  #ifdef SHADOW\n  localWeather *= shadowLayerMask;\n  #endif // SHADOW\n\n  vec4 heightScale = shapeAlteringFunction(weather.heightFraction, shapeAlteringBiases);\n\n  // Modulation to control weather by coverage parameter.\n  // Reference: https://github.com/Prograda/Skybolt/blob/master/Assets/Core/Shaders/Clouds.h#L63\n  vec4 factor = 1.0 - coverage * heightScale;\n  weather.density = remapClamped(\n    mix(localWeather, vec4(1.0), coverageFilterWidths),\n    factor,\n    factor + coverageFilterWidths\n  );\n\n  return weather;\n}\n\nvec4 getLayerDensity(const vec4 heightFraction) {\n  // prettier-ignore\n  return densityProfile.expTerms * exp(densityProfile.exponents * heightFraction) +\n    densityProfile.linearTerms * heightFraction +\n    densityProfile.constantTerms;\n}\n\nstruct MediaSample {\n  float density;\n  vec4 weight;\n  float scattering;\n  float extinction;\n};\n\nMediaSample sampleMedia(\n  const WeatherSample weather,\n  const vec3 position,\n  const vec2 uv,\n  const float mipLevel,\n  const float jitter,\n  out ivec3 sampleCount\n) {\n  vec4 density = weather.density;\n\n  // TODO: Define in physical length.\n  vec3 surfaceNormal = normalize(position);\n  float localWeatherSpeed = length(localWeatherOffset);\n  vec3 evolution = -surfaceNormal * localWeatherSpeed * 2e4;\n\n  vec3 turbulence = vec3(0.0);\n  #ifdef TURBULENCE\n  vec2 turbulenceUv = uv * localWeatherRepeat * turbulenceRepeat;\n  turbulence =\n    turbulenceDisplacement *\n    (texture(turbulenceTexture, turbulenceUv).rgb * 2.0 - 1.0) *\n    dot(density, remapClamped(weather.heightFraction, vec4(0.3), vec4(0.0)));\n  #endif // TURBULENCE\n\n  vec3 shapePosition = (position + evolution + turbulence) * shapeRepeat + shapeOffset;\n  float shape = texture(shapeTexture, shapePosition).r;\n  density = remapClamped(density, vec4(1.0 - shape) * shapeAmounts, vec4(1.0));\n\n  #ifdef DEBUG_SHOW_SAMPLE_COUNT\n  ++sampleCount.y;\n  #endif // DEBUG_SHOW_SAMPLE_COUNT\n\n  #ifdef SHAPE_DETAIL\n  if (mipLevel * 0.5 + (jitter - 0.5) * 0.5 < 0.5) {\n    vec3 detailPosition = (position + turbulence) * shapeDetailRepeat + shapeDetailOffset;\n    float detail = texture(shapeDetailTexture, detailPosition).r;\n    // Fluffy at the top and whippy at the bottom.\n    vec4 modifier = mix(\n      vec4(pow(detail, 6.0)),\n      vec4(1.0 - detail),\n      remapClamped(weather.heightFraction, vec4(0.2), vec4(0.4))\n    );\n    modifier = mix(vec4(0.0), modifier, shapeDetailAmounts);\n    density = remapClamped(density * 2.0, vec4(modifier * 0.5), vec4(1.0));\n\n    #ifdef DEBUG_SHOW_SAMPLE_COUNT\n    ++sampleCount.z;\n    #endif // DEBUG_SHOW_SAMPLE_COUNT\n  }\n  #endif // SHAPE_DETAIL\n\n  // Apply the density profiles.\n  density = saturate(density * densityScales * getLayerDensity(weather.heightFraction));\n\n  MediaSample media;\n  float densitySum = density.x + density.y + density.z + density.w;\n  media.weight = density / densitySum;\n  media.scattering = densitySum * scatteringCoefficient;\n  media.extinction = densitySum * absorptionCoefficient + media.scattering;\n  return media;\n}\n\nMediaSample sampleMedia(\n  const WeatherSample weather,\n  const vec3 position,\n  const vec2 uv,\n  const float mipLevel,\n  const float jitter\n) {\n  ivec3 sampleCount;\n  return sampleMedia(weather, position, uv, mipLevel, jitter, sampleCount);\n}\n`, vt = `precision highp float;\nprecision highp sampler3D;\n\n#include \"atmosphere/bruneton/definitions\"\n\nuniform AtmosphereParameters ATMOSPHERE;\nuniform vec3 SUN_SPECTRAL_RADIANCE_TO_LUMINANCE;\nuniform vec3 SKY_SPECTRAL_RADIANCE_TO_LUMINANCE;\n\nuniform sampler2D transmittance_texture;\nuniform sampler3D scattering_texture;\nuniform sampler2D irradiance_texture;\nuniform sampler3D single_mie_scattering_texture;\nuniform sampler3D higher_order_scattering_texture;\n\n#include \"atmosphere/bruneton/common\"\n#include \"atmosphere/bruneton/runtime\"\n\n#include \"types\"\n\nuniform mat4 inverseProjectionMatrix;\nuniform mat4 inverseViewMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 worldToECEFMatrix;\nuniform vec3 altitudeCorrection;\n\n// Atmosphere\nuniform float bottomRadius;\nuniform vec3 sunDirection;\n\n// Cloud layers\nuniform float minHeight;\nuniform float maxHeight;\n\nlayout(location = 0) in vec3 position;\n\nout vec2 vUv;\nout vec3 vCameraPosition;\nout vec3 vCameraDirection; // Direction to the center of screen\nout vec3 vRayDirection; // Direction to the texel\nout vec3 vViewPosition;\n\nout GroundIrradiance vGroundIrradiance;\nout CloudsIrradiance vCloudsIrradiance;\n\nvoid sampleSunSkyIrradiance(const vec3 positionECEF) {\n  vGroundIrradiance.sun = GetSunAndSkyScalarIrradiance(\n    positionECEF * METER_TO_LENGTH_UNIT,\n    sunDirection,\n    vGroundIrradiance.sky\n  );\n\n  vec3 surfaceNormal = normalize(positionECEF);\n  vec2 radii = (bottomRadius + vec2(minHeight, maxHeight)) * METER_TO_LENGTH_UNIT;\n  vCloudsIrradiance.minSun = GetSunAndSkyScalarIrradiance(\n    surfaceNormal * radii.x,\n    sunDirection,\n    vCloudsIrradiance.minSky\n  );\n  vCloudsIrradiance.maxSun = GetSunAndSkyScalarIrradiance(\n    surfaceNormal * radii.y,\n    sunDirection,\n    vCloudsIrradiance.maxSky\n  );\n}\n\nvoid main() {\n  vUv = position.xy * 0.5 + 0.5;\n\n  vec3 viewPosition = (inverseProjectionMatrix * vec4(position, 1.0)).xyz;\n  vec3 worldDirection = (inverseViewMatrix * vec4(viewPosition.xyz, 0.0)).xyz;\n  vec3 cameraDirection = normalize((inverseViewMatrix * vec4(0.0, 0.0, -1.0, 0.0)).xyz);\n  vCameraPosition = (worldToECEFMatrix * vec4(cameraPosition, 1.0)).xyz;\n  vCameraDirection = (worldToECEFMatrix * vec4(cameraDirection, 0.0)).xyz;\n  vRayDirection = (worldToECEFMatrix * vec4(worldDirection, 0.0)).xyz;\n  vViewPosition = viewPosition;\n\n  sampleSunSkyIrradiance(vCameraPosition + altitudeCorrection);\n\n  gl_Position = vec4(position.xy, 1.0, 1.0);\n}\n`, Le = `uniform vec2 resolution;\nuniform int frame;\nuniform sampler3D stbnTexture;\n\n// Atmosphere\nuniform float bottomRadius;\nuniform mat4 worldToECEFMatrix;\nuniform mat4 ecefToWorldMatrix;\nuniform vec3 altitudeCorrection;\nuniform vec3 sunDirection;\n\n// Participating medium\nuniform float scatteringCoefficient;\nuniform float absorptionCoefficient;\n\n// Primary raymarch\nuniform float minDensity;\nuniform float minExtinction;\nuniform float minTransmittance;\n\n// Shape and weather\nuniform sampler2D localWeatherTexture;\nuniform vec2 localWeatherRepeat;\nuniform vec2 localWeatherOffset;\nuniform float coverage;\nuniform sampler3D shapeTexture;\nuniform vec3 shapeRepeat;\nuniform vec3 shapeOffset;\n\n#ifdef SHAPE_DETAIL\nuniform sampler3D shapeDetailTexture;\nuniform vec3 shapeDetailRepeat;\nuniform vec3 shapeDetailOffset;\n#endif // SHAPE_DETAIL\n\n#ifdef TURBULENCE\nuniform sampler2D turbulenceTexture;\nuniform vec2 turbulenceRepeat;\nuniform float turbulenceDisplacement;\n#endif // TURBULENCE\n\n// Haze\n#ifdef HAZE\nuniform float hazeDensityScale;\nuniform float hazeExponent;\nuniform float hazeScatteringCoefficient;\nuniform float hazeAbsorptionCoefficient;\n#endif // HAZE\n\n// Cloud layers\nuniform vec4 minLayerHeights;\nuniform vec4 maxLayerHeights;\nuniform vec3 minIntervalHeights;\nuniform vec3 maxIntervalHeights;\nuniform vec4 densityScales;\nuniform vec4 shapeAmounts;\nuniform vec4 shapeDetailAmounts;\nuniform vec4 weatherExponents;\nuniform vec4 shapeAlteringBiases;\nuniform vec4 coverageFilterWidths;\nuniform float minHeight;\nuniform float maxHeight;\nuniform float shadowTopHeight;\nuniform float shadowBottomHeight;\nuniform vec4 shadowLayerMask;\nuniform CloudDensityProfile densityProfile;\n`, J = `struct GroundIrradiance {\n  vec3 sun;\n  vec3 sky;\n};\n\nstruct CloudsIrradiance {\n  vec3 minSun;\n  vec3 minSky;\n  vec3 maxSun;\n  vec3 maxSky;\n};\n\nstruct CloudDensityProfile {\n  vec4 expTerms;\n  vec4 exponents;\n  vec4 linearTerms;\n  vec4 constantTerms;\n};\n`;\nvar gt = Object.defineProperty, y = (o, e, t, n) => {\n  for (var a = void 0, i = o.length - 1, s; i >= 0; i--)\n    (s = o[i]) && (a = s(e, t, a) || a);\n  return a && gt(e, t, a), a;\n};\nconst St = /* @__PURE__ */ new p(), yt = /* @__PURE__ */ new $e();\nclass g extends Ze {\n  constructor({\n    parameterUniforms: e,\n    layerUniforms: t,\n    atmosphereUniforms: n\n  }, a = Te.DEFAULT) {\n    super(\n      {\n        name: \"CloudsMaterial\",\n        glslVersion: G,\n        vertexShader: H(vt, {\n          atmosphere: {\n            bruneton: {\n              common: fe,\n              definitions: pe,\n              runtime: de\n            }\n          },\n          types: J\n        }),\n        fragmentShader: V(\n          H(mt, {\n            core: {\n              depth: tt,\n              math: Pe,\n              turbo: _e,\n              generators: et,\n              raySphereIntersection: Ae,\n              cascadedShadowMaps: Qe,\n              interleavedGradientNoise: Je,\n              vogelDisk: Xe\n            },\n            atmosphere: {\n              bruneton: {\n                common: fe,\n                definitions: pe,\n                runtime: de\n              }\n            },\n            types: J,\n            parameters: Le,\n            clouds: Re\n          })\n        ),\n        // prettier-ignore\n        uniforms: {\n          ...e,\n          ...t,\n          ...n,\n          depthBuffer: new r(null),\n          viewMatrix: new r(new m()),\n          inverseProjectionMatrix: new r(new m()),\n          inverseViewMatrix: new r(new m()),\n          reprojectionMatrix: new r(new m()),\n          viewReprojectionMatrix: new r(new m()),\n          resolution: new r(new f()),\n          cameraNear: new r(0),\n          cameraFar: new r(0),\n          cameraHeight: new r(0),\n          frame: new r(0),\n          temporalJitter: new r(new f()),\n          targetUvScale: new r(new f()),\n          mipLevelScale: new r(1),\n          stbnTexture: new r(null),\n          // Scattering\n          skyLightScale: new r(1),\n          groundBounceScale: new r(1),\n          powderScale: new r(0.8),\n          powderExponent: new r(150),\n          // Primary raymarch\n          maxIterationCount: new r(c.clouds.maxIterationCount),\n          minStepSize: new r(c.clouds.minStepSize),\n          maxStepSize: new r(c.clouds.maxStepSize),\n          maxRayDistance: new r(c.clouds.maxRayDistance),\n          perspectiveStepScale: new r(c.clouds.perspectiveStepScale),\n          minDensity: new r(c.clouds.minDensity),\n          minExtinction: new r(c.clouds.minExtinction),\n          minTransmittance: new r(c.clouds.minTransmittance),\n          // Secondary raymarch\n          maxIterationCountToSun: new r(c.clouds.maxIterationCountToSun),\n          maxIterationCountToGround: new r(c.clouds.maxIterationCountToGround),\n          minSecondaryStepSize: new r(c.clouds.minSecondaryStepSize),\n          secondaryStepScale: new r(c.clouds.secondaryStepScale),\n          // Beer shadow map\n          shadowBuffer: new r(null),\n          shadowTexelSize: new r(new f()),\n          shadowIntervals: new r(\n            Array.from({ length: 4 }, () => new f())\n            // Populate the max number of elements\n          ),\n          shadowMatrices: new r(\n            Array.from({ length: 4 }, () => new m())\n            // Populate the max number of elements\n          ),\n          shadowFar: new r(0),\n          maxShadowFilterRadius: new r(6),\n          shadowLayerMask: new r(new S().setScalar(1)),\n          // Disable mask\n          // Shadow length\n          maxShadowLengthIterationCount: new r(c.clouds.maxShadowLengthIterationCount),\n          minShadowLengthStepSize: new r(c.clouds.minShadowLengthStepSize),\n          maxShadowLengthRayDistance: new r(c.clouds.maxShadowLengthRayDistance),\n          // Haze\n          hazeDensityScale: new r(3e-5),\n          hazeExponent: new r(1e-3),\n          hazeScatteringCoefficient: new r(0.9),\n          hazeAbsorptionCoefficient: new r(0.5)\n        }\n      },\n      a\n    ), this.temporalUpscale = !0, this.depthPacking = 0, this.localWeatherChannels = \"rgba\", this.shapeDetail = c.shapeDetail, this.turbulence = c.turbulence, this.shadowLength = c.lightShafts, this.haze = c.haze, this.multiScatteringOctaves = c.clouds.multiScatteringOctaves, this.accurateSunSkyLight = c.clouds.accurateSunSkyLight, this.accuratePhaseFunction = c.clouds.accuratePhaseFunction, this.shadowCascadeCount = c.shadow.cascadeCount, this.shadowSampleCount = 8, this.scatterAnisotropy1 = 0.7, this.scatterAnisotropy2 = -0.2, this.scatterAnisotropyMix = 0.5;\n  }\n  onBeforeRender(e, t, n, a, i, s) {\n    const l = this.defines.USE_LOGARITHMIC_DEPTH_BUFFER != null, h = e.capabilities.logarithmicDepthBuffer;\n    h !== l && (h ? this.defines.USE_LOGARITHMIC_DEPTH_BUFFER = \"1\" : delete this.defines.USE_LOGARITHMIC_DEPTH_BUFFER);\n    const u = this.defines.POWDER != null, d = this.uniforms.powderScale.value > 0;\n    d !== u && (d ? this.defines.POWDER = \"1\" : delete this.defines.POWDER, this.needsUpdate = !0);\n    const v = this.defines.GROUND_BOUNCE != null;\n    (this.uniforms.groundBounceScale.value > 0 && this.uniforms.maxIterationCountToGround.value > 0) !== v && (d ? this.defines.GROUND_BOUNCE = \"1\" : delete this.defines.GROUND_BOUNCE, this.needsUpdate = !0);\n  }\n  copyCameraSettings(e) {\n    e.isPerspectiveCamera === !0 ? this.defines.PERSPECTIVE_CAMERA !== \"1\" && (this.defines.PERSPECTIVE_CAMERA = \"1\", this.needsUpdate = !0) : this.defines.PERSPECTIVE_CAMERA != null && (delete this.defines.PERSPECTIVE_CAMERA, this.needsUpdate = !0);\n    const t = this.uniforms;\n    t.viewMatrix.value.copy(e.matrixWorldInverse), t.inverseViewMatrix.value.copy(e.matrixWorld);\n    const n = this.previousProjectionMatrix ?? e.projectionMatrix, a = this.previousViewMatrix ?? e.matrixWorldInverse, i = t.inverseProjectionMatrix.value, s = t.inverseViewMatrix.value, l = t.reprojectionMatrix.value, h = t.viewReprojectionMatrix.value;\n    if (this.temporalUpscale) {\n      const v = t.frame.value % 16, C = t.resolution.value, D = Oe[v], P = (D.x - 0.5) / C.x * 4, O = (D.y - 0.5) / C.y * 4;\n      t.temporalJitter.value.set(P, O), t.mipLevelScale.value = 0.25, i.copy(e.projectionMatrix), i.elements[8] += P * 2, i.elements[9] += O * 2, i.invert(), l.copy(n), l.elements[8] += P * 2, l.elements[9] += O * 2, l.multiply(a), h.copy(l).multiply(s);\n    } else\n      t.temporalJitter.value.setScalar(0), t.mipLevelScale.value = 1, i.copy(e.projectionMatrixInverse), l.copy(n).multiply(a), h.copy(l).multiply(s);\n    Ke(e), t.cameraNear.value = e.near, t.cameraFar.value = e.far;\n    const u = e.getWorldPosition(\n      t.cameraPosition.value\n    ), d = St.copy(u).applyMatrix4(t.worldToECEFMatrix.value);\n    try {\n      t.cameraHeight.value = yt.setFromECEF(d).height;\n    } catch {\n    }\n  }\n  // copyCameraSettings can be called multiple times within a frame. Only\n  // reliable way is to explicitly store the matrices.\n  copyReprojectionMatrix(e) {\n    this.previousProjectionMatrix ??= new m(), this.previousViewMatrix ??= new m(), this.previousProjectionMatrix.copy(e.projectionMatrix), this.previousViewMatrix.copy(e.matrixWorldInverse);\n  }\n  setSize(e, t, n, a) {\n    this.uniforms.resolution.value.set(e, t), n != null && a != null ? this.uniforms.targetUvScale.value.set(\n      e / n,\n      t / a\n    ) : this.uniforms.targetUvScale.value.setScalar(1), this.previousProjectionMatrix = void 0, this.previousViewMatrix = void 0;\n  }\n  setShadowSize(e, t) {\n    this.uniforms.shadowTexelSize.value.set(1 / e, 1 / t);\n  }\n  get depthBuffer() {\n    return this.uniforms.depthBuffer.value;\n  }\n  set depthBuffer(e) {\n    this.uniforms.depthBuffer.value = e;\n  }\n}\ny([\n  L(\"DEPTH_PACKING\")\n], g.prototype, \"depthPacking\");\ny([\n  Ee(\"LOCAL_WEATHER_CHANNELS\", {\n    validate: (o) => /^[rgba]{4}$/.test(o)\n  })\n], g.prototype, \"localWeatherChannels\");\ny([\n  x(\"SHAPE_DETAIL\")\n], g.prototype, \"shapeDetail\");\ny([\n  x(\"TURBULENCE\")\n], g.prototype, \"turbulence\");\ny([\n  x(\"SHADOW_LENGTH\")\n], g.prototype, \"shadowLength\");\ny([\n  x(\"HAZE\")\n], g.prototype, \"haze\");\ny([\n  L(\"MULTI_SCATTERING_OCTAVES\", { min: 1, max: 12 })\n], g.prototype, \"multiScatteringOctaves\");\ny([\n  x(\"ACCURATE_SUN_SKY_LIGHT\")\n], g.prototype, \"accurateSunSkyLight\");\ny([\n  x(\"ACCURATE_PHASE_FUNCTION\")\n], g.prototype, \"accuratePhaseFunction\");\ny([\n  L(\"SHADOW_CASCADE_COUNT\", { min: 1, max: 4 })\n], g.prototype, \"shadowCascadeCount\");\ny([\n  L(\"SHADOW_SAMPLE_COUNT\", { min: 1, max: 16 })\n], g.prototype, \"shadowSampleCount\");\ny([\n  ee(\"SCATTER_ANISOTROPY_1\")\n], g.prototype, \"scatterAnisotropy1\");\ny([\n  ee(\"SCATTER_ANISOTROPY_2\")\n], g.prototype, \"scatterAnisotropy2\");\ny([\n  ee(\"SCATTER_ANISOTROPY_MIX\")\n], g.prototype, \"scatterAnisotropyMix\");\nconst xt = `// Taken from https://gist.github.com/TheRealMJP/c83b8c0f46b63f3a88a5986f4fa982b1\n// TODO: Use 5-taps version: https://www.shadertoy.com/view/MtVGWz\n// Or even 4 taps (requires preprocessing in the input buffer):\n// https://www.shadertoy.com/view/4tyGDD\n\n/**\n * MIT License\n *\n * Copyright (c) 2019 MJP\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nvec4 textureCatmullRom(sampler2D tex, vec2 uv) {\n  vec2 texSize = vec2(textureSize(tex, 0));\n\n  // We're going to sample a a 4x4 grid of texels surrounding the target UV\n  // coordinate. We'll do this by rounding down the sample location to get the\n  // exact center of our \"starting\" texel. The starting texel will be at\n  // location [1, 1] in the grid, where [0, 0] is the top left corner.\n  vec2 samplePos = uv * texSize;\n  vec2 texPos1 = floor(samplePos - 0.5) + 0.5;\n\n  // Compute the fractional offset from our starting texel to our original\n  // sample location, which we'll feed into the Catmull-Rom spline function to\n  // get our filter weights.\n  vec2 f = samplePos - texPos1;\n\n  // Compute the Catmull-Rom weights using the fractional offset that we\n  // calculated earlier. These equations are pre-expanded based on our knowledge\n  // of where the texels will be located, which lets us avoid having to evaluate\n  // a piece-wise function.\n  vec2 w0 = f * (-0.5 + f * (1.0 - 0.5 * f));\n  vec2 w1 = 1.0 + f * f * (-2.5 + 1.5 * f);\n  vec2 w2 = f * (0.5 + f * (2.0 - 1.5 * f));\n  vec2 w3 = f * f * (-0.5 + 0.5 * f);\n\n  // Work out weighting factors and sampling offsets that will let us use\n  // bilinear filtering to simultaneously evaluate the middle 2 samples from the\n  // 4x4 grid.\n  vec2 w12 = w1 + w2;\n  vec2 offset12 = w2 / (w1 + w2);\n\n  // Compute the final UV coordinates we'll use for sampling the texture\n  vec2 texPos0 = texPos1 - 1.0;\n  vec2 texPos3 = texPos1 + 2.0;\n  vec2 texPos12 = texPos1 + offset12;\n\n  texPos0 /= texSize;\n  texPos3 /= texSize;\n  texPos12 /= texSize;\n\n  vec4 result = vec4(0.0);\n  result += texture(tex, vec2(texPos0.x, texPos0.y)) * w0.x * w0.y;\n  result += texture(tex, vec2(texPos12.x, texPos0.y)) * w12.x * w0.y;\n  result += texture(tex, vec2(texPos3.x, texPos0.y)) * w3.x * w0.y;\n\n  result += texture(tex, vec2(texPos0.x, texPos12.y)) * w0.x * w12.y;\n  result += texture(tex, vec2(texPos12.x, texPos12.y)) * w12.x * w12.y;\n  result += texture(tex, vec2(texPos3.x, texPos12.y)) * w3.x * w12.y;\n\n  result += texture(tex, vec2(texPos0.x, texPos3.y)) * w0.x * w3.y;\n  result += texture(tex, vec2(texPos12.x, texPos3.y)) * w12.x * w3.y;\n  result += texture(tex, vec2(texPos3.x, texPos3.y)) * w3.x * w3.y;\n\n  return result;\n}\n\nvec4 textureCatmullRom(sampler2DArray tex, vec3 uv) {\n  vec2 texSize = vec2(textureSize(tex, 0));\n  vec2 samplePos = uv.xy * texSize;\n  vec2 texPos1 = floor(samplePos - 0.5) + 0.5;\n  vec2 f = samplePos - texPos1;\n  vec2 w0 = f * (-0.5 + f * (1.0 - 0.5 * f));\n  vec2 w1 = 1.0 + f * f * (-2.5 + 1.5 * f);\n  vec2 w2 = f * (0.5 + f * (2.0 - 1.5 * f));\n  vec2 w3 = f * f * (-0.5 + 0.5 * f);\n  vec2 w12 = w1 + w2;\n  vec2 offset12 = w2 / (w1 + w2);\n  vec2 texPos0 = texPos1 - 1.0;\n  vec2 texPos3 = texPos1 + 2.0;\n  vec2 texPos12 = texPos1 + offset12;\n  texPos0 /= texSize;\n  texPos3 /= texSize;\n  texPos12 /= texSize;\n  vec4 result = vec4(0.0);\n  result += texture(tex, vec3(texPos0.x, texPos0.y, uv.z)) * w0.x * w0.y;\n  result += texture(tex, vec3(texPos12.x, texPos0.y, uv.z)) * w12.x * w0.y;\n  result += texture(tex, vec3(texPos3.x, texPos0.y, uv.z)) * w3.x * w0.y;\n  result += texture(tex, vec3(texPos0.x, texPos12.y, uv.z)) * w0.x * w12.y;\n  result += texture(tex, vec3(texPos12.x, texPos12.y, uv.z)) * w12.x * w12.y;\n  result += texture(tex, vec3(texPos3.x, texPos12.y, uv.z)) * w3.x * w12.y;\n  result += texture(tex, vec3(texPos0.x, texPos3.y, uv.z)) * w0.x * w3.y;\n  result += texture(tex, vec3(texPos12.x, texPos3.y, uv.z)) * w12.x * w3.y;\n  result += texture(tex, vec3(texPos3.x, texPos3.y, uv.z)) * w3.x * w3.y;\n  return result;\n}\n`, wt = `precision highp float;\nprecision highp sampler2DArray;\n\n#include \"core/turbo\"\n#include \"catmullRomSampling\"\n#include \"varianceClipping\"\n\nuniform sampler2D colorBuffer;\nuniform sampler2D depthVelocityBuffer;\nuniform sampler2D colorHistoryBuffer;\n\n#ifdef SHADOW_LENGTH\nuniform sampler2D shadowLengthBuffer;\nuniform sampler2D shadowLengthHistoryBuffer;\n#endif // SHADOW_LENGTH\n\nuniform vec2 texelSize;\nuniform int frame;\nuniform float varianceGamma;\nuniform float temporalAlpha;\nuniform vec2 jitterOffset;\n\nin vec2 vUv;\n\nlayout(location = 0) out vec4 outputColor;\n#ifdef SHADOW_LENGTH\nlayout(location = 1) out float outputShadowLength;\n#endif // SHADOW_LENGTH\n\nconst ivec2 neighborOffsets[9] = ivec2[9](\n  ivec2(-1, -1),\n  ivec2(-1, 0),\n  ivec2(-1, 1),\n  ivec2(0, -1),\n  ivec2(0, 0),\n  ivec2(0, 1),\n  ivec2(1, -1),\n  ivec2(1, 0),\n  ivec2(1, 1)\n);\n\nconst ivec4[4] bayerIndices = ivec4[4](\n  ivec4(0, 12, 3, 15),\n  ivec4(8, 4, 11, 7),\n  ivec4(2, 14, 1, 13),\n  ivec4(10, 6, 9, 5)\n);\n\nvec4 getClosestFragment(const ivec2 coord) {\n  vec4 result = vec4(1e7, 0.0, 0.0, 0.0);\n  vec4 neighbor;\n  #pragma unroll_loop_start\n  for (int i = 0; i < 9; ++i) {\n    neighbor = texelFetchOffset(depthVelocityBuffer, coord, 0, neighborOffsets[i]);\n    if (neighbor.r < result.r) {\n      result = neighbor;\n    }\n  }\n  #pragma unroll_loop_end\n  return result;\n}\n\nvoid temporalUpscale(\n  const ivec2 coord,\n  const ivec2 lowResCoord,\n  const bool currentFrame,\n  out vec4 outputColor,\n  out float outputShadowLength\n) {\n  vec4 currentColor = texelFetch(colorBuffer, lowResCoord, 0);\n  #ifdef SHADOW_LENGTH\n  vec4 currentShadowLength = vec4(texelFetch(shadowLengthBuffer, lowResCoord, 0).rgb, 1.0);\n  #endif // SHADOW_LENGTH\n\n  if (currentFrame) {\n    // Use the texel just rendered without any accumulation.\n    outputColor = currentColor;\n    #ifdef SHADOW_LENGTH\n    outputShadowLength = currentShadowLength.r;\n    #endif // SHADOW_LENGTH\n    return;\n  }\n\n  vec4 depthVelocity = getClosestFragment(lowResCoord);\n  vec2 velocity = depthVelocity.gb;\n  vec2 prevUv = vUv - velocity;\n  if (prevUv.x < 0.0 || prevUv.x > 1.0 || prevUv.y < 0.0 || prevUv.y > 1.0) {\n    outputColor = currentColor;\n    #ifdef SHADOW_LENGTH\n    outputShadowLength = currentShadowLength.r;\n    #endif // SHADOW_LENGTH\n    return; // Rejection\n  }\n\n  // Variance clipping with a large variance gamma seems to work fine for\n  // upsampling. This increases ghosting, of course, but it's hard to notice on\n  // clouds.\n  // vec4 historyColor = textureCatmullRom(colorHistoryBuffer, prevUv);\n  vec4 historyColor = texture(colorHistoryBuffer, prevUv);\n  vec4 clippedColor = varianceClipping(colorBuffer, vUv, currentColor, historyColor, varianceGamma);\n  outputColor = clippedColor;\n\n  #ifdef SHADOW_LENGTH\n  // Sampling the shadow length history using scene depth doesn't make much\n  // sense, but it's too hard to derive it properly. At least this approach\n  // resolves the edges of scene objects.\n  // vec4 historyShadowLength = vec4(textureCatmullRom(shadowLengthHistoryBuffer, prevUv).rgb, 1.0);\n  vec4 historyShadowLength = vec4(texture(shadowLengthHistoryBuffer, prevUv).rgb, 1.0);\n  vec4 clippedShadowLength = varianceClipping(\n    shadowLengthBuffer,\n    vUv,\n    currentShadowLength,\n    historyShadowLength,\n    varianceGamma\n  );\n  outputShadowLength = clippedShadowLength.r;\n  #endif // SHADOW_LENGTH\n}\n\nvoid temporalAntialiasing(const ivec2 coord, out vec4 outputColor, out float outputShadowLength) {\n  vec4 currentColor = texelFetch(colorBuffer, coord, 0);\n  #ifdef SHADOW_LENGTH\n  vec4 currentShadowLength = vec4(texelFetch(shadowLengthBuffer, coord, 0).rgb, 1.0);\n  #endif // SHADOW_LENGTH\n\n  vec4 depthVelocity = getClosestFragment(coord);\n  vec2 velocity = depthVelocity.gb;\n\n  vec2 prevUv = vUv - velocity;\n  if (prevUv.x < 0.0 || prevUv.x > 1.0 || prevUv.y < 0.0 || prevUv.y > 1.0) {\n    outputColor = currentColor;\n    #ifdef SHADOW_LENGTH\n    outputShadowLength = currentShadowLength.r;\n    #endif // SHADOW_LENGTH\n    return; // Rejection\n  }\n\n  vec4 historyColor = texture(colorHistoryBuffer, prevUv);\n  vec4 clippedColor = varianceClipping(colorBuffer, coord, currentColor, historyColor);\n  outputColor = mix(clippedColor, currentColor, temporalAlpha);\n\n  #ifdef SHADOW_LENGTH\n  vec4 historyShadowLength = vec4(texture(shadowLengthHistoryBuffer, prevUv).rgb, 1.0);\n  vec4 clippedShadowLength = varianceClipping(\n    shadowLengthBuffer,\n    coord,\n    currentShadowLength,\n    historyShadowLength\n  );\n  outputShadowLength = mix(clippedShadowLength.r, currentShadowLength.r, temporalAlpha);\n  #endif // SHADOW_LENGTH\n}\n\nvoid main() {\n  ivec2 coord = ivec2(gl_FragCoord.xy);\n\n  #if !defined(SHADOW_LENGTH)\n  float outputShadowLength;\n  #endif // !defined(SHADOW_LENGTH)\n\n  #ifdef TEMPORAL_UPSCALE\n  ivec2 lowResCoord = coord / 4;\n  int bayerValue = bayerIndices[coord.x % 4][coord.y % 4];\n  bool currentFrame = bayerValue == frame % 16;\n  temporalUpscale(coord, lowResCoord, currentFrame, outputColor, outputShadowLength);\n  #else // TEMPORAL_UPSCALE\n  temporalAntialiasing(coord, outputColor, outputShadowLength);\n  #endif // TEMPORAL_UPSCALE\n\n  #if defined(SHADOW_LENGTH) && defined(DEBUG_SHOW_SHADOW_LENGTH)\n  outputColor = vec4(turbo(outputShadowLength * 0.05), 1.0);\n  #endif // defined(SHADOW_LENGTH) && defined(DEBUG_SHOW_SHADOW_LENGTH)\n\n  #ifdef DEBUG_SHOW_VELOCITY\n  outputColor.rgb = outputColor.rgb + vec3(abs(texture(depthVelocityBuffer, vUv).gb) * 10.0, 0.0);\n  #endif // DEBUG_SHOW_VELOCITY\n}\n`, Ct = `precision highp float;\n\nlayout(location = 0) in vec3 position;\n\nout vec2 vUv;\n\nvoid main() {\n  vUv = position.xy * 0.5 + 0.5;\n  gl_Position = vec4(position.xy, 1.0, 1.0);\n}\n`, Me = `#ifdef VARIANCE_9_SAMPLES\n#define VARIANCE_OFFSET_COUNT 8\nconst ivec2 varianceOffsets[8] = ivec2[8](\n  ivec2(-1, -1),\n  ivec2(-1, 1),\n  ivec2(1, -1),\n  ivec2(1, 1),\n  ivec2(1, 0),\n  ivec2(0, -1),\n  ivec2(0, 1),\n  ivec2(-1, 0)\n);\n#else // VARIANCE_9_SAMPLES\n#define VARIANCE_OFFSET_COUNT 4\nconst ivec2 varianceOffsets[4] = ivec2[4](ivec2(1, 0), ivec2(0, -1), ivec2(0, 1), ivec2(-1, 0));\n#endif // VARIANCE_9_SAMPLES\n\n// Reference: https://github.com/playdeadgames/temporal\nvec4 clipAABB(const vec4 current, const vec4 history, const vec4 minColor, const vec4 maxColor) {\n  vec3 pClip = 0.5 * (maxColor.rgb + minColor.rgb);\n  vec3 eClip = 0.5 * (maxColor.rgb - minColor.rgb) + 1e-7;\n  vec4 vClip = history - vec4(pClip, current.a);\n  vec3 vUnit = vClip.xyz / eClip;\n  vec3 aUnit = abs(vUnit);\n  float maUnit = max(aUnit.x, max(aUnit.y, aUnit.z));\n  if (maUnit > 1.0) {\n    return vec4(pClip, current.a) + vClip / maUnit;\n  }\n  return history;\n}\n\n#ifdef VARIANCE_SAMPLER_ARRAY\n#define VARIANCE_SAMPLER sampler2DArray\n#define VARIANCE_SAMPLER_COORD ivec3\n#else // VARIANCE_SAMPLER_ARRAY\n#define VARIANCE_SAMPLER sampler2D\n#define VARIANCE_SAMPLER_COORD ivec2\n#endif // VARIANCE_SAMPLER_ARRAY\n\n// Variance clipping\n// Reference: https://developer.download.nvidia.com/gameworks/events/GDC2016/msalvi_temporal_supersampling.pdf\nvec4 varianceClipping(\n  const VARIANCE_SAMPLER inputBuffer,\n  const VARIANCE_SAMPLER_COORD coord,\n  const vec4 current,\n  const vec4 history,\n  const float gamma\n) {\n  vec4 moment1 = current;\n  vec4 moment2 = current * current;\n  vec4 neighbor;\n  #pragma unroll_loop_start\n  for (int i = 0; i < 8; ++i) {\n    #if UNROLLED_LOOP_INDEX < VARIANCE_OFFSET_COUNT\n    neighbor = texelFetchOffset(inputBuffer, coord, 0, varianceOffsets[i]);\n    moment1 += neighbor;\n    moment2 += neighbor * neighbor;\n    #endif // UNROLLED_LOOP_INDEX < VARIANCE_OFFSET_COUNT\n  }\n  #pragma unroll_loop_end\n\n  const float N = float(VARIANCE_OFFSET_COUNT + 1);\n  vec4 mean = moment1 / N;\n  vec4 varianceGamma = sqrt(max(moment2 / N - mean * mean, 0.0)) * gamma;\n  vec4 minColor = mean - varianceGamma;\n  vec4 maxColor = mean + varianceGamma;\n  return clipAABB(clamp(mean, minColor, maxColor), history, minColor, maxColor);\n}\n\nvec4 varianceClipping(\n  const VARIANCE_SAMPLER inputBuffer,\n  const VARIANCE_SAMPLER_COORD coord,\n  const vec4 current,\n  const vec4 history\n) {\n  return varianceClipping(inputBuffer, coord, current, history, 1.0);\n}\n\nvec4 varianceClipping(\n  const sampler2D inputBuffer,\n  const vec2 coord,\n  const vec4 current,\n  const vec4 history,\n  const float gamma\n) {\n  vec4 moment1 = current;\n  vec4 moment2 = current * current;\n  vec4 neighbor;\n  #pragma unroll_loop_start\n  for (int i = 0; i < 8; ++i) {\n    #if UNROLLED_LOOP_INDEX < VARIANCE_OFFSET_COUNT\n    neighbor = textureOffset(inputBuffer, coord, varianceOffsets[i]);\n    moment1 += neighbor;\n    moment2 += neighbor * neighbor;\n    #endif // UNROLLED_LOOP_INDEX < VARIANCE_OFFSET_COUNT\n  }\n  #pragma unroll_loop_end\n\n  const float N = float(VARIANCE_OFFSET_COUNT + 1);\n  vec4 mean = moment1 / N;\n  vec4 varianceGamma = sqrt(max(moment2 / N - mean * mean, 0.0)) * gamma;\n  vec4 minColor = mean - varianceGamma;\n  vec4 maxColor = mean + varianceGamma;\n  return clipAABB(clamp(mean, minColor, maxColor), history, minColor, maxColor);\n}\n\nvec4 varianceClipping(\n  const sampler2D inputBuffer,\n  const vec2 coord,\n  const vec4 current,\n  const vec4 history\n) {\n  return varianceClipping(inputBuffer, coord, current, history, 1.0);\n}\n`;\nvar Tt = Object.defineProperty, Ie = (o, e, t, n) => {\n  for (var a = void 0, i = o.length - 1, s; i >= 0; i--)\n    (s = o[i]) && (a = s(e, t, a) || a);\n  return a && Tt(e, t, a), a;\n};\nclass te extends Q {\n  constructor({\n    colorBuffer: e = null,\n    depthVelocityBuffer: t = null,\n    shadowLengthBuffer: n = null,\n    colorHistoryBuffer: a = null,\n    shadowLengthHistoryBuffer: i = null\n  } = {}) {\n    super({\n      name: \"CloudsResolveMaterial\",\n      glslVersion: G,\n      vertexShader: Ct,\n      fragmentShader: V(\n        H(wt, {\n          core: { turbo: _e },\n          catmullRomSampling: xt,\n          varianceClipping: Me\n        })\n      ),\n      uniforms: {\n        colorBuffer: new r(e),\n        depthVelocityBuffer: new r(t),\n        shadowLengthBuffer: new r(n),\n        colorHistoryBuffer: new r(a),\n        shadowLengthHistoryBuffer: new r(i),\n        texelSize: new r(new f()),\n        frame: new r(0),\n        jitterOffset: new r(new f()),\n        varianceGamma: new r(2),\n        temporalAlpha: new r(0.1)\n      }\n    }), this.temporalUpscale = !0, this.shadowLength = !0;\n  }\n  setSize(e, t) {\n    this.uniforms.texelSize.value.set(1 / e, 1 / t);\n  }\n  onBeforeRender(e, t, n, a, i, s) {\n    const h = this.uniforms.frame.value % 16, u = Oe[h], d = (u.x - 0.5) * 4, v = (u.y - 0.5) * 4;\n    this.uniforms.jitterOffset.value.set(d, v);\n  }\n}\nIe([\n  x(\"TEMPORAL_UPSCALE\")\n], te.prototype, \"temporalUpscale\");\nIe([\n  x(\"SHADOW_LENGTH\")\n], te.prototype, \"shadowLength\");\nclass Ne extends Fe {\n  constructor(e, t) {\n    super(e), this._mainCamera = new we();\n    const { shadow: n } = t;\n    this.shadow = n;\n  }\n  get mainCamera() {\n    return this._mainCamera;\n  }\n  set mainCamera(e) {\n    this._mainCamera = e;\n  }\n}\nfunction Y(o, { depthVelocity: e, shadowLength: t }) {\n  const n = new Ge(1, 1, {\n    depthBuffer: !1,\n    type: Ce\n  });\n  n.texture.minFilter = B, n.texture.magFilter = B, n.texture.name = o;\n  let a;\n  e && (a = n.texture.clone(), a.isRenderTargetTexture = !0, n.depthVelocity = a, n.textures.push(a));\n  let i;\n  return t && (i = n.texture.clone(), i.isRenderTargetTexture = !0, i.format = Ve, n.shadowLength = i, n.textures.push(i)), Object.assign(n, {\n    depthVelocity: a ?? null,\n    shadowLength: i ?? null\n  });\n}\nclass Dt extends Ne {\n  constructor({\n    parameterUniforms: e,\n    layerUniforms: t,\n    atmosphereUniforms: n,\n    ...a\n  }, i) {\n    super(\"CloudsPass\", a), this.atmosphere = i, this.width = 0, this.height = 0, this.currentMaterial = new g(\n      {\n        parameterUniforms: e,\n        layerUniforms: t,\n        atmosphereUniforms: n\n      },\n      i\n    ), this.currentPass = new K(this.currentMaterial), this.resolveMaterial = new te(), this.resolvePass = new K(this.resolveMaterial), this.initRenderTargets({\n      depthVelocity: !0,\n      shadowLength: c.lightShafts\n    });\n  }\n  copyCameraSettings(e) {\n    this.currentMaterial.copyCameraSettings(e);\n  }\n  initialize(e, t, n) {\n    this.currentPass.initialize(e, t, n), this.resolvePass.initialize(e, t, n);\n  }\n  initRenderTargets(e) {\n    this.currentRenderTarget?.dispose(), this.resolveRenderTarget?.dispose(), this.historyRenderTarget?.dispose();\n    const t = Y(\"Clouds\", e), n = Y(\"Clouds.A\", {\n      ...e,\n      depthVelocity: !1\n    }), a = Y(\"Clouds.B\", {\n      ...e,\n      depthVelocity: !1\n    });\n    this.currentRenderTarget = t, this.resolveRenderTarget = n, this.historyRenderTarget = a;\n    const i = this.resolveMaterial.uniforms;\n    i.colorBuffer.value = t.texture, i.depthVelocityBuffer.value = t.depthVelocity, i.shadowLengthBuffer.value = t.shadowLength, i.colorHistoryBuffer.value = a.texture, i.shadowLengthHistoryBuffer.value = a.shadowLength;\n  }\n  copyShadow() {\n    const e = this.shadow, t = this.currentMaterial.uniforms;\n    for (let n = 0; n < e.cascadeCount; ++n) {\n      const a = e.cascades[n];\n      t.shadowIntervals.value[n].copy(a.interval), t.shadowMatrices.value[n].copy(a.matrix);\n    }\n    t.shadowFar.value = e.far;\n  }\n  copyReprojection() {\n    this.currentMaterial.copyReprojectionMatrix(this.mainCamera);\n  }\n  swapBuffers() {\n    const e = this.historyRenderTarget, t = this.resolveRenderTarget;\n    this.resolveRenderTarget = e, this.historyRenderTarget = t;\n    const n = this.resolveMaterial.uniforms;\n    n.colorHistoryBuffer.value = t.texture, n.shadowLengthHistoryBuffer.value = t.shadowLength;\n  }\n  update(e, t, n) {\n    this.currentMaterial.uniforms.frame.value = t, this.resolveMaterial.uniforms.frame.value = t, this.copyCameraSettings(this.mainCamera), this.copyShadow(), this.currentPass.render(e, null, this.currentRenderTarget), this.resolvePass.render(e, null, this.resolveRenderTarget), this.copyReprojection(), this.swapBuffers();\n  }\n  setSize(e, t) {\n    if (this.width = e, this.height = t, this.temporalUpscale) {\n      const n = Math.ceil(e / 4), a = Math.ceil(t / 4);\n      this.currentRenderTarget.setSize(n, a), this.currentMaterial.setSize(\n        n * 4,\n        a * 4,\n        e,\n        t\n      );\n    } else\n      this.currentRenderTarget.setSize(e, t), this.currentMaterial.setSize(e, t);\n    this.resolveRenderTarget.setSize(e, t), this.resolveMaterial.setSize(e, t), this.historyRenderTarget.setSize(e, t);\n  }\n  setShadowSize(e, t, n) {\n    this.currentMaterial.shadowCascadeCount = n, this.currentMaterial.setShadowSize(e, t);\n  }\n  setDepthTexture(e, t) {\n    this.currentMaterial.depthBuffer = e, this.currentMaterial.depthPacking = t ?? 0;\n  }\n  get outputBuffer() {\n    return this.historyRenderTarget.texture;\n  }\n  get shadowBuffer() {\n    return this.currentMaterial.uniforms.shadowBuffer.value;\n  }\n  set shadowBuffer(e) {\n    this.currentMaterial.uniforms.shadowBuffer.value = e;\n  }\n  get shadowLengthBuffer() {\n    return this.historyRenderTarget.shadowLength;\n  }\n  get temporalUpscale() {\n    return this.currentMaterial.temporalUpscale;\n  }\n  set temporalUpscale(e) {\n    e !== this.temporalUpscale && (this.currentMaterial.temporalUpscale = e, this.resolveMaterial.temporalUpscale = e, this.setSize(this.width, this.height));\n  }\n  get lightShafts() {\n    return this.currentMaterial.shadowLength;\n  }\n  set lightShafts(e) {\n    e !== this.lightShafts && (this.currentMaterial.shadowLength = e, this.resolveMaterial.shadowLength = e, this.initRenderTargets({\n      depthVelocity: !0,\n      shadowLength: e\n    }), this.setSize(this.width, this.height));\n  }\n}\nfunction Et(o, e) {\n  const n = o.properties.get(e.texture).__webglTexture, a = o.getContext();\n  A(a instanceof WebGL2RenderingContext), o.setRenderTarget(e);\n  const i = [];\n  if (n != null)\n    for (let s = 0; s < e.depth; ++s)\n      a.framebufferTextureLayer(\n        a.FRAMEBUFFER,\n        a.COLOR_ATTACHMENT0 + s,\n        n,\n        0,\n        s\n      ), i.push(a.COLOR_ATTACHMENT0 + s);\n  a.drawBuffers(i);\n}\nclass xe extends K {\n  render(e, t, n, a, i) {\n    const s = this.fullscreenMaterial.uniforms;\n    t !== null && s?.[this.input] != null && (s[this.input].value = t.texture), Et(e, n), e.render(this.scene, this.camera);\n  }\n}\nconst At = `precision highp float;\nprecision highp sampler3D;\n\n#include <common>\n\n#include \"core/math\"\n#include \"core/raySphereIntersection\"\n#include \"types\"\n#include \"parameters\"\n#include \"structuredSampling\"\n#include \"clouds\"\n\nuniform mat4 inverseShadowMatrices[CASCADE_COUNT];\nuniform mat4 reprojectionMatrices[CASCADE_COUNT];\n\n// Primary raymarch\nuniform int maxIterationCount;\nuniform float minStepSize;\nuniform float maxStepSize;\nuniform float opticalDepthTailScale;\n\nin vec2 vUv;\n\nlayout(location = 0) out vec4 outputColor[CASCADE_COUNT];\n\n// Redundant notation for prettier.\n#if CASCADE_COUNT == 1\nlayout(location = 1) out vec3 outputDepthVelocity[CASCADE_COUNT];\n#elif CASCADE_COUNT == 2\nlayout(location = 2) out vec3 outputDepthVelocity[CASCADE_COUNT];\n#elif CASCADE_COUNT == 3\nlayout(location = 3) out vec3 outputDepthVelocity[CASCADE_COUNT];\n#elif CASCADE_COUNT == 4\nlayout(location = 4) out vec3 outputDepthVelocity[CASCADE_COUNT];\n#endif // CASCADE_COUNT\n\nvec4 marchClouds(\n  const vec3 rayOrigin,\n  const vec3 rayDirection,\n  const float maxRayDistance,\n  const float jitter,\n  const float mipLevel\n) {\n  // Setup structured volume sampling (SVS).\n  // While SVS introduces spatial aliasing, it is indeed temporally stable,\n  // which is important for lower-resolution shadow maps where a flickering\n  // single pixel can be highly noticeable.\n  vec3 normal = getStructureNormal(rayDirection, jitter);\n  float rayDistance;\n  float stepSize;\n  intersectStructuredPlanes(\n    normal,\n    rayOrigin,\n    rayDirection,\n    clamp(maxRayDistance / float(maxIterationCount), minStepSize, maxStepSize),\n    rayDistance,\n    stepSize\n  );\n\n  #ifdef TEMPORAL_JITTER\n  rayDistance -= stepSize * jitter;\n  #endif // TEMPORAL_JITTER\n\n  float extinctionSum = 0.0;\n  float maxOpticalDepth = 0.0;\n  float maxOpticalDepthTail = 0.0;\n  float transmittanceIntegral = 1.0;\n  float weightedDistanceSum = 0.0;\n  float transmittanceSum = 0.0;\n\n  int sampleCount = 0;\n  for (int i = 0; i < maxIterationCount; ++i) {\n    if (rayDistance > maxRayDistance) {\n      break; // Termination\n    }\n\n    vec3 position = rayDistance * rayDirection + rayOrigin;\n    float height = length(position) - bottomRadius;\n\n    #if !defined(DEBUG_MARCH_INTERVALS)\n    if (insideLayerIntervals(height)) {\n      rayDistance += stepSize;\n      continue;\n    }\n    #endif // !defined(DEBUG_MARCH_INTERVALS)\n\n    // Sample rough weather.\n    vec2 uv = getGlobeUv(position);\n    WeatherSample weather = sampleWeather(uv, height, mipLevel);\n\n    if (any(greaterThan(weather.density, vec4(minDensity)))) {\n      // Sample detailed participating media.\n      // Note this assumes an homogeneous medium.\n      MediaSample media = sampleMedia(weather, position, uv, mipLevel, jitter);\n      if (media.extinction > minExtinction) {\n        extinctionSum += media.extinction;\n        maxOpticalDepth += media.extinction * stepSize;\n        transmittanceIntegral *= exp(-media.extinction * stepSize);\n        weightedDistanceSum += rayDistance * transmittanceIntegral;\n        transmittanceSum += transmittanceIntegral;\n        ++sampleCount;\n      }\n    }\n\n    if (transmittanceIntegral <= minTransmittance) {\n      // A large amount of optical depth accumulates in the tail, beyond the\n      // point of minimum transmittance. The expected optical depth seems to\n      // decrease exponentially with the number of samples taken before reaching\n      // the minimum transmittance.\n      // See the discussion here: https://x.com/shotamatsuda/status/1886259549931520437\n      maxOpticalDepthTail = min(\n        opticalDepthTailScale * stepSize * exp(float(1 - sampleCount)),\n        stepSize * 0.5 // Excessive optical depth only introduces aliasing.\n      );\n      break; // Early termination\n    }\n    rayDistance += stepSize;\n  }\n\n  if (sampleCount == 0) {\n    return vec4(maxRayDistance, 0.0, 0.0, 0.0);\n  }\n  float frontDepth = min(weightedDistanceSum / transmittanceSum, maxRayDistance);\n  float meanExtinction = extinctionSum / float(sampleCount);\n  return vec4(frontDepth, meanExtinction, maxOpticalDepth, maxOpticalDepthTail);\n}\n\nvoid getRayNearFar(\n  const vec3 sunPosition,\n  const vec3 rayDirection,\n  out float rayNear,\n  out float rayFar\n) {\n  vec4 firstIntersections = raySphereFirstIntersection(\n    sunPosition,\n    rayDirection,\n    vec3(0.0),\n    bottomRadius + vec4(shadowTopHeight, shadowBottomHeight, 0.0, 0.0)\n  );\n  rayNear = max(0.0, firstIntersections.x);\n  rayFar = firstIntersections.y;\n  if (rayFar < 0.0) {\n    rayFar = 1e6;\n  }\n}\n\nvoid cascade(\n  const int cascadeIndex,\n  const float mipLevel,\n  out vec4 outputColor,\n  out vec3 outputDepthVelocity\n) {\n  vec2 clip = vUv * 2.0 - 1.0;\n  vec4 point = inverseShadowMatrices[cascadeIndex] * vec4(clip.xy, -1.0, 1.0);\n  point /= point.w;\n  vec3 sunPosition = (worldToECEFMatrix * vec4(point.xyz, 1.0)).xyz + altitudeCorrection;\n\n  vec3 rayDirection = normalize(-sunDirection);\n  float rayNear;\n  float rayFar;\n  getRayNearFar(sunPosition, rayDirection, rayNear, rayFar);\n\n  vec3 rayOrigin = rayNear * rayDirection + sunPosition;\n  float stbn = getSTBN();\n  vec4 color = marchClouds(rayOrigin, rayDirection, rayFar - rayNear, stbn, mipLevel);\n  outputColor = color;\n\n  // Velocity for temporal resolution.\n  #ifdef TEMPORAL_PASS\n  vec3 frontPosition = color.x * rayDirection + rayOrigin;\n  vec3 frontPositionWorld = (ecefToWorldMatrix * vec4(frontPosition - altitudeCorrection, 1.0)).xyz;\n  vec4 prevClip = reprojectionMatrices[cascadeIndex] * vec4(frontPositionWorld, 1.0);\n  prevClip /= prevClip.w;\n  vec2 prevUv = prevClip.xy * 0.5 + 0.5;\n  vec2 velocity = (vUv - prevUv) * resolution;\n  outputDepthVelocity = vec3(color.x, velocity);\n  #else // TEMPORAL_PASS\n  outputDepthVelocity = vec3(0.0);\n  #endif // TEMPORAL_PASS\n}\n\n// TODO: Calculate from the main camera frustum perhaps?\nconst float mipLevels[4] = float[4](0.0, 0.5, 1.0, 2.0);\n\nvoid main() {\n  #pragma unroll_loop_start\n  for (int i = 0; i < 4; ++i) {\n    #if UNROLLED_LOOP_INDEX < CASCADE_COUNT\n    cascade(UNROLLED_LOOP_INDEX, mipLevels[i], outputColor[i], outputDepthVelocity[i]);\n    #endif // UNROLLED_LOOP_INDEX < CASCADE_COUNT\n  }\n  #pragma unroll_loop_end\n}\n`, _t = `precision highp float;\n\nlayout(location = 0) in vec3 position;\n\nout vec2 vUv;\n\nvoid main() {\n  vUv = position.xy * 0.5 + 0.5;\n  gl_Position = vec4(position.xy, 1.0, 1.0);\n}\n`, Pt = `// Implements Structured Volume Sampling in fragment shader:\n// https://github.com/huwb/volsample\n// Implementation reference:\n// https://www.shadertoy.com/view/ttVfDc\n\nvoid getIcosahedralVertices(const vec3 direction, out vec3 v1, out vec3 v2, out vec3 v3) {\n  // Normalization scalers to fit dodecahedron to unit sphere.\n  const float a = 0.85065080835204; // phi / sqrt(2 + phi)\n  const float b = 0.5257311121191336; // 1 / sqrt(2 + phi)\n\n  // Derive the vertices of icosahedron where triangle intersects the direction.\n  // See: https://www.ppsloan.org/publications/AmbientDice.pdf\n  const float kT = 0.6180339887498948; // 1 / phi\n  const float kT2 = 0.38196601125010515; // 1 / phi^2\n  vec3 absD = abs(direction);\n  float selector1 = dot(absD, vec3(1.0, kT2, -kT));\n  float selector2 = dot(absD, vec3(-kT, 1.0, kT2));\n  float selector3 = dot(absD, vec3(kT2, -kT, 1.0));\n  v1 = selector1 > 0.0 ? vec3(a, b, 0.0) : vec3(-b, 0.0, a);\n  v2 = selector2 > 0.0 ? vec3(0.0, a, b) : vec3(a, -b, 0.0);\n  v3 = selector3 > 0.0 ? vec3(b, 0.0, a) : vec3(0.0, a, -b);\n  vec3 octantSign = sign(direction);\n  v1 *= octantSign;\n  v2 *= octantSign;\n  v3 *= octantSign;\n}\n\nvoid swapIfBigger(inout vec4 a, inout vec4 b) {\n  if (a.w > b.w) {\n    vec4 t = a;\n    a = b;\n    b = t;\n  }\n}\n\nvoid sortVertices(inout vec3 a, inout vec3 b, inout vec3 c) {\n  const vec3 base = vec3(0.5, 0.5, 1.0);\n  vec4 aw = vec4(a, dot(a, base));\n  vec4 bw = vec4(b, dot(b, base));\n  vec4 cw = vec4(c, dot(c, base));\n  swapIfBigger(aw, bw);\n  swapIfBigger(bw, cw);\n  swapIfBigger(aw, bw);\n  a = aw.xyz;\n  b = bw.xyz;\n  c = cw.xyz;\n}\n\nvec3 getPentagonalWeights(const vec3 direction, const vec3 v1, const vec3 v2, const vec3 v3) {\n  float d1 = dot(v1, direction);\n  float d2 = dot(v2, direction);\n  float d3 = dot(v3, direction);\n  vec3 w = exp(vec3(d1, d2, d3) * 40.0);\n  return w / (w.x + w.y + w.z);\n}\n\nvec3 getStructureNormal(\n  const vec3 direction,\n  const float jitter,\n  out vec3 a,\n  out vec3 b,\n  out vec3 c,\n  out vec3 weights\n) {\n  getIcosahedralVertices(direction, a, b, c);\n  sortVertices(a, b, c);\n  weights = getPentagonalWeights(direction, a, b, c);\n  return jitter < weights.x\n    ? a\n    : jitter < weights.x + weights.y\n      ? b\n      : c;\n}\n\nvec3 getStructureNormal(const vec3 direction, const float jitter) {\n  vec3 a, b, c, weights;\n  return getStructureNormal(direction, jitter, a, b, c, weights);\n}\n\n// Reference: https://github.com/huwb/volsample/blob/master/src/unity/Assets/Shaders/RayMarchCore.cginc\nvoid intersectStructuredPlanes(\n  const vec3 normal,\n  const vec3 rayOrigin,\n  const vec3 rayDirection,\n  const float samplePeriod,\n  out float stepOffset,\n  out float stepSize\n) {\n  float NoD = dot(rayDirection, normal);\n  stepSize = samplePeriod / abs(NoD);\n\n  // Skips leftover bit to get from rayOrigin to first strata plane.\n  stepOffset = -mod(dot(rayOrigin, normal), samplePeriod) / NoD;\n\n  // mod() gives different results depending on if the arg is negative or\n  // positive. This line makes it consistent, and ensures the first sample is in\n  // front of the viewer.\n  if (stepOffset < 0.0) {\n    stepOffset += stepSize;\n  }\n}\n`;\nvar Ot = Object.defineProperty, M = (o, e, t, n) => {\n  for (var a = void 0, i = o.length - 1, s; i >= 0; i--)\n    (s = o[i]) && (a = s(e, t, a) || a);\n  return a && Ot(e, t, a), a;\n};\nclass _ extends Q {\n  constructor({\n    parameterUniforms: e,\n    layerUniforms: t,\n    atmosphereUniforms: n\n  }) {\n    super({\n      name: \"ShadowMaterial\",\n      glslVersion: G,\n      vertexShader: _t,\n      fragmentShader: V(\n        H(At, {\n          core: {\n            math: Pe,\n            raySphereIntersection: Ae\n          },\n          types: J,\n          parameters: Le,\n          structuredSampling: Pt,\n          clouds: Re\n        })\n      ),\n      uniforms: {\n        ...e,\n        ...t,\n        ...n,\n        inverseShadowMatrices: new r(\n          Array.from({ length: 4 }, () => new m())\n          // Populate the max number of elements\n        ),\n        reprojectionMatrices: new r(\n          Array.from({ length: 4 }, () => new m())\n          // Populate the max number of elements\n        ),\n        resolution: new r(new f()),\n        frame: new r(0),\n        stbnTexture: new r(null),\n        // Primary raymarch\n        maxIterationCount: new r(c.shadow.maxIterationCount),\n        minStepSize: new r(c.shadow.minStepSize),\n        maxStepSize: new r(c.shadow.maxStepSize),\n        minDensity: new r(c.shadow.minDensity),\n        minExtinction: new r(c.shadow.minExtinction),\n        minTransmittance: new r(c.shadow.minTransmittance),\n        opticalDepthTailScale: new r(2)\n      },\n      defines: {\n        SHADOW: \"1\",\n        TEMPORAL_PASS: \"1\",\n        TEMPORAL_JITTER: \"1\"\n      }\n    }), this.localWeatherChannels = \"rgba\", this.cascadeCount = c.shadow.cascadeCount, this.temporalPass = !0, this.temporalJitter = !0, this.shapeDetail = c.shapeDetail, this.turbulence = c.turbulence, this.cascadeCount = c.shadow.cascadeCount;\n  }\n  setSize(e, t) {\n    this.uniforms.resolution.value.set(e, t);\n  }\n}\nM([\n  Ee(\"LOCAL_WEATHER_CHANNELS\", {\n    validate: (o) => /^[rgba]{4}$/.test(o)\n  })\n], _.prototype, \"localWeatherChannels\");\nM([\n  L(\"CASCADE_COUNT\", { min: 1, max: 4 })\n], _.prototype, \"cascadeCount\");\nM([\n  x(\"TEMPORAL_PASS\")\n], _.prototype, \"temporalPass\");\nM([\n  x(\"TEMPORAL_JITTER\")\n], _.prototype, \"temporalJitter\");\nM([\n  x(\"SHAPE_DETAIL\")\n], _.prototype, \"shapeDetail\");\nM([\n  x(\"TURBULENCE\")\n], _.prototype, \"turbulence\");\nconst Rt = `precision highp float;\nprecision highp sampler2DArray;\n\n#define VARIANCE_9_SAMPLES 1\n#define VARIANCE_SAMPLER_ARRAY 1\n\n#include \"varianceClipping\"\n\nuniform sampler2DArray inputBuffer;\nuniform sampler2DArray historyBuffer;\n\nuniform vec2 texelSize;\nuniform float varianceGamma;\nuniform float temporalAlpha;\n\nin vec2 vUv;\n\nlayout(location = 0) out vec4 outputColor[CASCADE_COUNT];\n\nconst ivec2 neighborOffsets[9] = ivec2[9](\n  ivec2(-1, -1),\n  ivec2(-1, 0),\n  ivec2(-1, 1),\n  ivec2(0, -1),\n  ivec2(0, 0),\n  ivec2(0, 1),\n  ivec2(1, -1),\n  ivec2(1, 0),\n  ivec2(1, 1)\n);\n\nvec4 getClosestFragment(const ivec3 coord) {\n  vec4 result = vec4(1e7, 0.0, 0.0, 0.0);\n  vec4 neighbor;\n  #pragma unroll_loop_start\n  for (int i = 0; i < 9; ++i) {\n    neighbor = texelFetchOffset(\n      inputBuffer,\n      coord + ivec3(0, 0, CASCADE_COUNT),\n      0,\n      neighborOffsets[i]\n    );\n    if (neighbor.r < result.r) {\n      result = neighbor;\n    }\n  }\n  #pragma unroll_loop_end\n  return result;\n}\n\nvoid cascade(const int cascadeIndex, out vec4 outputColor) {\n  ivec3 coord = ivec3(gl_FragCoord.xy, cascadeIndex);\n  vec4 current = texelFetch(inputBuffer, coord, 0);\n\n  vec4 depthVelocity = getClosestFragment(coord);\n  vec2 velocity = depthVelocity.gb * texelSize;\n  vec2 prevUv = vUv - velocity;\n  if (prevUv.x < 0.0 || prevUv.x > 1.0 || prevUv.y < 0.0 || prevUv.y > 1.0) {\n    outputColor = current;\n    return; // Rejection\n  }\n\n  vec4 history = texture(historyBuffer, vec3(prevUv, float(cascadeIndex)));\n  vec4 clippedHistory = varianceClipping(inputBuffer, coord, current, history, varianceGamma);\n  outputColor = mix(clippedHistory, current, temporalAlpha);\n}\n\nvoid main() {\n  #pragma unroll_loop_start\n  for (int i = 0; i < 4; ++i) {\n    #if UNROLLED_LOOP_INDEX < CASCADE_COUNT\n    cascade(UNROLLED_LOOP_INDEX, outputColor[i]);\n    #endif // UNROLLED_LOOP_INDEX < CASCADE_COUNT\n  }\n  #pragma unroll_loop_end\n}\n`, Lt = `precision highp float;\n\nlayout(location = 0) in vec3 position;\n\nout vec2 vUv;\n\nvoid main() {\n  vUv = position.xy * 0.5 + 0.5;\n  gl_Position = vec4(position.xy, 1.0, 1.0);\n}\n`;\nvar Mt = Object.defineProperty, It = (o, e, t, n) => {\n  for (var a = void 0, i = o.length - 1, s; i >= 0; i--)\n    (s = o[i]) && (a = s(e, t, a) || a);\n  return a && Mt(e, t, a), a;\n};\nclass be extends Q {\n  constructor({\n    inputBuffer: e = null,\n    historyBuffer: t = null\n  } = {}) {\n    super({\n      name: \"ShadowResolveMaterial\",\n      glslVersion: G,\n      vertexShader: Lt,\n      fragmentShader: V(\n        H(Rt, {\n          varianceClipping: Me\n        })\n      ),\n      uniforms: {\n        inputBuffer: new r(e),\n        historyBuffer: new r(t),\n        texelSize: new r(new f()),\n        varianceGamma: new r(1),\n        // Use a very slow alpha because a single flickering pixel can be highly\n        // noticeable in shadow maps. This value can be increased if temporal\n        // jitter is turned off in the shadows rendering, but it will suffer\n        // from spatial aliasing.\n        temporalAlpha: new r(0.01)\n      },\n      defines: {}\n    }), this.cascadeCount = c.shadow.cascadeCount;\n  }\n  setSize(e, t) {\n    this.uniforms.texelSize.value.set(1 / e, 1 / t);\n  }\n}\nIt([\n  L(\"CASCADE_COUNT\", { min: 1, max: 4 })\n], be.prototype, \"cascadeCount\");\nfunction Z(o) {\n  const e = new ke(1, 1, 1, {\n    depthBuffer: !1\n  });\n  return e.texture.type = Ce, e.texture.minFilter = B, e.texture.magFilter = B, e.texture.name = o, e;\n}\nclass Nt extends Ne {\n  constructor({\n    parameterUniforms: e,\n    layerUniforms: t,\n    atmosphereUniforms: n,\n    ...a\n  }) {\n    super(\"ShadowPass\", a), this.width = 0, this.height = 0, this.currentMaterial = new _({\n      parameterUniforms: e,\n      layerUniforms: t,\n      atmosphereUniforms: n\n    }), this.currentPass = new xe(this.currentMaterial), this.resolveMaterial = new be(), this.resolvePass = new xe(this.resolveMaterial), this.initRenderTargets();\n  }\n  initialize(e, t, n) {\n    this.currentPass.initialize(e, t, n), this.resolvePass.initialize(e, t, n);\n  }\n  initRenderTargets() {\n    this.currentRenderTarget?.dispose(), this.resolveRenderTarget?.dispose(), this.historyRenderTarget?.dispose();\n    const e = Z(\"Shadow\"), t = this.temporalPass ? Z(\"Shadow.A\") : null, n = this.temporalPass ? Z(\"Shadow.B\") : null;\n    this.currentRenderTarget = e, this.resolveRenderTarget = t, this.historyRenderTarget = n;\n    const a = this.resolveMaterial.uniforms;\n    a.inputBuffer.value = e.texture, a.historyBuffer.value = n?.texture ?? null;\n  }\n  copyShadow() {\n    const e = this.shadow, t = this.currentMaterial.uniforms;\n    for (let n = 0; n < e.cascadeCount; ++n) {\n      const a = e.cascades[n];\n      t.inverseShadowMatrices.value[n].copy(a.inverseMatrix);\n    }\n  }\n  copyReprojection() {\n    const e = this.shadow, t = this.currentMaterial.uniforms;\n    for (let n = 0; n < e.cascadeCount; ++n) {\n      const a = e.cascades[n];\n      t.reprojectionMatrices.value[n].copy(a.matrix);\n    }\n  }\n  swapBuffers() {\n    A(this.historyRenderTarget != null), A(this.resolveRenderTarget != null);\n    const e = this.historyRenderTarget, t = this.resolveRenderTarget;\n    this.resolveRenderTarget = e, this.historyRenderTarget = t, this.resolveMaterial.uniforms.historyBuffer.value = t.texture;\n  }\n  update(e, t, n) {\n    this.currentMaterial.uniforms.frame.value = t, this.copyShadow(), this.currentPass.render(e, null, this.currentRenderTarget), this.temporalPass && (A(this.resolveRenderTarget != null), this.resolvePass.render(e, null, this.resolveRenderTarget), this.copyReprojection(), this.swapBuffers());\n  }\n  setSize(e, t, n = this.shadow.cascadeCount) {\n    this.width = e, this.height = t, this.currentMaterial.cascadeCount = n, this.resolveMaterial.cascadeCount = n, this.currentMaterial.setSize(e, t), this.resolveMaterial.setSize(e, t), this.currentRenderTarget.setSize(\n      e,\n      t,\n      this.temporalPass ? n * 2 : n\n      // For depth velocity\n    ), this.resolveRenderTarget?.setSize(e, t, n), this.historyRenderTarget?.setSize(e, t, n);\n  }\n  get outputBuffer() {\n    return this.temporalPass ? (A(this.historyRenderTarget != null), this.historyRenderTarget.texture) : this.currentRenderTarget.texture;\n  }\n  get temporalPass() {\n    return this.currentMaterial.temporalPass;\n  }\n  set temporalPass(e) {\n    e !== this.temporalPass && (this.currentMaterial.temporalPass = e, this.initRenderTargets(), this.setSize(this.width, this.height));\n  }\n}\nfunction bt(o) {\n  return {\n    // Participating medium\n    scatteringCoefficient: new r(1),\n    absorptionCoefficient: new r(0),\n    // Weather and shape\n    coverage: new r(0.3),\n    localWeatherTexture: new r(o.localWeatherTexture),\n    localWeatherRepeat: new r(o.localWeatherRepeat),\n    localWeatherOffset: new r(o.localWeatherOffset),\n    shapeTexture: new r(o.shapeTexture),\n    shapeRepeat: new r(o.shapeRepeat),\n    shapeOffset: new r(o.shapeOffset),\n    shapeDetailTexture: new r(o.shapeDetailTexture),\n    shapeDetailRepeat: new r(o.shapeDetailRepeat),\n    shapeDetailOffset: new r(o.shapeDetailOffset),\n    turbulenceTexture: new r(o.turbulenceTexture),\n    turbulenceRepeat: new r(o.turbulenceRepeat),\n    turbulenceDisplacement: new r(350)\n  };\n}\nfunction Ut() {\n  return {\n    minLayerHeights: new r(new S()),\n    maxLayerHeights: new r(new S()),\n    minIntervalHeights: new r(new p()),\n    maxIntervalHeights: new r(new p()),\n    densityScales: new r(new S()),\n    shapeAmounts: new r(new S()),\n    shapeDetailAmounts: new r(new S()),\n    weatherExponents: new r(new S()),\n    shapeAlteringBiases: new r(new S()),\n    coverageFilterWidths: new r(new S()),\n    minHeight: new r(0),\n    maxHeight: new r(0),\n    shadowTopHeight: new r(0),\n    shadowBottomHeight: new r(0),\n    shadowLayerMask: new r(new S()),\n    densityProfile: new r({\n      expTerms: new S(),\n      exponents: new S(),\n      linearTerms: new S(),\n      constantTerms: new S()\n    })\n  };\n}\nconst q = [0, 0, 0, 0];\nfunction Ht(o, e) {\n  e.packValues(\"altitude\", o.minLayerHeights.value), e.packSums(\"altitude\", \"height\", o.maxLayerHeights.value), e.packIntervalHeights(\n    o.minIntervalHeights.value,\n    o.maxIntervalHeights.value\n  ), e.packValues(\"densityScale\", o.densityScales.value), e.packValues(\"shapeAmount\", o.shapeAmounts.value), e.packValues(\"shapeDetailAmount\", o.shapeDetailAmounts.value), e.packValues(\"weatherExponent\", o.weatherExponents.value), e.packValues(\"shapeAlteringBias\", o.shapeAlteringBiases.value), e.packValues(\"coverageFilterWidth\", o.coverageFilterWidths.value);\n  const t = o.densityProfile.value;\n  e.packDensityProfiles(\"expTerm\", t.expTerms), e.packDensityProfiles(\"exponent\", t.exponents), e.packDensityProfiles(\"linearTerm\", t.linearTerms), e.packDensityProfiles(\"constantTerm\", t.constantTerms);\n  let n = 1 / 0, a = 0, i = 1 / 0, s = 0;\n  q.fill(0);\n  for (let l = 0; l < e.length; ++l) {\n    const { altitude: h, height: u, shadow: d } = e[l], v = h + u;\n    u > 0 && (h < n && (n = h), d && h < i && (i = h), v > a && (a = v), d && v > s && (s = v)), q[l] = d ? 1 : 0;\n  }\n  n !== 1 / 0 ? (o.minHeight.value = n, o.maxHeight.value = a) : (A(a === 0), o.minHeight.value = 0), i !== 1 / 0 ? (o.shadowBottomHeight.value = i, o.shadowTopHeight.value = s) : (A(s === 0), o.shadowBottomHeight.value = 0), o.shadowLayerMask.value.fromArray(q);\n}\nfunction Ft(o, e) {\n  return {\n    bottomRadius: new r(o.bottomRadius),\n    topRadius: new r(o.topRadius),\n    worldToECEFMatrix: new r(e.worldToECEFMatrix),\n    ecefToWorldMatrix: new r(e.ecefToWorldMatrix),\n    altitudeCorrection: new r(e.altitudeCorrection),\n    sunDirection: new r(e.sunDirection)\n  };\n}\nconst zt = `uniform sampler2D cloudsBuffer;\n\nvoid mainImage(const vec4 inputColor, const vec2 uv, out vec4 outputColor) {\n  #ifdef SKIP_RENDERING\n  outputColor = inputColor;\n  #else // SKIP_RENDERING\n  vec4 clouds = texture(cloudsBuffer, uv);\n  outputColor.rgb = inputColor.rgb * (1.0 - clouds.a) + clouds.rgb;\n  outputColor.a = inputColor.a * (1.0 - clouds.a) + clouds.a;\n  #endif // SKIP_RENDERING\n}\n`;\nvar Wt = Object.defineProperty, Bt = (o, e, t, n) => {\n  for (var a = void 0, i = o.length - 1, s; i >= 0; i--)\n    (s = o[i]) && (a = s(e, t, a) || a);\n  return a && Wt(e, t, a), a;\n};\nconst N = /* @__PURE__ */ new p(), Gt = /* @__PURE__ */ new f(), Vt = /* @__PURE__ */ new Ye(), kt = [\n  \"maxIterationCount\",\n  \"minStepSize\",\n  \"maxStepSize\",\n  \"maxRayDistance\",\n  \"perspectiveStepScale\",\n  \"minDensity\",\n  \"minExtinction\",\n  \"minTransmittance\",\n  \"maxIterationCountToSun\",\n  \"maxIterationCountToGround\",\n  \"minSecondaryStepSize\",\n  \"secondaryStepScale\",\n  \"maxShadowFilterRadius\",\n  \"maxShadowLengthIterationCount\",\n  \"minShadowLengthStepSize\",\n  \"maxShadowLengthRayDistance\",\n  \"hazeDensityScale\",\n  \"hazeExponent\",\n  \"hazeScatteringCoefficient\",\n  \"hazeAbsorptionCoefficient\"\n], jt = [\n  \"multiScatteringOctaves\",\n  \"accurateSunSkyLight\",\n  \"accuratePhaseFunction\"\n], Yt = [\n  \"maxIterationCount\",\n  \"minStepSize\",\n  \"maxStepSize\",\n  \"minDensity\",\n  \"minExtinction\",\n  \"minTransmittance\",\n  \"opticalDepthTailScale\"\n], Zt = [\n  \"temporalJitter\"\n], qt = [\n  \"temporalPass\"\n], Kt = [\n  \"cascadeCount\",\n  \"mapSize\",\n  \"maxFar\",\n  \"farScale\",\n  \"splitMode\",\n  \"splitLambda\"\n], T = {\n  type: \"change\"\n}, $t = {\n  resolutionScale: c.resolutionScale,\n  width: $.AUTO_SIZE,\n  height: $.AUTO_SIZE\n};\nclass Xt extends ze {\n  constructor(e = new we(), t, n = Te.DEFAULT) {\n    super(\"CloudsEffect\", zt, {\n      attributes: We.DEPTH,\n      uniforms: /* @__PURE__ */ new Map([[\"cloudsBuffer\", new r(null)]])\n    }), this.camera = e, this.atmosphere = n, this.cloudLayers = X.DEFAULT.clone(), this.correctAltitude = !0, this.localWeatherRepeat = new f().setScalar(100), this.localWeatherOffset = new f(), this.shapeRepeat = new p().setScalar(3e-4), this.shapeOffset = new p(), this.shapeDetailRepeat = new p().setScalar(6e-3), this.shapeDetailOffset = new p(), this.turbulenceRepeat = new f().setScalar(20), this.worldToECEFMatrix = new m(), this.ecefToWorldMatrix = new m(), this.altitudeCorrection = new p(), this.sunDirection = new p(), this.localWeatherVelocity = new f(), this.shapeVelocity = new p(), this.shapeDetailVelocity = new p(), this._atmosphereOverlay = null, this._atmosphereShadow = null, this._atmosphereShadowLength = null, this.events = new je(), this.frame = 0, this.shadowCascadeCount = 0, this.shadowMapSize = new f(), this.onResolutionChange = () => {\n      this.setSize(this.resolution.baseWidth, this.resolution.baseHeight);\n    }, this.skipRendering = !0;\n    const {\n      resolutionScale: a,\n      width: i,\n      height: s,\n      resolutionX: l = i,\n      resolutionY: h = s\n    } = {\n      ...$t,\n      ...t\n    };\n    this.shadowMaps = new dt({\n      cascadeCount: c.shadow.cascadeCount,\n      mapSize: c.shadow.mapSize,\n      splitLambda: 0.6\n    }), this.parameterUniforms = bt({\n      localWeatherTexture: this.proceduralLocalWeather?.texture ?? null,\n      localWeatherRepeat: this.localWeatherRepeat,\n      localWeatherOffset: this.localWeatherOffset,\n      shapeTexture: this.proceduralShape?.texture ?? null,\n      shapeRepeat: this.shapeRepeat,\n      shapeOffset: this.shapeOffset,\n      shapeDetailTexture: this.proceduralShapeDetail?.texture ?? null,\n      shapeDetailRepeat: this.shapeDetailRepeat,\n      shapeDetailOffset: this.shapeDetailOffset,\n      turbulenceTexture: this.proceduralTurbulence?.texture ?? null,\n      turbulenceRepeat: this.turbulenceRepeat\n    }), this.layerUniforms = Ut(), this.atmosphereUniforms = Ft(n, {\n      worldToECEFMatrix: this.worldToECEFMatrix,\n      ecefToWorldMatrix: this.ecefToWorldMatrix,\n      altitudeCorrection: this.altitudeCorrection,\n      sunDirection: this.sunDirection\n    });\n    const u = {\n      shadow: this.shadowMaps,\n      parameterUniforms: this.parameterUniforms,\n      layerUniforms: this.layerUniforms,\n      atmosphereUniforms: this.atmosphereUniforms\n    };\n    this.shadowPass = new Nt(u), this.shadowPass.mainCamera = e, this.cloudsPass = new Dt(u, n), this.cloudsPass.mainCamera = e, this.clouds = he(\n      ue(\n        {},\n        this.cloudsPass.currentMaterial,\n        kt\n      ),\n      this.cloudsPass.currentMaterial,\n      jt\n    ), this.shadow = he(\n      ue(\n        {},\n        this.shadowPass.currentMaterial,\n        Yt\n      ),\n      this.shadowPass.currentMaterial,\n      Zt,\n      this.shadowPass,\n      qt,\n      this.shadowMaps,\n      Kt\n    ), this.resolution = new $(\n      this,\n      l,\n      h,\n      a\n    ), this.resolution.addEventListener(\"change\", this.onResolutionChange);\n  }\n  get mainCamera() {\n    return this.camera;\n  }\n  set mainCamera(e) {\n    this.camera = e, this.shadowPass.mainCamera = e, this.cloudsPass.mainCamera = e;\n  }\n  initialize(e, t, n) {\n    this.shadowPass.initialize(e, t, n), this.cloudsPass.initialize(e, t, n);\n  }\n  updateSharedUniforms(e) {\n    Ht(this.layerUniforms, this.cloudLayers);\n    const { parameterUniforms: t } = this;\n    t.localWeatherOffset.value.add(\n      Gt.copy(this.localWeatherVelocity).multiplyScalar(e)\n    ), t.shapeOffset.value.add(\n      N.copy(this.shapeVelocity).multiplyScalar(e)\n    ), t.shapeDetailOffset.value.add(\n      N.copy(this.shapeDetailVelocity).multiplyScalar(e)\n    );\n    const n = this.worldToECEFMatrix;\n    this.ecefToWorldMatrix.copy(n).invert();\n    const a = this.camera.getWorldPosition(N).applyMatrix4(this.worldToECEFMatrix), i = this.altitudeCorrection;\n    this.correctAltitude ? qe(\n      a,\n      this.atmosphere.bottomRadius,\n      this.ellipsoid,\n      i\n    ) : i.setScalar(0);\n    const s = this.ellipsoid.getSurfaceNormal(\n      a,\n      N\n    ), l = this.sunDirection.dot(s), h = De(1e6, 1e3, l), u = Vt.setFromMatrix4(n).transpose();\n    this.shadowMaps.update(\n      this.camera,\n      N.copy(this.sunDirection).applyMatrix3(u),\n      h\n    );\n  }\n  updateWeatherTextureChannels() {\n    const e = this.cloudLayers.localWeatherChannels;\n    this.cloudsPass.currentMaterial.localWeatherChannels = e, this.shadowPass.currentMaterial.localWeatherChannels = e;\n  }\n  updateAtmosphereComposition() {\n    const { shadowMaps: e, shadowPass: t, cloudsPass: n } = this, a = t.currentMaterial.uniforms, i = n.currentMaterial.uniforms, s = this._atmosphereOverlay, l = Object.assign(this._atmosphereOverlay ?? {}, {\n      map: n.outputBuffer\n    });\n    s !== l && (this._atmosphereOverlay = l, T.target = this, T.property = \"atmosphereOverlay\", this.events.dispatchEvent(T));\n    const h = this._atmosphereShadow, u = Object.assign(this._atmosphereShadow ?? {}, {\n      map: t.outputBuffer,\n      mapSize: e.mapSize,\n      cascadeCount: e.cascadeCount,\n      intervals: i.shadowIntervals.value,\n      matrices: i.shadowMatrices.value,\n      inverseMatrices: a.inverseShadowMatrices.value,\n      far: e.far,\n      topHeight: i.shadowTopHeight.value\n    });\n    h !== u && (this._atmosphereShadow = u, T.target = this, T.property = \"atmosphereShadow\", this.events.dispatchEvent(T));\n    const d = this._atmosphereShadowLength, v = n.shadowLengthBuffer != null ? Object.assign(this._atmosphereShadowLength ?? {}, {\n      map: n.shadowLengthBuffer\n    }) : null;\n    d !== v && (this._atmosphereShadowLength = v, T.target = this, T.property = \"atmosphereShadowLength\", this.events.dispatchEvent(T));\n  }\n  update(e, t, n = 0) {\n    const { shadowMaps: a, shadowPass: i, cloudsPass: s } = this;\n    if (a.cascadeCount !== this.shadowCascadeCount || !a.mapSize.equals(this.shadowMapSize)) {\n      const { width: l, height: h } = a.mapSize, u = a.cascadeCount;\n      this.shadowMapSize.set(l, h), this.shadowCascadeCount = u, i.setSize(l, h, u), s.setShadowSize(l, h, u);\n    }\n    this.proceduralLocalWeather?.render(e, n), this.proceduralShape?.render(e, n), this.proceduralShapeDetail?.render(e, n), this.proceduralTurbulence?.render(e, n), ++this.frame, this.updateSharedUniforms(n), this.updateWeatherTextureChannels(), i.update(e, this.frame, n), s.shadowBuffer = i.outputBuffer, s.update(e, this.frame, n), this.updateAtmosphereComposition(), this.uniforms.get(\"cloudsBuffer\").value = this.cloudsPass.outputBuffer;\n  }\n  setSize(e, t) {\n    const { resolution: n } = this;\n    n.setBaseSize(e, t);\n    const { width: a, height: i } = n;\n    this.cloudsPass.setSize(a, i);\n  }\n  setDepthTexture(e, t) {\n    this.shadowPass.setDepthTexture(e, t), this.cloudsPass.setDepthTexture(e, t);\n  }\n  // eslint-disable-next-line accessor-pairs\n  set qualityPreset(e) {\n    const { clouds: t, shadow: n, ...a } = ft[e];\n    Object.assign(this, a), Object.assign(this.clouds, t), Object.assign(this.shadow, n);\n  }\n  // Textures\n  get localWeatherTexture() {\n    return this.proceduralLocalWeather ?? this.parameterUniforms.localWeatherTexture.value;\n  }\n  set localWeatherTexture(e) {\n    e instanceof ce || e == null ? (this.proceduralLocalWeather = void 0, this.parameterUniforms.localWeatherTexture.value = e) : (this.proceduralLocalWeather = e, this.parameterUniforms.localWeatherTexture.value = e.texture);\n  }\n  get shapeTexture() {\n    return this.proceduralShape ?? this.parameterUniforms.shapeTexture.value;\n  }\n  set shapeTexture(e) {\n    e instanceof le || e == null ? (this.proceduralShape = void 0, this.parameterUniforms.shapeTexture.value = e) : (this.proceduralShape = e, this.parameterUniforms.shapeTexture.value = e.texture);\n  }\n  get shapeDetailTexture() {\n    return this.proceduralShapeDetail ?? this.parameterUniforms.shapeDetailTexture.value;\n  }\n  set shapeDetailTexture(e) {\n    e instanceof le || e == null ? (this.proceduralShapeDetail = void 0, this.parameterUniforms.shapeDetailTexture.value = e) : (this.proceduralShapeDetail = e, this.parameterUniforms.shapeDetailTexture.value = e.texture);\n  }\n  get turbulenceTexture() {\n    return this.proceduralTurbulence ?? this.parameterUniforms.turbulenceTexture.value;\n  }\n  set turbulenceTexture(e) {\n    e instanceof ce || e == null ? (this.proceduralTurbulence = void 0, this.parameterUniforms.turbulenceTexture.value = e) : (this.proceduralTurbulence = e, this.parameterUniforms.turbulenceTexture.value = e.texture);\n  }\n  get stbnTexture() {\n    return this.cloudsPass.currentMaterial.uniforms.stbnTexture.value;\n  }\n  set stbnTexture(e) {\n    this.cloudsPass.currentMaterial.uniforms.stbnTexture.value = e, this.shadowPass.currentMaterial.uniforms.stbnTexture.value = e;\n  }\n  // Rendering controls\n  get resolutionScale() {\n    return this.resolution.scale;\n  }\n  set resolutionScale(e) {\n    this.resolution.scale = e;\n  }\n  get temporalUpscale() {\n    return this.cloudsPass.temporalUpscale;\n  }\n  set temporalUpscale(e) {\n    this.cloudsPass.temporalUpscale = e;\n  }\n  get lightShafts() {\n    return this.cloudsPass.lightShafts;\n  }\n  set lightShafts(e) {\n    this.cloudsPass.lightShafts = e;\n  }\n  get shapeDetail() {\n    return this.cloudsPass.currentMaterial.shapeDetail;\n  }\n  set shapeDetail(e) {\n    this.cloudsPass.currentMaterial.shapeDetail = e, this.shadowPass.currentMaterial.shapeDetail = e;\n  }\n  get turbulence() {\n    return this.cloudsPass.currentMaterial.turbulence;\n  }\n  set turbulence(e) {\n    this.cloudsPass.currentMaterial.turbulence = e, this.shadowPass.currentMaterial.turbulence = e;\n  }\n  get haze() {\n    return this.cloudsPass.currentMaterial.haze;\n  }\n  set haze(e) {\n    this.cloudsPass.currentMaterial.haze = e;\n  }\n  // Cloud parameter primitives\n  get scatteringCoefficient() {\n    return this.parameterUniforms.scatteringCoefficient.value;\n  }\n  set scatteringCoefficient(e) {\n    this.parameterUniforms.scatteringCoefficient.value = e;\n  }\n  get absorptionCoefficient() {\n    return this.parameterUniforms.absorptionCoefficient.value;\n  }\n  set absorptionCoefficient(e) {\n    this.parameterUniforms.absorptionCoefficient.value = e;\n  }\n  get coverage() {\n    return this.parameterUniforms.coverage.value;\n  }\n  set coverage(e) {\n    this.parameterUniforms.coverage.value = e;\n  }\n  get turbulenceDisplacement() {\n    return this.parameterUniforms.turbulenceDisplacement.value;\n  }\n  set turbulenceDisplacement(e) {\n    this.parameterUniforms.turbulenceDisplacement.value = e;\n  }\n  // Scattering parameters\n  get scatterAnisotropy1() {\n    return this.cloudsPass.currentMaterial.scatterAnisotropy1;\n  }\n  set scatterAnisotropy1(e) {\n    this.cloudsPass.currentMaterial.scatterAnisotropy1 = e;\n  }\n  get scatterAnisotropy2() {\n    return this.cloudsPass.currentMaterial.scatterAnisotropy2;\n  }\n  set scatterAnisotropy2(e) {\n    this.cloudsPass.currentMaterial.scatterAnisotropy2 = e;\n  }\n  get scatterAnisotropyMix() {\n    return this.cloudsPass.currentMaterial.scatterAnisotropyMix;\n  }\n  set scatterAnisotropyMix(e) {\n    this.cloudsPass.currentMaterial.scatterAnisotropyMix = e;\n  }\n  get skyLightScale() {\n    return this.cloudsPass.currentMaterial.uniforms.skyLightScale.value;\n  }\n  set skyLightScale(e) {\n    this.cloudsPass.currentMaterial.uniforms.skyLightScale.value = e;\n  }\n  get groundBounceScale() {\n    return this.cloudsPass.currentMaterial.uniforms.groundBounceScale.value;\n  }\n  set groundBounceScale(e) {\n    this.cloudsPass.currentMaterial.uniforms.groundBounceScale.value = e;\n  }\n  get powderScale() {\n    return this.cloudsPass.currentMaterial.uniforms.powderScale.value;\n  }\n  set powderScale(e) {\n    this.cloudsPass.currentMaterial.uniforms.powderScale.value = e;\n  }\n  get powderExponent() {\n    return this.cloudsPass.currentMaterial.uniforms.powderExponent.value;\n  }\n  set powderExponent(e) {\n    this.cloudsPass.currentMaterial.uniforms.powderExponent.value = e;\n  }\n  // Atmosphere composition\n  get atmosphereOverlay() {\n    return this._atmosphereOverlay;\n  }\n  get atmosphereShadow() {\n    return this._atmosphereShadow;\n  }\n  get atmosphereShadowLength() {\n    return this._atmosphereShadowLength;\n  }\n  // Atmosphere parameters\n  get irradianceTexture() {\n    return this.cloudsPass.currentMaterial.irradianceTexture;\n  }\n  set irradianceTexture(e) {\n    this.cloudsPass.currentMaterial.irradianceTexture = e;\n  }\n  get scatteringTexture() {\n    return this.cloudsPass.currentMaterial.scatteringTexture;\n  }\n  set scatteringTexture(e) {\n    this.cloudsPass.currentMaterial.scatteringTexture = e;\n  }\n  get transmittanceTexture() {\n    return this.cloudsPass.currentMaterial.transmittanceTexture;\n  }\n  set transmittanceTexture(e) {\n    this.cloudsPass.currentMaterial.transmittanceTexture = e;\n  }\n  get singleMieScatteringTexture() {\n    return this.cloudsPass.currentMaterial.singleMieScatteringTexture;\n  }\n  set singleMieScatteringTexture(e) {\n    this.cloudsPass.currentMaterial.singleMieScatteringTexture = e;\n  }\n  get higherOrderScatteringTexture() {\n    return this.cloudsPass.currentMaterial.higherOrderScatteringTexture;\n  }\n  set higherOrderScatteringTexture(e) {\n    this.cloudsPass.currentMaterial.higherOrderScatteringTexture = e;\n  }\n  get ellipsoid() {\n    return this.cloudsPass.currentMaterial.ellipsoid;\n  }\n  set ellipsoid(e) {\n    this.cloudsPass.currentMaterial.ellipsoid = e;\n  }\n  get sunAngularRadius() {\n    return this.cloudsPass.currentMaterial.sunAngularRadius;\n  }\n  set sunAngularRadius(e) {\n    this.cloudsPass.currentMaterial.sunAngularRadius = e;\n  }\n}\nBt([\n  x(\"SKIP_RENDERING\")\n], Xt.prototype, \"skipRendering\");\nconst rn = 128, on = 32, j = \"45a1c6c1bb9fd38b3680fd120795ff4c32df68ff\", sn = `https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/${j}/packages/clouds/assets/local_weather.png`, cn = `https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/${j}/packages/clouds/assets/shape.bin`, ln = `https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/${j}/packages/clouds/assets/shape_detail.bin`, hn = `https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/${j}/packages/clouds/assets/turbulence.png`;\nexport {\n  rn as C,\n  sn as D,\n  on as a,\n  w as b,\n  X as c,\n  Xt as d,\n  ln as e,\n  cn as f,\n  hn as g,\n  k as h,\n  $t as i\n};\n//# sourceMappingURL=shared.js.map\n","import { BlendFunction as v, Effect as f, EffectAttribute as d, RenderPass as A, Resolution as h, ShaderPass as g, MipmapBlurPass as P, KawaseBlurPass as z, KernelSize as D } from \"postprocessing\";\nimport { Uniform as s, ShaderLib as l, HalfFloatType as m, ShaderMaterial as U, NoBlending as S, Vector2 as T, WebGLRenderTarget as w, Matrix4 as x } from \"three\";\nimport { define as p, resolveIncludes as b, reinterpretType as M } from \"@takram/three-geospatial\";\nimport { turbo as F, depth as B, packing as C, transform as O } from \"@takram/three-geospatial/shaders\";\nconst N = `#include \"core/depth\"\n#include \"core/turbo\"\n\nuniform float near;\nuniform float far;\n\nvoid mainImage(const vec4 inputColor, const vec2 uv, out vec4 outputColor) {\n  float depth = readDepthValue(depthBuffer, uv);\n  depth = reverseLogDepth(depth, cameraNear, cameraFar);\n  depth = linearizeDepth(depth, near, far) / far;\n\n  #ifdef USE_TURBO\n  vec3 color = turbo(1.0 - depth);\n  #else // USE_TURBO\n  vec3 color = vec3(depth);\n  #endif // USE_TURBO\n\n  outputColor = vec4(color, inputColor.a);\n}\n`;\nvar L = Object.defineProperty, j = (o, e, t, i) => {\n  for (var n = void 0, r = o.length - 1, a; r >= 0; r--)\n    (a = o[r]) && (n = a(e, t, n) || n);\n  return n && L(e, t, n), n;\n};\nconst G = {\n  blendFunction: v.SRC,\n  useTurbo: !1,\n  near: 1,\n  far: 1e3\n};\nclass H extends f {\n  constructor(e) {\n    const { blendFunction: t, useTurbo: i, near: n, far: r } = {\n      ...G,\n      ...e\n    };\n    super(\n      \"DepthEffect\",\n      b(N, {\n        core: { depth: B, turbo: F }\n      }),\n      {\n        blendFunction: t,\n        attributes: d.DEPTH,\n        uniforms: new Map(\n          Object.entries({\n            near: new s(n),\n            far: new s(r)\n          })\n        )\n      }\n    ), this.useTurbo = i;\n  }\n  get near() {\n    return this.uniforms.get(\"near\").value;\n  }\n  set near(e) {\n    this.uniforms.get(\"near\").value = e;\n  }\n  get far() {\n    return this.uniforms.get(\"far\").value;\n  }\n  set far(e) {\n    this.uniforms.get(\"far\").value = e;\n  }\n}\nj([\n  p(\"USE_TURBO\")\n], H.prototype, \"useTurbo\");\nconst V = `#define DITHERING\n\n#include <dithering_pars_fragment>\n\nvoid mainImage(const vec4 inputColor, const vec2 uv, out vec4 outputColor) {\n  outputColor = vec4(saturate(dithering(inputColor.rgb)), inputColor.a);\n}\n`, $ = {\n  blendFunction: v.NORMAL\n};\nclass le extends f {\n  constructor(e) {\n    const { blendFunction: t } = {\n      ...$,\n      ...e\n    };\n    super(\"DitheringEffect\", V, {\n      blendFunction: t\n    });\n  }\n}\nconst R = Symbol(\"SETUP\");\nfunction I(o) {\n  const e = o.vertexShader.replace(\n    /* glsl */\n    \"#include <fog_pars_vertex>\",\n    /* glsl */\n    `\n        #include <fog_pars_vertex>\n        #include <normal_pars_vertex>\n      `\n  ).replace(\n    /* glsl */\n    \"#include <defaultnormal_vertex>\",\n    /* glsl */\n    `\n        #include <defaultnormal_vertex>\n        #include <normal_vertex>\n      `\n  ).replace(\n    /* glsl */\n    \"#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\",\n    /* glsl */\n    \"#if 1\"\n  ).replace(\n    /* glsl */\n    \"#include <clipping_planes_vertex>\",\n    /* glsl */\n    `\n        #include <clipping_planes_vertex>\n        vViewPosition = - mvPosition.xyz;\n      `\n  );\n  o.vertexShader = /* glsl */\n  `\n    #undef FLAT_SHADED\n    varying vec3 vViewPosition;\n    ${e}\n  `;\n  const t = o.fragmentShader.replace(\n    /#ifndef FLAT_SHADED\\s+varying vec3 vNormal;\\s+#endif/m,\n    /* glsl */\n    \"#include <normal_pars_fragment>\"\n  ).replace(\n    /* glsl */\n    \"#include <common>\",\n    /* glsl */\n    `\n        #include <common>\n        #include <packing>\n      `\n  ).replace(\n    /* glsl */\n    \"#include <specularmap_fragment>\",\n    /* glsl */\n    `\n        #include <specularmap_fragment>\n        #include <normal_fragment_begin>\n        #include <normal_fragment_maps>\n      `\n  );\n  return o.fragmentShader = /* glsl */\n  `\n    #undef FLAT_SHADED\n    varying vec3 vViewPosition;\n    ${t}\n  `, o;\n}\nfunction c(o, { type: e } = {}) {\n  if (o[R] === !0)\n    return o;\n  e === \"basic\" && I(o);\n  const t = e === \"physical\" ? (\n    /* glsl */\n    `\n          vec4(\n            packNormalToVec2(normal),\n            metalnessFactor,\n            roughnessFactor\n          )\n        `\n  ) : (\n    /* glsl */\n    `\n          vec4(\n            packNormalToVec2(normal),\n            reflectivity,\n            0.0\n          );\n        `\n  );\n  return o.fragmentShader = /* glsl */\n  `\n    layout(location = 1) out vec4 outputBuffer1;\n\n    #if !defined(USE_ENVMAP)\n      uniform float reflectivity;\n    #endif // !defined(USE_ENVMAP)\n\n    ${C}\n    ${o.fragmentShader.replace(\n    /}\\s*$/m,\n    // Assume the last curly brace is of main()\n    /* glsl */\n    `\n          outputBuffer1 = ${t};\n        }\n      `\n  )}\n  `, o[R] = !0, o;\n}\nfunction k() {\n  c(l.lambert), c(l.phong), c(l.basic, { type: \"basic\" }), c(l.standard, { type: \"physical\" }), c(l.physical, { type: \"physical\" });\n}\nclass ce extends A {\n  constructor(e, t, i, n) {\n    super(t, i, n), this.geometryTexture = e.texture.clone(), this.geometryTexture.isRenderTargetTexture = !0, this.geometryTexture.type = m, k();\n  }\n  render(e, t, i, n, r) {\n    t != null && (t.textures[1] = this.geometryTexture), super.render(e, t, null), t != null && (t.textures.length = 1);\n  }\n  setSize(e, t) {\n    M(this.geometryTexture.image), this.geometryTexture.image.width = e, this.geometryTexture.image.height = t;\n  }\n}\nconst W = `#include <common>\n\nuniform sampler2D inputBuffer;\n\nuniform float thresholdLevel;\nuniform float thresholdRange;\n\nin vec2 vCenterUv1;\nin vec2 vCenterUv2;\nin vec2 vCenterUv3;\nin vec2 vCenterUv4;\nin vec2 vRowUv1;\nin vec2 vRowUv2;\nin vec2 vRowUv3;\nin vec2 vRowUv4;\nin vec2 vRowUv5;\nin vec2 vRowUv6;\nin vec2 vRowUv7;\nin vec2 vRowUv8;\nin vec2 vRowUv9;\n\nfloat clampToBorder(const vec2 uv) {\n  return float(uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0);\n}\n\n// Reference: https://learnopengl.com/Guest-Articles/2022/Phys.-Based-Bloom\nvoid main() {\n  vec3 color = 0.125 * texture(inputBuffer, vec2(vRowUv5)).rgb;\n  vec4 weight =\n    0.03125 *\n    vec4(\n      clampToBorder(vRowUv1),\n      clampToBorder(vRowUv3),\n      clampToBorder(vRowUv7),\n      clampToBorder(vRowUv9)\n    );\n  color += weight.x * texture(inputBuffer, vec2(vRowUv1)).rgb;\n  color += weight.y * texture(inputBuffer, vec2(vRowUv3)).rgb;\n  color += weight.z * texture(inputBuffer, vec2(vRowUv7)).rgb;\n  color += weight.w * texture(inputBuffer, vec2(vRowUv9)).rgb;\n\n  weight =\n    0.0625 *\n    vec4(\n      clampToBorder(vRowUv2),\n      clampToBorder(vRowUv4),\n      clampToBorder(vRowUv6),\n      clampToBorder(vRowUv8)\n    );\n  color += weight.x * texture(inputBuffer, vec2(vRowUv2)).rgb;\n  color += weight.y * texture(inputBuffer, vec2(vRowUv4)).rgb;\n  color += weight.z * texture(inputBuffer, vec2(vRowUv6)).rgb;\n  color += weight.w * texture(inputBuffer, vec2(vRowUv8)).rgb;\n\n  weight =\n    0.125 *\n    vec4(\n      clampToBorder(vRowUv2),\n      clampToBorder(vRowUv4),\n      clampToBorder(vRowUv6),\n      clampToBorder(vRowUv8)\n    );\n  color += weight.x * texture(inputBuffer, vec2(vCenterUv1)).rgb;\n  color += weight.y * texture(inputBuffer, vec2(vCenterUv2)).rgb;\n  color += weight.z * texture(inputBuffer, vec2(vCenterUv3)).rgb;\n  color += weight.w * texture(inputBuffer, vec2(vCenterUv4)).rgb;\n\n  // WORKAROUND: Avoid screen flashes if the input buffer contains NaN texels.\n  // See: https://github.com/takram-design-engineering/three-geospatial/issues/7\n  if (any(isnan(color))) {\n    gl_FragColor = vec4(vec3(0.0), 1.0);\n    return;\n  }\n\n  float l = luminance(color);\n  float scale = saturate(smoothstep(thresholdLevel, thresholdLevel + thresholdRange, l));\n  gl_FragColor = vec4(color * scale, 1.0);\n}\n`, K = `uniform vec2 texelSize;\n\nout vec2 vCenterUv1;\nout vec2 vCenterUv2;\nout vec2 vCenterUv3;\nout vec2 vCenterUv4;\nout vec2 vRowUv1;\nout vec2 vRowUv2;\nout vec2 vRowUv3;\nout vec2 vRowUv4;\nout vec2 vRowUv5;\nout vec2 vRowUv6;\nout vec2 vRowUv7;\nout vec2 vRowUv8;\nout vec2 vRowUv9;\n\nvoid main() {\n  vec2 uv = position.xy * 0.5 + 0.5;\n  vCenterUv1 = uv + texelSize * vec2(-1.0, 1.0);\n  vCenterUv2 = uv + texelSize * vec2(1.0, 1.0);\n  vCenterUv3 = uv + texelSize * vec2(-1.0, -1.0);\n  vCenterUv4 = uv + texelSize * vec2(1.0, -1.0);\n  vRowUv1 = uv + texelSize * vec2(-2.0, 2.0);\n  vRowUv2 = uv + texelSize * vec2(0.0, 2.0);\n  vRowUv3 = uv + texelSize * vec2(2.0, 2.0);\n  vRowUv4 = uv + texelSize * vec2(-2.0, 0.0);\n  vRowUv5 = uv + texelSize;\n  vRowUv6 = uv + texelSize * vec2(2.0, 0.0);\n  vRowUv7 = uv + texelSize * vec2(-2.0, -2.0);\n  vRowUv8 = uv + texelSize * vec2(0.0, -2.0);\n  vRowUv9 = uv + texelSize * vec2(2.0, -2.0);\n\n  gl_Position = vec4(position.xy, 1.0, 1.0);\n}\n`, Z = {\n  thresholdLevel: 10,\n  thresholdRange: 1\n};\nclass Q extends U {\n  constructor(e) {\n    const {\n      inputBuffer: t = null,\n      thresholdLevel: i,\n      thresholdRange: n,\n      ...r\n    } = {\n      ...Z,\n      ...e\n    };\n    super({\n      name: \"DownsampleThresholdMaterial\",\n      fragmentShader: W,\n      vertexShader: K,\n      blending: S,\n      toneMapped: !1,\n      depthWrite: !1,\n      depthTest: !1,\n      ...r,\n      uniforms: {\n        inputBuffer: new s(t),\n        texelSize: new s(new T()),\n        thresholdLevel: new s(i),\n        thresholdRange: new s(n),\n        ...r.uniforms\n      }\n    });\n  }\n  setSize(e, t) {\n    this.uniforms.texelSize.value.set(1 / e, 1 / t);\n  }\n  get inputBuffer() {\n    return this.uniforms.inputBuffer.value;\n  }\n  set inputBuffer(e) {\n    this.uniforms.inputBuffer.value = e;\n  }\n  get thresholdLevel() {\n    return this.uniforms.thresholdLevel.value;\n  }\n  set thresholdLevel(e) {\n    this.uniforms.thresholdLevel.value = e;\n  }\n  get thresholdRange() {\n    return this.uniforms.thresholdRange.value;\n  }\n  set thresholdRange(e) {\n    this.uniforms.thresholdRange.value = e;\n  }\n}\nconst X = `#include <common>\n\n#define SQRT_2 0.7071067811865476\n\nuniform sampler2D inputBuffer;\n\nuniform vec2 texelSize;\nuniform float ghostAmount;\nuniform float haloAmount;\nuniform float chromaticAberration;\n\nin vec2 vUv;\nin vec2 vAspectRatio;\n\nvec3 sampleGhost(const vec2 direction, const vec3 color, const float offset) {\n  vec2 suv = clamp(1.0 - vUv + direction * offset, 0.0, 1.0);\n  vec3 result = texture(inputBuffer, suv).rgb * color;\n\n  // Falloff at the perimeter.\n  float d = clamp(length(0.5 - suv) / (0.5 * SQRT_2), 0.0, 1.0);\n  result *= pow(1.0 - d, 3.0);\n  return result;\n}\n\nvec4 sampleGhosts(float amount) {\n  vec3 color = vec3(0.0);\n  vec2 direction = vUv - 0.5;\n  color += sampleGhost(direction, vec3(0.8, 0.8, 1.0), -5.0);\n  color += sampleGhost(direction, vec3(1.0, 0.8, 0.4), -1.5);\n  color += sampleGhost(direction, vec3(0.9, 1.0, 0.8), -0.4);\n  color += sampleGhost(direction, vec3(1.0, 0.8, 0.4), -0.2);\n  color += sampleGhost(direction, vec3(0.9, 0.7, 0.7), -0.1);\n  color += sampleGhost(direction, vec3(0.5, 1.0, 0.4), 0.7);\n  color += sampleGhost(direction, vec3(0.5, 0.5, 0.5), 1.0);\n  color += sampleGhost(direction, vec3(1.0, 1.0, 0.6), 2.5);\n  color += sampleGhost(direction, vec3(0.5, 0.8, 1.0), 10.0);\n  return vec4(color * amount, 1.0);\n}\n\n// Reference: https://john-chapman.github.io/2017/11/05/pseudo-lens-flare.html\nfloat cubicRingMask(const float x, const float radius, const float thickness) {\n  float v = min(abs(x - radius) / thickness, 1.0);\n  return 1.0 - v * v * (3.0 - 2.0 * v);\n}\n\nvec3 sampleHalo(const float radius) {\n  vec2 direction = normalize((vUv - 0.5) / vAspectRatio) * vAspectRatio;\n  vec3 offset = vec3(texelSize.x * chromaticAberration) * vec3(-1.0, 0.0, 1.0);\n  vec2 suv = fract(1.0 - vUv + direction * radius);\n  vec3 result = vec3(\n    texture(inputBuffer, suv + direction * offset.r).r,\n    texture(inputBuffer, suv + direction * offset.g).g,\n    texture(inputBuffer, suv + direction * offset.b).b\n  );\n\n  // Falloff at the center and perimeter.\n  vec2 wuv = (vUv - vec2(0.5, 0.0)) / vAspectRatio + vec2(0.5, 0.0);\n  float d = saturate(distance(wuv, vec2(0.5)));\n  result *= cubicRingMask(d, 0.45, 0.25);\n  return result;\n}\n\nvec4 sampleHalos(const float amount) {\n  vec3 color = vec3(0.0);\n  color += sampleHalo(0.3);\n  return vec4(color, 1.0) * amount;\n}\n\nvoid main() {\n  gl_FragColor += sampleGhosts(ghostAmount);\n  gl_FragColor += sampleHalos(haloAmount);\n}\n\n`, Y = `uniform vec2 texelSize;\n\nout vec2 vUv;\nout vec2 vAspectRatio;\n\nvoid main() {\n  vUv = position.xy * 0.5 + 0.5;\n  vAspectRatio = vec2(texelSize.x / texelSize.y, 1.0);\n  gl_Position = vec4(position.xy, 1.0, 1.0);\n}\n`, q = {\n  ghostAmount: 1e-3,\n  haloAmount: 1e-3,\n  chromaticAberration: 10\n};\nclass J extends U {\n  constructor(e) {\n    const {\n      inputBuffer: t = null,\n      ghostAmount: i,\n      haloAmount: n,\n      chromaticAberration: r,\n      ...a\n    } = {\n      ...q,\n      ...e\n    };\n    super({\n      name: \"LensFlareFeaturesMaterial\",\n      fragmentShader: X,\n      vertexShader: Y,\n      blending: S,\n      toneMapped: !1,\n      depthWrite: !1,\n      depthTest: !1,\n      uniforms: {\n        inputBuffer: new s(t),\n        texelSize: new s(new T()),\n        ghostAmount: new s(i),\n        haloAmount: new s(n),\n        chromaticAberration: new s(r),\n        ...a.uniforms\n      }\n    });\n  }\n  setSize(e, t) {\n    this.uniforms.texelSize.value.set(1 / e, 1 / t);\n  }\n  get inputBuffer() {\n    return this.uniforms.inputBuffer.value;\n  }\n  set inputBuffer(e) {\n    this.uniforms.inputBuffer.value = e;\n  }\n  get ghostAmount() {\n    return this.uniforms.ghostAmount.value;\n  }\n  set ghostAmount(e) {\n    this.uniforms.ghostAmount.value = e;\n  }\n  get haloAmount() {\n    return this.uniforms.haloAmount.value;\n  }\n  set haloAmount(e) {\n    this.uniforms.haloAmount.value = e;\n  }\n  get chromaticAberration() {\n    return this.uniforms.chromaticAberration.value;\n  }\n  set chromaticAberration(e) {\n    this.uniforms.chromaticAberration.value = e;\n  }\n}\nconst ee = `uniform sampler2D bloomBuffer;\nuniform sampler2D featuresBuffer;\nuniform float intensity;\n\nvoid mainImage(const vec4 inputColor, const vec2 uv, out vec4 outputColor) {\n  vec3 bloom = texture(bloomBuffer, uv).rgb;\n  vec3 features = texture(featuresBuffer, uv).rgb;\n  outputColor = vec4(inputColor.rgb + (bloom + features) * intensity, inputColor.a);\n}\n`, te = {\n  blendFunction: v.NORMAL,\n  resolutionScale: 0.5,\n  width: h.AUTO_SIZE,\n  height: h.AUTO_SIZE,\n  intensity: 5e-3\n};\nclass ve extends f {\n  constructor(e) {\n    const {\n      blendFunction: t,\n      resolutionScale: i,\n      width: n,\n      height: r,\n      resolutionX: a = n,\n      resolutionY: u = r,\n      intensity: E\n    } = {\n      ...te,\n      ...e\n    };\n    super(\"LensFlareEffect\", ee, {\n      blendFunction: t,\n      attributes: d.CONVOLUTION,\n      uniforms: new Map(\n        Object.entries({\n          bloomBuffer: new s(null),\n          featuresBuffer: new s(null),\n          intensity: new s(1)\n        })\n      )\n    }), this.onResolutionChange = () => {\n      this.setSize(this.resolution.baseWidth, this.resolution.baseHeight);\n    }, this.renderTarget1 = new w(1, 1, {\n      depthBuffer: !1,\n      type: m\n    }), this.renderTarget1.texture.name = \"LensFlare.Target1\", this.renderTarget2 = new w(1, 1, {\n      depthBuffer: !1,\n      type: m\n    }), this.renderTarget2.texture.name = \"LensFlare.Target2\", this.thresholdMaterial = new Q(), this.thresholdPass = new g(this.thresholdMaterial), this.blurPass = new P(), this.blurPass.levels = 8, this.preBlurPass = new z({\n      kernelSize: D.SMALL\n    }), this.featuresMaterial = new J(), this.featuresPass = new g(this.featuresMaterial), this.uniforms.get(\"bloomBuffer\").value = this.blurPass.texture, this.uniforms.get(\"featuresBuffer\").value = this.renderTarget1.texture, this.resolution = new h(\n      this,\n      a,\n      u,\n      i\n    ), this.resolution.addEventListener(\"change\", this.onResolutionChange), this.intensity = E;\n  }\n  initialize(e, t, i) {\n    this.thresholdPass.initialize(e, t, i), this.blurPass.initialize(e, t, i), this.preBlurPass.initialize(e, t, i), this.featuresPass.initialize(e, t, i);\n  }\n  update(e, t, i) {\n    this.thresholdPass.render(e, t, this.renderTarget1), this.blurPass.render(e, this.renderTarget1, null), this.preBlurPass.render(e, this.renderTarget1, this.renderTarget2), this.featuresPass.render(e, this.renderTarget2, this.renderTarget1);\n  }\n  setSize(e, t) {\n    const i = this.resolution;\n    i.setBaseSize(e, t);\n    const { width: n, height: r } = i;\n    this.renderTarget1.setSize(n, r), this.renderTarget2.setSize(n, r), this.thresholdMaterial.setSize(n, r), this.blurPass.setSize(n, r), this.preBlurPass.setSize(n, r), this.featuresMaterial.setSize(n, r);\n  }\n  get intensity() {\n    return this.uniforms.get(\"intensity\").value;\n  }\n  set intensity(e) {\n    this.uniforms.get(\"intensity\").value = e;\n  }\n  get thresholdLevel() {\n    return this.thresholdMaterial.thresholdLevel;\n  }\n  set thresholdLevel(e) {\n    this.thresholdMaterial.thresholdLevel = e;\n  }\n  get thresholdRange() {\n    return this.thresholdMaterial.thresholdRange;\n  }\n  set thresholdRange(e) {\n    this.thresholdMaterial.thresholdRange = e;\n  }\n}\nconst ne = `#include \"core/depth\"\n#include \"core/packing\"\n#include \"core/transform\"\n\nuniform highp sampler2D normalBuffer;\n\nuniform mat4 projectionMatrix;\nuniform mat4 inverseProjectionMatrix;\n\nvec3 reconstructNormal(const vec2 uv) {\n  float depth = readDepthValue(depthBuffer, uv);\n  depth = reverseLogDepth(depth, cameraNear, cameraFar);\n  vec3 position = screenToView(\n    uv,\n    depth,\n    getViewZ(depth),\n    projectionMatrix,\n    inverseProjectionMatrix\n  );\n  vec3 dx = dFdx(position);\n  vec3 dy = dFdy(position);\n  return normalize(cross(dx, dy));\n}\n\nvec3 readNormal(const vec2 uv) {\n  #ifdef OCT_ENCODED\n  return unpackVec2ToNormal(texture(normalBuffer, uv).xy);\n  #else // OCT_ENCODED\n  return 2.0 * texture(normalBuffer, uv).xyz - 1.0;\n  #endif // OCT_ENCODED\n}\n\nvoid mainImage(const vec4 inputColor, const vec2 uv, out vec4 outputColor) {\n  #ifdef RECONSTRUCT_FROM_DEPTH\n  vec3 normal = reconstructNormal(uv);\n  #else // RECONSTRUCT_FROM_DEPTH\n  vec3 normal = readNormal(uv);\n  #endif // RECONSTRUCT_FROM_DEPTH\n\n  outputColor = vec4(normal * 0.5 + 0.5, inputColor.a);\n}\n`;\nvar re = Object.defineProperty, _ = (o, e, t, i) => {\n  for (var n = void 0, r = o.length - 1, a; r >= 0; r--)\n    (a = o[r]) && (n = a(e, t, n) || n);\n  return n && re(e, t, n), n;\n};\nconst oe = {\n  blendFunction: v.SRC,\n  octEncoded: !1,\n  reconstructFromDepth: !1\n};\nclass y extends f {\n  constructor(e, t) {\n    const {\n      blendFunction: i,\n      normalBuffer: n = null,\n      octEncoded: r,\n      reconstructFromDepth: a\n    } = {\n      ...oe,\n      ...t\n    };\n    super(\n      \"NormalEffect\",\n      b(ne, {\n        core: {\n          depth: B,\n          packing: C,\n          transform: O\n        }\n      }),\n      {\n        blendFunction: i,\n        attributes: d.DEPTH,\n        uniforms: new Map(\n          Object.entries({\n            normalBuffer: new s(n),\n            projectionMatrix: new s(new x()),\n            inverseProjectionMatrix: new s(new x())\n          })\n        )\n      }\n    ), this.camera = e, e != null && (this.mainCamera = e), this.octEncoded = r, this.reconstructFromDepth = a;\n  }\n  get mainCamera() {\n    return this.camera;\n  }\n  set mainCamera(e) {\n    this.camera = e;\n  }\n  update(e, t, i) {\n    const n = this.uniforms, r = n.get(\"projectionMatrix\"), a = n.get(\"inverseProjectionMatrix\"), u = this.camera;\n    u != null && (r.value.copy(u.projectionMatrix), a.value.copy(u.projectionMatrixInverse));\n  }\n  get normalBuffer() {\n    return this.uniforms.get(\"normalBuffer\").value;\n  }\n  set normalBuffer(e) {\n    this.uniforms.get(\"normalBuffer\").value = e;\n  }\n}\n_([\n  p(\"OCT_ENCODED\")\n], y.prototype, \"octEncoded\");\n_([\n  p(\"RECONSTRUCT_FROM_DEPTH\")\n], y.prototype, \"reconstructFromDepth\");\nexport {\n  H as D,\n  ce as G,\n  ve as L,\n  y as N,\n  le as a,\n  $ as b,\n  G as d,\n  te as l,\n  oe as n,\n  k as s\n};\n//# sourceMappingURL=shared.js.map\n"],"names":["n","c","i","r","S","y","E","T","o","d","p","e","g","t","f","b","l","w","a","$","D","q","s","h","u","m","I","x","M","v","V","F","L","G","j","B","R","U","O","N","A","P","z","C","sn","K","ze","ye","wr","Ye","_b","_a","on","cn","qt","pe","an","hn","J","Pt","xt","kt","Jt","fn","St","H","$t","mt","tt","Nt","Ae","Qt","ge","ln","un","Zt","we","yn","Mt","dn","At","et","pn","Kt","Lt","An","Te","be","gt","gn","wn","Tn","Bt","bn","Sn","Se","wt","mn","me","_n","En","Rt","In","Ft","On","Pn","xn","Nn","Ln","Rn","te","Un","Cn","ee","Y","Mn","_e","Bn","ne","Dt","Fn","Tt","Dn","vn","Gn","jn","_t","Ee","Ie","zn","Hn","bt","vt","at","Wn","Gt","Oe","Vn","k","Pe","xe","re","ht","se","ft","Ut","Yn","Ne","Xn","oe","qn","nt","lt","kn","Ct","Jn","Le","$n","Re","ie","Qn","Zn","Ue","Ce","Me","jt","W","Be","Et","rt","ce","zt","ut","st","ae","Fe","Kn","A$2","je","yt","tr","er","nr","qe","Vt","ke","Je","$e","Qe","Ze","Yt","br","Xe","Wt","_","_r","Er","Lr","Cr","Br","pt","he","Fr","fe","Dr","vr","Gr","zr","Ke","de","Hr","tn","cr","ar","ct","hr","Jr","fr","lr","Kr","X","v0","n0","F0","Z","i0","a0","Ve","en","h0","m0","Ge","f0","g0","dt","di","hi","_0","u0","c0","s0","Bi","D0","O0","L0","vi","Ei","Ri","_i","He","xi","Mi","Ai","wi","it","ot","De","ve","Q","_c","Ot","It","Ht","Xt","We","_d","ue","le","rn"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+EPW,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BJE,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASJZ,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMJC,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4FJC,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBJK,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwRPE,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+IJb,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2+BL2F,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8LL1B,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiFLwB,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiLL0D,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAULU,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmHR,IA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiMR8C,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAULnE,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsGR,IA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10]}